Files
Bubberstation/code/modules/holodeck/holo_effect.dm
Vincent faf5ddaceb Holodeck refactor and Enchancements
Moves holodeck code to modules/holodeck.  Repaths holodeck structures a little.  Cleans holodeck code and prepares for additional features (multiple holodecks, etc).  Should fix #4828.

Necessary map bugfixen for Asteroid, Disc, Dream, Meta, and TG.
Adds Lounge, Emergency Medical, pet center, and holdout room to the rec holodeck.

All items spawned by the holodeck will do only stamina damage, except when emagged.  This allows emergency medical to be staffed with scalpels and bonesaws and such.  Emergency medical has some functioning equipment but the only drugs available are in the sleeper.
2015-11-15 20:23:23 -05:00

87 lines
2.7 KiB
Plaintext

/*
The holodeck activates these shortly after the program loads,
and deactivates them immediately before changing or disabling the holodeck.
These remove snowflake code for special holodeck functions.
*/
/obj/effect/holodeck_effect
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
invisibility = 101
proc/activate(var/obj/machinery/computer/holodeck/HC)
return
proc/deactivate(var/obj/machinery/computer/holodeck/HC)
qdel(src)
return
// Called by the holodeck computer as long as the program is running
proc/tick(var/obj/machinery/computer/holodeck/HC)
return
proc/safety(var/active)
return
// Generates a holodeck-tracked card deck
/obj/effect/holodeck_effect/cards
icon = 'icons/obj/toy.dmi'
icon_state = "deck_nanotrasen_full"
var/obj/item/toy/cards/deck/D
/obj/effect/holodeck_effect/cards/activate(var/obj/machinery/computer/holodeck/HC)
D = new(loc)
safety(!HC.emagged)
D.holo = HC
return D
/obj/effect/holodeck_effect/cards/safety(active)
if(!D) return
if(active)
D.card_hitsound = null
D.card_force = 0
D.card_throwforce = 0
D.card_throw_speed = 3
D.card_throw_range = 7
D.card_attack_verb = list("attacked")
else
D.card_hitsound = 'sound/weapons/bladeslice.ogg'
D.card_force = 5
D.card_throwforce = 10
D.card_throw_speed = 3
D.card_throw_range = 7
D.card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut")
/obj/effect/holodeck_effect/sparks/activate(var/obj/machinery/computer/holodeck/HC)
var/turf/T = get_turf(src)
if(T)
var/datum/effect_system/spark_spread/s = new
s.set_up(3, 1, T)
s.start()
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
/obj/effect/holodeck_effect/mobspawner
var/mobtype = /mob/living/simple_animal/hostile/carp/holocarp
var/mob/mob = null
/obj/effect/holodeck_effect/mobspawner/activate(var/obj/machinery/computer/holodeck/HC)
if(islist(mobtype)) mobtype = pick(mobtype)
mob = new mobtype(loc)
// these vars are not really standardized but all would theoretically create stuff on death
for(var/v in list("butcher_results","corpse","weapon1","weapon2") & mob.vars)
mob.vars[v] = null
return mob
/obj/effect/holodeck_effect/mobspawner/deactivate(var/obj/machinery/computer/holodeck/HC)
if(mob) HC.derez(mob)
qdel(src)
/obj/effect/holodeck_effect/mobspawner/pet
mobtype = list(
/mob/living/simple_animal/butterfly, /mob/living/simple_animal/chick/holo,
/mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/cat/kitten,
/mob/living/simple_animal/pet/dog/corgi, /mob/living/simple_animal/pet/dog/corgi/puppy,
/mob/living/simple_animal/pet/dog/pug, /mob/living/simple_animal/pet/fox)