Difference between revisions of "Modding:Tutorial/The Infinite Arena/Source"
From DRL Wiki
Game Hunter (Talk | contribs) m (more debugging) |
Game Hunter (Talk | contribs) (revised for 0996) |
||
| Line 1: | Line 1: | ||
| − | |||
core.declare("inf_arena", {} ) | core.declare("inf_arena", {} ) | ||
--enemy scaling for each wave: note that game difficulty will modify scaling independently | --enemy scaling for each wave: note that game difficulty will modify scaling independently | ||
local mob_scale_factor = 0.5 | local mob_scale_factor = 0.5 | ||
| − | --customize | + | --customize min_lev/max_lev/weight of each enemy (defaults given) |
--for names of beings, check Object IDs in the modding documentation | --for names of beings, check Object IDs in the modding documentation | ||
--be aware that JC auto-ends the game unless modified directly | --be aware that JC auto-ends the game unless modified directly | ||
local mobGenStats = { | local mobGenStats = { | ||
| − | { being = "former", | + | { being = "former", min_lev = 0, max_lev = 12, weight = 10 }, |
| − | { being = "sergeant", | + | { being = "sergeant", min_lev = 2, max_lev = 15, weight = 10 }, |
| − | { being = "captain", | + | { being = "captain", min_lev = 8, max_lev = 15, weight = 10 }, |
| − | { being = "imp", | + | { being = "imp", min_lev = 0, max_lev = 17, weight = 8 }, |
| − | { being = "demon", | + | { being = "demon", min_lev = 4, max_lev = 20, weight = 6 }, |
| − | { being = "lostsoul", | + | { being = "lostsoul", min_lev = 6, max_lev = 16, weight = 10 }, |
| − | { being = "knight", | + | { being = "knight", min_lev = 9, max_lev = 15, weight = 6 }, |
| − | { being = "cacodemon", | + | { being = "cacodemon", min_lev = 10, max_lev = 50, weight = 6 }, |
| − | { being = "commando", | + | { being = "commando", min_lev = 12, max_lev = 17, weight = 6 }, |
| − | { being = "pain", | + | { being = "pain", min_lev = 12, max_lev = 17, weight = 2 }, |
| − | { being = "baron", | + | { being = "baron", min_lev = 12, max_lev = 200, weight = 6 }, |
| − | { being = "arachno", | + | { being = "arachno", min_lev = 13, max_lev = 50, weight = 4 }, |
| − | { being = "revenant", | + | { being = "revenant", min_lev = 13, max_lev = 200, weight = 5 }, |
| − | { being = "mancubus", | + | { being = "mancubus", min_lev = 15, max_lev = 200, weight = 7 }, |
| − | { being = "arch", | + | { being = "arch", min_lev = 16, max_lev = 200, weight = 4 }, |
| − | { being = "nimp", | + | { being = "nimp", min_lev = 30, max_lev = 60, weight = 8 }, |
| − | { being = "ndemon", | + | { being = "ndemon", min_lev = 40, max_lev = 200, weight = 6 }, |
| − | { being = "ncacodemon", | + | { being = "ncacodemon", min_lev = 51, max_lev = 200, weight = 6 }, |
| − | { being = "narachno", | + | { being = "narachno", min_lev = 50, max_lev = 200, weight = 5 }, |
| − | { being = "narch", | + | { being = "narch", min_lev = 90, max_lev = 200, weight = 3 }, |
| − | { being = "bruiser", | + | { being = "bruiser", min_lev = 50, max_lev = 200, weight = 6 }, |
| − | { being = "lava_elemental", | + | { being = "lava_elemental", min_lev = 70, max_lev = 200, weight = 1 }, |
| − | { being = "shambler", | + | { being = "shambler", min_lev = 80, max_lev = 200, weight = 3 }, |
| − | { being = "agony", | + | { being = "agony", min_lev = 80, max_lev = 200, weight = 1 }, |
| − | { being = "cyberdemon", | + | { being = "cyberdemon", min_lev = 80, max_lev = 200, weight = 1 }, |
| − | { being = "arenamaster", | + | { being = "arenamaster", min_lev = 0, max_lev = 0, weight = 0 }, |
| − | { being = "angel", | + | { being = "angel", min_lev = 0, max_lev = 0, weight = 0 }, |
| − | { being = "jc", | + | { being = "jc", min_lev = 0, max_lev = 0, weight = 0 }, |
} | } | ||
| Line 98: | Line 97: | ||
--weapons | --weapons | ||
{ item = "chainsaw", level = 12, weight = 3 }, | { item = "chainsaw", level = 12, weight = 3 }, | ||
| − | { item = "ublaster", level = | + | { item = "ublaster", level = 8, weight = 2 }, |
| + | { item = "ucpistol", level = 4, weight = 6 }, | ||
{ item = "uashotgun", level = 6, weight = 6 }, | { item = "uashotgun", level = 6, weight = 6 }, | ||
{ item = "upshotgun", level = 12, weight = 4 }, | { item = "upshotgun", level = 12, weight = 4 }, | ||
| Line 132: | Line 132: | ||
{ item = "uhskull", level = 9, weight = 8 }, | { item = "uhskull", level = 9, weight = 8 }, | ||
{ item = "umod_firestorm", level = 10, weight = 4 }, | { item = "umod_firestorm", level = 10, weight = 4 }, | ||
| − | { item = "umod_sniper", level = 10, weight = | + | { item = "umod_sniper", level = 10, weight = 4 }, |
| + | { item = "umod_nano", level = 10, weight = 4 }, | ||
| + | { item = "umod_onyx", level = 10, weight = 4 }, | ||
--Uniques | --Uniques | ||
| Line 140: | Line 142: | ||
{ item = "spear", level = 16, weight = 0 }, | { item = "spear", level = 16, weight = 0 }, | ||
{ item = "uscythe", level = 16, weight = 0 }, | { item = "uscythe", level = 16, weight = 0 }, | ||
| + | { item = "udragon", level = 16, weight = 1 }, | ||
{ item = "utrigun", level = 8, weight = 2 }, | { item = "utrigun", level = 8, weight = 2 }, | ||
{ item = "ujackal", level = 10, weight = 2 }, | { item = "ujackal", level = 10, weight = 2 }, | ||
| Line 156: | Line 159: | ||
{ item = "uenviroboots", level = 10, weight = 2 }, | { item = "uenviroboots", level = 10, weight = 2 }, | ||
{ item = "ushieldarmor", level = 10, weight = 2 }, | { item = "ushieldarmor", level = 10, weight = 2 }, | ||
| + | { item = "uberarmor", level = 10, weight = 1 }, | ||
{ item = "aarmor", level = 22, weight = 0 }, | { item = "aarmor", level = 22, weight = 0 }, | ||
--consumables | --consumables | ||
| Line 161: | Line 165: | ||
{ item = "umodstaff", level = 15, weight = 4 }, | { item = "umodstaff", level = 15, weight = 4 }, | ||
{ item = "uarenastaff", level = 4, weight = 0 }, | { item = "uarenastaff", level = 4, weight = 0 }, | ||
| − | |||
| − | |||
} | } | ||
--changes the generation stats of enemies based on mobGenStats | --changes the generation stats of enemies based on mobGenStats | ||
for _,v in ipairs(mobGenStats) do | for _,v in ipairs(mobGenStats) do | ||
| − | beings[v.being]. | + | beings[v.being].min_lev = v.min_lev |
| − | beings[v.being]. | + | beings[v.being].max_lev = v.max_lev |
beings[v.being].weight = v.weight | beings[v.being].weight = v.weight | ||
end | end | ||
| Line 321: | Line 323: | ||
"\"You are either very brave or very foolish. Either way I like it! " .. | "\"You are either very brave or very foolish. Either way I like it! " .. | ||
"\"And so do the crowds!\" Suddenly you hear screams everywhere! " .. | "\"And so do the crowds!\" Suddenly you hear screams everywhere! " .. | ||
| − | + | "\"Blood! Blood! BLOOD!\" \"Kill all enemies and I shall reward thee!\"") | |
--spawn first wave | --spawn first wave | ||
| Line 408: | Line 410: | ||
Level.name = "Infinite Arena" | Level.name = "Infinite Arena" | ||
Level.name_number = 0 | Level.name_number = 0 | ||
| − | Level.fill(" | + | Level.fill("rwall") |
local translation = { | local translation = { | ||
["."] = "floor", | ["."] = "floor", | ||
| − | ["#"] = " | + | ["#"] = {"rwall", LFPERMANENT = true}, |
| − | ["X"] = " | + | ["X"] = "rwall", |
[","] = "blood", | [","] = "blood", | ||
[">"] = "stairs", | [">"] = "stairs", | ||
| Line 470: | Line 472: | ||
Level.player(38, 10) | Level.player(38, 10) | ||
end | end | ||
| − | |||
Revision as of 16:48, 8 April 2012
core.declare("inf_arena", {} )
--enemy scaling for each wave: note that game difficulty will modify scaling independently local mob_scale_factor = 0.5 --customize min_lev/max_lev/weight of each enemy (defaults given) --for names of beings, check Object IDs in the modding documentation --be aware that JC auto-ends the game unless modified directly local mobGenStats = {
{ being = "former", min_lev = 0, max_lev = 12, weight = 10 },
{ being = "sergeant", min_lev = 2, max_lev = 15, weight = 10 },
{ being = "captain", min_lev = 8, max_lev = 15, weight = 10 },
{ being = "imp", min_lev = 0, max_lev = 17, weight = 8 },
{ being = "demon", min_lev = 4, max_lev = 20, weight = 6 },
{ being = "lostsoul", min_lev = 6, max_lev = 16, weight = 10 },
{ being = "knight", min_lev = 9, max_lev = 15, weight = 6 },
{ being = "cacodemon", min_lev = 10, max_lev = 50, weight = 6 },
{ being = "commando", min_lev = 12, max_lev = 17, weight = 6 },
{ being = "pain", min_lev = 12, max_lev = 17, weight = 2 },
{ being = "baron", min_lev = 12, max_lev = 200, weight = 6 },
{ being = "arachno", min_lev = 13, max_lev = 50, weight = 4 },
{ being = "revenant", min_lev = 13, max_lev = 200, weight = 5 },
{ being = "mancubus", min_lev = 15, max_lev = 200, weight = 7 },
{ being = "arch", min_lev = 16, max_lev = 200, weight = 4 },
{ being = "nimp", min_lev = 30, max_lev = 60, weight = 8 },
{ being = "ndemon", min_lev = 40, max_lev = 200, weight = 6 },
{ being = "ncacodemon", min_lev = 51, max_lev = 200, weight = 6 },
{ being = "narachno", min_lev = 50, max_lev = 200, weight = 5 },
{ being = "narch", min_lev = 90, max_lev = 200, weight = 3 },
{ being = "bruiser", min_lev = 50, max_lev = 200, weight = 6 },
{ being = "lava_elemental", min_lev = 70, max_lev = 200, weight = 1 },
{ being = "shambler", min_lev = 80, max_lev = 200, weight = 3 },
{ being = "agony", min_lev = 80, max_lev = 200, weight = 1 },
{ being = "cyberdemon", min_lev = 80, max_lev = 200, weight = 1 },
{ being = "arenamaster", min_lev = 0, max_lev = 0, weight = 0 },
{ being = "angel", min_lev = 0, max_lev = 0, weight = 0 },
{ being = "jc", min_lev = 0, max_lev = 0, weight = 0 },
}
--item scaling for each wave local item_scale_factor = 0.5 --customize level/weight of items (defaults given) --for names of items, check Object IDs in the modding documentation local itemGenStats = {
--Commons
--weapons
{ item = "knife", level = 1, weight = 640 },
{ item = "pistol", level = 1, weight = 70 },
{ item = "shotgun", level = 2, weight = 180 },
{ item = "ashotgun", level = 2, weight = 160 },
{ item = "dshotgun", level = 4, weight = 100 },
{ item = "chaingun", level = 5, weight = 200 },
{ item = "bazooka", level = 7, weight = 200 },
{ item = "plasma", level = 12, weight = 70 },
--ammo/ammo packs
{ item = "ammo", level = 1, weight = 500 },
{ item = "pammo", level = 3, weight = 700 },
{ item = "shell", level = 2, weight = 400 },
{ item = "pshell", level = 4, weight = 200 },
{ item = "rocket", level = 5, weight = 60 },
{ item = "procket", level = 7, weight = 60 },
{ item = "cell", level = 8, weight = 36 },
{ item = "pcell", level = 10, weight = 18 },
--armor/boots
{ item = "garmor", level = 1, weight = 400 },
{ item = "barmor", level = 4, weight = 240 },
{ item = "rarmor", level = 7, weight = 150 },
{ item = "sboots", level = 4, weight = 240 },
{ item = "pboots", level = 7, weight = 150 },
{ item = "psboots", level = 11, weight = 80 },
--consumables
{ item = "smed", level = 1, weight = 600 },
{ item = "lmed", level = 5, weight = 400 },
{ item = "phase", level = 5, weight = 200 },
{ item = "hphase", level = 7, weight = 100 },
{ item = "epack", level = 5, weight = 100 },
{ item = "nuke", level = 10, weight = 40 },
{ item = "lava_element", level = 23, weight = 0 },
{ item = "mod_power", level = 7, weight = 120 },
{ item = "mod_tech", level = 6, weight = 120 },
{ item = "mod_bulk", level = 6, weight = 120 },
{ item = "mod_agility", level = 5, weight = 120 },
--powerups
{ item = "shglobe", level = 1, weight = 900 },
{ item = "lhglobe", level = 6, weight = 330 },
{ item = "scglobe", level = 4, weight = 150 },
{ item = "bpack", level = 1, weight = 200 },
{ item = "iglobe", level = 7, weight = 200 },
{ item = "msglobe", level = 16, weight = 60 },
{ item = "map", level = 1, weight = 200 },
{ item = "pmap", level = 1, weight = 80 },
{ item = "ashard", level = 5, weight = 700 },
{ item = "backpack", level = 7, weight = 0 },
--Exotics
--weapons
{ item = "chainsaw", level = 12, weight = 3 },
{ item = "ublaster", level = 8, weight = 2 },
{ item = "ucpistol", level = 4, weight = 6 },
{ item = "uashotgun", level = 6, weight = 6 },
{ item = "upshotgun", level = 12, weight = 4 },
{ item = "udshotgun", level = 10, weight = 5 },
{ item = "uminigun", level = 10, weight = 6 },
{ item = "umbazooka", level = 10, weight = 6 },
{ item = "unapalm", level = 10, weight = 6 },
{ item = "ulaser", level = 12, weight = 5 },
{ item = "unplasma", level = 15, weight = 4 },
{ item = "utristar", level = 12, weight = 4 },
{ item = "bfg9000", level = 20, weight = 2 },
{ item = "unbfg9000", level = 22, weight = 2 },
{ item = "utrans", level = 14, weight = 3 },
--armor/boots
{ item = "uoarmor", level = 7, weight = 4 },
{ item = "uparmor", level = 10, weight = 6 },
{ item = "upboots", level = 8, weight = 6 },
{ item = "ugarmor", level = 15, weight = 6 },
{ item = "ugboots", level = 10, weight = 6 },
{ item = "umedarmor", level = 5, weight = 6 },
{ item = "uduelarmor", level = 5, weight = 6 },
{ item = "ubulletarmor", level = 2, weight = 4 },
{ item = "uballisticarmor", level = 2, weight = 5 },
{ item = "ueshieldarmor", level = 5, weight = 3 },
{ item = "uplasmashield", level = 10, weight = 3 },
{ item = "uenergyshield", level = 8, weight = 3 },
{ item = "ubalshield", level = 6, weight = 3 },
{ item = "uacidboots", level = 8, weight = 5 },
--consumables
{ item = "uswpack", level = 5, weight = 10 },
{ item = "ubskull", level = 5, weight = 8 },
{ item = "ufskull", level = 7, weight = 8 },
{ item = "uhskull", level = 9, weight = 8 },
{ item = "umod_firestorm", level = 10, weight = 4 },
{ item = "umod_sniper", level = 10, weight = 4 },
{ item = "umod_nano", level = 10, weight = 4 },
{ item = "umod_onyx", level = 10, weight = 4 },
--Uniques
--weapons
{ item = "ubutcher", level = 1, weight = 2 },
{ item = "spear", level = 16, weight = 0 },
{ item = "uscythe", level = 16, weight = 0 },
{ item = "udragon", level = 16, weight = 1 },
{ item = "utrigun", level = 8, weight = 2 },
{ item = "ujackal", level = 10, weight = 2 },
{ item = "uberetta", level = 6, weight = 3 },
{ item = "usjack", level = 12, weight = 2 },
{ item = "urbazooka", level = 12, weight = 2 },
{ item = "uacid", level = 12, weight = 3 },
{ item = "urailgun", level = 15, weight = 2 },
{ item = "ubfg10k", level = 20, weight = 1 },
--armor/boots
{ item = "umarmor", level = 15, weight = 3 },
{ item = "ucarmor", level = 10, weight = 2 },
{ item = "unarmor", level = 10, weight = 3 },
{ item = "umedparmor", level = 10, weight = 2 },
{ item = "ulavaarmor", level = 12, weight = 2 },
{ item = "uenviroboots", level = 10, weight = 2 },
{ item = "ushieldarmor", level = 10, weight = 2 },
{ item = "uberarmor", level = 10, weight = 1 },
{ item = "aarmor", level = 22, weight = 0 },
--consumables
{ item = "uhwpack", level = 10, weight = 4 },
{ item = "umodstaff", level = 15, weight = 4 },
{ item = "uarenastaff", level = 4, weight = 0 },
}
--changes the generation stats of enemies based on mobGenStats for _,v in ipairs(mobGenStats) do
beings[v.being].min_lev = v.min_lev beings[v.being].max_lev = v.max_lev beings[v.being].weight = v.weight
end
--changes the generation stats of items based on itemGenStats for _,v in ipairs(itemGenStats) do
items[v.item].level = v.level items[v.item].weight = v.weight
end
--add your own announcer lines here local anncrMsg = {
--displays whenever player completes wave
success = {
{
"The voice booms, \"Congratulations mortal!",
"The voice booms, \"Impressive mortal!",
"The voice booms, \"Most impressive.",
"The voice booms, \"You are a formidable warrior!",
},
{
"Each of your triumphs is a work of art!",
"Your ability to survive is incredible!",
"You've given us a great show!",
"You would make a terrific hell warrior!",
},
{
"But can you keep going?\"",
"How much longer can you go?\"",
"Will you fight with us a little more?\"",
"I can let you go now if you like, or...\"",
}
},
--displays whenever player decides to continue to another wave
choice = {
{
"The voice booms, \"I like it! Let the show go on!\"",
"The voice booms, \"Excellent! May the fight begin!!!\"",
},
{
"You hear screams everywhere! \"More Blood! More BLOOD!\"",
"You hear screams everywhere! \"Kill, Kill, KILL!\"",
}
}
}
--add your own crowd lines here --displays whenever enemy is killed local crowdMsg = {
"The crowd goes wild! \"BLOOD! BLOOD!\"", "The crowd cheers! \"Blood! Blood!\"", "The crowd cheers! \"Kill! Kill!\"", "The crowd hisses. \"We came for a REAL fight!\"", "The crowd boos. \"No skill, no kill!\"",
}
local function build_announcerMsg(MSG)
for _,msgNum in ipairs(MSG) do
ui.msg(table.random_pick(msgNum))
end
end
--from Skulltag Arena, credit goes to yaflhdztioxo --initializes table of cells that contains only corpses local corpseCells = {}
local function get_corpses()
for i = 1, #cells do
if cells[i] and cells[i].flags then
if cells[i].flag_set[CF_CORPSE] == true then
table.insert(corpseCells, i) --i == sID's numeric value
end
end
end
end
--removes corpses and blood-like cells local function clear_corpses()
--fade away all blood
Generator.transmute("blood", "floor")
Generator.transmute("bloodpool", "blood")
--changes corpses to blood
for i = 1, #corpseCells do
Generator.transmute(corpseCells[i], "bloodpool")
end
end
--changes player equipment --add "nil" for any slot that should be empty --always refreshes all slots: do not use to change only one equipment slot local function build_gear(weap,prep,body,foot)
player.eq:clear() if weap then player.eq.weapon = item.new(weap) end --main weapon if prep then player.eq.prepared = item.new(prep) end --prepared weapon if body then player.eq.armor = item.new(body) end --body armor if foot then player.eq.boots = item.new(foot) end --boots
end
--changes player inventory --always refreshes all slots: do not use to change only one equipment slot --[[ input is an array of tables with two fields: -name is the identifier of the item that goes in the inventory -amt is how many items should be added (or how many units of ammo) example table (based on default inventory):
local starter_pack = {
{name = "ammo", amt = 24},
{name = "smed", amt = 2},
} --]] local function build_pack(itemPack)
player.inv:clear()
for _,part in ipairs(itemPack) do
if items[part.name].type == ITEMTYPE_AMMO then
--ammo is handled separately, loops for however many stacks are needed
for n=1,math.ceil(part.amt/items[part.name].ammomax) do
local pack = item.new(part.name)
if part.amt < pack.ammomax then
--remainder (or single) stack
pack.ammo = part.amt
else
--filled (and/or multiple) stacks
pack.ammo = pack.ammomax
part.amt = part.amt - pack.ammomax
end
player.inv:add(pack)
end
else
--loops for however many items are needed
for n=1,part.amt do
player.inv:add(part.name)
end
end
end
end
function inf_arena.OnEnter()
--inventory table used for build_pack()
local itemPack = {
{name = "smed", amt = 2},
{name = "shell", amt = 50},
}
--set up starting eq/inv
build_gear("shotgun","pistol",nil,nil)
build_pack(itemPack)
--Print announcer messages
ui.msg("A devilish voice announces: \"Welcome to Hell's Arena, mortal! " ..
"\"You are either very brave or very foolish. Either way I like it! " ..
"\"And so do the crowds!\" Suddenly you hear screams everywhere! " ..
"\"Blood! Blood! BLOOD!\" \"Kill all enemies and I shall reward thee!\"")
--spawn first wave Level.flood_monsters(Generator.being_weight()*mob_scale_factor) Level.result(1)
end
function inf_arena.OnKill(being)
--random message from crowdMsg array ui.msg(table.random_pick(crowdMsg))
end
function inf_arena.OnKillAll()
--print more announcer stuff
if Level.result() == 1 then
ui.msg("The voice booms, \"Not bad mortal! For a weakling that you are, " ..
"you show some determination.\" You hear screams everywhere! " ..
"\"More Blood! More BLOOD!\" The voice continues, \"I can now " ..
"let you go free, or you may try to complete the challenge!\"")
elseif Level.result() == 2 then
ui.msg("The voice booms, \"Impressive mortal! Your determination to " ..
"survive makes me excited!\" You hear screams everywhere! " ..
"\"More Blood! More BLOOD!\" \"I can let you go now, and give you " ..
"a small reward, or you can choose to fight an additional challenge!\"")
else
--random message from anncrMsg.success array
build_announcerMsg(anncrMsg.success)
end
local choice = ui.msg_confirm("Round " .. Level.result() + 1 .. " awaits. " ..
"Do you want to continue the fight?")
if choice == true then --continuing
--random message from anncrMsg.choice array
build_announcerMsg(anncrMsg.choice)
--set up the danger level for the next wave
Level.result(Level.result() + 1);
Level.danger_level = Level.result();
--spawn items for next wave
Level.flood_items(Generator.item_amount()*item_scale_factor)
--spawn enemies for next wave
Level.flood_monsters(Generator.being_weight()*mob_scale_factor)
else --quitting
if Level.result() == 1 then
ui.msg("The voice booms, \"Coward!\" You hear screams everywhere! " ..
"\"Coward! Coward! COWARD!\"")
elseif Level.result() == 2 then
ui.msg("The voice booms, \"Too bad, you won't make it far then...!\" " ..
"You hear screams everywhere! \"Boooo...\"")
elseif Level.result() < 10 then
ui.msg("The voice booms, \"An impressive run, Mortal! We appreciate " ..
"it!\" The crowd starts to chant! \"Encore! Encore!\"")
else
ui.msg("\"Ladies and gentlemen, your champion, "
.. Player.get_name() .. ". He survived " .. Level.result() ..
" rounds in our arena! That has to be some sort of record. " ..
"Give him a hand folks!\" The crowd starts to chant your name " ..
"and they begin throwing items into the ring!")
Level.flood_items(Generator.item_weight())
end
end
end
function inf_arena.OnExit()
if Level.result() < 10 then
ui.msg("The voice laughs, \"Flee mortal, flee! There's no hiding in hell!\"")
else
ui.msg("The voice laughs, \"Remember to come back once you return to Hell " ..
"for the extended stay\"")
end
--used in .OnMortem()
inf_arena.result = "had enough of the gauntlet at wave "..Level.result()
end
function inf_arena.OnMortem()
local kill = player.killedby --calls kill descriptions from beings
if inf_arena.result then kill = inf_arena.result end
player:mortem_print( " "..player.name..", level "..player.explevel.." "
.." "..klasses[player.klass].name..", "..kill )
--e.g., "Cool Guy, level 1 Marine, had enough of the gauntlet at wave 8"
player:mortem_print(" in the Infinite Arena...")
end
--Creation of Infinite Arena function inf_arena.run()
Level.name = "Infinite Arena"
Level.name_number = 0
Level.fill("rwall")
local translation = {
["."] = "floor",
["#"] = {"rwall", LFPERMANENT = true},
["X"] = "rwall",
[","] = "blood",
[">"] = "stairs",
}
local map = [[
- .............................########################
- .....................................................############
- ..................................................................#####
- ........................................................................##
- ..........................................................................#
....,....................................................................... .................................,...,...................................... .,.....................................,.................................... ..,>.,..........................,........................................... .,..,.................................,.,................................... ................................,..,...,.................................... ............................................................................ ............................................................................
- ..........................................................................#
- ........................................................................##
- ..................................................................#####
- .....................................................############
- .............................########################
- .....................................................############
- ..................................................................#####
- ........................................................................##
]]
--change up the column types
local column = {
[[
,..,., ,XXXX. .X##X, .XXXX. ,..,.,
]], [[
,..,., ,X##X. .####, .X##X. ,..,.,
]], [[
,..,., ,####. .####, .####. ,..,.,
]]
}
Level.place_tile(translation,map,2,2)
for i=1,11 + math.random(4) do
Level.scatter_put( area.new(5,3,68,15), translation, table.random_pick(column), "floor", 1)
end
Level.scatter(area.FULL_SHRINKED, "floor", "blood", 100)
Level.player(38, 10)
end