summaryrefslogblamecommitdiff
path: root/npc/005-4/bossfight.txt
blob: 2f04046283616bc5698c0b47d381daf0270ce893 (plain) (tree)















































































































































































































                                                                                                                
//Author: Kage

005-4.gat,36,19,0	script	Switch#elecave	127,{ 
	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?", -;

	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

	set $@ELE_CAVE_STATUS, 1;
	set $@ELE_CAVE_PLAYER_COUNT, getareausers("005-4.gat", 19, 19, 54, 37);

	startnpctimer;

L_Start_Level_1:
	set $@ELE_CAVE_LEVEL, 1;

	mapannounce "005-4.gat", "Level 1 starting", 0;

	// Random colors for everyone!
	areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::onChaos";

	// Two red, two blue.
	areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 2, "Switch#elecave::onBlueDeath";
	areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 2, "Switch#elecave::onRedDeath";
	goto L_Exit; // This one is triggered on talking to the switch.

L_Enjoy:
	mes "*It seems the switch is stuck in the on position*";
L_Exit:
        close;
        end;

//-----------------------No player talking below this line-------------------------------

// Fight logic
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)
	set $@ELE_CAVE_RED_COUNT, mobcount("005-4.gat","Switch#elecave::onRedDeath") + 1;
	set $@ELE_CAVE_BLUE_COUNT, mobcount("005-4.gat","Switch#elecave::onBlueDeath") + 1;

	set $@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;
	goto L_Next_Step;

L_More_Red:
	set $@ELE_CAVE_DIFF, $@ELE_CAVE_RED_COUNT - $@ELE_CAVE_BLUE_COUNT;
	mapannounce "005-4.gat", "Their are too many red ions in the air!", 0;
	goto L_Next_Step;

L_More_Blue:
	set $@ELE_CAVE_DIFF, $@ELE_CAVE_BLUE_COUNT - $@ELE_CAVE_RED_COUNT;
	mapannounce "005-4.gat", "Their are too many blue ions in the air!", 0;
	goto L_Next_Step;

L_Next_Step:
	// Basic per player logic
	areatimer "005-4.gat", 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:
	set $@ELE_CAVE_LEVEL, 2;

	mapannounce "005-4.gat", "Level 2 starting", 0;

	// Random colors for everyone!
	areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::onChaos";

	// four red, four blue.
	areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 4, "Switch#elecave::onBlueDeath";
	areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 4, "Switch#elecave::onRedDeath";
	end;

L_Start_Level_3:
	set $@ELE_CAVE_LEVEL, 3;

	mapannounce "005-4.gat", "Level 3 starting", 0;

	// Random colors for everyone!
	areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::onChaos";

	// eight red, eight blue.
	areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 8, "Switch#elecave::onBlueDeath";
	areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 8, "Switch#elecave::onRedDeath";
	end;

// Being ticks

onChaos:
	if (isdead(0)) end;
L_Set_Color:
	message strcharinfo(0), "You feel funny.";
	set @ELE_CAVE_COLOR, rand(1, 2);
	end;

onTick:
        if (isdead(0)) end;

	// Count this player as alive
        set $@ELE_CAVE_PLAYER_COUNT, $@ELE_CAVE_PLAYER_COUNT + 1;

	set @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 120; // Red effects

	// Punish blue players who stand around a red player
	areatimer "005-4.gat", getx(0) - 2, gety(0) - 2, getx(0) + 2, gety(0) + 2, 10, "Switch#elecave::onBlue";

	if (isin("005-4.gat", 42, 19, 54, 32)) goto L_Heal;
	if (isin("005-4.gat", 32, 19, 54, 37)) end;
	message strcharinfo(0), "Sparks are flying between you and a piller.";
	heal MaxHp / -6, 0;

	end;

L_Do_Blue:
	specialeffect2 121; // Blue effects

	// Punish red players who stand around a blue player
	areatimer "005-4.gat", getx(0) - 2, gety(0) - 2, getx(0) + 2, gety(0) + 2, 10, "Switch#elecave::onRed";

	if (isin("005-4.gat", 19, 19, 31, 32)) goto L_Heal;
	if (isin("005-4.gat", 19, 19, 41, 37)) end;
	message strcharinfo(0), "Sparks are flying between you and a piller.";
	heal MaxHp / -6, 0;

	end;

L_Heal:
	heal MaxHp / 20, 0;
	end;

// Punishment triggers
onRed:
	if (@ELE_CAVE_COLOR == 2) end;
	message strcharinfo(0), "Sparks are flying between you and the person you are next to!";
	heal MaxHp / -5, 0;
	end;

onBlue:
	if (@ELE_CAVE_COLOR == 1) end;
	message strcharinfo(0), "Sparks are flying between you and the person you are next to!";
        heal MaxHp / -5, 0;
	end;


// Death triggers
onBlueDeath:
	// Blue players have to kill blue sparks
	if (@ELE_CAVE_COLOR == 2) end;
	message strcharinfo(0), "The dieing spark reacts explosively with you.";
        heal MaxHp / -2, 0;
	end;

onRedDeath:
	// Red players have to kill red sparks
	if (@ELE_CAVE_COLOR == 1) end;
	message strcharinfo(0), "The dieing spark reacts explosively with you.";
        heal MaxHp / -2, 0;
	end;

onInit:
        initnpctimer;
        stopnpctimer;
L_CleanUp:
	set $@ELE_CAVE_STATUS, 0;
	set $@ELE_CAVE_PLAYER_COUNT, 0;
	set $@ELE_CAVE_LEVEL, 0;
	set $@ELE_CAVE_ROUND_TIMER, 0;

	killmonster "005-4.gat", "Switch#elecave::onBlueDeath";
	killmonster "005-4.gat", "Switch#elecave::onRedDeath";

	stopnpctimer;
	setnpctimer 0;
	end;
}