summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dat/des/altar/okawaru_arena.des
blob: e485558dde02ceb33c75fc68c87a72d0aedf4464 (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
# Okawaru's arena.
# Originally by LexAckson; revised by Grunt.

{{
function callback.oka_start_challange(data, triggerable, triggerer, marker, ev)
  -- Open the cages.
  for slave in iter.slave_iterator("cage_doors", 1) do
    dgn.terrain_changed(slave.x, slave.y, "floor", false, false, false)
  end
  crawl.mpr("The portcullises are lifted away, releasing the combatants.",
            "warning")
  crawl.mpr("The doors seal shut behind you!", "warning")
  -- Close the door.
  for slave in iter.slave_iterator("iron_doors", 1) do
    dgn.terrain_changed(slave.x, slave.y, "metal_wall", false, false, false)
  end
end

function callback.oka_monsters_death (data, triggerable, triggerer, marker, ev)
  local mons = dgn.mons_from_mid(ev:arg1())
  if mons.has_prop("oka_glad") then
    data.monsters_number = data.monsters_number + 1
    if data.monsters_number < 4 then
      return
    end

    crawl.god_speaks("Okawaru",
                     "Okawaru booms, \"Excellent! You may choose a reward.\"")
    -- Open exit.
    for slave in iter.slave_iterator("iron_doors", 1) do
      dgn.terrain_changed(slave.x, slave.y, "floor", false, false, false)
    end
    -- Open loot doors.
    for slave in iter.slave_iterator("loot_doors", 1) do
      dgn.terrain_changed(slave.x, slave.y, "floor", false, false, false)
    end
    crawl.mpr("The gates behind the altar rise, and the entry reopens.")
  end
end

function callback.oka_loot_burn (data, triggerable, triggerer, marker, ev)
  -- Drop item not chosen into lava.
  for slave in iter.slave_iterator("lava_spout", 1) do
    local you_x, you_y = you.pos()
    if you_x ~= (slave.x+2) or you_y ~= slave.y then
      dgn.terrain_changed(slave.x+2, slave.y, "lava", false, false, false)
    end
  end
end

-- Spawn some monsters.
function callback.oka_populate_cages (data, triggerable, triggerer, marker, ev)
  if dgn.persist.oka_arena_cages then
    return
  end

  dgn.persist.oka_arena_cages = true

  -- These are Okawaru's warriors, depth-weighted as though they are 9s.
  local monsters = ""
  if you.absdepth() < 11 then
      monsters = "orc warrior w:15 / hill giant w:5 / cyclops w:10"
                 .. " / centaur warrior w:10 / naga warrior w:10"
  elseif you.absdepth() < 16 then
      monsters = "orc knight w:15 / hill giant w:5 / cyclops w:10"
                 .. " / centaur warrior w:10 / naga warrior w:10"
  else
     monsters = "orc knight w:15 / stone giant w:10 / fire giant w:10"
                 .. " / frost giant w:10 / centaur warrior w:10"
                 .. " / naga warrior w:10"
  end
  for slave in iter.slave_iterator("mons_spawn", 1) do
    local dude = dgn.create_monster(slave.x, slave.y, monsters)
    dude.set_prop("oka_glad", 1)
    dude.beh = mons.behaviour("wander")
  end
end

}}

NAME:   okawaru_arena_lexackson
DEPTH:  D:9-
WEIGHT: 3
ORIENT: float
TAGS:   no_item_gen no_monster_gen generate_awake no_rotate no_hmirror
KPROP:  cX-EfGKkL = no_tele_into
SUBST:  c = t-
# Prizes are formerly "acquire armour" / "acquire weapon".
# Allies picking these up causes them to be killed and crash the game.
# The "level:-3" is "superb_item quality" at time of writing.
KITEM:  Ll = any armour level:-3 no_pickup / any weapon level:-3 no_pickup
KFEAT:  GR = iron_grate
KFEAT:  XTv = metal_wall
KFEAT:  L = floor
KFEAT:  M = escape_hatch_down
KFEAT:  E = runed_door
KFEAT:  Kk = altar_okawaru
KFEAT:  - = floor
COLOUR: -EMLlv = cyan

{{
local tlos_door = TriggerableFunction:new{
  func="callback.oka_populate_cages", repeated=true }
local tlos_altar = TriggerableFunction:new{
  func="callback.oka_start_challange" }
local tmonsters_death = TriggerableFunction:new{
  func="callback.oka_monsters_death",
  repeated=true,
  data={monsters_number=0} }
local tloot_grab = TriggerableFunction:new{
  func="callback.oka_loot_burn", }
local tloot_grab2 = TriggerableFunction:new{
  func="callback.oka_loot_burn" }

tlos_door:add_triggerer(DgnTriggerer:new {
  type="player_los" })
tlos_altar:add_triggerer(DgnTriggerer:new {
  type="player_los" })
tmonsters_death:add_triggerer(DgnTriggerer:new {
  type="monster_dies",
  target="any" })
tloot_grab:add_triggerer(DgnTriggerer:new {
  type="item_pickup",
  target="auto"})
tloot_grab:add_triggerer(DgnTriggerer:new {
  type="item_moved",
  target="auto"})
tloot_grab2:add_triggerer(DgnTriggerer:new {
  type="item_pickup",
  target="auto"})
tloot_grab2:add_triggerer(DgnTriggerer:new {
  type="item_moved",
  target="auto"})

lua_marker("M", portal_desc { mons_spawn =1 })
lua_marker("K", tlos_altar)
lua_marker("T", tmonsters_death)
lua_marker("G", portal_desc { cage_doors=1 })
lua_marker("o", tlos_door)
lua_marker("E", portal_desc { iron_doors=1,
                              door_open_prompt=
                                "It reads,\n"
                                .. "\"Warrior's weapon\n"
                                .. " gracefully paints petals red.\n"
                                .. " Honourable art.\"\n"
                                .. "Proceed?" })
lua_marker("L", tloot_grab)
lua_marker("l", tloot_grab2)
lua_marker("v", portal_desc { lava_spout=1 })
lua_marker("R", portal_desc { loot_doors=1 })

dgn.persist.oka_arena_cages = false
}}

MAP
    XXXXXTXXXX
    vXLRXvRlXX
    XXXtkKtXXX
    XX--c-c-XX
   XXt-c-c--tXX
  XXX-c-c-c--XXX
  XMX--c-c-c-XMX
  XXG-c-c-c-cGXX
  Xt-c-c-c-c--tX
XXX-c-c-c-c-c--XXX
XMG--c-c-c-c-c-GMX
XoXXXXXXEEXXXXXXoX
 .......@........
ENDMAP