summaryrefslogtreecommitdiff
path: root/world/map/npc/005-4/bossfight.txt
blob: 2f04046283616bc5698c0b47d381daf0270ce893 (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
208
//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;
}