mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 23:52:12 +00:00
* Replace SSingulo with SScalamity; processing cleanup
- SScalamity now handles blobs as well as singularity-types.
- Processing subtypes have been simplified to not require a stop_processing definition.
* this is probably important
* Remove cascade disabling SSgarbage
* Fixed a bug where dust() did not qdel the target mob
* Misc fixes
* Fix decals surviving break-to-plating
* Subsystem flag tweaks
* Apparently subsystems are new'd before config is.
* Fix paper icons
* Speculative fix for insane lag
* Better machinery stat
* Make organs not use SSoverlay
* Misc bugfixes & tweaks
* Nightmode fixes
* Changelog for SMC
* Port /tg/'s improved MC crash handling
* Add some more SS Recover() procs
* supply_controller -> SScargo
* More New() -> Initialize()
* pAI and robot construction overlays
* Fix cargo unit tests
* Merge the DMM Suite's atom/New() into atoms_init
* Lighting pre-baking
* Lighting initialization logging
* Fix some bad SS init orders
* Fix SSlighting logging; rename Processes to MC
* Speculative fix for insane GC lag
* Prebaked openturf/icon_smooth & fix lighting prebake
* SS init status; SSatoms LATEQDEL
* Fix bug with MC init stat panel
* Fix parallax
* Misc
* Ignore SS_NO_DISPLAY during init
* apparently this is important
* REEEEEE
* Image GC fixes; broadcaster radio-new sanity
* RCON Cleanup
* Move pAI recruiter into subsystem
* Move global solars list into sun subsystem
* Make chickens not use a global
* Demote SSdisposals to SS_BACKGROUND; garbage-debug cleanup
* Speed up space init a little
* Fix bad timer flags on floor drying
* Subsystem panic-restart verb for mins
* Explosion speedup
* Minor subsystem & MC logging tweaks
* SSopenturf improvements
* Make pipenet actually initialize (whoops)
* Minor tweaks
* Implement lighting rounding
* comments are hard okay
* Minor lattice tweaks
* Fix some timer issues & better closet init
* Timer sanity
* Request console tweaks + Storage init sanity
* Minor SSmachiner RCON improvements
* Further reduce world-start timer count
* Standardize subsystem logging
* Garbage hard delete profiling from /tg/
* Timer hang detection & recovery
* Log machines that sleep in process() and fuck up SSmachinery
* Fix an issue with external airlocks sleeping in process()
* Failsafe logging
* Minor tweaks
* Revert "Request console tweaks + Storage init sanity"
This reverts commit 98d3579e35.
* Re-implement RC changes
* Fix SQL FT saving
* Fix SSmachinery sleep in disposals
* Minor SS tweaks
* Paper fixes
* Blood drying fixes
* Merge gameticker and SSticker
* Minor global list init cleanup
* Lagcheck biogenerator & bags
* Tweak SScargo init order; RIG Initialize()
* Caching tweaks
* Remove rogue comma
* Initialize fixes
* Lighting destroy cleanup
* Fix emagging airlocks
* Initial SSicon implementation
* Tweaks & Fixes
* Fire + Air alarm queued icon updates
* Overlays + Queued icon cleanup
* Runtime & background fixes
* Kill some meaningless set statements
* Kill some image qdels
* Bump up lighting rounding val
* Fix adv. scanner destroy runtimes
* Remove unneeded icon update limiting
* Move icon smoothing into helpers
* Show a warning if DM 510 compiles without memory leak hack enabled
* Re-organize subsystems & MC defines a little
* Airlock SFX
* Log of Changes
* Make SSicon_update disable itself when not doing anything
* Fix respawn verb runtime when used early in server-init
* Add more information to MC's stat_entry()
* Replace direct refernces to gcDestroyed with QDEL* macros
* plant_controller -> SSplants
* More plant tweaks
* Add more humor to changelog
* Move parallax globals into SSparallax
* Lighting responsiveness tweaks
* Fix parallax init order & better MC init panel stat
* Make mobs GC
* More overlays + Remove intercom spawn()
* SSfast_process; make pinpointers not use spawn-recursion to process
Also made the SM Cascade beach process with SSprocessing instead of a spawn loop.
* Update changelog
* Mob GC tweaks
* Del() cleanup
* Fix insomniac ZAS connection edges
* Minor pAI cleanup
* Convert more things to SSoverlay; fix duplicated overlay in field gens
* SM Bluespace turf tweaks
* Update SSgarbage debug globals list
* Human-type qdel tweaks
* Subsystem suspension; stat_entry improvements
* SQL Statistics cleanup
* Fix runtimes with ambrosia
* More disable() -> suspend(); fix nightmode again
* Human qdel fix; minor tweaks
* Update turbolift to work with StonedMC
* Make lifts use timers instead of a subsystem
* Make SSassets start earlier
* Convert the radio controller into a subsystem
* Fix some missing CHECK_TICKs in asteroid generation
* MC stat tweaks; make shouldnt_see a typecache
* Kill some redundant debug-controller entries
* radio_controller -> SSradio
* Better SSgarbage hard-del logging from /tg/ upstream
* Logging tweaks + GELF
* Misc client caching improvements
* Slime SSoverlay
* Oven icon fixes
* Implant fixes
- Death implants will no longer spam Common on death of user.
- Death implants should handle a deleted user better.
* Holder tweaks + Welding tool Initialize()
* Fix some bad subsystem logging
* Fix suit cooling units spawning without cells
* Starlight tweaks
* Gibber infinite gib fix
* More SSoverlay stuff
* Make crates use CUT_OVERLAY_IN
* Make SSarrivals suspend instead of disable
* Make openturf use split/phased tick checks
* Speculative fix for unwet timer runtimes
* Blood overlay tweaks/fixes
* Update crusher to play nice with SMC + SSoverlay
* Openturf improvements and fixes
* Minor turbolift tweaks
* Lighting performance improvements + ChangeTurf tweaks
* this is probably important
* Fix wall weld noises on changeturf
* More ChangeTurf tweaks
* Explosion tweaks
* Pre-game lobby tweaks
* Openturf tweaks
* Prevent admins from starting the game before init finishes
* Fix Travis
* Kill an unused var
* Fix ChangeTurf runtimes on openturfs
* Fixes
* Browser datum fixes, asset caching
* Update changelog
* Changelog
* Lobby tweaks
* Ticker tweaks; kill ticker var
* Further lobby tweaks
* Cascade tweaks
* air_master -> SSair
* Reduce overhead from radio autosay
* alarm_manager -> SSalarm
* bomb_processor -> SSexplosives
* corp_regs -> SSlaw
* ZAS overlay fixes
* Small wall icon optimization
* Fix effects master
* Assembly tweaks
* Megavend fixes
* Shuttle fixes
* Camera alert performance improvements
* Fix some world.log spam from lighting overlays
* Fix some Initialize() procs
* Openspace responsiveness tweaks
* Make HE pipes animate through openturfs
* Kill a spawn
469 lines
13 KiB
Plaintext
469 lines
13 KiB
Plaintext
// Holographic Items!
|
|
|
|
// Holographic tables are in code/modules/tables/presets.dm
|
|
// Holographic racks are in code/modules/tables/rack.dm
|
|
|
|
/turf/simulated/floor/holofloor
|
|
thermal_conductivity = 0
|
|
|
|
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
return
|
|
// HOLOFLOOR DOES NOT GIVE A FUCK
|
|
|
|
/turf/simulated/floor/holofloor/set_flooring()
|
|
return
|
|
|
|
/turf/simulated/floor/holofloor/carpet
|
|
name = "carpet"
|
|
icon = 'icons/turf/flooring/carpet.dmi'
|
|
icon_state = "carpet"
|
|
initial_flooring = /decl/flooring/carpet
|
|
footstep_sound = "dirtstep"//It sounds better than squeaky hard-floor audio
|
|
|
|
/turf/simulated/floor/holofloor/tiled
|
|
name = "floor"
|
|
icon = 'icons/turf/flooring/tiles.dmi'
|
|
icon_state = "steel"
|
|
initial_flooring = /decl/flooring/tiling
|
|
|
|
/turf/simulated/floor/holofloor/tiled/dark
|
|
name = "dark floor"
|
|
icon_state = "dark"
|
|
initial_flooring = /decl/flooring/tiling/dark
|
|
|
|
/turf/simulated/floor/holofloor/lino
|
|
name = "lino"
|
|
icon = 'icons/turf/flooring/linoleum.dmi'
|
|
icon_state = "lino"
|
|
initial_flooring = /decl/flooring/linoleum
|
|
|
|
/turf/simulated/floor/holofloor/wood
|
|
name = "wooden floor"
|
|
icon = 'icons/turf/flooring/wood.dmi'
|
|
icon_state = "wood"
|
|
initial_flooring = /decl/flooring/wood
|
|
|
|
/turf/simulated/floor/holofloor/grass
|
|
name = "lush grass"
|
|
icon = 'icons/turf/flooring/grass.dmi'
|
|
icon_state = "grass0"
|
|
initial_flooring = /decl/flooring/grass
|
|
footstep_sound = "grassstep"
|
|
|
|
/turf/simulated/floor/holofloor/snow
|
|
name = "snow"
|
|
base_name = "snow"
|
|
icon = 'icons/turf/floors.dmi'
|
|
base_icon = 'icons/turf/floors.dmi'
|
|
icon_state = "snow"
|
|
base_icon_state = "snow"
|
|
footstep_sound = "gravelstep"
|
|
|
|
/turf/simulated/floor/holofloor/reinforced
|
|
icon = 'icons/turf/flooring/tiles.dmi'
|
|
initial_flooring = /decl/flooring/reinforced
|
|
name = "reinforced holofloor"
|
|
icon_state = "reinforced"
|
|
footstep_sound = "concretestep"
|
|
|
|
/turf/simulated/floor/holofloor/space
|
|
icon = 'icons/turf/space.dmi'
|
|
name = "\proper space"
|
|
icon_state = "0"
|
|
footstep_sound = null
|
|
plane = PLANE_SPACE_BACKGROUND
|
|
dynamic_lighting = 0
|
|
|
|
/turf/simulated/floor/holofloor/space/Initialize()
|
|
. = ..()
|
|
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
|
|
var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
|
|
I.plane = PLANE_SPACE_DUST
|
|
I.alpha = 80
|
|
I.blend_mode = BLEND_ADD
|
|
add_overlay(I)
|
|
|
|
/turf/simulated/floor/holofloor/beach
|
|
desc = "Uncomfortably gritty for a hologram."
|
|
base_desc = "Uncomfortably gritty for a hologram."
|
|
icon = 'icons/misc/beach.dmi'
|
|
base_icon = 'icons/misc/beach.dmi'
|
|
initial_flooring = null
|
|
footstep_sound = "sandstep"
|
|
|
|
/turf/simulated/floor/holofloor/beach/sand
|
|
name = "sand"
|
|
icon_state = "desert"
|
|
base_icon_state = "desert"
|
|
|
|
/turf/simulated/floor/holofloor/beach/coastline
|
|
name = "coastline"
|
|
icon = 'icons/misc/beach2.dmi'
|
|
icon_state = "sandwater"
|
|
base_icon_state = "sandwater"
|
|
footstep_sound = "waterstep"
|
|
|
|
/turf/simulated/floor/holofloor/beach/water
|
|
name = "water"
|
|
icon_state = "seashallow"
|
|
base_icon_state = "seashallow"
|
|
footstep_sound = "waterstep"
|
|
|
|
/turf/simulated/floor/holofloor/desert
|
|
name = "desert sand"
|
|
base_name = "desert sand"
|
|
desc = "Uncomfortably gritty for a hologram."
|
|
base_desc = "Uncomfortably gritty for a hologram."
|
|
icon_state = "asteroid"
|
|
base_icon_state = "asteroid"
|
|
icon = 'icons/turf/flooring/asteroid.dmi'
|
|
base_icon = 'icons/turf/flooring/asteroid.dmi'
|
|
initial_flooring = null
|
|
footstep_sound = "gravelstep"
|
|
|
|
/turf/simulated/floor/holofloor/desert/Initialize()
|
|
. = ..()
|
|
if(prob(10))
|
|
add_overlay("asteroid[rand(0,9)]")
|
|
|
|
/obj/structure/holostool
|
|
name = "stool"
|
|
desc = "Apply butt."
|
|
icon = 'icons/obj/furniture.dmi'
|
|
icon_state = "stool_padded_preview"
|
|
anchored = 1.0
|
|
|
|
/obj/item/clothing/gloves/boxing/hologlove
|
|
name = "boxing gloves"
|
|
desc = "Because you really needed another excuse to punch your crewmates."
|
|
icon_state = "boxing"
|
|
item_state = "boxing"
|
|
|
|
/obj/structure/window/reinforced/holowindow/Destroy()
|
|
return ..()
|
|
|
|
/obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(!istype(W)) return//I really wish I did not need this
|
|
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
|
|
var/obj/item/weapon/grab/G = W
|
|
if(istype(G.affecting,/mob/living))
|
|
var/mob/living/M = G.affecting
|
|
var/state = G.state
|
|
qdel(W) //gotta delete it here because if window breaks, it won't get deleted
|
|
switch (state)
|
|
if(1)
|
|
M.visible_message("<span class='warning'>[user] slams [M] against \the [src]!</span>")
|
|
M.apply_damage(7)
|
|
hit(10)
|
|
if(2)
|
|
M.visible_message("<span class='danger'>[user] bashes [M] against \the [src]!</span>")
|
|
if (prob(50))
|
|
M.Weaken(1)
|
|
M.apply_damage(10)
|
|
hit(25)
|
|
if(3)
|
|
M.visible_message("<span class='danger'><big>[user] crushes [M] against \the [src]!</big></span>")
|
|
M.Weaken(5)
|
|
M.apply_damage(20)
|
|
hit(50)
|
|
return
|
|
|
|
if(W.flags & NOBLUDGEON) return
|
|
|
|
if(istype(W, /obj/item/weapon/screwdriver))
|
|
user << ("<span class='notice'>It's a holowindow, you can't unfasten it!</span>")
|
|
else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1)
|
|
user << ("<span class='notice'>It's a holowindow, you can't pry it!</span>")
|
|
else if(istype(W, /obj/item/weapon/wrench) && !anchored && (!state || !reinf))
|
|
user << ("<span class='notice'>It's a holowindow, you can't dismantle it!</span>")
|
|
else
|
|
if(W.damtype == BRUTE || W.damtype == BURN)
|
|
hit(W.force)
|
|
if(health <= 7)
|
|
anchored = 0
|
|
update_nearby_icons()
|
|
step(src, get_dir(user, src))
|
|
else
|
|
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
|
..()
|
|
return
|
|
|
|
/obj/structure/window/reinforced/holowindow/shatter(var/display_message = 1)
|
|
playsound(src, "shatter", 70, 1)
|
|
if(display_message)
|
|
visible_message("[src] fades away as it shatters!")
|
|
qdel(src)
|
|
return
|
|
|
|
/obj/structure/window/reinforced/holowindow/disappearing/Destroy()
|
|
return ..()
|
|
|
|
/obj/machinery/door/window/holowindoor/Destroy()
|
|
return ..()
|
|
|
|
/obj/machinery/door/window/holowindoor/attackby(obj/item/weapon/I as obj, mob/user as mob)
|
|
|
|
if (src.operating == 1)
|
|
return
|
|
|
|
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card))
|
|
var/aforce = I.force
|
|
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
|
|
visible_message("\red <B>[src] was hit by [I].</B>")
|
|
if(I.damtype == BRUTE || I.damtype == BURN)
|
|
take_damage(aforce)
|
|
return
|
|
|
|
src.add_fingerprint(user)
|
|
if (!src.requiresID())
|
|
user = null
|
|
|
|
if (src.allowed(user))
|
|
if (src.density)
|
|
open()
|
|
else
|
|
close()
|
|
|
|
else if (src.density)
|
|
flick(text("[]deny", src.base_state), src)
|
|
|
|
return
|
|
|
|
/obj/machinery/door/window/holowindoor/shatter(var/display_message = 1)
|
|
src.density = 0
|
|
playsound(src, "shatter", 70, 1)
|
|
if(display_message)
|
|
visible_message("[src] fades away as it shatters!")
|
|
qdel(src)
|
|
|
|
/obj/structure/bed/chair/holochair/Destroy()
|
|
return ..()
|
|
|
|
/obj/structure/bed/chair/holochair/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
if(istype(W, /obj/item/weapon/wrench))
|
|
user << ("<span class='notice'>It's a holochair, you can't dismantle it!</span>")
|
|
return
|
|
|
|
/obj/item/weapon/holo
|
|
damtype = HALLOSS
|
|
no_attack_log = 1
|
|
|
|
/obj/item/weapon/holo/esword
|
|
desc = "May the force be within you. Sorta."
|
|
icon_state = "sword0"
|
|
force = 3.0
|
|
throw_speed = 1
|
|
throw_range = 5
|
|
throwforce = 0
|
|
w_class = 2.0
|
|
flags = NOBLOODY
|
|
var/active = 0
|
|
var/item_color
|
|
|
|
/obj/item/weapon/holo/esword/green
|
|
New()
|
|
item_color = "green"
|
|
|
|
/obj/item/weapon/holo/esword/red
|
|
New()
|
|
item_color = "red"
|
|
|
|
/obj/item/weapon/holo/esword/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
|
if(active && default_parry_check(user, attacker, damage_source) && prob(50))
|
|
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
|
|
|
|
spark(user.loc, 5)
|
|
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
|
return 1
|
|
return 0
|
|
|
|
/obj/item/weapon/holo/esword/New()
|
|
item_color = pick("red","blue","green","purple")
|
|
|
|
/obj/item/weapon/holo/esword/attack_self(mob/living/user as mob)
|
|
active = !active
|
|
if (active)
|
|
force = 30
|
|
icon_state = "sword[item_color]"
|
|
w_class = 4
|
|
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
|
|
user << "<span class='notice'>[src] is now active.</span>"
|
|
else
|
|
force = 3
|
|
icon_state = "sword0"
|
|
w_class = 2
|
|
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
|
|
user << "<span class='notice'>[src] can now be concealed.</span>"
|
|
|
|
if(istype(user,/mob/living/carbon/human))
|
|
var/mob/living/carbon/human/H = user
|
|
H.update_inv_l_hand()
|
|
H.update_inv_r_hand()
|
|
|
|
add_fingerprint(user)
|
|
return
|
|
|
|
//BASKETBALL OBJECTS
|
|
|
|
/obj/item/weapon/beach_ball/holoball
|
|
icon = 'icons/obj/basketball.dmi'
|
|
icon_state = "basketball"
|
|
name = "basketball"
|
|
item_state = "basketball"
|
|
desc = "Here's your chance, do your dance at the Space Jam."
|
|
w_class = 4 //Stops people from hiding it in their bags/pockets
|
|
|
|
/obj/structure/holohoop
|
|
name = "basketball hoop"
|
|
desc = "Boom, Shakalaka!"
|
|
icon = 'icons/obj/basketball.dmi'
|
|
icon_state = "hoop"
|
|
anchored = 1
|
|
density = 1
|
|
throwpass = 1
|
|
|
|
/obj/structure/holohoop/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
|
|
var/obj/item/weapon/grab/G = W
|
|
if(G.state<2)
|
|
user << "<span class='warning'>You need a better grip to do that!</span>"
|
|
return
|
|
G.affecting.loc = src.loc
|
|
G.affecting.Weaken(5)
|
|
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>", 3)
|
|
qdel(W)
|
|
return
|
|
else if (istype(W, /obj/item) && get_dist(src,user)<2)
|
|
user.drop_item(src.loc)
|
|
visible_message("<span class='notice'>[user] dunks [W] into the [src]!</span>", 3)
|
|
return
|
|
|
|
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
|
if (istype(mover,/obj/item) && mover.throwing)
|
|
var/obj/item/I = mover
|
|
if(istype(I, /obj/item/projectile))
|
|
return
|
|
if(prob(50))
|
|
I.loc = src.loc
|
|
visible_message("<span class='notice'>Swish! \the [I] lands in \the [src].</span>", 3)
|
|
else
|
|
visible_message("<span class='warning'>\The [I] bounces off of \the [src]'s rim!</span>", 3)
|
|
return 0
|
|
else
|
|
return ..(mover, target, height, air_group)
|
|
|
|
|
|
/obj/machinery/readybutton
|
|
name = "Ready Declaration Device"
|
|
desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!"
|
|
icon = 'icons/obj/monitors.dmi'
|
|
icon_state = "auth_off"
|
|
var/ready = 0
|
|
var/area/currentarea = null
|
|
var/eventstarted = 0
|
|
|
|
anchored = 1.0
|
|
use_power = 1
|
|
idle_power_usage = 2
|
|
active_power_usage = 6
|
|
power_channel = ENVIRON
|
|
|
|
/obj/machinery/readybutton/attack_ai(mob/user as mob)
|
|
user << "The station AI is not to interact with these devices!"
|
|
return
|
|
|
|
/obj/machinery/readybutton/New()
|
|
..()
|
|
|
|
|
|
/obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
user << "The device is a solid button, there's nothing you can do with it!"
|
|
|
|
/obj/machinery/readybutton/attack_hand(mob/user as mob)
|
|
|
|
if(user.stat || stat & (NOPOWER|BROKEN))
|
|
user << "This device is not powered."
|
|
return
|
|
|
|
if(!user.IsAdvancedToolUser())
|
|
return 0
|
|
|
|
currentarea = get_area(src.loc)
|
|
if(!currentarea)
|
|
qdel(src)
|
|
|
|
if(eventstarted)
|
|
usr << "The event has already begun!"
|
|
return
|
|
|
|
ready = !ready
|
|
|
|
update_icon()
|
|
|
|
var/numbuttons = 0
|
|
var/numready = 0
|
|
for(var/obj/machinery/readybutton/button in currentarea)
|
|
numbuttons++
|
|
if (button.ready)
|
|
numready++
|
|
|
|
if(numbuttons == numready)
|
|
begin_event()
|
|
|
|
/obj/machinery/readybutton/update_icon()
|
|
if(ready)
|
|
icon_state = "auth_on"
|
|
else
|
|
icon_state = "auth_off"
|
|
|
|
/obj/machinery/readybutton/proc/begin_event()
|
|
|
|
eventstarted = 1
|
|
|
|
for(var/obj/structure/window/reinforced/holowindow/disappearing/W in currentarea)
|
|
qdel(W)
|
|
|
|
for(var/mob/M in currentarea)
|
|
M << "FIGHT!"
|
|
|
|
//Holocarp
|
|
|
|
/mob/living/simple_animal/hostile/carp/holodeck
|
|
icon = 'icons/mob/AI.dmi'
|
|
icon_state = "holo4"
|
|
icon_living = "holo4"
|
|
icon_dead = "holo4"
|
|
alpha = 127
|
|
icon_gib = null
|
|
meat_amount = 0
|
|
meat_type = null
|
|
|
|
/mob/living/simple_animal/hostile/carp/holodeck/New()
|
|
..()
|
|
set_light(2) //hologram lighting
|
|
|
|
/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
|
|
if (safe)
|
|
faction = "neutral"
|
|
melee_damage_lower = 0
|
|
melee_damage_upper = 0
|
|
environment_smash = 0
|
|
destroy_surroundings = 0
|
|
else
|
|
faction = "carp"
|
|
melee_damage_lower = initial(melee_damage_lower)
|
|
melee_damage_upper = initial(melee_damage_upper)
|
|
environment_smash = initial(environment_smash)
|
|
destroy_surroundings = initial(destroy_surroundings)
|
|
|
|
/mob/living/simple_animal/hostile/carp/holodeck/gib()
|
|
derez() //holograms can't gib
|
|
|
|
/mob/living/simple_animal/hostile/carp/holodeck/death()
|
|
..()
|
|
derez()
|
|
|
|
/mob/living/simple_animal/hostile/carp/holodeck/proc/derez()
|
|
visible_message("<span class='notice'>\The [src] fades away!</span>")
|
|
qdel(src)
|