// // Skedar (MP) // #include "stagesetup.h" // Functions #define FUNC0401_INIT_ENEMY 0x0401 #define FUNC0402_INIT_MAIAN 0x0402 u8 intro[]; u8 props[]; struct path paths[]; struct ailist ailists[]; struct stagesetup setup = { NULL, NULL, NULL, intro, props, paths, ailists, NULL, }; u8 props[] = { endprops }; u8 intro[] = { spawn(0x0063) outfit(OUTFIT_DEFAULT) intro_weapon(WEAPON_FALCON2, -1) intro_weapon(WEAPON_CMP150, -1) intro_weapon(WEAPON_AR34, -1) intro_weapon(WEAPON_REAPER, -1) ammo(AMMOTYPE_PISTOL, 500) ammo(AMMOTYPE_RIFLE, 500) endintro }; u8 func0406_idle[] = { set_ailist(CHR_SELF, GFUNC_IDLE) endlist }; u8 func0408_idle_with_10_health[] = { set_chr_maxdamage(CHR_SELF, 10) set_ailist(CHR_SELF, GFUNC_IDLE) endlist }; u8 func0404_spawn_enemies[] = { // Spawn 12 enemies set_chr_team(CHR_SELF, TEAM_ENEMY) restart_timer dprint 'B','4','C','H','E','C','K','\n',0, set_morale(12) label(0x04) if_morale_lt(1, /*goto*/ 0x01) try_spawn_chr_at_chr(BODY_DDSHOCK, HEAD_DDSHOCK, 0x06, FUNC0401_INIT_ENEMY, 0x00000010, /*goto*/ 0xa2) goto_next(0x01) label(0xa2) yield subtract_morale(1) goto_first(0x04) label(0x01) yield yield yield yield yield rebuild_teams rebuild_squadrons set_ailist(CHR_SELF, FUNC0401_INIT_ENEMY) endlist }; u8 func0401_init_enemy[] = { try_equip_weapon(MODEL_CHRCMP150, WEAPON_CMP150, 0x00000000, /*goto*/ 0x01) label(0x01) try_inherit_properties(0x06, /*goto*/ 0x01) label(0x01) assign_path(0) start_path set_returnlist(CHR_SELF, GFUNC_CHOOSE_TARGET) set_ailist(CHR_SELF, GFUNC_CHOOSE_TARGET) endlist }; u8 func0405_spawn_maians[] = { // Spawn 12 Maians set_chr_team(CHR_SELF, TEAM_ALLY) stop_chr restart_timer dprint 'B','4','C','H','E','K','\n',0, set_morale(12) label(0x04) if_morale_lt(1, /*goto*/ 0x01) try_spawn_chr_at_chr(BODY_ELVIS1, HEAD_ELVIS, 0x07, FUNC0402_INIT_MAIAN, 0x00000010, /*goto*/ 0xa2) goto_next(0x01) label(0xa2) yield subtract_morale(1) goto_first(0x04) label(0x01) rebuild_teams rebuild_squadrons yield yield yield yield yield set_ailist(CHR_SELF, FUNC0402_INIT_MAIAN) endlist }; u8 func0402_init_maian[] = { set_chr_team(CHR_SELF, TEAM_ALLY) try_equip_weapon(MODEL_CHRFALCON2, WEAPON_MAGSEC4, 0x00000000, /*goto*/ 0x01) label(0x01) try_inherit_properties(0x07, /*goto*/ 0x01) label(0x01) assign_path(0) start_path set_returnlist(CHR_SELF, GFUNC_CHOOSE_TARGET) set_ailist(CHR_SELF, GFUNC_CHOOSE_TARGET) endlist }; u8 func1001_01a4[] = { noop016c rebuild_teams rebuild_squadrons set_ailist(CHR_SELF, GFUNC_IDLE) endlist }; u8 unregistered_function1[] = { // Print "t" to console when Joanna is looking at some object. // The object doesn't exist in the props code though, so was likely removed. label(0x04) yield if_chr_looking_at_object(CHR_BOND, 0x00, /*goto*/ 0x01) goto_first(0x04) label(0x01) dprint 't',0, goto_first(0x04) endlist }; u8 func1000_idle[] = { set_ailist(CHR_SELF, GFUNC_IDLE) endlist }; u8 func0403_init_some_sound[] = { play_sound(0x0037, -1) set_ailist(CHR_SELF, GFUNC_IDLE) endlist }; // This function is never assigned. u8 func0407_defend_pad[] = { set_shotlist(0x0407) if_enemy_distance_lt_and_los(2540, /*goto*/ 0xa5) if_chr_distance_to_pad_lt(CHR_SELF, 200, TARGET_PAD, /*goto*/ 0x01) // Go to target pad, but stop when seen player or when near pad label(0xdb) jog_to_pad(TARGET_PAD) label(0xdc) yield dprint 'G','O',' ','T','O',' ','P','A','D','\n',0, if_enemy_distance_lt_and_los(2540, /*goto*/ 0xa5) if_chr_distance_to_pad_lt(CHR_SELF, 200, TARGET_PAD, /*goto*/ 0x01) goto_first(0xdc) // Near pad. Wait until detected player. label(0x01) stop_chr label(0xa6) yield dprint 'A','T',' ','P','A','D','\n',0, if_enemy_distance_lt_and_los(2540, /*goto*/ 0xa5) if_chr_distance_to_pad_gt(CHR_SELF, 300, TARGET_PAD, /*goto*/ 0x01) goto_first(0xa6) label(0x01) goto_first(0xdb) // Do combat label(0xa5) dprint 'D','E','T','E','C','T','E','D','\n',0, set_returnlist(CHR_SELF, 0x0407) set_ailist(CHR_SELF, GFUNC_COMBAT_WITH_TARGET) endlist }; struct ailist ailists[] = { { func0401_init_enemy, 0x0401 }, { func0402_init_maian, 0x0402 }, { func0403_init_some_sound, 0x0403 }, { func0404_spawn_enemies, 0x0404 }, { func0405_spawn_maians, 0x0405 }, { func0406_idle, 0x0406 }, { func0407_defend_pad, 0x0407 }, { func0408_idle_with_10_health, 0x0408 }, { func1000_idle, 0x1000 }, { func1001_01a4, 0x1001 }, { NULL, 0 }, }; s32 path00[] = { 0x0014, 0x0015, -1, }; s32 path01[] = { 0x0064, 0x0066, -1, }; s32 path02[] = { 0x0037, 0x0033, 0x0034, -1, }; s32 path03[] = { 0x0038, 0x0039, 0x003a, -1, }; s32 path04[] = { 0x0033, 0x0037, 0x0036, 0x003d, 0x003e, 0x003f, 0x0045, 0x0048, 0x003b, 0x003a, 0x0039, -1, }; struct path paths[] = { { path00, 0, PATHTYPE_BACKANDFORTH }, { path01, 1, PATHTYPE_BACKANDFORTH }, { path00, 0, PATHTYPE_BACKANDFORTH }, { path02, 2, PATHTYPE_BACKANDFORTH }, { path03, 3, PATHTYPE_BACKANDFORTH }, { path04, 4, PATHTYPE_BACKANDFORTH }, { NULL, 0, 0 }, };