summaryrefslogtreecommitdiff
path: root/world/map/npc/005-4/bossfight.txt
blob: 34585360afa78304de1310ac58cdd9ced2e79865 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
//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 "*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:
	set @ELE_CAVE_COLOR, 1;
	goto L_Exit;
L_Set_Blue:
	set @ELE_CAVE_COLOR, 2;
	goto L_Exit;


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;

	if ($@ELE_CAVE_LAST_MESSAGE != 0) mapannounce "005-4.gat", "The ions are once again balanced.  Try to kill a red and blue at the same time.", 0;
	set $@ELE_CAVE_LAST_MESSAGE, 0;

	goto L_Next_Step;

L_More_Red:
	set $@ELE_CAVE_DIFF, $@ELE_CAVE_RED_COUNT - $@ELE_CAVE_BLUE_COUNT;
	if ($@ELE_CAVE_LAST_MESSAGE != 1) mapannounce "005-4.gat", "There are too many red ions in the air!  Kill more red sparks!", 0;
	set $@ELE_CAVE_LAST_MESSAGE, 1;
	goto L_Next_Step;

L_More_Blue:
	set $@ELE_CAVE_DIFF, $@ELE_CAVE_BLUE_COUNT - $@ELE_CAVE_RED_COUNT;
	if ($@ELE_CAVE_LAST_MESSAGE != 2) mapannounce "005-4.gat", "There are too many blue ions in the air!  Kill more blue sparks!", 0;
	set $@ELE_CAVE_LAST_MESSAGE, 2;
	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()) end;
L_Set_Color:
	message strcharinfo(0), "You feel funny.  You think your color has changed.";
	set @ELE_CAVE_COLOR, rand(1, 2);
	end;

onTick:
        if (isdead()) 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 114; // Red effects

	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.  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.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.  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;

// Death triggers
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:
        initnpctimer;
        stopnpctimer;
L_CleanUp:
	set $@ELE_CAVE_LAST_MESSAGE, 0;
	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;
}