@@ -10,8 +10,72 @@ pub unsafe extern "C" fn attack_air(fighter: &mut L2CFighterCommon) -> L2CValue
10
10
common:: djc:: attack_air_main_status ( fighter)
11
11
}
12
12
13
+ // FIGHTER_MEWTWO_STATUS_KIND_SPECIAL_N_CANCEL //
14
+
15
+ unsafe extern "C" fn special_n_cancel_main ( fighter : & mut L2CFighterCommon ) -> L2CValue {
16
+ if fighter. global_table [ SITUATION_KIND ] == SITUATION_KIND_GROUND {
17
+ GroundModule :: correct ( fighter. module_accessor , GroundCorrectKind ( * GROUND_CORRECT_KIND_GROUND_CLIFF_STOP ) ) ;
18
+ KineticModule :: change_kinetic ( fighter. module_accessor , * FIGHTER_KINETIC_TYPE_GROUND_STOP ) ;
19
+ MotionModule :: change_motion ( fighter. module_accessor , Hash40 :: new ( "special_n_cancel" ) , 0.0 , 1.0 , false , 0.0 , false , false ) ;
20
+ } else {
21
+ if fighter. get_int ( * FIGHTER_MEWTWO_SPECIAL_N_STATUS_WORK_ID_INT_CANCEL_STATUS ) == * FIGHTER_STATUS_KIND_JUMP_AERIAL {
22
+ fighter. change_status ( FIGHTER_STATUS_KIND_JUMP_AERIAL . into ( ) , false . into ( ) ) ;
23
+ } // jump cancel
24
+ else {
25
+ GroundModule :: correct ( fighter. module_accessor , GroundCorrectKind ( * GROUND_CORRECT_KIND_AIR ) ) ;
26
+ KineticModule :: change_kinetic ( fighter. module_accessor , * FIGHTER_KINETIC_TYPE_AIR_STOP ) ;
27
+ MotionModule :: change_motion ( fighter. module_accessor , Hash40 :: new ( "special_air_n_cancel" ) , 0.0 , 1.0 , false , 0.0 , false , false ) ;
28
+ }
29
+ }
30
+ let status = fighter. get_int ( * FIGHTER_MEWTWO_SPECIAL_N_STATUS_WORK_ID_INT_CANCEL_STATUS ) ;
31
+ if status == * STATUS_KIND_NONE || status == * FIGHTER_STATUS_KIND_GUARD_ON { fighter. set_int ( * FIGHTER_STATUS_KIND_WAIT , * FIGHTER_MEWTWO_SPECIAL_N_STATUS_WORK_ID_INT_CANCEL_STATUS ) ; }
32
+ ControlModule :: set_add_jump_mini_button_life ( fighter. module_accessor , 8 ) ;
33
+ fighter. main_shift ( special_n_cancel_main_loop)
34
+ }
35
+
36
+ unsafe extern "C" fn special_n_cancel_main_loop ( fighter : & mut L2CFighterCommon ) -> L2CValue {
37
+ if fighter. global_table [ PREV_SITUATION_KIND ] == SITUATION_KIND_GROUND && fighter. global_table [ SITUATION_KIND ] == SITUATION_KIND_AIR {
38
+ GroundModule :: correct ( fighter. module_accessor , GroundCorrectKind ( * GROUND_CORRECT_KIND_AIR ) ) ;
39
+ KineticModule :: change_kinetic ( fighter. module_accessor , * FIGHTER_KINETIC_TYPE_AIR_STOP ) ;
40
+ MotionModule :: change_motion_inherit_frame ( fighter. module_accessor , Hash40 :: new ( "special_air_n_cancel" ) , -1.0 , 1.0 , 0.0 , false , false ) ;
41
+ }
42
+ else if fighter. global_table [ PREV_SITUATION_KIND ] == SITUATION_KIND_AIR && fighter. global_table [ SITUATION_KIND ] == SITUATION_KIND_GROUND {
43
+ fighter. set_int ( * FIGHTER_STATUS_KIND_WAIT , * FIGHTER_MEWTWO_SPECIAL_N_STATUS_WORK_ID_INT_CANCEL_STATUS ) ;
44
+ GroundModule :: correct ( fighter. module_accessor , GroundCorrectKind ( * GROUND_CORRECT_KIND_GROUND_CLIFF_STOP ) ) ;
45
+ KineticModule :: change_kinetic ( fighter. module_accessor , * FIGHTER_KINETIC_TYPE_GROUND_STOP ) ;
46
+ MotionModule :: change_motion_inherit_frame ( fighter. module_accessor , Hash40 :: new ( "special_n_cancel" ) , -1.0 , 1.0 , 0.0 , false , false ) ;
47
+ }
48
+ if CancelModule :: is_enable_cancel ( fighter. module_accessor ) {
49
+ if fighter. is_situation ( * SITUATION_KIND_GROUND ) {
50
+ let status = fighter. get_int ( * FIGHTER_MEWTWO_SPECIAL_N_STATUS_WORK_ID_INT_CANCEL_STATUS ) ;
51
+ fighter. change_status ( L2CValue :: I32 ( status) . into ( ) , false . into ( ) ) ;
52
+ return 1 . into ( ) ;
53
+ }
54
+ if fighter. sub_air_check_fall_common ( ) . get_bool ( )
55
+ || fighter. sub_wait_ground_check_common ( false . into ( ) ) . get_bool ( ) {
56
+ return 0 . into ( ) ;
57
+ }
58
+ }
59
+ if MotionModule :: is_end ( fighter. module_accessor ) {
60
+ if fighter. is_situation ( * SITUATION_KIND_GROUND ) { fighter. change_status ( FIGHTER_STATUS_KIND_WAIT . into ( ) , false . into ( ) ) ; }
61
+ else { fighter. change_status ( FIGHTER_STATUS_KIND_FALL_AERIAL . into ( ) , false . into ( ) ) ; }
62
+ }
63
+ return 0 . into ( ) ;
64
+ }
65
+
66
+ // FIGHTER_STATUS_KIND_SPECIAL_S //
67
+
68
+ pub unsafe extern "C" fn special_s_pre ( fighter : & mut L2CFighterCommon ) -> L2CValue {
69
+ if fighter. is_flag ( * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) {
70
+ fighter. on_flag ( * FIGHTER_MEWTWO_INSTANCE_WORK_ID_FLAG_SPECIAL_S_BUOYANCY ) ;
71
+ }
72
+ smashline:: original_status ( Pre , fighter, * FIGHTER_STATUS_KIND_SPECIAL_S ) ( fighter)
73
+ }
74
+
13
75
pub fn install ( ) {
14
76
smashline:: Agent :: new ( "mewtwo" )
15
77
. status ( Main , * FIGHTER_STATUS_KIND_ATTACK_AIR , attack_air)
78
+ . status ( Main , * FIGHTER_MEWTWO_STATUS_KIND_SPECIAL_N_CANCEL , special_n_cancel_main)
79
+ . status ( Pre , * FIGHTER_STATUS_KIND_SPECIAL_S , special_s_pre)
16
80
. install ( ) ;
17
81
}
0 commit comments