#include "scenario_common.h" // Global variable int bStartGame = 0; int BossWeapon[7]; int CurInv, LastHP; int BossHP; int BossMaxHP = 5000; int BossID = -1; int bKnockDown = 0; // use secondary bUseSecondary = 1; // scene has echo bVoiceEcho = 1; // Boss Position float BossX = -43.8; float BossY = 6.8; float BossZ = 200.7; // Partner Position SpawnPartnerX = -595; SpawnPartnerY = 40; SpawnPartnerZ = 50; // local variable int WeaponID, res; int i; // --------- // Game // --------- void OnCache() { LoadScene("se08"); // CacheLevelModel(""); } void OnHostGame() { SetGameMaxTime(-1); InitScenario(); BossWeapon[0] = 53; BossWeapon[1] = 43; BossWeapon[2] = 63; BossWeapon[3] = 13; BossWeapon[4] = 93; BossWeapon[5] = 83; BossWeapon[6] = 73; CurInv = 1; LastHP = 9; // spawn boss BossMaxHP = BossMaxHP*HandicapHP; BossID = SpawnChara("boss", BossX, BossY, BossZ); // mission SetMissionObjectiveText(0, MOBJ_SE08_1); var_uiGameOverVoice2 = NumToStr("swordmaster_d%d", rand()%4+1); Print("Cutscene29\n"); PlayCharaCutscene("cutscene29"); bStartGame = 1; } void CUTSCENE29_OnEnd() { SetCutsceneDelayTime(0); PlayCharaCutscene("cutscene29m"); SetCutsceneDelayTime(2); } void CUTSCENE29M_OnEnd() { PlayMusic("s17_yongjian_boss", 1, 1); SetAudioVariable(0, 0); CutsceneEndPos3(-365, -35.7, 20.7, 0.8, 0.2, 0, -371.2, -7.3, 20.7, 0.8, -0.2, 0); } void OnTimeOver() { Print("TimeOver\n"); GameOver(GAMEOVER_LOSE); } void OnUpdate(float t) { CommonUpdate(t); if (bStartGame == 1) { SetAudioVariable(0, 1000); bStartGame = 0; } if (CurInv < 6) { // check if boss weapon is lost WeaponID = GetCharaWeapon(BossID, 1); if (WeaponID == 0) { Print("Boss Lost Weapon ", BossWeapon[CurInv], "\n"); CurInv++; WeaponID = GetCharaWeapon(BossID, 0); SetCharaWeapon(BossID, WeaponID, BossWeapon[CurInv]); // full rage SetCharaAttrib(BossID, CHARA_RAGE, 100); } } if (CurInv < 7) { /* res = GetCharaBodyPose(BossID); if ( (res < 225) && (res > 218) ) Print("fall: ", res, "\n"); if (!bKnockDown) { if ( (res == 221) || (res == 224) ) { */ res = GetCharaAttrib(BossID, CHARA_HP); res = (res*10) / BossMaxHP; if ( res < LastHP ) { // drop weapon GetEntityPos(BossID, x, y, z); WeaponID = GetCharaWeapon(BossID, 0); // change weapon if (CurInv == 6) SetCharaWeapon(BossID, BossWeapon[CurInv], BossWeapon[CurInv]); else SetCharaWeapon(BossID, BossWeapon[CurInv], BossWeapon[CurInv+1]); SpawnItem(NumToStr("weapon%d", WeaponID-3), x, y, z); Print("Boss Drop Weapon ", WeaponID, "\n"); // full rage SetCharaAttrib(BossID, CHARA_RAGE, 100); LastHP--; CurInv++; } /* bKnockDown = 1; } } else { if ( (res != 221) && (res != 224) ) bKnockDown = 0; } */ } } void OnCharaDead(int id, int killer) { Print("Chara ", id, " is killed by ", killer, "\n"); // Player dead if (id == PlayerID) GameOver(GAMEOVER_LOSE); if (id == PartnerID) PartnerDead(); // boss if ( id == BossID) { KillScore(1, 2250); SetMissionObjectiveSwitch(0, 0); PlayCharaCutsceneCB("cutscene30", "GameComplete"); } } // ------------ // Trigger // ------------ void HINTSE081_InitItem(int id) { SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_NONE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); } void HINTSE081_OnTouch(int id, int charaId) { if (charaId != PlayerID) return; ShowHint(HINT_SE08_1); } // ------- // Enemy // ------- void BOSS_InitChara(int id) { CW09_InitChara(id); SetCharaAttrib(id, CHARA_MAX_HP, BossMaxHP); SetCharaAttrib(id, CHARA_HP, BossMaxHP); SetCharaAttrib(id, CHARA_TEAM, 2); SetCharaWeapon(id, BossWeapon[0], BossWeapon[1]); } void BOSS_InitAI(int id) { AI_Boss(PlayerID, id); SetAIAttrib(id, AI_CHIFLARE_RATE, 100); SetAIAttrib(id, AI_DEMON_RATE, 50); } // -------------- // for cutscene // -------------- void CUTSCENEWEAPON_InitItem(int id) { for (i = 1 ; i <= 9 ; i++) { if (GetItemString(id, ITEM_NAME) == NumToStr("CUTSCENEWEAPON_%02d", i)) { if (i == 8) SetItemAttrib(id, ITEM_MODEL, "WPN8E1A"); else SetItemAttrib(id, ITEM_MODEL, NumToStr("WPN%dE1", i)); break; } } if (i > 9) { Destroy(id); return; } SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_MACHINE2); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_WAITTIME, 0); SetItemAttrib(id, ITEM_ROTATEAXIS, 0, 0, 1); SetItemAttrib(id, ITEM_ROTATESPEED, -0.5); SetItemAttrib(id, ITEM_ROTATECENTER, -43.8, 6.8, 200.7); SetEntityRot(id, 0, 0, -90); } void CUTSCENEWEAPON_OnTouch(int id, int charaId) { } void CUTSCENEDEMONWEAPON_InitItem(int id) { for (i = 1 ; i <= 9 ; i++) { if (GetItemString(id, ITEM_NAME) == NumToStr("CUTSCENEDEMONWEAPON_%02d", i)) { if (i == 8) SetItemAttrib(id, ITEM_MODEL, "WPN8D1A"); else SetItemAttrib(id, ITEM_MODEL, NumToStr("WPN%dD1", i)); break; } } if (i > 9) { Destroy(id); return; } SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_MACHINE2); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_WAITTIME, 0); SetItemAttrib(id, ITEM_ROTATEAXIS, 0, 0, 1); SetItemAttrib(id, ITEM_ROTATESPEED, -0.5); SetItemAttrib(id, ITEM_ROTATECENTER, -43.8, 6.8, 200.7); SetEntityRot(id, 0, 0, -90); } void CUTSCENEDEMONWEAPON_OnTouch(int id, int charaId) { }