Merge branch 'master' into upstream-merge-11464

This commit is contained in:
Nadyr
2021-08-25 23:32:47 -04:00
committed by GitHub
204 changed files with 4524 additions and 1574 deletions
@@ -4,6 +4,7 @@
icon = 'icons/mob/alien.dmi'
layer = ABOVE_JUNK_LAYER
var/health = 50
unacidable = TRUE
/obj/structure/alien/proc/healthcheck()
if(health <=0)
+1
View File
@@ -33,6 +33,7 @@ two tiles on initialization, and which way a cliff is facing may change during m
opacity = FALSE
climbable = TRUE
climb_delay = 10 SECONDS
unacidable = TRUE
block_turf_edges = TRUE // Don't want turf edges popping up from the cliff edge.
plane = TURF_PLANE
@@ -34,19 +34,11 @@
var/list/starts_with // List of type = count (or just type for 1)
var/closet_appearance = /decl/closet_appearance // The /decl that defines what decals we end up with, that makes our look unique
var/decl/closet_appearance/closet_appearance = /decl/closet_appearance // The /decl that defines what decals we end up with, that makes our look unique
/// Currently animating the door transform
var/is_animating_door = FALSE
/// Length of time (ds) to animate the door transform
var/door_anim_time = 2.0
/// Amount to 'squish' the full width of the door by
var/door_anim_squish = 0.30
/// Virtual angle at which the door is opened to (136 by default, so not a full 180)
var/door_anim_angle = 136
/// Offset for the door hinge location from centerline
var/door_hinge = -6.5
/// Our visual object for the closet door
/// Our visual object for the closet door, if we're animating
var/obj/effect/overlay/closet_door/door_obj
/obj/structure/closet/Initialize()
@@ -73,15 +65,16 @@
storage_capacity = content_size + 5
if(ispath(closet_appearance))
var/decl/closet_appearance/app = GLOB.closet_appearances[closet_appearance]
if(app)
icon = app.icon
closet_appearance = GLOB.closet_appearances[closet_appearance]
if(istype(closet_appearance))
icon = closet_appearance.icon
color = null
update_icon()
/obj/structure/closet/Destroy()
. = ..()
qdel_null(door_obj)
closet_appearance = null
return ..()
/obj/structure/closet/examine(mob/user)
. = ..()
@@ -500,7 +493,7 @@
return 1
/obj/structure/closet/proc/animate_door(closing = FALSE)
if(!door_anim_time)
if(!closet_appearance?.door_anim_time)
update_icon()
return
if(!door_obj)
@@ -511,9 +504,9 @@
is_animating_door = TRUE
if(!closing)
update_icon()
var/num_steps = door_anim_time / world.tick_lag
var/num_steps = closet_appearance.door_anim_time / world.tick_lag
for(var/I in 0 to num_steps)
var/angle = door_anim_angle * (closing ? 1 - (I/num_steps) : (I/num_steps))
var/angle = closet_appearance.door_anim_angle * (closing ? 1 - (I/num_steps) : (I/num_steps))
var/matrix/M = get_door_transform(angle)
var/door_state = angle >= 90 ? "door_back" : "door_front"
var/door_layer = angle >= 90 ? FLOAT_LAYER : ABOVE_MOB_LAYER
@@ -526,7 +519,7 @@
animate(door_obj, transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag, flags = ANIMATION_END_NOW)
else
animate(transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag)
addtimer(CALLBACK(src,.proc/end_door_animation,closing),door_anim_time,TIMER_UNIQUE|TIMER_OVERRIDE)
addtimer(CALLBACK(src, .proc/end_door_animation,closing), closet_appearance.door_anim_time, TIMER_UNIQUE|TIMER_OVERRIDE)
/obj/structure/closet/proc/end_door_animation(closing = FALSE)
is_animating_door = FALSE
@@ -537,7 +530,9 @@
/obj/structure/closet/proc/get_door_transform(angle)
var/matrix/M = matrix()
M.Translate(-door_hinge, 0)
M.Multiply(matrix(cos(angle), 0, 0, -sin(angle) * door_anim_squish, 1, 0))
M.Translate(door_hinge, 0)
if(!closet_appearance)
return M
M.Translate(-closet_appearance.door_hinge, 0)
M.Multiply(matrix(cos(angle), 0, 0, -sin(angle) * closet_appearance.door_anim_squish, 1, 0))
M.Translate(closet_appearance.door_hinge, 0)
return M
@@ -14,6 +14,15 @@
var/decal_icon = 'icons/obj/closets/decals/closet.dmi'
var/can_lock = FALSE
/// Length of time (ds) to animate the door transform
var/door_anim_time = 2.0
/// Amount to 'squish' the full width of the door by
var/door_anim_squish = 0.30
/// Virtual angle at which the door is opened to (136 by default, so not a full 180)
var/door_anim_angle = 136
/// Offset for the door hinge location from centerline
var/door_hinge = -6.5
/decl/closet_appearance/New()
// Build our colour and decal lists.
if(LAZYLEN(extra_decals))
@@ -725,6 +734,7 @@
base_icon = 'icons/obj/closets/bases/crate.dmi'
decal_icon = 'icons/obj/closets/decals/crate.dmi'
color = COLOR_GRAY40
door_anim_time = 0
/decl/closet_appearance/crate/plastic
color = COLOR_GRAY80
@@ -1237,6 +1247,7 @@
decal_icon = 'icons/obj/closets/decals/large_crate.dmi'
decals = null
extra_decals = null
door_anim_time = 0
/decl/closet_appearance/large_crate/critter
color = COLOR_BEIGE
@@ -1349,6 +1360,7 @@
color = WOOD_COLOR_RICH
decals = null
extra_decals = null
door_anim_time = 0
/decl/closet_appearance/cabinet/secure
can_lock = TRUE
@@ -1361,6 +1373,7 @@
"vent"
)
extra_decals = null
door_anim_time = 0
/decl/closet_appearance/wall/emergency
color = COLOR_LIGHT_CYAN
@@ -1402,6 +1415,7 @@
"vent"
)
extra_decals = null
door_anim_time = 0
/decl/closet_appearance/wall_double/kitchen
decals = null
@@ -1431,6 +1445,7 @@
decal_icon = 'icons/obj/closets/decals/cart.dmi'
decals = null
extra_decals = null
door_anim_time = 0
/decl/closet_appearance/cart/trash
color = COLOR_BOTTLE_GREEN
@@ -7,7 +7,6 @@
seal_tool = /obj/item/weapon/tool/screwdriver
breakout_sound = 'sound/weapons/tablehit1.ogg'
closet_appearance = null // Special icon for us
door_anim_time = 0 //Unsupported
/* Graves */
/obj/structure/closet/grave
@@ -21,7 +20,6 @@
max_closets = 1
opened = 1
closet_appearance = null // Special icon for us
door_anim_time = 0 //Unsupported
/obj/structure/closet/grave/attack_hand(mob/user as mob)
if(opened)
@@ -2,4 +2,3 @@
name = "critter crate"
desc = "A crate which can sustain life for a while."
closet_appearance = /decl/closet_appearance/large_crate/critter
door_anim_time = 0 //Unsupported
@@ -13,7 +13,6 @@
opened = 0
sealed = 0 //Don't touch this.
health = 100
door_anim_time = 0 //Unsupported
/obj/structure/closet/secure_closet/egg/update_icon()
if(opened)
@@ -3,7 +3,6 @@
desc = "Old will forever be in fashion."
icon = 'icons/obj/closets/bases/cabinet.dmi'
closet_appearance = /decl/closet_appearance/cabinet
door_anim_time = 0 //Unsupported
/obj/structure/closet/acloset
name = "strange closet"
@@ -47,6 +47,7 @@
/obj/item/clothing/glasses/meson,
/obj/item/clothing/head/soft,
/obj/item/clothing/suit/storage/hooded/wintercoat/cargo,
/obj/item/clothing/suit/storage/hooded/wintercoat/cargo/qm,
/obj/item/clothing/shoes/boots/winter/supply)
/obj/structure/closet/secure_closet/quartermaster/Initialize()
@@ -26,6 +26,7 @@
/obj/item/device/t_scanner/upgraded,
/obj/item/taperoll/engineering,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce,
/obj/item/clothing/shoes/boots/winter/engineering,
/obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add,
@@ -103,6 +103,7 @@
/obj/item/clothing/mask/gas,
/obj/item/clothing/suit/storage/toggle/fr_jacket,
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/para,
/obj/item/device/radio/headset/headset_med/alt,
/obj/item/weapon/cartridge/medical,
/obj/item/weapon/storage/briefcase/inflatable,
@@ -137,6 +138,7 @@
/obj/item/device/flash,
/obj/item/weapon/reagent_containers/hypospray/vial,
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo,
/obj/item/clothing/shoes/boots/winter/medical,
/obj/item/weapon/storage/box/freezer,
/obj/item/clothing/mask/gas,
@@ -34,6 +34,7 @@
/obj/item/clothing/under/rank/research_director/dress_rd,
/obj/item/clothing/suit/storage/toggle/labcoat,
/obj/item/clothing/suit/storage/toggle/labcoat/modern,
/obj/item/clothing/suit/storage/toggle/labcoat/rd,
/obj/item/weapon/cartridge/rd,
/obj/item/clothing/shoes/white,
/obj/item/clothing/shoes/laceup/brown,
@@ -44,6 +45,7 @@
/obj/item/clothing/mask/gas,
/obj/item/device/flash,
/obj/item/clothing/suit/storage/hooded/wintercoat/science,
/obj/item/clothing/suit/storage/hooded/wintercoat/science/rd,
/obj/item/clothing/shoes/boots/winter/science,
/obj/item/weapon/bluespace_harpoon) //VOREStation Add
@@ -60,7 +60,8 @@
/obj/item/clothing/head/caphat/hop,
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt,
/obj/item/clothing/glasses/sunglasses)
/obj/item/clothing/glasses/sunglasses,
/obj/item/clothing/suit/storage/hooded/wintercoat/hop)
/obj/structure/closet/secure_closet/hos
@@ -100,6 +101,7 @@
/obj/item/weapon/melee/telebaton,
/obj/item/clothing/head/beret/sec/corporate/hos,
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
/obj/item/clothing/suit/storage/hooded/wintercoat/security/hos,
/obj/item/clothing/shoes/boots/winter/security,
/obj/item/device/flashlight/maglight,
/obj/item/clothing/mask/gas/half,
@@ -313,4 +315,3 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br
//too small to put a man in
large = 0
door_anim_time = 0 // Unsupported
@@ -21,6 +21,7 @@
/obj/item/clothing/accessory/holster/waist,
/obj/item/clothing/head/beret/sec/corporate/hos,
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
/obj/item/clothing/suit/storage/hooded/wintercoat/security/hos,
/obj/item/clothing/mask/gas/half)
/obj/structure/closet/secure_closet/hos2
@@ -7,7 +7,6 @@
anchored = TRUE
health = 0 //destroying the statue kills the mob within
blocks_emissive = EMISSIVE_BLOCK_UNIQUE
door_anim_time = 0 // Why is this a closet??
var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock
var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils.
var/intialBrute = 0
@@ -10,7 +10,6 @@
anchored = TRUE
store_mobs = 0
wall_mounted = 1
door_anim_time = 0 // Unsupported
//spawns 2 sets of breathmask, emergency oxy tank and crowbar
@@ -92,7 +91,6 @@
wall_mounted = 1
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
door_anim_time = 0 //Unsupported
/obj/structure/closet/walllocker_double/north
pixel_y = 32
@@ -7,7 +7,6 @@
closet_appearance = /decl/closet_appearance/crate
climbable = TRUE
dir = 4 //Spawn facing 'forward' by default.
door_anim_time = 0 //Unsupported until appropriate sprites are available
var/points_per_crate = 5
var/rigged = 0
@@ -8,6 +8,7 @@
var/used = FALSE
var/busy = FALSE // Don't spam ghosts by spamclicking.
var/needscharger //For drone pods that want their pod to turn into a charger.
unacidable = TRUE
// Call this to get a ghost volunteer.
/obj/structure/ghost_pod/proc/trigger(var/alert, var/adminalert)
@@ -21,6 +21,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
icon_state = "randompile"
density = FALSE
anchored = TRUE
unacidable = TRUE
var/list/icon_states_to_use = list() // List of icon states the pile can choose from on initialization. If empty or null, it will stay the initial icon_state.
+1
View File
@@ -20,6 +20,7 @@
var/obj/structure/m_tray/connected = null
var/list/occupants = list()
anchored = TRUE
unacidable = TRUE
/obj/structure/morgue/Destroy()
if(connected)
@@ -0,0 +1,60 @@
/obj/structure/prop/esoteric
name = "some esoteric thing"
desc = "Perhaps it's of ritual significance?"
icon = 'icons/obj/props/decor.dmi'
/obj/structure/prop/esoteric/nt_pedestal0_old
name = "pedestal"
desc = "A pedestal with a mysterious slot at its center."
icon_state = "nt_pedestal0_old"
/obj/structure/prop/esoteric/nt_pedestal1_old
name = "pedestal"
desc = "A pedestal with some kind of sword slotted securely in the center."
icon_state = "nt_pedestal1_old"
// eye of the protector from Eris
/obj/structure/prop/esoteric/eotp
icon = 'icons/obj/props/decor32x64.dmi'
icon_state = "eotp"
/**
* Possible 'state' options for change_state(state) are:
* off: Looks boring and off
* on: candles lit and stuff
* no_cruciform: No cruciform (the little triangle thing) inserted
* red_cruciform: Red light cruciform inserted
* green_cruciform: Green light cruciform inserted
* panel_open: The panel is open (wiring)
* panel_closed: The panel is closed
*/
// neotheology cruciform reader from Eris
/obj/structure/prop/esoteric/reader
name = "electronic altar"
desc = "It looks like you're meant to scan something here."
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_reader_off"
/obj/structure/prop/esoteric/reader/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_reader_off"
if("on")
icon_state = "nt_reader_on"
if("no_cruciform")
cut_overlay("nt_reader_c_green")
cut_overlay("nt_reader_c_red")
if("red_cruciform")
cut_overlay("nt_reader_c_green")
cut_overlay("nt_reader_c_red")
add_overlay("nt_reader_c_red")
if("green_cruciform")
cut_overlay("nt_reader_c_red")
cut_overlay("nt_reader_c_green")
add_overlay("nt_reader_c_green")
if("panel_open")
cut_overlay("nt_reader_panel")
add_overlay("nt_reader_panel")
if("panel_closed")
cut_overlay("nt_reader_panel")
@@ -0,0 +1,7 @@
// fences from TGMC
// You'll need to 'create instances from icon_states' in an editor to use these well
/obj/structure/prop/fence
name = "fence"
desc = "It's a fence! Not much else to say about it."
icon = 'icons/obj/props/decor_fences.dmi'
@@ -0,0 +1,686 @@
/obj/structure/prop/machine
name = "doodad"
desc = "Some kind of machine."
icon = 'icons/obj/props/decor.dmi'
//Eris Bluespace Beacon
/obj/structure/prop/machine/bsb_off
name = "beacon"
icon_state = "bsb_off"
/obj/structure/prop/machine/bsb_on
name = "beacon"
icon_state = "bsb_on"
/obj/structure/prop/machine/biosyphon
icon_state = "biosyphon"
/obj/structure/prop/machine/von_krabin
icon_state = "von_krabin"
/obj/structure/prop/machine/last_shelter
icon_state = "last_shelter"
/obj/structure/prop/machine/complicator
icon_state = "complicator"
/obj/structure/prop/machine/random_radio
name = "radio"
icon_state = "random_radio"
// vatgrowing thing from /tg/
/obj/structure/prop/machine/green_egg
icon_state = "gel_cocoon"
// gravity generator from Eris
/obj/structure/prop/machine/gravygen
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "bigdice"
bound_width = 64
bound_height = 64
// dna vault from /tg/
/obj/structure/prop/dna_vault
icon = 'icons/obj/props/decor96x96.dmi'
icon_state = "vault"
/**
* Possible 'state' options for change_state(state) are:
* panel_open: The panel is opened
* panel_closed: The panel is closed
*/
// neotheology cloning biocan from Eris
/obj/structure/prop/machine/nt_biocan
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_biocan"
/obj/structure/prop/nt_biocan/change_state(state)
. = ..()
switch(state)
if("panel_open")
cut_overlay("nt_biocan_panel")
add_overlay("nt_biocan_panel")
if("panel_closed")
cut_overlay("nt_biocan_panel")
/**
* Possible 'state' options for change_state(state) are:
* blue, red, orange, yellow, green, purple: Set that color
* damaged: add damage overlay
* undamaged: remove damage overlay
* broken: become damaged
* plain: undamaged white version, otherwise use a color
*/
// dominator console from /tg/
/obj/structure/prop/dominator
icon = 'icons/obj/props/decor.dmi'
icon_state = "dominator"
/obj/structure/prop/dominator/change_state(state)
. = ..()
switch(state)
if("blue")
icon_state = "dominator-blue"
if("red")
icon_state = "dominator-red"
if("orange")
icon_state = "dominator-orange"
if("yellow")
icon_state = "dominator-yellow"
if("green")
icon_state = "dominator-green"
if("purple")
icon_state = "dominator-purple"
if("damaged")
add_overlay("dom_damage")
if("undamaged")
cut_overlay("dom_damage")
if("broken")
icon_state = "dominator-broken"
if("plain")
icon_state = "dominator"
/obj/structure/prop/dominator/blue
icon_state = "dominator-blue"
/obj/structure/prop/dominator/red
icon_state = "dominator-red"
/obj/structure/prop/dominator/orange
icon_state = "dominator-orange"
/obj/structure/prop/dominator/yellow
icon_state = "dominator-yellow"
/obj/structure/prop/dominator/green
icon_state = "dominator-green"
/obj/structure/prop/dominator/purple
icon_state = "dominator-purple"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Pumping or something
*/
// some neotheology thing from Eris
/obj/structure/prop/machine/solifier
icon_state = "nt_solidifier"
/obj/structure/prop/machine/solifier/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_solidifier"
if("on")
icon_state = "nt_solidifier_on"
/obj/structure/prop/machine/solifier/starts_on
icon_state = "nt_solidifier_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Boring, round
* on: Spinny glowy
*/
// conduit of soul from Eris
/obj/structure/prop/machine/conduit
icon_state = "conduit_off"
/obj/structure/prop/machine/conduit/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "conduit_spin"
flick("conduit_starting", src)
if("off")
icon_state = "conduit_off"
flick("conduit_stopping", src)
/obj/structure/prop/machine/conduit/starts_on
icon_state = "conduit_spin"
/**
* Possible 'state' options for change_state(state) are:
* on: Doing some kinda worky thing
* off: Not doing much of anything
* empty: No blue crystal thingy
* loaded: off but without the animation
*/
// some kinda NT thing from Eris
/obj/structure/prop/machine/core
icon_state = "core_inactive"
/obj/structure/prop/machine/core/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "core_active"
flick("core_warmup", src)
if("off")
icon_state = "core_inactive"
flick("core_shutdown", src)
if("empty")
icon_state = "core_empty"
if("loaded")
icon_state = "core_inactive"
/obj/structure/prop/machine/core/starts_on
icon_state = "core_active"
/**
* Possible 'state' options for change_state(state) are:
* down: In the ground, glowing
* up: Out of the ground, open
*/
// experimental science destructor from /tg/
/obj/structure/prop/machine/tube
icon = 'icons/obj/props/decor32x64.dmi'
icon_state = "tube_open"
/obj/structure/prop/machine/tube/change_state(state)
. = ..()
switch(state)
if("down")
icon_state = "tube_on"
flick("tube_down", src)
if("up")
icon_state = "tube_open"
flick("tube_up", src)
/obj/structure/prop/machine/tube/starts_down
icon_state = "tube_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Boring, static
* on: Turny and blinky
*/
// experimental science destructor from /tg/
/obj/structure/prop/machine/comm_tower
icon = 'icons/obj/props/decor.dmi'
icon = 'icons/obj/props/decor96x96.dmi'
icon_state = "comm_tower"
/obj/structure/prop/machine/comm_tower/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "comm_tower_on"
if("off")
icon_state = "comm_tower"
/obj/structure/prop/machine/comm_tower/starts_on
icon_state = "comm_tower_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Not doing much
* on: Stamping mysterious substances
*/
// sheetizer from /tg/
/obj/structure/prop/machine/stamper
icon = 'icons/obj/props/decor.dmi'
icon_state = "stamper"
/obj/structure/prop/machine/stamper/change_state(state)
. = ..()
switch(state)
if("off")
cut_overlays()
if("on")
add_overlay("stamper_proc")
add_overlay("stamper_but")
/obj/structure/prop/machine/stamper/starts_on
icon_state = "stamper_on"
/obj/structure/prop/machine/stamper/starts_on/Initialize()
add_overlay("stamper_proc")
add_overlay("stamper_but")
/**
* Possible 'state' options for change_state(state) are:
* whole: Not doing much
* broken: Stamping mysterious substances
*/
// alien autopsy thing from TGMC
/obj/structure/prop/machine/alien_tank
icon_state = "tank_larva"
/obj/structure/prop/machine/alien_tank/change_state(state)
. = ..()
switch(state)
if("whole")
icon_state = "tank_larva"
if("broken")
icon_state = "tank_broken"
/obj/structure/prop/machine/alien_tank/starts_broken
icon_state = "tank_broken"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights underneath
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// neotheology optable from Eris
/obj/structure/prop/machine/nt_optable
icon_state = "nt_optable-idle"
/obj/structure/prop/machine/nt_optable/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "nt_optable-idle"
if("active")
icon_state = "nt_optable-active"
if("panel_open")
cut_overlay("nt_optable_panel")
add_overlay("nt_optable_panel")
if("panel_closed")
cut_overlay("nt_optable_panel")
/obj/structure/prop/nt_optable/starts_active
icon_state = "nt_optable-active"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights in the center
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// trade beacon from Eris
/obj/structure/prop/machine/tradebeacon
icon_state = "tradebeacon"
/obj/structure/prop/machine/tradebeacon/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "tradebeacon"
if("active")
icon_state = "tradebeacon_active"
if("panel_open")
cut_overlay("tradebeacon_panel")
add_overlay("tradebeacon_panel")
if("panel_closed")
cut_overlay("tradebeacon_panel")
/obj/structure/prop/machine/tradebeacon/starts_active
icon_state = "tradebeacon_active"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights in the center
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// another trade beacon from Eris
/obj/structure/prop/machine/tradebeacon2
icon_state = "tradebeacon"
/obj/structure/prop/machine/tradebeacon2/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "tradebeacon_sending"
if("active")
icon_state = "tradebeacon_sending_active"
if("panel_open")
cut_overlay("tradebeacon_sending_panel")
add_overlay("tradebeacon_sending_panel")
if("panel_closed")
cut_overlay("tradebeacon_sending_panel")
/obj/structure/prop/machine/tradebeacon2/starts_active
icon_state = "tradebeacon_sending_active"
/**
* Possible 'state' options for change_state(state) are:
* off: Non-spinny
* on: Spinny and floaty
*/
// neotheology decorative(?) obelisk from Eris
/obj/structure/prop/machine/nt_obelisk
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_obelisk"
/obj/structure/prop/machine/nt_obelisk/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_obelisk"
if("on")
icon_state = "nt_obelisk_on"
/obj/structure/prop/machine/nt_obelisk/starts_on
icon_state = "nt_obelisk_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Inert
* on: Hand destroying machinery
*/
// 'sorter' from Eris
/obj/structure/prop/machine/sorter
icon = 'icons/obj/props/decor.dmi'
icon_state = "sorter"
/obj/structure/prop/machine/sorter/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "sorter"
if("on")
icon_state = "sorter-process"
/obj/structure/prop/machine/sorter/starts_on
icon_state = "sorter-process"
/**
* Possible 'state' options for change_state(state) are:
* off: Inert
* on: Hand destroying machinery
*/
// 'smelter' from Eris
/obj/structure/prop/machine/smelter
icon = 'icons/obj/props/decor.dmi'
icon_state = "smelter"
/obj/structure/prop/machine/smelter/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "smelter"
if("on")
icon_state = "smelter-process"
/obj/structure/prop/machine/smelter/starts_on
icon_state = "smelter-process"
/**
* Possible 'state' options for change_state(state) are:
* idle: Not doing anything, with yellow template exposed
* work: busy doing work
* pause: paused work
*/
// cruciform forge from Eris
/obj/structure/prop/machine/nt_cruciforge
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_cruciforge"
/obj/structure/prop/machine/nt_cruciforge/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "nt_cruciforge"
flick("nt_cruciforge_finish", src) // 8ds
if("work")
icon_state = "nt_cruciforge_work"
flick("nt_cruciforge_start", src) // 8ds
if("pause")
icon_state = "nt_cruciforge_pause"
/obj/structure/prop/machine/nt_cruciforge/starts_working
icon_state = "nt_cruciforge_work"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console1
name = "console"
icon = 'icons/obj/props/decor.dmi'
icon_state = "tgmc_console1"
/obj/structure/prop/machine/tgmc_console1/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console1"
if("on")
icon_state = "tgmc_console1_on"
/obj/structure/prop/machine/tgmc_console1/starts_on
icon_state = "tgmc_console1_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console2
name = "console"
icon_state = "tgmc_console2"
/obj/structure/prop/machine/tgmc_console2/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console2"
if("on")
icon_state = "tgmc_console2_on"
/obj/structure/prop/machine/tgmc_console2/starts_on
icon_state = "tgmc_console2_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console3
name = "console"
icon_state = "tgmc_console3"
/obj/structure/prop/machine/tgmc_console3/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console3"
if("on")
icon_state = "tgmc_console3_on"
/obj/structure/prop/machine/tgmc_console3/starts_on
icon_state = "tgmc_console3_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console4
name = "console"
icon_state = "tgmc_console4"
/obj/structure/prop/machine/tgmc_console4/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console4"
if("on")
icon_state = "tgmc_console4_on"
/obj/structure/prop/machine/tgmc_console4/starts_on
icon_state = "tgmc_console4_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console5
name = "console"
icon_state = "tgmc_console5"
/obj/structure/prop/machine/tgmc_console5/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console5"
if("on")
icon_state = "tgmc_console5_on"
/obj/structure/prop/machine/tgmc_console5/starts_on
icon_state = "tgmc_console5_on"
/**
* This one is a bit more fancy than others. Anything in the contents (PLEASE LIMIT TO ONE THING)
* will show up inside it! Also if you map in an item on it, it will grab that at mapload and start
* in the 'closed, full of fluid' state, so you can put a body on it or whatever.
*
* As an aghost you can also dragdrop something into it (you have to be ghosted next to it)
*
* Possible 'state' options for change_state(state) are:
* open: Open, no fluid or anything. At the end the contents are ejected.
* closed: Closed, full of liquid
* panel_open: Shows panel
* panel_closed: Unshows panel
*/
// neotheology cloning pod from Eris
/obj/structure/prop/machine/nt_pod
icon = 'icons/obj/props/decor.dmi'
icon = 'icons/obj/props/decor32x64.dmi'
icon_state = "nt_pod_mappreview"
bound_height = 64
var/obj/effect/overlay/vis/outside
var/obj/effect/overlay/vis/door
var/obj/effect/overlay/vis/fluid
var/contents_vis_flags = NONE
var/contents_original_pixel_y = 0
/obj/structure/prop/machine/nt_pod/Initialize(mapload)
// Our non-map-preview state
icon_state = "nt_pod"
// Alpha mask to make sure things don't sneak out
var/obj/effect/overlay/vis/mask = new
mask.icon = icon
mask.icon_state = "nt_pod_mask"
mask.render_target = "*nt_podmask[REF(src)]"
mask.vis_flags = VIS_INHERIT_ID
vis_contents += mask
outside = add_vis_overlay(icon, "nt_pod_over", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
door = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
fluid = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
// Gather up our friends
if(mapload)
var/atom/movable/AM = locate() in loc
AM?.forceMove(src)
/obj/structure/prop/machine/nt_pod/Entered(atom/movable/mover)
abduct(mover)
/obj/structure/prop/machine/nt_pod/proc/abduct(var/atom/movable/AM)
// Save old settings
contents_vis_flags = AM.vis_flags
contents_original_pixel_y = AM.pixel_y
// Arrange
AM.add_filter("podmask", 1, alpha_mask_filter(render_source = "nt_podmask[REF(src)]", flags = MASK_INVERSE))
AM.pixel_y = 12
AM.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_DIR
vis_contents += AM
if(ismob(AM))
var/mob/M = AM
buckle_mob(M, TRUE, FALSE)
// TRAP THEM
change_state("closed")
/obj/structure/prop/machine/nt_pod/proc/unduct(var/atom/movable/AM)
// Geddout
vis_contents -= AM
if(ismob(AM))
var/mob/M = AM
unbuckle_mob(M, TRUE)
// Cleanup
AM.remove_filter("podmask")
AM.forceMove(drop_location())
AM.vis_flags = contents_vis_flags
AM.pixel_y = contents_original_pixel_y
/obj/structure/prop/machine/nt_pod/MouseDrop_T(var/atom/movable/AM, var/mob/user)
if(contents.len)
return
if(!ismovable(AM))
return
if(!user.client?.holder)
return
AM.forceMove(src)
/obj/structure/prop/machine/nt_pod/change_state(state)
. = ..()
switch(state)
if("open")
cut_overlay("nt_pod_top_on")
cut_overlay("nt_pod_under")
// Fluid drains
fluid.icon_state = "nothing"
flick("nt_pod_emptying", fluid) // 8ds
sleep(8)
// Door opens
door.icon_state = "nothing"
flick("nt_pod_opening", door) // 9ds
sleep(9)
// GET OUT
outside.layer = BELOW_MOB_LAYER
if(contents.len)
for(var/atom/movable/AM as anything in contents)
unduct(AM)
if("closed")
outside.layer = ABOVE_MOB_LAYER
cut_overlay("nt_pod_top_on")
add_overlay("nt_pod_top_on")
add_overlay("nt_pod_under")
// Door closes
door.icon_state = "nt_pod_glass"
flick("nt_pod_closing", door) // 9ds
sleep(9)
// Fluid fills
fluid.icon_state = "nt_pod_liquid"
flick("nt_pod_filling", fluid) // 8ds
if("panel_open")
cut_overlay("nt_pod_panel")
add_overlay("nt_pod_panel")
if("panel_closed")
cut_overlay("nt_pod_panel")
+18 -683
View File
@@ -1,19 +1,20 @@
/**
* Decorative items for PoIs etc.
* These are generally sprites ported from other servers, which don't have any unique code.
* They can be used by mappers for decorating their maps. They're mostly here so people who aren't
* rummaging around in the sprites can be aware of some neat sprites they can use.
*
*
* Obviously you can swipe the sprites for real structures and add code, but please don't add any code
* (beyond decorative things like maybe light) directly to these types or this file!
* Take the icon and state and make your own type under /obj/structure.
*
*
* Some of these do have a SMIDGE of code to allow a mapper to twirl them through states/animations without
* much effort, but beyond 'visuals logic', I'd rather keep all the logic out of here.
*/
/obj/structure/prop
name = "mysterious structure"
desc = "A mysterious structure!"
desc = "You're not sure what this is."
icon = 'icons/obj/structures.dmi'
icon_state = "safe"
density = TRUE
@@ -30,8 +31,6 @@
else
to_chat(user, interaction_message)
/// Changes the visual state of the machine between icon_states or overlays or whatever
/// the machine needs to look like it's in a different state.
/obj/structure/prop/proc/change_state(state)
SHOULD_CALL_PARENT(TRUE)
src.state = state
@@ -41,694 +40,30 @@
if(var_name == "state")
change_state(var_value)
// bluespace beacon from Eris
/obj/structure/prop/bsb_off
icon = 'icons/obj/structures/decor.dmi'
icon_state = "bsb_off"
/obj/structure/prop/bsb_on
icon = 'icons/obj/structures/decor.dmi'
icon_state = "bsb_on"
// bluespace crystal from Eris
/obj/structure/prop/bsc
icon = 'icons/obj/structures/decor.dmi'
icon_state = "bsc"
/obj/structure/prop/bsc_dust
icon = 'icons/obj/structures/decor.dmi'
icon_state = "bsc_dust"
//Misc stuff that fits no category
// same as state names, from faction items on Eris
/obj/structure/prop/biosyphon
icon = 'icons/obj/structures/decor.dmi'
icon_state = "biosyphon"
/obj/structure/prop/von_krabin
icon = 'icons/obj/structures/decor.dmi'
icon_state = "von_krabin"
/obj/structure/prop/last_shelter
icon = 'icons/obj/structures/decor.dmi'
icon_state = "last_shelter"
/obj/structure/prop/complicator
icon = 'icons/obj/structures/decor.dmi'
icon_state = "complicator"
/obj/structure/prop/random_radio
icon = 'icons/obj/structures/decor.dmi'
icon_state = "random_radio"
/obj/structure/prop/nt_pedestal0_old
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_pedestal0_old"
/obj/structure/prop/nt_pedestal1_old
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_pedestal1_old"
// statues from Eris
/obj/structure/prop/statue1
icon = 'icons/obj/structures/decor.dmi'
icon_state = "artwork_statue_1"
/obj/structure/prop/statue2
icon = 'icons/obj/structures/decor.dmi'
icon_state = "artwork_statue_2"
/obj/structure/prop/statue3
icon = 'icons/obj/structures/decor.dmi'
icon_state = "artwork_statue_3"
/obj/structure/prop/statue4
icon = 'icons/obj/structures/decor.dmi'
icon_state = "artwork_statue_4"
/obj/structure/prop/statue5
icon = 'icons/obj/structures/decor.dmi'
icon_state = "artwork_statue_5"
/obj/structure/prop/statue6
icon = 'icons/obj/structures/decor.dmi'
icon_state = "artwork_statue_6"
// ship mast from TGMC
/obj/structure/prop/stump_plaque
icon = 'icons/obj/structures/decor.dmi'
icon_state = "stump"
// vatgrowing thing from /tg/
/obj/structure/prop/green_egg
icon = 'icons/obj/structures/decor.dmi'
icon_state = "gel_cocoon"
// eye of the protector from Eris
/obj/structure/prop/eotp
icon = 'icons/obj/structures/decor32x64.dmi'
icon_state = "eotp"
// gravity generator from Eris
/obj/structure/prop/gravygen
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "bigdice"
// ship memorial from TGMC
/obj/structure/prop/memorial
name = "engraved wall"
desc = "A finely engraved list on dark stone."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "ship_memorial"
bound_width = 64
bound_height = 64
// dna vault from /tg/
/obj/structure/prop/dna_vault
icon = 'icons/obj/structures/decor96x96.dmi'
icon_state = "vault"
// fences from TGMC
// You'll need to 'create instances from icon_states' in an editor to use these well
/obj/structure/prop/fence
name = "fence"
desc = "It's a fence! Not much else to say about it."
icon = 'icons/obj/structures/decor_fences.dmi'
/**
*
*
Notes on change_state
*
* tl;dr "You can varedit 'state' on these to the things in the comments below to get cool animations"
*
*
* These items have some logic to handle some fun animations on them. Mappers can call the 'change_state(state)' proc
* while referring to the comments here for what states they can use. You'll notice some crazy overlay handling,
* and that's because I don't want to add any vars to these mappers think they can fiddle with, which requires
* more logic than I'm willing to do at the moment. So we get crazy cut/add operations instead.
*
*
* There's also a VV helper so if you varedit 'state' to these during the game, you can get that to work.
*
*
* Like, I don't want to add a state machine to decorative objects. You can if you want.
*
*
*/
/**
* Possible 'state' options for change_state(state) are:
* off: Looks boring and off
* on: candles lit and stuff
* no_cruciform: No cruciform (the little triangle thing) inserted
* red_cruciform: Red light cruciform inserted
* green_cruciform: Green light cruciform inserted
* panel_open: The panel is open (wiring)
* panel_closed: The panel is closed
*/
// neotheology cruciform reader from Eris
/obj/structure/prop/nt_reader
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_reader_off"
/obj/structure/prop/nt_reader/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_reader_off"
if("on")
icon_state = "nt_reader_on"
if("no_cruciform")
cut_overlay("nt_reader_c_green")
cut_overlay("nt_reader_c_red")
if("red_cruciform")
cut_overlay("nt_reader_c_green")
cut_overlay("nt_reader_c_red")
add_overlay("nt_reader_c_red")
if("green_cruciform")
cut_overlay("nt_reader_c_red")
cut_overlay("nt_reader_c_green")
add_overlay("nt_reader_c_green")
if("panel_open")
cut_overlay("nt_reader_panel")
add_overlay("nt_reader_panel")
if("panel_closed")
cut_overlay("nt_reader_panel")
/**
* Possible 'state' options for change_state(state) are:
* panel_open: The panel is opened
* panel_closed: The panel is closed
*/
// neotheology cloning biocan from Eris
/obj/structure/prop/nt_biocan
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_biocan"
/obj/structure/prop/nt_biocan/change_state(state)
. = ..()
switch(state)
if("panel_open")
cut_overlay("nt_biocan_panel")
add_overlay("nt_biocan_panel")
if("panel_closed")
cut_overlay("nt_biocan_panel")
/**
* Possible 'state' options for change_state(state) are:
* blue, red, orange, yellow, green, purple: Set that color
* damaged: add damage overlay
* undamaged: remove damage overlay
* broken: become damaged
* plain: undamaged white version, otherwise use a color
*/
// dominator console from /tg/
/obj/structure/prop/dominator
icon = 'icons/obj/structures/decor.dmi'
icon_state = "dominator"
/obj/structure/prop/dominator/change_state(state)
. = ..()
switch(state)
if("blue")
icon_state = "dominator-blue"
if("red")
icon_state = "dominator-red"
if("orange")
icon_state = "dominator-orange"
if("yellow")
icon_state = "dominator-yellow"
if("green")
icon_state = "dominator-green"
if("purple")
icon_state = "dominator-purple"
if("damaged")
add_overlay("dom_damage")
if("undamaged")
cut_overlay("dom_damage")
if("broken")
icon_state = "dominator-broken"
if("plain")
icon_state = "dominator"
/obj/structure/prop/dominator/blue
icon_state = "dominator-blue"
/obj/structure/prop/dominator/red
icon_state = "dominator-red"
/obj/structure/prop/dominator/orange
icon_state = "dominator-orange"
/obj/structure/prop/dominator/yellow
icon_state = "dominator-yellow"
/obj/structure/prop/dominator/green
icon_state = "dominator-green"
/obj/structure/prop/dominator/purple
icon_state = "dominator-purple"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Pumping or something
*/
// some neotheology thing from Eris
/obj/structure/prop/nt_solifier
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_solidifier"
/obj/structure/prop/nt_solifier/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_solidifier"
if("on")
icon_state = "nt_solidifier_on"
/obj/structure/prop/nt_solifier/starts_on
icon_state = "nt_solidifier_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Boring, round
* on: Spinny glowy
*/
// conduit of soul from Eris
/obj/structure/prop/conduit
icon = 'icons/obj/structures/decor.dmi'
icon_state = "conduit_off"
/obj/structure/prop/conduit/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "conduit_spin"
flick("conduit_starting", src)
if("off")
icon_state = "conduit_off"
flick("conduit_stopping", src)
/obj/structure/prop/conduit/starts_on
icon_state = "conduit_spin"
/**
* Possible 'state' options for change_state(state) are:
* on: Doing some kinda worky thing
* off: Not doing much of anything
* empty: No blue crystal thingy
* loaded: off but without the animation
*/
// some kinda NT thing from Eris
/obj/structure/prop/core
icon = 'icons/obj/structures/decor.dmi'
icon_state = "core_inactive"
/obj/structure/prop/core/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "core_active"
flick("core_warmup", src)
if("off")
icon_state = "core_inactive"
flick("core_shutdown", src)
if("empty")
icon_state = "core_empty"
if("loaded")
icon_state = "core_inactive"
/obj/structure/prop/core/starts_on
icon_state = "core_active"
/**
* Possible 'state' options for change_state(state) are:
* down: In the ground, glowing
* up: Out of the ground, open
*/
// experimental science destructor from /tg/
/obj/structure/prop/tube
icon = 'icons/obj/structures/decor32x64.dmi'
icon_state = "tube_open"
/obj/structure/prop/tube/change_state(state)
. = ..()
switch(state)
if("down")
icon_state = "tube_on"
flick("tube_down", src)
if("up")
icon_state = "tube_open"
flick("tube_up", src)
/obj/structure/prop/tube/starts_down
icon_state = "tube_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Boring, static
* on: Turny and blinky
*/
// experimental science destructor from /tg/
/obj/structure/prop/comm_tower
icon = 'icons/obj/structures/decor.dmi'
icon = 'icons/obj/structures/decor96x96.dmi'
icon_state = "comm_tower"
/obj/structure/prop/comm_tower/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "comm_tower_on"
if("off")
icon_state = "comm_tower"
/obj/structure/prop/comm_tower/starts_on
icon_state = "comm_tower_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Not doing much
* on: Stamping mysterious substances
*/
// sheetizer from /tg/
/obj/structure/prop/stamper
icon = 'icons/obj/structures/decor.dmi'
icon_state = "stamper"
/obj/structure/prop/stamper/change_state(state)
. = ..()
switch(state)
if("off")
cut_overlays()
if("on")
add_overlay("stamper_proc")
add_overlay("stamper_but")
/obj/structure/prop/stamper/starts_on
icon_state = "stamper_on"
/obj/structure/prop/stamper/starts_on/Initialize()
add_overlay("stamper_proc")
add_overlay("stamper_but")
/**
* Possible 'state' options for change_state(state) are:
* whole: Not doing much
* broken: Stamping mysterious substances
*/
// alien autopsy thing from TGMC
/obj/structure/prop/alien_tank
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tank_larva"
/obj/structure/prop/alien_tank/change_state(state)
. = ..()
switch(state)
if("whole")
icon_state = "tank_larva"
if("broken")
icon_state = "tank_broken"
/obj/structure/prop/alien_tank/starts_broken
icon_state = "tank_broken"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights underneath
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// neotheology optable from Eris
/obj/structure/prop/nt_optable
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_optable-idle"
/obj/structure/prop/nt_optable/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "nt_optable-idle"
if("active")
icon_state = "nt_optable-active"
if("panel_open")
cut_overlay("nt_optable_panel")
add_overlay("nt_optable_panel")
if("panel_closed")
cut_overlay("nt_optable_panel")
/obj/structure/prop/nt_optable/starts_active
icon_state = "nt_optable-active"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights in the center
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// trade beacon from Eris
/obj/structure/prop/tradebeacon
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tradebeacon"
/obj/structure/prop/tradebeacon/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "tradebeacon"
if("active")
icon_state = "tradebeacon_active"
if("panel_open")
cut_overlay("tradebeacon_panel")
add_overlay("tradebeacon_panel")
if("panel_closed")
cut_overlay("tradebeacon_panel")
/obj/structure/prop/tradebeacon/starts_active
icon_state = "tradebeacon_active"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights in the center
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// another trade beacon from Eris
/obj/structure/prop/tradebeacon2
icon = 'icons/obj/structures/decor.dmi'
icon_state = "tradebeacon"
/obj/structure/prop/tradebeacon2/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "tradebeacon_sending"
if("active")
icon_state = "tradebeacon_sending_active"
if("panel_open")
cut_overlay("tradebeacon_sending_panel")
add_overlay("tradebeacon_sending_panel")
if("panel_closed")
cut_overlay("tradebeacon_sending_panel")
/obj/structure/prop/tradebeacon2/starts_active
icon_state = "tradebeacon_sending_active"
/**
* Possible 'state' options for change_state(state) are:
* off: Non-spinny
* on: Spinny and floaty
*/
// neotheology decorative(?) obelisk from Eris
/obj/structure/prop/nt_obelisk
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_obelisk"
/obj/structure/prop/nt_obelisk/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_obelisk"
if("on")
icon_state = "nt_obelisk_on"
/obj/structure/prop/nt_obelisk/starts_on
icon_state = "nt_obelisk_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Inert
* on: Hand destroying machinery
*/
// 'sorter' from Eris
/obj/structure/prop/sorter
icon = 'icons/obj/structures/decor.dmi'
icon_state = "sorter"
/obj/structure/prop/sorter/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "sorter"
if("on")
icon_state = "sorter-process"
/obj/structure/prop/sorter/starts_on
icon_state = "sorter-process"
/**
* Possible 'state' options for change_state(state) are:
* off: Inert
* on: Hand destroying machinery
*/
// 'smelter' from Eris
/obj/structure/prop/smelter
icon = 'icons/obj/structures/decor.dmi'
icon_state = "smelter"
/obj/structure/prop/smelter/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "smelter"
if("on")
icon_state = "smelter-process"
/obj/structure/prop/smelter/starts_on
icon_state = "smelter-process"
/**
* Possible 'state' options for change_state(state) are:
* idle: Not doing anything, with yellow template exposed
* work: busy doing work
* pause: paused work
*/
// cruciform forge from Eris
/obj/structure/prop/nt_cruciforge
icon = 'icons/obj/structures/decor.dmi'
icon_state = "nt_cruciforge"
/obj/structure/prop/nt_cruciforge/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "nt_cruciforge"
flick("nt_cruciforge_finish", src) // 8ds
if("work")
icon_state = "nt_cruciforge_work"
flick("nt_cruciforge_start", src) // 8ds
if("pause")
icon_state = "nt_cruciforge_pause"
/obj/structure/prop/nt_cruciforge/starts_working
icon_state = "nt_cruciforge_work"
/**
* This one is a bit more fancy than others. Anything in the contents (PLEASE LIMIT TO ONE THING)
* will show up inside it! Also if you map in an item on it, it will grab that at mapload and start
* in the 'closed, full of fluid' state, so you can put a body on it or whatever.
*
* As an aghost you can also dragdrop something into it (you have to be ghosted next to it)
*
* Possible 'state' options for change_state(state) are:
* open: Open, no fluid or anything. At the end the contents are ejected.
* closed: Closed, full of liquid
* panel_open: Shows panel
* panel_closed: Unshows panel
*/
// neotheology cloning pod from Eris
/obj/structure/prop/nt_pod
icon = 'icons/obj/structures/decor.dmi'
icon = 'icons/obj/structures/decor32x64.dmi'
icon_state = "nt_pod_mappreview"
bound_height = 64
var/obj/effect/overlay/vis/outside
var/obj/effect/overlay/vis/door
var/obj/effect/overlay/vis/fluid
var/contents_vis_flags = NONE
var/contents_original_pixel_y = 0
/obj/structure/prop/nt_pod/Initialize(mapload)
// Our non-map-preview state
icon_state = "nt_pod"
// Alpha mask to make sure things don't sneak out
var/obj/effect/overlay/vis/mask = new
mask.icon = icon
mask.icon_state = "nt_pod_mask"
mask.render_target = "*nt_podmask[REF(src)]"
mask.vis_flags = VIS_INHERIT_ID
vis_contents += mask
outside = add_vis_overlay(icon, "nt_pod_over", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
door = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
fluid = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
// Gather up our friends
if(mapload)
var/atom/movable/AM = locate() in loc
AM?.forceMove(src)
/obj/structure/prop/nt_pod/Entered(atom/movable/mover)
abduct(mover)
/obj/structure/prop/nt_pod/proc/abduct(var/atom/movable/AM)
// Save old settings
contents_vis_flags = AM.vis_flags
contents_original_pixel_y = AM.pixel_y
// Arrange
AM.add_filter("podmask", 1, alpha_mask_filter(render_source = "nt_podmask[REF(src)]", flags = MASK_INVERSE))
AM.pixel_y = 12
AM.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_DIR
vis_contents += AM
if(ismob(AM))
var/mob/M = AM
buckle_mob(M, TRUE, FALSE)
// TRAP THEM
change_state("closed")
/obj/structure/prop/nt_pod/proc/unduct(var/atom/movable/AM)
// Geddout
vis_contents -= AM
if(ismob(AM))
var/mob/M = AM
unbuckle_mob(M, TRUE)
// Cleanup
AM.remove_filter("podmask")
AM.forceMove(drop_location())
AM.vis_flags = contents_vis_flags
AM.pixel_y = contents_original_pixel_y
/obj/structure/prop/nt_pod/MouseDrop_T(var/atom/movable/AM, var/mob/user)
if(contents.len)
return
if(!ismovable(AM))
return
if(!user.client?.holder)
return
AM.forceMove(src)
/obj/structure/prop/nt_pod/change_state(state)
. = ..()
switch(state)
if("open")
cut_overlay("nt_pod_top_on")
cut_overlay("nt_pod_under")
// Fluid drains
fluid.icon_state = "nothing"
flick("nt_pod_emptying", fluid) // 8ds
sleep(8)
// Door opens
door.icon_state = "nothing"
flick("nt_pod_opening", door) // 9ds
sleep(9)
// GET OUT
outside.layer = BELOW_MOB_LAYER
if(contents.len)
for(var/atom/movable/AM as anything in contents)
unduct(AM)
if("closed")
outside.layer = ABOVE_MOB_LAYER
cut_overlay("nt_pod_top_on")
add_overlay("nt_pod_top_on")
add_overlay("nt_pod_under")
// Door closes
door.icon_state = "nt_pod_glass"
flick("nt_pod_closing", door) // 9ds
sleep(9)
// Fluid fills
fluid.icon_state = "nt_pod_liquid"
flick("nt_pod_filling", fluid) // 8ds
if("panel_open")
cut_overlay("nt_pod_panel")
add_overlay("nt_pod_panel")
if("panel_closed")
cut_overlay("nt_pod_panel")
/**
* Possible 'state' options for change_state(state) are:
*/
+12 -1
View File
@@ -38,4 +38,15 @@
density = FALSE
/obj/structure/prop/rock/small/wateralt
icon_state = "waterrocks2"
icon_state = "waterrocks2"
// bluespace crystal from Eris
/obj/structure/prop/rock/crystal
name = "crystal"
icon = 'icons/obj/props/decor.dmi'
icon_state = "bsc"
/obj/structure/prop/rock/crystal_dust
name = "crystal dust"
icon = 'icons/obj/props/decor.dmi'
icon_state = "bsc_dust"
@@ -0,0 +1,65 @@
//Eris statues
/obj/structure/prop/statue
name = "statue"
desc = "It's art!"
icon = 'icons/obj/props/decor.dmi'
icon_state = "artwork_statue"
/obj/structure/prop/statue/statue1
icon_state = "artwork_statue_1"
/obj/structure/prop/statue/statue2
icon_state = "artwork_statue_2"
/obj/structure/prop/statue/statue3
icon_state = "artwork_statue_3"
/obj/structure/prop/statue/statue4
icon_state = "artwork_statue_4"
/obj/structure/prop/statue/statue5
icon_state = "artwork_statue_5"
//TGMC Ship Mast
/obj/structure/prop/statue/stump_plaque
name = "commemorative stump"
desc = "A wooden stump adorned with a little plaque."
icon = 'icons/obj/props/decor.dmi'
icon_state = "stump"
//World Server statues
/obj/structure/prop/statue
name = "statue"
desc = "A statue."
icon = 'icons/obj/props/decor32x64.dmi'
icon_state = "venus"
/obj/structure/prop/statue/lion
icon_state = "lion"
/obj/structure/prop/statue/angel
icon = 'icons/obj/props/decor.dmi'
icon_state = "angel"
/obj/structure/prop/statue/phoron
name = "phoronic cascade"
desc = "A sculpture made of pure phoron. It is covered in a lacquer that prevents erosion and renders it fireproof. It's safe. Probably."
icon_state = "phoronic"
layer = ABOVE_WINDOW_LAYER
interaction_message = "<span class = 'notice'>Cool to touch and unbelievable smooth. You can almost see your reflection in it.</span>"
/obj/structure/prop/statue/phoron/New()
set_light(2, 3, "#cc66ff")
/obj/structure/prop/statue/pillar
name = "pillar"
desc = "A pillar."
icon_state = "pillar"
/obj/structure/prop/statue/pillar/dark
name = "pillar"
desc = "A dark pillar."
icon_state = "dark_pillar"
@@ -0,0 +1,167 @@
/obj/structure/prop/war
name = "military hardware"
desc = "What is it good for?"
icon = 'icons/obj/props/decor.dmi'
// warheads from TGMC
/obj/structure/prop/war/warhead1
name = "nuclear warhead"
icon_state = "ob_warhead_1"
/obj/structure/prop/war/warhead2
name = "incindiary warhead"
icon_state = "ob_warhead_2"
/obj/structure/prop/war/warhead3
name = "bluespace warhead"
icon_state = "ob_warhead_3"
/obj/structure/prop/war/warhead4
name = "phoron warhead"
icon_state = "ob_warhead_4"
// minirocket pod from TGMC
/obj/structure/prop/war/minirocket_pod
name = "rocket pod"
icon_state = "minirocket_pod"
// sentry console from TGMC
/obj/structure/prop/war/sentry_control
name = "portable sentry gun"
desc = "Needs a dispenser."
icon_state = "tgmc_sentry"
// various weapons from TGMC
/obj/structure/prop/war/tgmc_missile
name = "missile"
desc = "It seems to be some sort of spacecraft-tier ordinance."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "single"
bound_width = 64
/obj/structure/prop/war/tgmc_missile/double
icon_state = "widowmaker"
/obj/structure/prop/war/tgmc_missile/banshee
icon_state = "banshee"
/obj/structure/prop/war/tgmc_missile/keeper
icon_state = "keeper"
/obj/structure/prop/war/tgmc_missile/fatty
icon_state = "fatty"
/obj/structure/prop/war/tgmc_missile/napalm
icon_state = "napalm"
/**
* Possible 'state' options for change_state(state) are:
* empty, single, banshee, keeper, fatty, napalm
*/
// ship weapons from TGMC
/obj/structure/prop/war/tgmc_missile_rack
name = "missile launcher"
desc = "Some sort of spacecraft-tier missile weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "rocket_pod"
bound_height = 64
/obj/structure/prop/war/tgmc_missile_rack/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "rocket_pod"
if("single")
icon_state = "rocket_pod_loaded"
if("banshee")
icon_state = "rocket_pod_loadedb"
if("keeper")
icon_state = "rocket_pod_loadedk"
if("fatty")
icon_state = "rocket_pod_loadedf"
if("napalm")
icon_state = "rocket_pod_loadedn"
/obj/structure/prop/war/tgmc_missile_rack/single
icon_state = "rocket_pod_loaded"
/obj/structure/prop/war/tgmc_missile_rack/banshee
icon_state = "rocket_pod_loadedb"
/obj/structure/prop/war/tgmc_missile_rack/keeper
icon_state = "rocket_pod_loadedk"
/obj/structure/prop/war/tgmc_missile_rack/fatty
icon_state = "rocket_pod_loadedf"
/obj/structure/prop/war/tgmc_missile_rack/napalm
icon_state = "rocket_pod_loadedn"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded
*/
// ship weapons from TGMC
/obj/structure/prop/war/tgmc_minirockets
name = "rocket pod"
desc = "Some sort of spacecraft-tier rocket weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "minirocket_pod"
bound_height = 64
/obj/structure/prop/war/tgmc_minirockets/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "minirocket_pod"
if("loaded")
icon_state = "minirocket_pod_loaded"
/obj/structure/prop/war/tgmc_minirockets/loaded
icon_state = "minirocket_pod_loaded"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded
*/
// ship weapons from TGMC
/obj/structure/prop/war/tgmc_laser
name = "laser cannon"
desc = "Some sort of spacecraft-tier energy weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "laser_beam"
bound_height = 64
/obj/structure/prop/war/tgmc_laser/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "laser_beam"
if("loaded")
icon_state = "laser_beam_loaded"
/obj/structure/prop/war/tgmc_laser/loaded
icon_state = "laser_beam_loaded"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded, loadedempty
*/
// ship weapons from TGMC
/obj/structure/prop/war/tgmc_30mm
name = "30mm cannon"
desc = "Some sort of spacecraft-tier rotary cannon weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "30mm_cannon"
bound_height = 64
/obj/structure/prop/war/tgmc_30mm/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "30mm_cannon"
if("loaded")
icon_state = "30mm_cannon_loaded1"
if("loadedempty")
icon_state = "30mm_cannon_loaded0"
/obj/structure/prop/war/tgmc_30mm/loaded
icon_state = "30mm_cannon_loaded1"
/obj/structure/prop/war/tgmc_30mm/loadedempty
icon_state = "30mm_cannon_loaded0"
@@ -4,6 +4,7 @@
icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
icon_state = "critteropen"
density = TRUE
unacidable = TRUE
var/mob/living/simple_mob/contained
@@ -6,6 +6,7 @@
icon = 'icons/mob/alien.dmi'
icon_state = "nest"
var/health = 100
unacidable = TRUE
/obj/structure/bed/nest/update_icon()
return