1/*
2 *
3 *  Iter Vehemens ad Necem (IVAN)
4 *  Copyright (C) Timo Kiviluoto
5 *  Released under the GNU General
6 *  Public License
7 *
8 *  See LICENSING which should be included
9 *  along with this file for more details
10 *
11 */
12
13/*
14 * NOTICE!!!
15 *
16 * This file contains SPOILERS, which might ruin your IVAN experience
17 * totally. Also, editing anything can DESTROY GAME BALANCE or CAUSE
18 * OBSCURE BUGS if you don't know what you're doing. So from here on,
19 * proceed at your own risk!
20 */
21
22Dungeon REBEL_CAMP;
23{
24  Levels = 1;
25  Description = "Rebel Camp";
26  ShortDescription = "RC";
27
28  Level 0;
29  {
30    LevelMessage = "You pass the sentries and draw closer to the camp.";
31    Description = "Rebel Camp";
32    ShortDescription = "Rebel Camp";
33    FillSquare = solidterrain(GRASS_TERRAIN), 0;
34    Size = 55, 55;
35    GenerateMonsters = false;
36    Rooms = 10:15;
37    Items = 0;
38    IsOnGround = true;
39    TeamDefault = REBEL_TEAM;
40    LOSModifier = 48;
41    IgnoreDefaultSpecialSquares = false;
42    AutoReveal = false;
43    CanGenerateBone = false;
44    DifficultyBase = 50;
45    DifficultyDelta = 0;
46    EnchantmentMinusChanceBase = 0;
47    EnchantmentMinusChanceDelta = 0;
48    EnchantmentPlusChanceBase = 5;
49    EnchantmentPlusChanceDelta = 0;
50    BackGroundType = GREEN_FRACTAL;
51    EarthquakesAffectTunnels = false;
52    AudioPlayList =
53    {
54      1,
55      "Empty.mid";
56    }
57
58    RoomDefault
59    {
60      Pos = 2:XSize-5,2:YSize-5;
61      Size = 4:6,4:6;
62      AltarPossible = false;
63      WallSquare = solidterrain(GRASS_TERRAIN), wall(TENT_WALL);
64      FloorSquare = solidterrain(GRASS_TERRAIN), 0;
65      DoorSquare = solidterrain(GRASS_TERRAIN), door(CURTAIN);
66      GenerateDoor = true;
67      DivineMaster = 0;
68      GenerateTunnel = false;
69      GenerateLanterns = true;
70      Type = ROOM_NORMAL;
71      GenerateFountains = false;
72      AllowLockedDoors = false;
73      AllowBoobyTrappedDoors = false;
74      Shape = ROUND_CORNERS;
75      IsInside = true;
76      GenerateWindows = false;
77      UseFillSquareWalls = false;
78      Flags = 0;
79    }
80
81    Square, Pos XSize/2, 0;
82    {
83      EntryIndex = STAIRS_UP;
84    }
85
86    /* Forest trees & Decorations */
87    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
88    {
89      OTerrain = boulder(1);
90      Times = 10;
91    }
92
93    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
94    {
95      OTerrain = boulder(2);
96      Times = 10;
97    }
98
99    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
100    {
101      OTerrain = decoration(BIRCH);
102      Times = 50:150;
103    }
104
105    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
106    {
107      OTerrain = decoration(TEAK);
108      Times = 50:150;
109    }
110
111    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
112    {
113      OTerrain = decoration(DEAD_TREE);
114      Times = 10;
115    }
116
117    Square, BoundedRandom XSize/3, YSize/3, 4*XSize/3, 4*YSize/3, NOT_IN_ROOM|HAS_NO_OTERRAIN;
118    {
119      OTerrain = decoration(WELL);
120    }
121
122    Square, Random IN_ROOM|HAS_NO_OTERRAIN;
123    {
124      Items == itemcontainer(CHEST)
125      {
126        Parameters = LOCKED;
127        ItemsInside = { 3,  Random { Category = WEAPON; }, potion(VIAL) { SecondaryMaterial = HEALING_LIQUID; }, DARK_BREAD loaf; }
128      }
129    }
130
131    /* People */
132    Square, Pos 0, 0;
133    {
134      Character = guard(REBEL) { WayPoint = { 4, 0, 0, XSize - 1, 0, XSize - 1, YSize - 1, 0, YSize - 1; } }
135    }
136
137    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
138    {
139      Character = cossack(REBEL_SOLDIER);
140      Times = 15;
141    }
142
143    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
144    {
145      Character = cossack(REBEL_LIEUTENANT);
146      Times = 5;
147    }
148
149    Square, Random NOT_IN_ROOM;
150    {
151      Character = farmer(REBEL_CAMP);
152      Times = 5;
153    }
154
155    Square, Random NOT_IN_ROOM;
156    {
157      Character = housewife(REBEL_CAMP);
158      Times = 5;
159    }
160
161    Square, Random IN_ROOM;
162    {
163      Character = child(BOY);
164      Times = 1:3;
165    }
166
167    Square, Random IN_ROOM;
168    {
169      Character = child(GIRL);
170      Times = 1:3;
171    }
172
173    Square, Random IN_ROOM;
174    {
175      Character = guard(REBEL);
176      Times = 2:5;
177    }
178
179    Square, Random IN_ROOM;
180    {
181      Character = mysticfrog(LIGHT);
182      Times = 1:2;
183    }
184
185    Square, Random IN_ROOM;
186    {
187      Character = necromancer(MASTER_NECROMANCER);
188      Times = 2;
189    }
190
191    Square, Random NOT_IN_ROOM|HAS_NO_OTERRAIN;
192    {
193      Character = largerat;
194      Times = 1:4;
195    }
196
197    /* Leader Room */
198    Room
199    {
200      Size = 7,7;
201      GenerateDoor = false;
202      GenerateLanterns = false;
203      Type = ROOM_OWNED_AREA;
204
205      OTerrainMap
206      {
207        Pos = 1,1;
208        Size = 5,5;
209
210        Types
211        {
212          a = decoration(ARM_CHAIR);
213          | = decoration(CARPET);
214          d = decoration(DESK);
215          b = decoration(EXPENSIVE_BED);
216          T = decoration(TABLE);
217          B = decoration(BENCH);
218          x = olterraincontainer(CHEST_OF_DRAWERS) { ItemsInside == Random { MinPrice = 100; Times = 3; Category = CLOAK|BODY_ARMOR|BELT|BOOT|GAUNTLET; ConfigFlags = NO_BROKEN; } }
219        }
220      }
221      {
222        .da..
223        .....
224        ..T.b
225        x....
226        .B.B.
227      }
228
229      ItemMap
230      {
231        Pos = 0,0;
232        Size = 7,6;
233
234        Types
235        {
236          # == 0;
237          2 == lantern { SquarePosition = DOWN; }
238          3 == lantern { SquarePosition = RIGHT; }
239          4 == lantern { SquarePosition = LEFT; }
240          c == Random { MinPrice = 350; Category = WEAPON|SHIELD; ConfigFlags = NO_BROKEN; Enchantment = 3; }
241          n == trinket(POTTED_PLANT);
242        }
243      }
244      {
245        .#2###.
246        ##...##
247        #.....#
248        3c....4
249        #....n#
250        ##...##
251      }
252
253      CharacterMap
254      {
255        Pos = 1,1;
256        Size = 5,5;
257
258        Types
259        {
260          # = 0;
261          h = harvan { Flags = IS_MASTER; }
262          g = guard(REBEL);
263        }
264      }
265      {
266        #.h.#
267        g...g
268        .....
269        .....
270        #...#
271      }
272
273      Square, Pos 3,6;
274      {
275        OTerrain = door(CURTAIN);
276      }
277    }
278
279    /* Shop */
280    Room
281    {
282      Size = 7,7;
283      GenerateDoor = false;
284      GenerateLanterns = false;
285      Type = ROOM_SHOP;
286
287      ItemMap
288      {
289        Pos = 0,0;
290        Size = 7,7;
291
292        Types
293        {
294          # == 0;
295          1 == lantern { SquarePosition = UP; }
296          2 == lantern { SquarePosition = DOWN; }
297          3 == lantern { SquarePosition = RIGHT; }
298          a == Random { MinPrice = 250; Category = HELMET|CLOAK|BODY_ARMOR|BELT|BOOT|GAUNTLET; }
299          d == Random { MinPrice = 250; Category = RING|AMULET; }
300          w == Random { MinPrice = 500; Category = WEAPON|SHIELD; }
301          e == Random { MinPrice = 10; Category = FOOD|POTION; }
302          u == Random { MinPrice = 200; Category = WAND|TOOL; }
303          v == Random { MinPrice = 500; Category = SCROLL|TOOL; }
304          s = { 2, belt(BELT_OF_CARRYING), wand(WAND_OF_STRIKING); }
305        }
306      }
307      {
308        .##2##.
309        ##eeu##
310        #aeeew#
311        3au.ee.
312        #adevv#
313        ##dws##
314        .##1##.
315      }
316
317      Square, Pos 3,3;
318      {
319        Character = shopkeeper(REBEL_CAMP) { Flags = IS_MASTER; }
320        OTerrain = decoration(CHAIR);
321      }
322
323      Square, Pos 6,3;
324      {
325        OTerrain = door(CURTAIN);
326      }
327      Square, Pos 7,2;
328      {
329        Character = guard(REBEL);
330      }
331      Square, Pos 7,4;
332      {
333        Character = guard(REBEL);
334      }
335    }
336
337    /* Kamikaze Room */
338    Room
339    {
340      Size = 6,6;
341
342      CharacterMap
343      {
344        Pos = 1,1;
345        Size = 4,4;
346
347        Types
348        {
349          k = kamikazedwarf(LEGIFER);
350          K = veterankamikazedwarf(LEGIFER);
351        }
352      }
353      {
354        .kk.
355        k..k
356        kK.k
357        .kk.
358      }
359    }
360
361    /* Other Rooms */
362    Room
363    {
364      Shape = RECTANGLE;
365
366      Square, Random;
367      {
368        OTerrain = decoration(CHEAP_BED);
369        Times = 4:10;
370      }
371    }
372
373    Room
374    {
375      Shape = RECTANGLE;
376
377      Square, Random;
378      {
379        OTerrain = decoration(CHEAP_BED);
380        Times = 4:10;
381      }
382    }
383
384    Room
385    {
386      Square, Random HAS_NO_OTERRAIN;
387      {
388        OTerrain = decoration(TABLE);
389      }
390
391      Square, Random HAS_NO_OTERRAIN;
392      {
393        OTerrain = decoration(CHAIR);
394        Times = 1:3;
395      }
396    }
397
398    Room
399    {
400      Square, Random HAS_NO_OTERRAIN;
401      {
402        OTerrain = decoration(WORK_BENCH);
403      }
404    }
405  }
406}
407