@@ -32,30 +32,25 @@ pub unsafe fn extra_floats(fighter: &mut L2CFighterCommon, boma: &mut BattleObje
32
32
if VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_STYLE ) == 2 {
33
33
VarModule :: set_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_DURATION , 0 ) ;
34
34
}
35
- // Activate float_pause aerial flag to prevent floats from being activated during aerials if
36
- // float option isnt 1
37
- if VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_STYLE ) != 1 {
38
- if status_kind != * FIGHTER_STATUS_KIND_ATTACK_AIR {
39
- VarModule :: set_flag ( boma. object ( ) , vars:: common:: instance:: FLOAT_PAUSE_AERIAL , WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) == VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_DURATION ) ) ;
40
- } else if WorkModule :: is_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) {
41
- VarModule :: off_flag ( boma. object ( ) , vars:: common:: instance:: FLOAT_PAUSE_AERIAL ) ;
42
- }
43
- }
44
35
45
36
if situation_kind == * SITUATION_KIND_AIR
46
37
&& !boma. is_prev_status ( * SITUATION_KIND_GROUND )
47
- //&& !StatusModule::is_changing(boma)
48
38
{
39
+ // FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME will sometimes erroneously decrement once every 2 frames (effectively allowing for double the max float time); this overrides that
40
+ // With SL2 float time is no longer doubled, but forcing the flag to be on is still required?
41
+ if WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) > 0
42
+ && WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) < VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_DURATION )
43
+ {
44
+ WorkModule :: on_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) ;
45
+ }
49
46
if WorkModule :: is_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) {
50
47
VarModule :: on_flag ( fighter. battle_object , vars:: common:: instance:: OMNI_FLOAT ) ;
51
48
}
52
49
// Prevent float from activating during aerials
53
50
if VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_STYLE ) != 1 && !WorkModule :: is_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) {
54
51
if status_kind == * FIGHTER_STATUS_KIND_ATTACK_AIR && !CancelModule :: is_enable_cancel ( boma) {
55
- if VarModule :: is_flag ( boma. object ( ) , vars:: common:: instance:: FLOAT_PAUSE_AERIAL ) {
56
- VarModule :: on_flag ( boma. object ( ) , vars:: common:: instance:: AERIAL_NO_FLOAT ) ;
57
- WorkModule :: set_int ( boma, 0 , * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) ;
58
- }
52
+ VarModule :: on_flag ( boma. object ( ) , vars:: common:: instance:: AERIAL_NO_FLOAT ) ;
53
+ WorkModule :: set_int ( boma, 0 , * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) ;
59
54
} else {
60
55
if VarModule :: is_flag ( boma. object ( ) , vars:: common:: instance:: AERIAL_NO_FLOAT ) {
61
56
WorkModule :: set_int ( boma, VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_DURATION ) , * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) ;
@@ -96,47 +91,29 @@ pub unsafe fn extra_floats(fighter: &mut L2CFighterCommon, boma: &mut BattleObje
96
91
}
97
92
}
98
93
// Immediately transition to fall/double jump fall when activating float
99
- if ControlModule :: check_button_on ( boma, * CONTROL_PAD_BUTTON_JUMP ) && boma. left_stick_y ( ) < -0.66 && WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) > 0 {
94
+ if !WorkModule :: is_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY )
95
+ && WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) > 0
96
+ && ControlModule :: check_button_on ( boma, * CONTROL_PAD_BUTTON_JUMP ) && boma. left_stick_y ( ) < -0.66
97
+ {
100
98
if [ * FIGHTER_STATUS_KIND_CLIFF_JUMP1 , * FIGHTER_STATUS_KIND_CLIFF_JUMP2 , * FIGHTER_STATUS_KIND_CLIFF_JUMP3 , * FIGHTER_STATUS_KIND_DAMAGE_FALL , * FIGHTER_STATUS_KIND_PASS ] . contains ( & status_kind) {
101
- VarModule :: on_flag ( fighter. battle_object , vars:: common:: instance:: OMNI_FLOAT ) ;
102
- ControlModule :: reset_trigger ( boma) ;
103
- StatusModule :: change_status_request_from_script ( boma, * FIGHTER_STATUS_KIND_FALL , true ) ;
99
+ StatusModule :: change_status_request_from_script ( boma, * FIGHTER_STATUS_KIND_FALL , false ) ;
104
100
} else if status_kind == * FIGHTER_STATUS_KIND_JUMP_AERIAL {
105
- VarModule :: on_flag ( fighter. battle_object , vars:: common:: instance:: OMNI_FLOAT ) ;
106
- ControlModule :: reset_trigger ( boma) ;
107
- StatusModule :: change_status_request_from_script ( boma, * FIGHTER_STATUS_KIND_FALL_AERIAL , true ) ;
108
- } else if [ hash40 ( "walk_fall_l" ) , hash40 ( "walk_fall_r" ) , hash40 ( "run_fall_l" ) , hash40 ( "run_fall_r" ) ] . contains ( & MotionModule :: motion_kind ( boma) ) {
109
- MotionModule :: change_motion ( boma, Hash40 :: new ( "fall" ) , 0.0 , 1.0 , false , 0.0 , false , false ) ;
101
+ StatusModule :: change_status_request_from_script ( boma, * FIGHTER_STATUS_KIND_FALL_AERIAL , false ) ;
110
102
} else if status_kind == * FIGHTER_STATUS_KIND_JUMP {
111
103
if StatusModule :: is_changing ( boma) { //peach ground-float mechanic
112
- let pos = Vector3f { x : PostureModule :: pos_x ( boma) , y : PostureModule :: pos_y ( boma) + 3.5 , z : PostureModule :: pos_z ( boma) } ;
104
+ let pos = Vector3f { x : PostureModule :: pos_x ( boma) , y : PostureModule :: pos_y ( boma) + 2.5 + motion_value , z : PostureModule :: pos_z ( boma) } ;
113
105
PostureModule :: set_pos ( boma, & pos) ;
114
106
}
115
- VarModule :: on_flag ( fighter. battle_object , vars:: common:: instance:: OMNI_FLOAT ) ;
116
- ControlModule :: reset_trigger ( boma) ;
117
- StatusModule :: change_status_request_from_script ( boma, * FIGHTER_STATUS_KIND_FALL , true ) ;
107
+ StatusModule :: change_status_request_from_script ( boma, * FIGHTER_STATUS_KIND_FALL , false ) ;
118
108
}
119
109
}
120
- //else {
121
- // // "superjump" bugfix
122
- // if WorkModule::is_flag(boma, *FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY) && status_kind == *FIGHTER_STATUS_KIND_JUMP && boma.status_frame() <= 1 {
123
- // ControlModule::reset_trigger(boma);
124
- // StatusModule::change_status_request_from_script(boma, *FIGHTER_STATUS_KIND_FALL, true);
125
- // }
126
- //}
127
- // FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME will sometimes erroneously decrement once every 2 frames (effectively allowing for double the max float time); this overrides that
128
- if WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) > 0 && WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) < VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_DURATION ) {
129
- if ( [ * FIGHTER_STATUS_KIND_JUMP , * FIGHTER_STATUS_KIND_JUMP_AERIAL , * FIGHTER_STATUS_KIND_CLIFF_JUMP1 , * FIGHTER_STATUS_KIND_CLIFF_JUMP2 , * FIGHTER_STATUS_KIND_CLIFF_JUMP3 ] . contains ( & status_kind) || [ * FIGHTER_STATUS_KIND_FALL , * FIGHTER_STATUS_KIND_FALL_AERIAL , * FIGHTER_STATUS_KIND_ATTACK_AIR ] . contains ( & status_kind) ) && !WorkModule :: is_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) {
130
- let fall_slowly_frame = WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) ;
131
- WorkModule :: on_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) ;
132
- VarModule :: on_flag ( fighter. battle_object , vars:: common:: instance:: OMNI_FLOAT ) ;
133
- WorkModule :: set_int ( boma, fall_slowly_frame - 1 , * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) ;
134
- }
110
+ // Run-off anim cancel
111
+ if [ hash40 ( "walk_fall_l" ) , hash40 ( "walk_fall_r" ) , hash40 ( "run_fall_l" ) , hash40 ( "run_fall_r" ) ] . contains ( & MotionModule :: motion_kind ( boma) )
112
+ && WorkModule :: is_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY ) {
113
+ MotionModule :: change_motion ( boma, Hash40 :: new ( "fall" ) , 0.0 , 1.0 , false , 0.0 , false , false ) ;
135
114
}
136
-
137
115
// Omnidirectional float for Dark Samus and Mewtwo
138
- if WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) > 0
139
- && WorkModule :: get_int ( boma, * FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME ) < VarModule :: get_int ( boma. object ( ) , vars:: common:: instance:: FLOAT_DURATION )
116
+ if WorkModule :: is_flag ( boma, * FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY )
140
117
&& ControlModule :: check_button_on ( boma, * CONTROL_PAD_BUTTON_JUMP ) {
141
118
if boma. left_stick_y ( ) != 0.0 && VarModule :: get_int ( fighter. battle_object , vars:: common:: instance:: FLOAT_TIMER ) > 2 {
142
119
let mut motion_vec = Vector3f { x : 0.0 , y : 0.0 , z : 0.0 } ;
0 commit comments