diff options
Diffstat (limited to 'npc/00000SAVE/005-4_bossfight.c')
-rw-r--r-- | npc/00000SAVE/005-4_bossfight.c | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/npc/00000SAVE/005-4_bossfight.c b/npc/00000SAVE/005-4_bossfight.c new file mode 100644 index 000000000..334c2830f --- /dev/null +++ b/npc/00000SAVE/005-4_bossfight.c @@ -0,0 +1,204 @@ + +005-4,36,19,0 script Switch#elecave NPC400,{ + if ($@ELE_CAVE_STATUS != 0) goto L_Enjoy; + + mes "*You see a switch, it is flipped off*"; + menu "No, I am NOT flipping the switch... thats final.", L_Exit, + "Ha! What's the worst that could happen?", L_Flip; + +L_Flip: + mes "*As you flip the switch, the cave starts to rumble*"; + + if ($@ELE_CAVE_STATUS != 0) goto L_Enjoy; // Prevent from starting level 1 from two different players + + $@ELE_CAVE_STATUS = 1; + $@ELE_CAVE_PLAYER_COUNT = getmapusers("005-4"); + + startnpctimer; + +L_Start_Level_1: + $@ELE_CAVE_LEVEL = 1; + + mapannounce "005-4", "Level 1 starting", 0; + + // Random colors for everyone! + areatimer "005-4", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos"; + + // Two red, two blue. + areamonster "005-4", 19, 19, 54, 37, "", 1080, 2, "Switch#elecave::OnBlueDeath"; + areamonster "005-4", 19, 19, 54, 37, "", 1081, 2, "Switch#elecave::OnRedDeath"; + goto L_Exit; // This one is triggered on talking to the switch. + +L_Enjoy: + mes "*As you get ready to touch the switch, a spark of the opposite color flys to you. But oddly it doesn't hurt at all.*"; + + if (@ELE_CAVE_COLOR == 1) goto L_Set_Blue; + if (@ELE_CAVE_COLOR == 2) goto L_Set_Red; + +L_Set_Red: + @ELE_CAVE_COLOR = 1; + goto L_Exit; +L_Set_Blue: + @ELE_CAVE_COLOR = 2; + goto L_Exit; + + +L_Exit: + close; + end; + + +OnTimer3000: + setnpctimer 0; + + // We stop if no live players are around + if ($@ELE_CAVE_PLAYER_COUNT == 0) goto L_CleanUp; + set $@ELE_CAVE_PLAYER_COUNT, 0; // The onTick refills this with a live count + + // We punish them for having a different count (Aka need kill them at the same time) + $@ELE_CAVE_RED_COUNT = mobcount("005-4","Switch#elecave::OnRedDeath") + 1; + $@ELE_CAVE_BLUE_COUNT = mobcount("005-4","Switch#elecave::OnBlueDeath") + 1; + + $@ELE_CAVE_DIFF = 0; + if ($@ELE_CAVE_RED_COUNT > $@ELE_CAVE_BLUE_COUNT) goto L_More_Red; + if ($@ELE_CAVE_RED_COUNT < $@ELE_CAVE_BLUE_COUNT) goto L_More_Blue; + + if ($@ELE_CAVE_LAST_MESSAGE != 0) mapannounce "005-4", "The ions are once again balanced. Try to kill a red and blue at the same time.", 0; + $@ELE_CAVE_LAST_MESSAGE = 0; + + goto L_Next_Step; + +L_More_Red: + $@ELE_CAVE_DIFF = $@ELE_CAVE_RED_COUNT - $@ELE_CAVE_BLUE_COUNT; + if ($@ELE_CAVE_LAST_MESSAGE != 1) mapannounce "005-4", "There are too many red ions in the air! Kill more red sparks!", 0; + $@ELE_CAVE_LAST_MESSAGE = 1; + goto L_Next_Step; + +L_More_Blue: + $@ELE_CAVE_DIFF = $@ELE_CAVE_BLUE_COUNT - $@ELE_CAVE_RED_COUNT; + if ($@ELE_CAVE_LAST_MESSAGE != 2) mapannounce "005-4", "There are too many blue ions in the air! Kill more blue sparks!", 0; + $@ELE_CAVE_LAST_MESSAGE = 2; + goto L_Next_Step; + +L_Next_Step: + // Basic per player logic + areatimer "005-4", 19, 19, 54, 37, 10, "Switch#elecave::OnTick"; + + if ($@ELE_CAVE_RED_COUNT == 0 && $@ELE_CAVE_BLUE_COUNT == 0) goto L_Next_Level; + + end; + +L_Next_Level: + if ($@ELE_CAVE_LEVEL == 1) goto L_Start_Level_2; + if ($@ELE_CAVE_LEVEL == 2) goto L_Start_Level_3; + if ($@ELE_CAVE_LEVEL == 3) goto L_CleanUp; + end; + +L_Start_Level_2: + $@ELE_CAVE_LEVEL = 2; + + mapannounce "005-4", "Level 2 starting", 0; + + // Random colors for everyone! + areatimer "005-4", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos"; + + // four red, four blue. + areamonster "005-4", 19, 19, 54, 37, "", 1080, 4, "Switch#elecave::OnBlueDeath"; + areamonster "005-4", 19, 19, 54, 37, "", 1081, 4, "Switch#elecave::OnRedDeath"; + end; + +L_Start_Level_3: + $@ELE_CAVE_LEVEL = 3; + + mapannounce "005-4", "Level 3 starting", 0; + + // Random colors for everyone! + areatimer "005-4", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos"; + + // eight red, eight blue. + areamonster "005-4", 19, 19, 54, 37, "", 1080, 8, "Switch#elecave::OnBlueDeath"; + areamonster "005-4", 19, 19, 54, 37, "", 1081, 8, "Switch#elecave::OnRedDeath"; + end; + + +OnChaos: + if (ispcdead()) end; +L_Set_Color: + message strcharinfo(0), "You feel funny. You think your color has changed."; + @ELE_CAVE_COLOR = rand(1, 2); + end; + +OnTick: + if (ispcdead()) end; + + // Count this player as alive + $@ELE_CAVE_PLAYER_COUNT = $@ELE_CAVE_PLAYER_COUNT + 1; + + @drainamount = MaxHp / -20; + + if ($@ELE_CAVE_DIFF != 0) heal @drainamount * $@ELE_CAVE_DIFF, 0; + + // Make sure they have a color + if (@ELE_CAVE_COLOR == 0) goto L_Set_Color; + + if (@ELE_CAVE_COLOR == 1) goto L_Do_Red; + if (@ELE_CAVE_COLOR == 2) goto L_Do_Blue; + + end; + +L_Do_Red: + specialeffect2 114; // Red effects + + if (isin("005-4", 42, 19, 54, 32)) goto L_Heal; + if (isin("005-4", 32, 19, 54, 37)) end; + message strcharinfo(0), "Sparks are flying between you and a piller. Maybe you should stand near a piller with the same color as you."; + heal MaxHp / -6, 0; + + end; + +L_Do_Blue: + specialeffect2 115; // Blue effects + + if (isin("005-4", 19, 19, 31, 32)) goto L_Heal; + if (isin("005-4", 19, 19, 41, 37)) end; + message strcharinfo(0), "Sparks are flying between you and a piller. Maybe you should stand near a piller with the same color as you"; + heal MaxHp / -6, 0; + + end; + +L_Heal: + heal MaxHp / 20, 0; + end; + +OnBlueDeath: + // Blue players have to kill blue sparks + if (@ELE_CAVE_COLOR == 2) end; + message strcharinfo(0), "The dying spark reacts explosively with you. You should only kill sparks with the same color as you."; + heal MaxHp / -2, 0; + end; + +OnRedDeath: + // Red players have to kill red sparks + if (@ELE_CAVE_COLOR == 1) end; + message strcharinfo(0), "The dying spark reacts explosively with you. You should only kill sparks with the same color as you."; + heal MaxHp / -2, 0; + end; + +OnInit: + if (debug >= 2) end; + initnpctimer; + stopnpctimer; +L_CleanUp: + $@ELE_CAVE_LAST_MESSAGE = 0; + $@ELE_CAVE_STATUS = 0; + $@ELE_CAVE_PLAYER_COUNT = 0; + $@ELE_CAVE_LEVEL = 0; + $@ELE_CAVE_ROUND_TIMER = 0; + + killmonster "005-4", "Switch#elecave::OnBlueDeath"; + killmonster "005-4", "Switch#elecave::OnRedDeath"; + + stopnpctimer; + setnpctimer 0; + end; +} |