SnowState
SnowState copied to clipboard
inherit() does not support parameters
Inherit() doesn't support support passing parameters when changing states like this: fsm.change("some_state", some_data)
Please provide a simple example to replicate this issue.
Sure!
Here's a state I have for handling an enemy's knockback:
.add("knockback", {
enter: function(_data) {
change_sprite(array_shuffle(knockback_sprites)[0]);
if(is_flyer) {
hspeed = knockback_hspd * _data.hspd_mod;
vspeed = knockback_vspd * _data.vspd_mod;
} else {
if(vspd<0) on_ground = false;
hspd = knockback_hspd * _data.hspd_mod;
hspd_frac = 0;
vspd = knockback_vspd * _data.vspd_mod;
vspd_frac = 0;
}
if(fsm.get_previous_state() != knockback_state) {
_recover_state = knockback_recover_state;
if(_recover_state == "") {
_recover_state = fsm.get_previous_state();
}
}
}
Now, for a certain enemy I want to create a child state that is mostly the same except for one detail:
fsm.add_child("knockback", "knockback_once", {
enter: function(_data) {
fsm.inherit();
can_knockback = false;
}
})
When I run the game and get to that point, I get the following error:
___________________________________________
############################################################################################
ERROR in
action number 1
of Step Eventobj_player_hurtbox
for object obj_enemy:
Variable <unknown_object>.hspd_mod(101561, -2147483648) cannot be resolved.
at gml_Script_anon____struct___368_gml_Object_obj_enemy_Create_0_1648____struct___368_gml_Object_obj_enemy_Create_0 (line 84) - hspd = knockback_hspd * _data.hspd_mod;
############################################################################################
gml_Script_anon____struct___368_gml_Object_obj_enemy_Create_0_1648____struct___368_gml_Object_obj_enemy_Create_0 (line 84)
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_9532_SnowState_gml_GlobalScript_SnowState (line 339) - if (_args == undefined) return _func();
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_8968_SnowState_gml_GlobalScript_SnowState (line 330) - with (__owner) _pyramid(_func, _args);
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_23750_SnowState_gml_GlobalScript_SnowState (line 799) - __execute(__currEvent);
gml_Script_anon____struct___317_gml_Object_obj_tiger_Create_0_76____struct___317_gml_Object_obj_tiger_Create_0 (line 5) - fsm.inherit();
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_9532_SnowState_gml_GlobalScript_SnowState (line 340) - if (!is_array(_args)) return _func(_args);
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_8968_SnowState_gml_GlobalScript_SnowState (line 330) - with (__owner) _pyramid(_func, _args);
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_26346_SnowState_gml_GlobalScript_SnowState (line 858) - __execute("enter", undefined, _data);
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_7164_SnowState_gml_GlobalScript_SnowState (line 270) - enter(_data);
gml_Script_anon_SnowState_gml_GlobalScript_SnowState_19208_SnowState_gml_GlobalScript_SnowState (line 629) - __change(_state, _leave, _enter, _data);
gml_Script_deal_damage (line 26) - if(can_knockback) fsm.change(knockback_state, undefined, undefined, {
gml_Object_obj_enemy_Collision_obj_player_hurtbox (line 4) - deal_damage(id, other.damage, other.knockback_hspd_mod*sign(other.image_xscale), other.knockback_vspd_mod);
I use child states elsewhere in my game so I figured it has to do with parameters not being supported for overridden events.