#include "scenario_common.h" // Global variable int bStartGame = 0; int BossID = -1; int GeneralID[4]; // Boss Position float BossX = 0; float BossY = -980; float BossZ = 200; // Partner Position SpawnPartnerX = -24; SpawnPartnerY = 404; SpawnPartnerZ = 103.67; // use secondary bUseSecondary = 1; // local variable int i; int ObjectID; float dx, dy, dz; // --------- // Game // --------- void OnCache() { LoadScene("sw02"); // CacheLevelModel(""); CacheLevelCharacter("ce16"); } void OnHostGame() { SetGameMaxTime(-1); SetAudioVariable(0,1000); InitScenario(); BossID = SpawnChara("boss", BossX, BossY, BossZ); // mission SetMissionObjectiveText(0, MOBJ_SW02_1); SetMissionObjectiveText(1, MOBJ_SW02_2); SetMissionObjectiveText(2, MOBJ_SW02_3); SetMissionObjectiveText(3, MOBJ_SW02_4); SetMissionObjectiveText(4, MOBJ_SW02_5); var_uiGameOverVoice2 = NumToStr("onitsuka_d%d", rand()%4+1); Print("Cutscene 15\n"); BeginCutscene("cutscene15"); bStartGame = 1; } void OnCharaDead(int id, int killer) { Print("Chara ", id, " is killed by ", killer, "\n"); if (id == PlayerID) { PlayerDead(); return; } if (id == PartnerID) { PartnerDead(); return; } if ( id == BossID) { KillScore(1, 1500); SetMissionObjectiveSwitch(4, 0); PlayAICutsceneCB("cutscene18", "GameComplete"); return; } string CharaName = GetCharaString(id, CHARA_NAME); // guard captain if ( CharaName == "GENERAL") { KillScore(0, 400); Destroy(id); } // CharaReborn(id); } void OnTimeOver() { Print("TimeOver\n"); GameOver(GAMEOVER_LOSE); } void OnUpdate(float t) { CommonUpdate(t); if (bStartGame == 1) { SetAudioVariable(0, 1000); bStartGame = 0; } } /* void OnContinueGame() { // destroy guard for (i = 0 ; i < 4 ; i++) { if (GeneralID[i] > 0) { Destroy(GeneralID[i]); GeneralID[i] = -1; } } // reborn player CharaReborn(PlayerID); CharaReborn(PartnerID); TeleportChara(PlayerID, 22, -16, -20); TeleportChara(PartnerID, -20, -16, -20); SetEntityDir(PlayerID, 0, -1, 0); SetEntityDir(PartnerID, 0, -1, 0); // reborn boss CharaReborn(BossID, 0); TeleportChara(BossID, BossX, BossY, BossZ); ShowEntity(BossID, 0); ActivateEntity(BossID, 0); PlayMusic("s11_nightdemon_bgm", 1, 1); SetAudioVariable(0, 0); bStartGame = 1; } */ // --------- // Enemy // --------- /* void SOLDIER_InitChara(int id) { // ce12 NPCE12_InitChara(id); SetCharaAttrib(id, CHARA_MAX_HP, 250*HandicapHP); // 生命上限 SetCharaAttrib(id, CHARA_HP, 250*HandicapHP); // 生命 SetCharaAttrib(id, CHARA_TEAM, 2); SetCharaWeapon(id, 0); SetCharaDart(id, 3, 30); } void SOLDIER_InitAI(int id) { AI_Shooter(PlayerID, id); } void GUARD_InitChara(int id) { // ce15 NPCE15_InitChara(id); SetCharaAttrib(id, CHARA_MAX_HP, 250*HandicapHP); // 生命上限 SetCharaAttrib(id, CHARA_HP, 250*HandicapHP); // 生命 SetCharaAttrib(id, CHARA_TEAM, 2); SetCharaWeapon(id, 32); } void GUARD_InitAI(int id) { AI_Guard(PlayerID, id); SetAIAttrib(id, AI_THINK_SPEED, 50*ResponseRate); // set AI behavior ClearAIAllBehavior(id); SetAIBehavior(id, AI_STATE_SEARCH, AI_SEARCH_FOLLOW, 100, PlayerID); SetAIBehavior(id, AI_STATE_LOCK, AI_LOCK_NEAREST_TARGET, 100); SetAIBehavior(id, AI_STATE_PREATTACK, AI_ATTACKMOVE_DIRECT, 50); SetAIBehavior(id, AI_STATE_PREATTACK, AI_ATTACKMOVE_JUMP, 50); SetAIBehavior(id, AI_STATE_PREATTACK, AI_ATTACKMOVE_JUMP_SIDE, 50); SetAIBehavior(id, AI_STATE_ATTACK, AI_ATTACK_RANDOM, 50); SetAIBehavior(id, AI_STATE_ATTACK, AI_ATTACK_COMBO, 50); UpdateAIAttrib(id); } */ void GENERAL_InitChara(int id) { // ce16 NPCE16_InitChara(id); SetCharaAttrib(id, CHARA_MAX_HP, 450*HandicapHP); // 生命上限 SetCharaAttrib(id, CHARA_HP, 450*HandicapHP); // 生命 SetCharaAttrib(id, CHARA_TEAM, 2); SetCharaWeapon(id, 82); } void GENERAL_InitAI(int id) { AI_Captain(PlayerID, id); SetAIAttrib(id, AI_THINK_SPEED, 70*ResponseRate); } void BOSS_InitChara(int id) { // should be cw01 CW01_InitChara(id); SetCharaAttrib(id, CHARA_MAX_HP, 2000*HandicapHP); SetCharaAttrib(id, CHARA_HP, 2000*HandicapHP); SetCharaAttrib(id, CHARA_TEAM, 2); SetCharaWeapon(id, 80); } void BOSS_InitAI(int id) { AI_Boss(PlayerID, id); SetAIAttrib(id, AI_THINK_SPEED, 100*ResponseRate); } // ------- // Door // ------- void SW02BOSSDOORL_InitItem(int id) { GetEntityPos(id, x, y, z); SetItemAttrib(id, ITEM_MODEL, "sw02bossdoorl", 1); SetItemAttrib(id, ITEM_MOVEPOINT, 2, x, y, z, x+30, y, z); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_NONE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_WAITTIME, 0); SetItemAttrib(id, ITEM_MOVETYPE, 0); SetItemAttrib(id, ITEM_MOVESPEED, 30); SetItemAttrib(id, ITEM_NEXTPOINT, 0); } void SW02BOSSDOORR_InitItem(int id) { GetEntityPos(id, x, y, z); SetItemAttrib(id, ITEM_MODEL, "sw02bossdoorr", 1); SetItemAttrib(id, ITEM_MOVEPOINT, 2, x, y, z, x-30, y, z); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_NONE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_WAITTIME, 0); SetItemAttrib(id, ITEM_MOVETYPE, 0); SetItemAttrib(id, ITEM_MOVESPEED, 30); SetItemAttrib(id, ITEM_NEXTPOINT, 0); } // -------------- // Trigger // -------------- // -------------------- // CutScene CallBack // -------------------- void CUTSCENE15_OnEnd() { // close boss door ObjectID = FindItem("SW02BOSSDOORL"); SetItemAttrib(ObjectID, ITEM_MOVESPEED, 200); SetItemMachine(ObjectID, 1, 0); ObjectID = FindItem("SW02BOSSDOORR"); SetItemAttrib(ObjectID, ITEM_MOVESPEED, 200); SetItemMachine(ObjectID, 1, 0); // spawn Guard B for (i = 0 ; i < 4 ; i++) { ObjectID = FindSceneItem(NumToStr("GuardB_%02d", i)); GetSceneItemPos(ObjectID, x, y, z); GeneralID[i] = SpawnChara("general", x, y, z); } var_aiLockCountLimit = 3; CutsceneEndPos(0.25, -765.5, -8.2, 0, -1, 0, 0.25, -765.5, -8.2, 0, -1, 0, 15, -763.5, -8, 0, -1, 0, -12.5, -754.4, -9, 0, -1, 0); PlayMusic("s12_nightdemon_boss",1,1); }