Files
2020-02-16 19:40:21 -08:00

162 lines
5.1 KiB
Plaintext

/datum/puzzlewizard/spawnloc
name = "AB CREATE: Critter Spawn Location"
var/critter_amount = 0
var/critter_type
var/critter_icon
var/critter_icon_state
var/initial_state = 0
var/cvars = list()
initialize()
var/datum/adventure_submode/critter/adv = new() // instantiating for statics grghhgh.
var/cname = input("What kind of critter?", "Critter type", "Skeleton") in adv.critters
critter_amount = input("How many [cname]s to spawn?", "Critter count", 1) as num
critter_type = adv.critters[cname]
var/obj/critter/template = new critter_type()
critter_icon = template.icon
critter_icon_state = template.icon_state
qdel(template)
var/enstr = input("Is spawner initially enabled?", "Enabled", "yes") in list("yes", "no")
initial_state = (enstr == "yes") ? 1 : 0
qdel(adv)
boutput(usr, "<span style=\"color:blue\">Left click to create a critter spawn location. Right click to set critter initial data in all <i>subsequent</i> critter spawners. Ctrl+click to proceed.</span>")
boutput(usr, "<span style=\"color:blue\">NOTE: Set critter data BEFORE placing the spawn locations!</span>")
build_click(var/mob/user, var/datum/buildmode_holder/holder, var/list/pa, var/atom/object)
if (pa.Find("left"))
var/turf/T = get_turf(object)
if (pa.Find("ctrl"))
finished = 1
return
if (T)
var/obj/adventurepuzzle/triggerable/spawnloc/spawnloc = new /obj/adventurepuzzle/triggerable/spawnloc(T)
spawnloc.icon = critter_icon
spawnloc.icon_state = critter_icon_state
spawnloc.critter = critter_type
spawnloc.spawn_count = critter_amount
spawnloc.is_on = initial_state
for (var/vname in cvars)
spawnloc.critter_vars[vname] = cvars[vname]
else if (pa.Find("right"))
var/vname = input("Which variable?", "Which variable?", "health") in list("aggressive", "atkcarbon", "atksilicon", "health", "opensdoors", "wanderer")
var/vvalue = input("Set [vname] to ", "Setting variable", 0) as num
if (!vname in cvars)
cvars += vname
cvars[vname] = vvalue
/obj/adventurepuzzle/triggerable/spawnloc
name = "critter spawn location"
invisibility = 20
icon = 'icons/misc/critter.dmi'
icon_state = "critter_spawn"
density = 0
opacity = 0
anchored = 1
var/critter = /obj/critter/bear
var/spawn_delay = 20
var/tmp/next_spawn = 0
var/spawn_count = 1
var/is_on = 1
var/static/list/triggeracts = list("Decrease spawned critters" = "sub", "Destroy" = "del", "Disable" = "off", "Do nothing" = "nop", "Enable" = "on", "Increase spawned critters" = "add", "Spawn" = "spawn")
var/list/critter_vars = list()
var/aggressive = null // bool
var/atkcarbon = null // bool
var/atksilicon = null // bool
var/health = null // bool
var/opensdoors = null //bool
var/wanderer = null // bool
New()
..()
src.underlays += image('icons/obj/randompuzzles.dmi', "critter_spawn")
if (src.aggressive != null)
src.critter_vars += "aggressive"
src.critter_vars["aggressive"] = src.aggressive
if (src.atkcarbon != null)
src.critter_vars += "atkcarbon"
src.critter_vars["atkcarbon"] = src.atkcarbon
if (src.atksilicon != null)
src.critter_vars += "atksilicon"
src.critter_vars["atksilicon"] = src.atksilicon
if (src.health != null)
src.critter_vars += "health"
src.critter_vars["health"] = src.health
if (src.opensdoors != null)
src.critter_vars += "opensdoors"
src.critter_vars["opensdoors"] = src.opensdoors
if (src.wanderer != null)
src.critter_vars += "wanderer"
src.critter_vars["wanderer"] = src.wanderer
trigger_actions()
return triggeracts
trigger(var/act)
switch (act)
if ("del")
is_on = 0
qdel(src)
if ("sub")
if (spawn_count > 0)
spawn_count--
return
if ("add")
if (spawn_count < 50)
spawn_count++
return
if ("off")
is_on = 0
return
if ("on")
is_on = 1
return
if ("spawn")
if (is_on && world.time > next_spawn)
next_spawn = world.time + spawn_delay
var/turf/T = get_turf(src)
for (var/i = 0, i < spawn_count, i++)
var/obj/critter/C = new critter(T)
for (var/varname in src.critter_vars)
C.vars[varname] = src.critter_vars[varname]
return
serialize(var/savefile/F, var/path, var/datum/sandbox/sandbox)
..()
F["[path].is_on"] << is_on
F["[path].critter"] << critter
F["[path].spawn_delay"] << spawn_delay
F["[path].spawn_count"] << spawn_count
F["[path].critter_vars.COUNT"] << critter_vars.len
for (var/i = 1, i <= critter_vars.len, i++)
var/varname = critter_vars[i]
var/varvalue = critter_vars[varname]
F["[path].critter_vars.[i].VARNAME"] << varname
F["[path].critter_vars.[i].VARVAL"] << varvalue
deserialize(var/savefile/F, var/path, var/datum/sandbox/sandbox)
. = ..()
F["[path].is_on"] >> is_on
F["[path].critter"] >> critter
F["[path].spawn_delay"] >> spawn_delay
F["[path].spawn_count"] >> spawn_count
var/cvcount
F["[path].critter_vars.COUNT"] >> cvcount
for (var/i = 1, i <= cvcount, i++)
var/varname
var/varvalue
F["[path].critter_vars.[i].VARNAME"] >> varname
F["[path].critter_vars.[i].VARVAL"] >> varvalue
critter_vars += varname
critter_vars[varname] = varvalue