Clean up various things

This commit is contained in:
Atermonera
2020-04-03 00:13:32 -07:00
committed by VirgoBot
parent cb91b6dd60
commit d7a9416bb8
51 changed files with 598 additions and 656 deletions

View File

@@ -237,10 +237,9 @@
var/kin_to_el_ratio = 0.1 //How much kinetic energy will be taken from turbine and converted into electricity
var/obj/machinery/atmospherics/pipeturbine/turbine
/obj/machinery/power/turbinemotor/New()
..()
spawn(1)
updateConnection()
/obj/machinery/power/turbinemotor/Initialize()
. = ..()
updateConnection()
/obj/machinery/power/turbinemotor/proc/updateConnection()
turbine = null

View File

@@ -28,9 +28,6 @@ var/list/mannequins_
var/global/list/poster_designs = list()
var/global/list/NT_poster_designs = list()
// Uplinks
var/list/obj/item/device/uplink/world_uplinks = list()
//Preferences stuff
//Hairstyles
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name

View File

@@ -1417,7 +1417,11 @@ var/mob/dview/dview_mob = new
#define VARSET_LIST_CALLBACK(target, var_name, var_value) CALLBACK(GLOBAL_PROC, /proc/___callbackvarset, ##target, ##var_name, ##var_value)
//dupe code because dm can't handle 3 level deep macros
#define VARSET_CALLBACK(datum, var, var_value) CALLBACK(GLOBAL_PROC, /proc/___callbackvarset, ##datum, NAMEOF(##datum, ##var), ##var_value)
<<<<<<< HEAD
//the 3 level deep myth DEBUNKED
=======
//we'll see about those 3-level deep macros
>>>>>>> 3473522... Merge pull request #6904 from VOREStation/pol-cleanup
#define VARSET_IN(datum, var, var_value, time) addtimer(VARSET_CALLBACK(datum, var, var_value), time)
/proc/___callbackvarset(list_or_datum, var_name, var_value)

View File

@@ -293,19 +293,15 @@
else
return
/obj/machinery/computer/scan_consolenew/New()
..()
/obj/machinery/computer/scan_consolenew/Initialize()
. = ..()
for(var/i=0;i<3;i++)
buffers[i+1]=new /datum/dna2/record
spawn(5)
for(dir in list(NORTH,EAST,SOUTH,WEST))
connected = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
if(!isnull(connected))
break
spawn(250)
src.injector_ready = 1
return
return
for(dir in list(NORTH,EAST,SOUTH,WEST))
connected = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
if(connected)
break
VARSET_IN(src, injector_ready, TRUE, 25 SECONDS)
/obj/machinery/computer/scan_consolenew/proc/all_dna_blocks(var/list/buffer)
var/list/arr = list()

View File

@@ -153,11 +153,14 @@
/obj/effect/gateway/active/cult/cultify()
return
/obj/effect/gateway/active/New()
spawn(rand(30,60) SECONDS)
/obj/effect/gateway/active/Initialize()
addtimer(CALLBACK(src, .proc/spawn_and_qdel), rand(30, 60) SECONDS)
/obj/effect/gateway/active/proc/spawn_and_qdel()
if(LAZYLEN(spawnable))
var/t = pick(spawnable)
new t(src.loc)
qdel(src)
new t(get_turf(src))
qdel(src)
/obj/effect/gateway/active/Crossed(var/atom/A)
if(A.is_incorporeal())

View File

@@ -18,23 +18,20 @@
..()
set_light(6, 5, l_color = color_to_use)
/obj/effect/chroma
/obj/effect/temporary_effect/chroma
name = "chroma"
desc = "How are you examining what which cannot be seen?"
invisibility = 101
var/time_to_die = 2 MINUTES //Despawn after this time, if set.
time_to_die = 2 MINUTES //Despawn after this time, if set.
/obj/effect/chroma/New(var/newloc, var/new_color = "#FFFFFF")
..()
/obj/effect/temporary_effect/chroma/Initialize(var/mapload, var/new_color = "#FFFFFF")
. = ..()
set_light(6, 5, l_color = new_color)
if(time_to_die)
spawn(time_to_die)
qdel(src)
/obj/item/weapon/spell/chroma/on_ranged_cast(atom/hit_atom, mob/user)
var/turf/T = get_turf(hit_atom)
if(T)
new /obj/effect/chroma(T, color_to_use)
new /obj/effect/temporary_effect/chroma(T, color_to_use)
to_chat(user, "<span class='notice'>You shift the light onto \the [T].</span>")
qdel(src)

View File

@@ -21,13 +21,12 @@
set_light(3, 2, l_color = "#006AFF")
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
to_chat(owner, "<span class='notice'>Your shield will expire in 3 seconds!</span>")
spawn(5 SECONDS)
if(src)
to_chat(owner, "<span class='danger'>Your shield expires!</span>")
qdel(src)
to_chat(owner, "<span class='notice'>Your shield will expire in 5 seconds!</span>")
QDEL_IN(src, 5 SECONDS)
/obj/item/weapon/spell/reflect/Destroy()
if(owner)
to_chat(owner, "<span class='danger'>Your shield expires!</span>")
spark_system = null
return ..()

View File

@@ -35,12 +35,13 @@
var/instability_power = 5
var/instability_range = 6
/obj/effect/temporary_effect/destablize/New()
..()
spawn(0)
radiate_loop()
/obj/effect/temporary_effect/destablize/Initialize()
. = ..()
radiate_loop()
/obj/effect/temporary_effect/destablize/proc/radiate_loop()
set waitfor = FALSE
while(pulses_remaining)
sleep(5)
for(var/mob/living/L in range(src, instability_range) )

View File

@@ -31,11 +31,15 @@
var/pulse_delay = 2 SECONDS
/obj/effect/temporary_effect/pulse/Initialize()
spawn(0)
pulse_loop()
return ..()
..()
return INITIALIZE_HINT_LATELOAD
/obj/effect/temporary_effect/pulse/LateInitialize()
pulse_loop()
/obj/effect/temporary_effect/pulse/proc/pulse_loop()
set waitfor = FALSE
while(pulses_remaining)
sleep(pulse_delay)
on_pulse()

View File

@@ -395,16 +395,13 @@ update_flag
return 1
//Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0
/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New()
..()
/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/Initialize()
. = ..()
air_contents.gas["sleeping_agent"] = 9*4000
spawn(10)
var/turf/simulated/location = src.loc
if (istype(src.loc))
while (!location.air)
sleep(10)
location.assume_air(air_contents)
air_contents = new
var/turf/simulated/location = src.loc
if (istype(src.loc))
location.assume_air(air_contents)
air_contents = new
return 1
/obj/machinery/portable_atmospherics/canister/nitrogen/New()

View File

@@ -21,18 +21,20 @@
return 1
/obj/machinery/portable_atmospherics/Initialize()
..()
return INITIALIZE_HINT_LATELOAD
/obj/machinery/portable_atmospherics/LateInitialize()
var/obj/machinery/atmospherics/portables_connector/port = locate() in loc
if(port)
connect(port)
update_icon()
/obj/machinery/portable_atmospherics/Destroy()
QDEL_NULL(air_contents)
QDEL_NULL(holding)
. = ..()
/obj/machinery/portable_atmospherics/Initialize()
. = ..()
spawn()
var/obj/machinery/atmospherics/portables_connector/port = locate() in loc
if(port)
connect(port)
update_icon()
return ..()
/obj/machinery/portable_atmospherics/process()
if(!connected_port) //only react when pipe_network will ont it do it for you

View File

@@ -156,24 +156,31 @@ var/global/list/engineering_networks = list(
// AUTONAME
/obj/machinery/camera/autoname
var/number = 0 //camera number in area
//This camera type automatically sets it's name to whatever the area that it's in is called.
/obj/machinery/camera/autoname/New()
..()
spawn(10)
number = 1
var/area/A = get_area(src)
if(A)
for(var/obj/machinery/camera/autoname/C in machines)
if(C == src) continue
var/area/CA = get_area(C)
if(CA.type == A.type)
if(C.number)
number = max(number, C.number+1)
c_tag = "[A.name] #[number]"
invalidateCameraCache()
var/static/list/by_area
/obj/machinery/camera/autoname/Initialize()
. = ..()
var/area/A = get_area(src)
if(!A)
return .
if(!by_area)
by_area = list()
if(!by_area[A.name])
by_area[A.name] = list()
var/list/my_area = by_area[A.name]
my_area += src
var/number = my_area.len
c_tag = "[A.name] #[number]"
invalidateCameraCache()
/obj/machinery/camera/autoname/Destroy()
var/area/A = get_area(src)
if(!A || !by_area || !by_area[A.name])
return ..()
var/list/my_area = by_area[A.name]
my_area -= src
return ..()
// CHECKS

View File

@@ -503,20 +503,18 @@
return src.attack_hand(usr)
/obj/item/weapon/paper/monitorkey
//..()
name = "Monitor Decryption Key"
var/obj/machinery/message_server/server = null
/obj/item/weapon/paper/monitorkey/New()
..()
spawn(10)
if(message_servers)
for(var/obj/machinery/message_server/server in message_servers)
if(!isnull(server))
if(!isnull(server.decryptkey))
info = "<center><h2>Daily Key Reset</h2></center><br>The new message monitor key is '[server.decryptkey]'.<br>Please keep this a secret and away from the clown.<br>If necessary, change the password to a more secure one."
info_links = info
icon_state = "paper_words"
break
/obj/item/weapon/paper/monitorkey/Initialize()
..() //Late init
return INITIALIZE_HINT_LATELOAD
/obj/item/weapon/paper/monitorkey/LateInitialize()
if(message_servers)
for(var/obj/machinery/message_server/server in message_servers)
if(!isnull(server.decryptkey))
info = "<center><h2>Daily Key Reset</h2></center><br>The new message monitor key is '[server.decryptkey]'.<br>Please keep this a secret and away from the clown.<br>If necessary, change the password to a more secure one."
info_links = info
icon_state = "paper_words"
break

View File

@@ -12,17 +12,15 @@
var/time = 30.0
var/title = "Mass Driver Controls"
/obj/machinery/computer/pod/Initialize()
..() //Not returning parent because lateload
return INITIALIZE_HINT_LATELOAD
/obj/machinery/computer/pod/New()
..()
spawn( 5 )
for(var/obj/machinery/mass_driver/M in machines)
if(M.id == id)
connected = M
else
return
return
/obj/machinery/computer/pod/LateInitialize()
for(var/obj/machinery/mass_driver/M in machines)
if(M.id == id)
connected = M
break
/obj/machinery/computer/pod/proc/alarm()
if(stat & (NOPOWER|BROKEN))

View File

@@ -50,13 +50,14 @@
"cold"
)
/obj/machinery/door/firedoor/New()
/obj/machinery/door/firedoor/Initialize()
. = ..()
//Delete ourselves if we find extra mapped in firedoors
for(var/obj/machinery/door/firedoor/F in loc)
if(F != src)
spawn(1)
qdel(src)
return .
log_debug("Duplicate firedoors at [x],[y],[z]")
return INITIALIZE_HINT_QDEL
var/area/A = get_area(src)
ASSERT(istype(A))

View File

@@ -15,19 +15,24 @@
var/otherarea = null
var/image/overlay
/obj/machinery/light_switch/New()
..()
spawn(5)
area = get_area(src)
/obj/machinery/light_switch/Initialize()
. = ..()
if(otherarea)
area = locate(text2path("/area/[otherarea]"))
area = get_area(src)
if(!name)
name = "light switch ([area.name])"
if(otherarea)
area = locate(text2path("/area/[otherarea]"))
on = area.lightswitch
updateicon()
if(!name)
name = "light switch ([area.name])"
on = area.lightswitch
updateicon()
/obj/machinery/light_switch/Destroy()
area = null
overlay = null
return ..()
/obj/machinery/light_switch/proc/updateicon()
if(!overlay)

View File

@@ -120,8 +120,7 @@
var/datum/feed_network/news_network = new /datum/feed_network //The global news-network, which is coincidentally a global list.
var/list/obj/machinery/newscaster/allCasters = list() //Global list that will contain reference to all newscasters in existence.
GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster)
/obj/machinery/newscaster
name = "newscaster"
desc = "A standard newsfeed handler for use on commercial space stations. All the news you absolutely have no use for, in one place!"
@@ -151,7 +150,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
var/securityCaster = 0
// 0 = Caster cannot be used to issue wanted posters
// 1 = the opposite
var/unit_no = 0 //Each newscaster has a unit number
var/static/unit_no_cur = 0 //Each newscaster has a unit number
var/unit_no
//var/datum/feed_message/wanted //We're gonna use a feed_message to store data of the wanted person because fields are similar
//var/wanted_issue = 0 //OBSOLETE
// 0 = there's no WANTED issued, we don't need a special icon_state
@@ -176,19 +176,21 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
name = "Security Newscaster"
securityCaster = 1
/obj/machinery/newscaster/New() //Constructor, ho~
/obj/machinery/newscaster/Initialize()
..() //Not returning . because lateload below
allCasters += src
paper_remaining = 15 // Will probably change this to something better
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) // Let's give it an appropriate unit number
unit_no++
update_icon() //for any custom ones on the map...
spawn(10) //Should be enough time for the node to spawn at tcomms.
node = get_exonet_node()
..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that
unit_no = ++unit_no_cur
paper_remaining = 15
update_icon()
return INITIALIZE_HINT_LATELOAD
/obj/machinery/newscaster/LateInitialize()
node = get_exonet_node()
/obj/machinery/newscaster/Destroy()
allCasters -= src
..()
node = null
return ..()
/obj/machinery/newscaster/update_icon()
if(!ispowered || isbroken)
@@ -325,11 +327,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(6)
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed story to Network.</B></FONT><HR><BR>"
if(channel_name=="")
dat+="<FONT COLOR='maroon'><EFBFBD>Invalid receiving channel name.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Invalid receiving channel name.</FONT><BR>"
if(scanned_user=="Unknown")
dat+="<FONT COLOR='maroon'><EFBFBD>Channel author unverified.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Channel author unverified.</FONT><BR>"
if(msg == "" || msg == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><EFBFBD>Invalid message body.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Invalid message body.</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[3]'>Return</A><BR>"
if(7)
@@ -341,18 +343,18 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else
existing_authors += FC.author
if(scanned_user in existing_authors)
dat+="<FONT COLOR='maroon'><EFBFBD>There already exists a Feed channel under your name.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•There already exists a Feed channel under your name.</FONT><BR>"
if(channel_name=="" || channel_name == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><EFBFBD>Invalid channel name.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Invalid channel name.</FONT><BR>"
var/check = 0
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == channel_name)
check = 1
break
if(check)
dat+="<FONT COLOR='maroon'><EFBFBD>Channel name already in use.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Channel name already in use.</FONT><BR>"
if(scanned_user=="Unknown")
dat+="<FONT COLOR='maroon'><EFBFBD>Channel author unverified.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Channel author unverified.</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[2]'>Return</A><BR>"
if(8)
var/total_num=length(news_network.network_channels)
@@ -466,11 +468,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(16)
dat+="<B><FONT COLOR='maroon'>ERROR: Wanted Issue rejected by Network.</B></FONT><HR><BR>"
if(channel_name=="" || channel_name == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><EFBFBD>Invalid name for person wanted.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Invalid name for person wanted.</FONT><BR>"
if(scanned_user=="Unknown")
dat+="<FONT COLOR='maroon'><EFBFBD>Issue author unverified.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Issue author unverified.</FONT><BR>"
if(msg == "" || msg == "\[REDACTED\]")
dat+="<FONT COLOR='maroon'><EFBFBD>Invalid description.</FONT><BR>"
dat+="<FONT COLOR='maroon'>•Invalid description.</FONT><BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
if(17)
dat+="<B>Wanted Issue successfully deleted from Circulation</B><BR>"
@@ -817,7 +819,7 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob)
switch(screen)
if(0) //Cover
dat+="<DIV ALIGN='center'><B><FONT SIZE=6>The Griffon</FONT></B></div>"
dat+="<DIV ALIGN='center'><FONT SIZE=2>[using_map.company_name]-standard newspaper, for use on [using_map.company_name]<EFBFBD> Space Facilities</FONT></div><HR>"
dat+="<DIV ALIGN='center'><FONT SIZE=2>[using_map.company_name]-standard newspaper, for use on [using_map.company_name]© Space Facilities</FONT></div><HR>"
if(isemptylist(news_content))
if(important_message)
dat+="Contents:<BR><ul><B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [pages+2]\]</FONT><BR></ul>"

View File

@@ -70,20 +70,19 @@
/obj/machinery/vending/Initialize()
. = ..()
wires = new(src)
spawn(4)
if(product_slogans)
slogan_list += splittext(product_slogans, ";")
if(product_slogans)
slogan_list += splittext(product_slogans, ";")
// So not all machines speak at the exact same time.
// The first time this machine says something will be at slogantime + this random value,
// so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
last_slogan = world.time + rand(0, slogan_delay)
// So not all machines speak at the exact same time.
// The first time this machine says something will be at slogantime + this random value,
// so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
last_slogan = world.time + rand(0, slogan_delay)
if(product_ads)
ads_list += splittext(product_ads, ";")
if(product_ads)
ads_list += splittext(product_ads, ";")
build_inventory()
power_change()
build_inventory()
power_change()
/**
* Build produdct_records from the products lists

View File

@@ -15,25 +15,30 @@
var/expand = 1
var/metal = 0
/obj/effect/effect/foam/New(var/loc, var/ismetal = 0)
..(loc)
/obj/effect/effect/foam/Initialize(var/mapload, var/ismetal = 0)
. = ..()
icon_state = "[ismetal? "m" : ""]foam"
metal = ismetal
playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3)
spawn(3 + metal * 3)
process()
checkReagents()
spawn(120)
STOP_PROCESSING(SSobj, src)
sleep(30)
if(metal)
var/obj/structure/foamedmetal/M = new(src.loc)
M.metal = metal
M.updateicon()
flick("[icon_state]-disolve", src)
sleep(5)
qdel(src)
return
addtimer(CALLBACK(src, .proc/post_spread), 3 + metal * 3)
addtimer(CALLBACK(src, .proc/pre_harden), 12 SECONDS)
addtimer(CALLBACK(src, .proc/harden), 15 SECONDS)
/obj/effect/effect/foam/proc/post_spread()
process()
checkReagents()
/obj/effect/effect/foam/proc/pre_harden()
STOP_PROCESSING(SSobj, src)
/obj/effect/effect/foam/proc/harden()
if(metal)
var/obj/structure/foamedmetal/M = new(src.loc)
M.metal = metal
M.updateicon()
flick("[icon_state]-disolve", src)
QDEL_IN(src, 5)
/obj/effect/effect/foam/proc/checkReagents() // transfer any reagents to the floor
if(!metal && reagents)

View File

@@ -5,11 +5,9 @@
mouse_opacity = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSBLOB
/obj/effect/effect/water/New(loc)
..()
spawn(150) // In case whatever made it forgets to delete it
if(src)
qdel(src)
/obj/effect/effect/water/Initialize()
. = ..()
QDEL_IN(src, 15 SECONDS)
/obj/effect/effect/water/proc/set_color() // Call it after you move reagents to it
icon += reagents.get_color()

View File

@@ -20,7 +20,6 @@ var/global/list/image/splatter_cache=list()
var/synthblood = 0
var/list/datum/disease2/disease/virus2 = list()
var/amount = 5
var/drytime
/obj/effect/decal/cleanable/blood/reveal_blood()
if(!fluorescent)
@@ -33,13 +32,8 @@ var/global/list/image/splatter_cache=list()
if(invisibility != 100)
invisibility = 100
amount = 0
STOP_PROCESSING(SSobj, src)
..(ignore=1)
/obj/effect/decal/cleanable/blood/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/effect/decal/cleanable/blood/New()
..()
update_icon()
@@ -52,12 +46,7 @@ var/global/list/image/splatter_cache=list()
if (B.blood_DNA)
blood_DNA |= B.blood_DNA.Copy()
qdel(B)
drytime = world.time + DRYING_TIME * (amount+1)
START_PROCESSING(SSobj, src)
/obj/effect/decal/cleanable/blood/process()
if(world.time > drytime)
dry()
addtimer(CALLBACK(src, .proc/dry), DRYING_TIME * (amount+1))
/obj/effect/decal/cleanable/blood/update_icon()
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
@@ -116,7 +105,6 @@ var/global/list/image/splatter_cache=list()
desc = drydesc
color = adjust_brightness(color, -50)
amount = 0
STOP_PROCESSING(SSobj, src)
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
..()
@@ -241,14 +229,18 @@ var/global/list/image/splatter_cache=list()
random_icon_states = list("mucus")
var/list/datum/disease2/disease/virus2 = list()
var/dry=0 // Keeps the lag down
var/dry = 0 // Keeps the lag down
/obj/effect/decal/cleanable/mucus/New()
spawn(DRYING_TIME * 2)
dry=1
/obj/effect/decal/cleanable/mucus/Initialize()
. = ..()
VARSET_IN(src, dry, TRUE, DRYING_TIME * 2)
//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry
/obj/effect/decal/cleanable/mucus/mapped/New()
..()
/obj/effect/decal/cleanable/mucus/mapped/Initialize()
. = ..()
virus2 |= new /datum/disease2/disease
virus2[1].makerandom()
/obj/effect/decal/cleanable/mucus/mapped/Destroy()
virus2.Cut()
return ..()

View File

@@ -36,8 +36,7 @@ GLOBAL_LIST_EMPTY(all_beam_points)
if(make_beams_on_init)
create_beams()
if(use_timer)
spawn(initial_delay)
handle_beam_timer()
addtimer(CALLBACK(src, .proc/handle_beam_timer), initial_delay)
return ..()
/obj/effect/map_effect/beam_point/Destroy()

View File

@@ -14,11 +14,10 @@
invisibility = 0
var/time_to_die = 10 SECONDS // Afer which, it will delete itself.
/obj/effect/temporary_effect/New()
..()
/obj/effect/temporary_effect/Initialize()
. = ..()
if(time_to_die)
spawn(time_to_die)
qdel(src)
QDEL_IN(src, time_to_die)
// Shown really briefly when attacking with axes.
/obj/effect/temporary_effect/cleave_attack

View File

@@ -38,12 +38,9 @@ GLOBAL_LIST_BOILERPLATE(all_portals, /obj/effect/portal)
return
return
/obj/effect/portal/New()
..() // Necessary for the list boilerplate to work
spawn(300)
qdel(src)
return
return
/obj/effect/portal/Initialize()
. = ..()
QDEL_IN(src, 30 SECONDS)
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
if(istype(M, /obj/effect)) //sparks don't teleport

View File

@@ -78,8 +78,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Parameters: None
// Description: Adds the new communicator to the global list of all communicators, sorts the list, obtains a reference to the Exonet node, then tries to
// assign the device to the holder's name automatically in a spectacularly shitty way.
/obj/item/device/communicator/New()
..()
/obj/item/device/communicator/Initialize()
. = ..()
all_communicators += src
all_communicators = sortAtom(all_communicators)
node = get_exonet_node()
@@ -87,16 +87,22 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
camera = new(src)
camera.name = "[src] #[rand(100,999)]"
camera.c_tag = camera.name
//This is a pretty terrible way of doing this.
spawn(5 SECONDS) //Wait for our mob to finish spawning.
if(ismob(loc))
register_device(loc.name)
initialize_exonet(loc)
else if(istype(loc, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = loc
if(ismob(S.loc))
register_device(S.loc.name)
initialize_exonet(S.loc)
addtimer(CALLBACK(src, .proc/register_to_holder), 5 SECONDS)
// Proc: register_to_holder()
// Parameters: None
// Description: Tries to register ourselves to the mob that we've presumably spawned in. Not the most amazing way of doing this.
/obj/item/device/communicator/proc/register_to_holder()
if(ismob(loc))
register_device(loc.name)
initialize_exonet(loc)
else if(istype(loc, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = loc
if(ismob(S.loc))
register_device(S.loc.name)
initialize_exonet(S.loc)
// Proc: examine()
// Parameters: user - the user doing the examining
@@ -275,14 +281,13 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
// Proc: New()
// Parameters: None
// Description: Gives ghosts an exonet address based on their key and ghost name.
/mob/observer/dead/New()
/mob/observer/dead/Initialize()
. = ..()
spawn(20)
exonet = new(src)
if(client)
exonet.make_address("communicator-[src.client]-[src.client.prefs.real_name]")
else
exonet.make_address("communicator-[key]-[src.real_name]")
exonet = new(src)
if(client)
exonet.make_address("communicator-[src.client]-[src.client.prefs.real_name]")
else
exonet.make_address("communicator-[key]-[src.real_name]")
// Proc: Destroy()
// Parameters: None

View File

@@ -1,3 +1,5 @@
GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
/obj/item/device/uplink
var/welcome = "Welcome, Operative" // Welcoming menu message
var/uses // Numbers of crystals
@@ -12,32 +14,29 @@
var/datum/mind/uplink_owner = null
var/used_TC = 0
var/offer_time = 10 MINUTES //The time increment per discount offered
var/next_offer_time //The time a discount will next be offered
var/next_offer_time
var/datum/uplink_item/discount_item //The item to be discounted
var/discount_amount //The amount as a percent the item will be discounted by
/obj/item/device/uplink/nano_host()
return loc
/obj/item/device/uplink/New(var/location, var/datum/mind/owner = null, var/telecrystals = DEFAULT_TELECRYSTAL_AMOUNT)
..()
src.uplink_owner = owner
/obj/item/device/uplink/Initialize(var/mapload, var/datum/mind/owner = null, var/telecrystals = DEFAULT_TELECRYSTAL_AMOUNT)
. = ..()
uplink_owner = owner
purchase_log = list()
world_uplinks += src
if(owner)
uses = owner.tcrystals
else
uses = telecrystals
START_PROCESSING(SSobj, src)
/obj/item/device/uplink/Destroy()
world_uplinks -= src
STOP_PROCESSING(SSobj, src)
return ..()
addtimer(CALLBACK(src, .proc/next_offer), offer_time) //It seems like only the /hidden type actually makes use of this...
/obj/item/device/uplink/get_item_cost(var/item_type, var/item_cost)
return (discount_item && (item_type == discount_item)) ? max(1, round(item_cost*discount_amount)) : item_cost
/obj/item/device/uplink/proc/next_offer()
return //Stub, used on children.
// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it.
/* How to create an uplink in 3 easy steps!
@@ -58,21 +57,20 @@
var/exploit_id // Id of the current exploit record we are viewing
// The hidden uplink MUST be inside an obj/item's contents.
/obj/item/device/uplink/hidden/New()
spawn(2)
if(!istype(src.loc, /obj/item))
qdel(src)
..()
/obj/item/device/uplink/hidden/Initialize()
. = ..()
if(!isitem(loc))
return INITIALIZE_HINT_QDEL
nanoui_data = list()
update_nano_data()
/obj/item/device/uplink/hidden/process()
if(world.time > next_offer_time)
discount_item = default_uplink_selection.get_random_item(INFINITY)
discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1)
next_offer_time = world.time + offer_time
update_nano_data()
SSnanoui.update_uis(src)
/obj/item/device/uplink/hidden/next_offer()
discount_item = default_uplink_selection.get_random_item(INFINITY)
discount_amount = pick(90;0.9, 80;0.8, 70;0.7, 60;0.6, 50;0.5, 40;0.4, 30;0.3, 20;0.2, 10;0.1)
update_nano_data()
SSnanoui.update_uis(src)
next_offer_time = world.time + offer_time
addtimer(CALLBACK(src, .proc/next_offer), offer_time)
// Toggles the uplink on and off. Normally this will bypass the item's normal functions and go to the uplink menu, if activated.
/obj/item/device/uplink/hidden/proc/toggle()

View File

@@ -4,21 +4,15 @@
desc = "This item spawns stack of 50 of a given material."
icon = 'icons/misc/mark.dmi'
icon_state = "x4"
// var/material = ""
var/obj/item/stack/type_to_spawn = null
/obj/fiftyspawner/New()
spawn()
//spawns the 50-stack and qdels self
..()
if(istype(src.loc, /obj/structure/loot_pile)) //Spawning from a lootpile is weird, need to wait until we're out of it to do our work.
while(istype(src.loc, /obj/structure/loot_pile))
sleep(1)
// var/obj_path = text2path("/obj/item/stack/[material]")
var/obj/item/stack/M = new type_to_spawn(src.loc)
M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty
M.update_icon() // Some stacks have different sprites depending on how full they are.
qdel(src)
/obj/fiftyspawner/Initialize()
..() //We're not returning . because we're going to ask to be deleted.
var/obj/item/stack/M = new type_to_spawn(get_turf(src))
M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty
M.update_icon() // Some stacks have different sprites depending on how full they are.
return INITIALIZE_HINT_QDEL //Bye!
/obj/fiftyspawner/rods
name = "stack of rods" //this needs to be defined for cargo

View File

@@ -64,10 +64,9 @@
icon_state = "vehiclecrate"
/obj/structure/largecrate/vehicle/Initialize()
..()
spawn(1)
for(var/obj/O in contents)
O.update_icon()
. = ..()
for(var/obj/O in contents)
O.update_icon()
/obj/structure/largecrate/vehicle/bike
name = "spacebike crate"

View File

@@ -65,18 +65,13 @@
/obj/structure/ghost_pod/automatic/Initialize()
. = ..()
spawn(delay_to_self_open)
if(src)
trigger()
addtimer(CALLBACK(src, .proc/trigger), delay_to_self_open)
/obj/structure/ghost_pod/automatic/trigger()
. = ..()
if(. == FALSE) // If we failed to get a volunteer, try again later if allowed to.
if(delay_to_try_again)
spawn(delay_to_try_again)
if(src)
trigger()
addtimer(CALLBACK(src, .proc/trigger), delay_to_try_again)
// This type is triggered by a ghost clicking on it, as opposed to a living player. A ghost query type isn't needed.
/obj/structure/ghost_pod/ghost_activated

View File

@@ -197,16 +197,18 @@
P.rotate_auto(new_bearing)
/obj/structure/prop/prismcontrol/Initialize()
..()
. = ..()
if(my_turrets.len) //Preset controls.
for(var/obj/structure/prop/prism/P in my_turrets)
P.remote_dial = src
return
spawn()
for(var/obj/structure/prop/prism/P in orange(src, world.view)) //Don't search a huge area.
if(P.dialID == dialID && !P.remote_dial && P.external_control_lock)
my_turrets |= P
P.remote_dial = src
else
. = INITIALIZE_HINT_LATELOAD
/obj/structure/prop/prismcontrol/LateInitialize()
for(var/obj/structure/prop/prism/P in orange(src, world.view)) //Don't search a huge area.
if(P.dialID == dialID && !P.remote_dial && P.external_control_lock)
my_turrets |= P
P.remote_dial = src
/obj/structure/prop/prismcontrol/Destroy()
for(var/obj/structure/prop/prism/P in my_turrets)

View File

@@ -9,11 +9,9 @@
buckle_lying = 0 //force people to sit up in chairs when buckled
var/propelled = 0 // Check for fire-extinguisher-driven chairs
/obj/structure/bed/chair/New()
..() //Todo make metal/stone chairs display as thrones
spawn(3) //sorry. i don't think there's a better way to do this.
update_layer()
return
/obj/structure/bed/chair/Initialize()
. = ..()
update_layer()
/obj/structure/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()

View File

@@ -17,12 +17,9 @@
var/datum/radio_frequency/radio_connection
var/deadman = FALSE
/obj/item/device/assembly/signaler/New()
..()
spawn(40)
set_frequency(frequency)
return
/obj/item/device/assembly/signaler/Initialize()
. = ..()
set_frequency(frequency)
/obj/item/device/assembly/signaler/activate()
if(!process_cooldown())

View File

@@ -12,56 +12,45 @@
var/access_code = 0
var/datum/money_account/linked_account
/obj/item/device/eftpos/New()
..()
machine_id = "[station_name()] EFTPOS #[num_financial_terminals++]"
access_code = rand(1111,111111)
spawn(0)
print_reference()
//create a short manual as well
var/obj/item/weapon/paper/R = new(src.loc)
R.name = "Steps to success: Correct EFTPOS Usage"
/*
R.info += "<b>When first setting up your EFTPOS device:</b>"
R.info += "1. Memorise your EFTPOS command code (provided with all EFTPOS devices).<br>"
R.info += "2. Confirm that your EFTPOS device is connected to your local accounts database. For additional assistance with this step, contact NanoTrasen IT Support<br>"
R.info += "3. Confirm that your EFTPOS device has been linked to the account that you wish to recieve funds for all transactions processed on this device.<br>"
R.info += "<b>When starting a new transaction with your EFTPOS device:</b>"
R.info += "1. Ensure the device is UNLOCKED so that new data may be entered.<br>"
R.info += "2. Enter a sum of money and reference message for the new transaction.<br>"
R.info += "3. Lock the transaction, it is now ready for your customer.<br>"
R.info += "4. If at this stage you wish to modify or cancel your transaction, you may simply reset (unlock) your EFTPOS device.<br>"
R.info += "5. Give your EFTPOS device to the customer, they must authenticate the transaction by swiping their ID card and entering their PIN number.<br>"
R.info += "6. If done correctly, the transaction will be logged to both accounts with the reference you have entered, the terminal ID of your EFTPOS device and the money transferred across accounts.<br>"
*/
//Temptative new manual:
R.info += "<b>First EFTPOS setup:</b><br>"
R.info += "1. Memorise your EFTPOS command code (provided with all EFTPOS devices).<br>"
R.info += "2. Connect the EFTPOS to the account in which you want to receive the funds.<br><br>"
R.info += "<b>When starting a new transaction:</b><br>"
R.info += "1. Enter the amount of money you want to charge and a purpose message for the new transaction.<br>"
R.info += "2. Lock the new transaction. If you want to modify or cancel the transaction, you simply have to reset your EFTPOS device.<br>"
R.info += "3. Give the EFTPOS device to your customer, he/she must finish the transaction by swiping their ID card or a charge card with enough funds.<br>"
R.info += "4. If everything is done correctly, the money will be transferred. To unlock the device you will have to reset the EFTPOS device.<br>"
//stamp the paper
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
stampoverlay.icon_state = "paper_stamp-cent"
if(!R.stamped)
R.stamped = new
R.offset_x += 0
R.offset_y += 0
R.ico += "paper_stamp-cent"
R.stamped += /obj/item/weapon/stamp
R.overlays += stampoverlay
R.stamps += "<HR><i>This paper has been stamped by the EFTPOS device.</i>"
/obj/item/device/eftpos/Initialize()
. = ..()
//by default, connect to the station account
//the user of the EFTPOS device can change the target account though, and no-one will be the wiser (except whoever's being charged)
linked_account = station_account
machine_id = "[station_name()] EFTPOS #[num_financial_terminals++]"
access_code = rand(1111,111111)
print_reference()
//create a short manual as well
var/obj/item/weapon/paper/R = new(src.loc)
R.name = "Steps to success: Correct EFTPOS Usage"
//Temptative new manual:
R.info += "<b>First EFTPOS setup:</b><br>"
R.info += "1. Memorise your EFTPOS command code (provided with all EFTPOS devices).<br>"
R.info += "2. Connect the EFTPOS to the account in which you want to receive the funds.<br><br>"
R.info += "<b>When starting a new transaction:</b><br>"
R.info += "1. Enter the amount of money you want to charge and a purpose message for the new transaction.<br>"
R.info += "2. Lock the new transaction. If you want to modify or cancel the transaction, you simply have to reset your EFTPOS device.<br>"
R.info += "3. Give the EFTPOS device to your customer, he/she must finish the transaction by swiping their ID card or a charge card with enough funds.<br>"
R.info += "4. If everything is done correctly, the money will be transferred. To unlock the device you will have to reset the EFTPOS device.<br>"
//stamp the paper
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
stampoverlay.icon_state = "paper_stamp-cent"
if(!R.stamped)
R.stamped = new
R.offset_x += 0
R.offset_y += 0
R.ico += "paper_stamp-cent"
R.stamped += /obj/item/weapon/stamp
R.overlays += stampoverlay
R.stamps += "<HR><i>This paper has been stamped by the EFTPOS device.</i>"
/obj/item/device/eftpos/Destroy()
linked_account = null
return ..()
/obj/item/device/eftpos/proc/print_reference()
var/obj/item/weapon/paper/R = new(src.loc)
R.name = "Reference: [eftpos_name]"

View File

@@ -4338,11 +4338,10 @@
icon_state = "bagelplain"
/obj/item/weapon/reagent_containers/food/snacks/bageltwo/Initialize()
. = ..()
..() //Not returning . because asking to be qdel'd below.
spawn_bagels()
spawn_bagels()
sleep(30)
qdel(src)
return INITIALIZE_HINT_QDEL
/obj/item/weapon/reagent_containers/food/snacks/bageltwo/proc/spawn_bagels()
var/build_path = /obj/item/weapon/reagent_containers/food/snacks/bagelplain

View File

@@ -22,21 +22,27 @@
/obj/machinery/gibber/autogibber
var/turf/input_plate
/obj/machinery/gibber/autogibber/New()
..()
spawn(5)
for(var/i in cardinal)
var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
if(input_obj)
if(isturf(input_obj.loc))
input_plate = input_obj.loc
gib_throw_dir = i
qdel(input_obj)
break
/obj/machinery/gibber/autogibber/Initialize()
. = ..()
for(var/i in cardinal)
var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
if(input_obj)
if(isturf(input_obj.loc))
input_plate = input_obj.loc
gib_throw_dir = i
qdel(input_obj)
break
if(!input_plate)
log_misc("a [src] didn't find an input plate.")
return
if(!input_plate)
log_misc("a [src] didn't find an input plate.")
/obj/machinery/gibber/Destroy()
occupant = null
return ..()
/obj/machinery/gibber/autogibber/Destroy()
input_plate = null
return ..()
/obj/machinery/gibber/autogibber/Bumped(var/atom/A)
if(!input_plate) return

View File

@@ -33,16 +33,15 @@
/obj/machinery/station_map/New()
..()
holomap_datum = new()
original_zLevel = loc.z
SSholomaps.station_holomaps += src
flags |= ON_BORDER // Why? It doesn't help if its not density
/obj/machinery/station_map/Initialize()
. = ..()
holomap_datum = new()
original_zLevel = loc.z
SSholomaps.station_holomaps += src
if(SSholomaps.holomaps_initialized)
spawn(1) // Tragically we need to spawn this in order to give the frame construcing us time to set pixel_x/y
setup_holomap()
setup_holomap()
/obj/machinery/station_map/Destroy()
SSholomaps.station_holomaps -= src
@@ -64,14 +63,12 @@
holomap_datum.initialize_holomap(T, reinit = TRUE)
small_station_map = image(SSholomaps.extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"], dir = dir)
// small_station_map.plane = LIGHTING_PLANE // Not until we do planes ~Leshana
// small_station_map.layer = LIGHTING_LAYER+1 // Weird things will happen!
floor_markings = image('icons/obj/machines/stationmap.dmi', "decal_station_map")
floor_markings.dir = src.dir
// floor_markings.plane = ABOVE_TURF_PLANE // Not until we do planes ~Leshana
// floor_markings.layer = DECAL_LAYER
update_icon()
spawn(1) //When built from frames, need to allow time for it to set pixel_x and pixel_y
update_icon()
/obj/machinery/station_map/attack_hand(var/mob/user)
if(watching_mob && (watching_mob != user))
@@ -172,6 +169,9 @@
update_icon()
/obj/machinery/station_map/update_icon()
if(!holomap_datum)
return //Not yet.
overlays.Cut()
if(stat & BROKEN)
icon_state = "station_mapb"

View File

@@ -13,46 +13,42 @@
var/datum/seed/seed
var/potency = -1
<<<<<<< HEAD
/obj/item/weapon/reagent_containers/food/snacks/grown/Initialize(newloc,planttype)
..()
=======
/obj/item/weapon/reagent_containers/food/snacks/grown/Initialize(var/mapload, var/planttype)
. = ..()
>>>>>>> 3473522... Merge pull request #6904 from VOREStation/pol-cleanup
if(!dried_type)
dried_type = type
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
pixel_x = rand(-5.0, 5)
pixel_y = rand(-5.0, 5)
// Fill the object up with the appropriate reagents.
if(planttype)
plantname = planttype
/obj/item/weapon/reagent_containers/food/snacks/grown/Initialize()
..()
spawn()
if(!plantname)
return
if(!plantname)
log_debug("Plantname not provided and and [src] requires it at [x],[y],[z]")
return INITIALIZE_HINT_QDEL
if(!plant_controller)
sleep(250) // ugly hack, should mean roundstart plants are fine.
if(!plant_controller)
to_world("<span class='danger'>Plant controller does not exist and [src] requires it. Aborting.</span>")
qdel(src)
return
seed = plant_controller.seeds[plantname]
seed = plant_controller.seeds[plantname]
if(!seed)
log_debug("Plant name '[plantname]' does not exist and [src] requires it at [x],[y],[z]")
return INITIALIZE_HINT_QDEL
if(!seed)
return
name = "[seed.seed_name]"
trash = seed.get_trash_type()
name = "[seed.seed_name]"
trash = seed.get_trash_type()
update_icon()
update_icon()
if(!seed.chems)
return
potency = seed.get_trait(TRAIT_POTENCY)
potency = seed.get_trait(TRAIT_POTENCY)
if(seed.chems)
for(var/rid in seed.chems)
var/list/reagent_data = seed.chems[rid]
if(reagent_data && reagent_data.len)

View File

@@ -276,60 +276,54 @@
)
cant_hold = list(/obj/item/weapon/tool/screwdriver/power)
/obj/item/weapon/storage/bag/circuits/basic/New()
..()
spawn(2 SECONDS) // So the list has time to initialize.
// for(var/obj/item/integrated_circuit/IC in all_integrated_circuits)
// if(IC.spawn_flags & IC_SPAWN_DEFAULT)
// for(var/i = 1 to 4)
// new IC.type(src)
new /obj/item/weapon/storage/bag/circuits/mini/arithmetic(src)
new /obj/item/weapon/storage/bag/circuits/mini/trig(src)
new /obj/item/weapon/storage/bag/circuits/mini/input(src)
new /obj/item/weapon/storage/bag/circuits/mini/output(src)
new /obj/item/weapon/storage/bag/circuits/mini/memory(src)
new /obj/item/weapon/storage/bag/circuits/mini/logic(src)
new /obj/item/weapon/storage/bag/circuits/mini/time(src)
new /obj/item/weapon/storage/bag/circuits/mini/reagents(src)
new /obj/item/weapon/storage/bag/circuits/mini/transfer(src)
new /obj/item/weapon/storage/bag/circuits/mini/converter(src)
new /obj/item/weapon/storage/bag/circuits/mini/power(src)
/obj/item/weapon/storage/bag/circuits/basic/Initialize()
. = ..()
new /obj/item/weapon/storage/bag/circuits/mini/arithmetic(src)
new /obj/item/weapon/storage/bag/circuits/mini/trig(src)
new /obj/item/weapon/storage/bag/circuits/mini/input(src)
new /obj/item/weapon/storage/bag/circuits/mini/output(src)
new /obj/item/weapon/storage/bag/circuits/mini/memory(src)
new /obj/item/weapon/storage/bag/circuits/mini/logic(src)
new /obj/item/weapon/storage/bag/circuits/mini/time(src)
new /obj/item/weapon/storage/bag/circuits/mini/reagents(src)
new /obj/item/weapon/storage/bag/circuits/mini/transfer(src)
new /obj/item/weapon/storage/bag/circuits/mini/converter(src)
new /obj/item/weapon/storage/bag/circuits/mini/power(src)
new /obj/item/device/electronic_assembly(src)
new /obj/item/device/assembly/electronic_assembly(src)
new /obj/item/device/assembly/electronic_assembly(src)
new /obj/item/device/multitool(src)
new /obj/item/weapon/tool/screwdriver(src)
new /obj/item/weapon/tool/crowbar(src)
make_exact_fit()
new /obj/item/device/electronic_assembly(src)
new /obj/item/device/assembly/electronic_assembly(src)
new /obj/item/device/assembly/electronic_assembly(src)
new /obj/item/device/multitool(src)
new /obj/item/weapon/tool/screwdriver(src)
new /obj/item/weapon/tool/crowbar(src)
make_exact_fit()
/obj/item/weapon/storage/bag/circuits/all/New()
..()
spawn(2 SECONDS) // So the list has time to initialize.
new /obj/item/weapon/storage/bag/circuits/mini/arithmetic/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/trig/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/input/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/output/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/memory/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/logic/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/smart/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/manipulation/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/time/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/reagents/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/transfer/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/converter/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/power/all(src)
/obj/item/weapon/storage/bag/circuits/all/Initialize()
. = ..()
new /obj/item/weapon/storage/bag/circuits/mini/arithmetic/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/trig/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/input/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/output/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/memory/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/logic/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/smart/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/manipulation/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/time/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/reagents/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/transfer/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/converter/all(src)
new /obj/item/weapon/storage/bag/circuits/mini/power/all(src)
new /obj/item/device/electronic_assembly(src)
new /obj/item/device/electronic_assembly/medium(src)
new /obj/item/device/electronic_assembly/large(src)
new /obj/item/device/electronic_assembly/drone(src)
new /obj/item/device/integrated_electronics/wirer(src)
new /obj/item/device/integrated_electronics/debugger(src)
new /obj/item/weapon/tool/crowbar(src)
make_exact_fit()
new /obj/item/device/electronic_assembly(src)
new /obj/item/device/electronic_assembly/medium(src)
new /obj/item/device/electronic_assembly/large(src)
new /obj/item/device/electronic_assembly/drone(src)
new /obj/item/device/integrated_electronics/wirer(src)
new /obj/item/device/integrated_electronics/debugger(src)
new /obj/item/weapon/tool/crowbar(src)
make_exact_fit()
/obj/item/weapon/storage/bag/circuits/mini/
/obj/item/weapon/storage/bag/circuits/mini
name = "circuit box"
desc = "Used to partition categories of circuits, for a neater workspace."
w_class = 2

View File

@@ -11,17 +11,16 @@
var/obj/machinery/mineral/output = null
/obj/machinery/mineral/unloading_machine/New()
..()
spawn( 5 )
for (var/dir in cardinal)
src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
if(src.input) break
for (var/dir in cardinal)
src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
if(src.output) break
return
return
/obj/machinery/mineral/unloading_machine/Initialize()
. = ..()
for(var/dir in cardinal)
input = locate(/obj/machinery/mineral/input, get_step(src, dir))
if(input)
break
for(var/dir in cardinal)
output = locate(/obj/machinery/mineral/output, get_step(src, dir))
if(output)
break
/obj/machinery/mineral/unloading_machine/process()
if (src.output && src.input)

View File

@@ -1,6 +1,4 @@
/**********************Mint**************************/
/obj/machinery/mineral/mint
name = "Coin press"
icon = 'icons/obj/stationobjs.dmi'
@@ -21,43 +19,43 @@
var/coinsToProduce = 10
/obj/machinery/mineral/mint/New()
..()
spawn( 5 )
for (var/dir in cardinal)
src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
if(src.input) break
for (var/dir in cardinal)
src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
if(src.output) break
START_PROCESSING(SSobj, src)
return
return
/obj/machinery/mineral/mint/Initialize()
. = ..()
for (var/dir in cardinal)
input = locate(/obj/machinery/mineral/input, get_step(src, dir))
if(input)
break
for (var/dir in cardinal)
output = locate(/obj/machinery/mineral/output, get_step(src, dir))
if(output)
break
/obj/machinery/mineral/mint/process()
if ( src.input)
var/obj/item/stack/O
O = locate(/obj/item/stack, input.loc)
if(O)
var/processed = 1
switch(O.get_material_name())
if("gold")
amt_gold += 100 * O.get_amount()
if("silver")
amt_silver += 100 * O.get_amount()
if("diamond")
amt_diamond += 100 * O.get_amount()
if("phoron")
amt_phoron += 100 * O.get_amount()
if("uranium")
amt_uranium += 100 * O.get_amount()
if(DEFAULT_WALL_MATERIAL)
amt_iron += 100 * O.get_amount()
else
processed = 0
if(processed)
qdel(O)
if(!input)
return
var/obj/item/stack/O = locate(/obj/item/stack, input.loc)
if(!O)
return
var/processed = 1
switch(O.get_material_name())
if("gold")
amt_gold += 100 * O.get_amount()
if("silver")
amt_silver += 100 * O.get_amount()
if("diamond")
amt_diamond += 100 * O.get_amount()
if("phoron")
amt_phoron += 100 * O.get_amount()
if("uranium")
amt_uranium += 100 * O.get_amount()
if(DEFAULT_WALL_MATERIAL)
amt_iron += 100 * O.get_amount()
else
processed = 0
if(processed)
qdel(O)
/obj/machinery/mineral/mint/attack_hand(user as mob)

View File

@@ -63,9 +63,7 @@
transform = matrix()*0.75
animate(src, transform = matrix()*1.5, time = timetoburst)
// Queue the actual bursting
spawn(timetoburst)
if(!QDELETED(src))
burst(creator)
addtimer(CALLBACK(src, ./proc/burst, creator), timetoburst)
/obj/effect/resonance/proc/burst(var/creator = null)
var/turf/T = get_turf(src)

View File

@@ -41,21 +41,23 @@
client.eye = new_eye
/mob/living/silicon/ai/proc/create_eyeobj(var/newloc)
if(eyeobj) destroy_eyeobj()
if(!newloc) newloc = src.loc
if(eyeobj)
destroy_eyeobj()
if(!newloc)
newloc = src.loc
eyeobj = new /mob/observer/eye/aiEye(newloc)
eyeobj.owner = src
eyeobj.name = "[src.name] (AI Eye)" // Give it a name
if(client) client.eye = eyeobj
if(client)
client.eye = eyeobj
SetName(src.name)
// Intiliaze the eye by assigning it's "ai" variable to us. Then set it's loc to us.
/mob/living/silicon/ai/New()
..()
/mob/living/silicon/ai/Initialize()
. = ..()
create_eyeobj()
spawn(5)
if(eyeobj)
eyeobj.loc = src.loc
if(eyeobj)
eyeobj.loc = src.loc
/mob/living/silicon/ai/Destroy()
destroy_eyeobj()

View File

@@ -394,11 +394,10 @@
var/skin = null //Same as medbot, set to tox or ointment for the respective kits.
w_class = ITEMSIZE_NORMAL
/obj/item/weapon/firstaid_arm_assembly/New()
..()
spawn(5) // Terrible. TODO: fix
if(skin)
overlays += image('icons/obj/aibots.dmi', "kit_skin_[src.skin]")
/obj/item/weapon/firstaid_arm_assembly/Initialize()
. = ..()
if(skin)
overlays += image('icons/obj/aibots.dmi', "kit_skin_[src.skin]")
/obj/item/weapon/firstaid_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()

View File

@@ -360,8 +360,7 @@
. = ..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("slimejelly", 1)
spawn(rand(1200,1500))//the egg takes a while to "ripen"
Grow()
addtimer(CALLBACK(src, ./proc/Grow), rand(120 SECONDS, 150 SECONDS))
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/proc/Grow()
grown = 1

View File

@@ -27,9 +27,11 @@
/obj/machinery/power/generator/Initialize()
soundloop = new(list(src), FALSE)
desc = initial(desc) + " Rated for [round(max_power/1000)] kW."
spawn(1)
reconnect()
return ..()
..() //Not returned, because...
return INITIALIZE_HINT_LATELOAD
/obj/machinery/power/generator/LateInitialize()
reconnect()
/obj/machinery/power/generator/Destroy()
QDEL_NULL(soundloop)

View File

@@ -13,15 +13,13 @@
var/lastgenlev = -1
/obj/machinery/power/generator_type2/New()
..()
spawn(5)
input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90))
input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90))
if(!input1 || !input2)
stat |= BROKEN
updateicon()
/obj/machinery/power/generator_type2/Initialize()
. = ..()
input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90))
input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90))
if(!input1 || !input2)
stat |= BROKEN
updateicon()
/obj/machinery/power/generator_type2/proc/updateicon()

View File

@@ -24,27 +24,17 @@
var/effectiverange = 25
// Borrows code from cloning computer
/obj/machinery/computer/gravity_control_computer/New()
..()
spawn(5)
updatemodules()
return
return
/obj/machinery/gravity_generator/New()
..()
spawn(5)
locatelocalareas()
return
return
/obj/machinery/computer/gravity_control_computer/Initialize()
. = ..()
updatemodules()
/obj/machinery/gravity_generator/Initialize()
. = ..()
locatelocalareas()
/obj/machinery/computer/gravity_control_computer/proc/updatemodules()
src.gravity_generator = findgenerator()
/obj/machinery/gravity_generator/proc/locatelocalareas()
for(var/area/A in range(src,effectiverange))
if(A.name == "Space")

View File

@@ -56,36 +56,32 @@
charge -= smes_amt
return smes_amt / SMESRATE
/obj/machinery/power/smes/Initialize()
. = ..()
if(!powernet)
connect_to_network()
/obj/machinery/power/smes/New()
..()
spawn(5)
if(!powernet)
connect_to_network()
dir_loop:
for(var/d in cardinal)
var/turf/T = get_step(src, d)
for(var/obj/machinery/power/terminal/term in T)
if(term && term.dir == turn(d, 180))
terminal = term
break dir_loop
if(!terminal)
stat |= BROKEN
return
terminal.master = src
if(!terminal.powernet)
terminal.connect_to_network()
update_icon()
dir_loop:
for(var/d in cardinal)
var/turf/T = get_step(src, d)
for(var/obj/machinery/power/terminal/term in T)
if(term && term.dir == turn(d, 180))
terminal = term
break dir_loop
if(!terminal)
stat |= BROKEN
return
terminal.master = src
if(!terminal.powernet)
terminal.connect_to_network()
update_icon()
if(!should_be_mapped)
warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z")
return
if(!should_be_mapped)
warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z")
/obj/machinery/power/smes/Destroy()
terminal = null
return ..()
/obj/machinery/power/smes/disconnect_terminal()
if(terminal)

View File

@@ -10,11 +10,10 @@
var/deploying
var/deployed
/obj/structure/droppod_door/New(var/newloc, var/autoopen)
..(newloc)
/obj/structure/droppod_door/Initialize(var/mapload, var/autoopen)
. = ..()
if(autoopen)
spawn(100)
deploy()
addtimer(CALLBACK(src, .proc/deploy), 10 SECONDS)
/obj/structure/droppod_door/attack_ai(var/mob/user)
if(!user.Adjacent(src))

View File

@@ -29,23 +29,24 @@
// create a new disposal
// find the attached trunk (if present) and init gas resvr.
/obj/machinery/disposal/New()
..()
spawn(5)
trunk = locate() in src.loc
if(!trunk)
mode = 0
flush = 0
else
trunk.linked = src // link the pipe trunk to self
/obj/machinery/disposal/Initialize()
. = ..()
trunk = locate() in loc
if(!trunk)
mode = 0
flush = 0
else
trunk.linked = src // link the pipe trunk to self
air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME)
update()
air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME)
update()
/obj/machinery/disposal/Destroy()
eject()
if(trunk)
trunk.linked = null
trunk = null
return ..()
// attack by item places it in to disposal
@@ -1308,46 +1309,39 @@
icon_state = "pipe-t"
var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet
/obj/structure/disposalpipe/trunk/New()
..()
/obj/structure/disposalpipe/trunk/Initialize()
..() //Lateload below
dpdir = dir
spawn(1)
getlinked()
return INITIALIZE_HINT_LATELOAD
/obj/structure/disposalpipe/trunk/LateInitialize()
if(!linked)
getlinked()
update()
return
/obj/structure/disposalpipe/trunk/Destroy()
if(linked)
if(istype(linked, /obj/machinery/disposal))
var/obj/machinery/disposal/D = linked
D.trunk = null
linked = null
return ..()
/obj/structure/disposalpipe/trunk/proc/getlinked()
linked = null
var/obj/machinery/disposal/D = locate() in src.loc
var/obj/machinery/disposal/D = locate() in loc
if(D)
linked = D
if (!D.trunk)
if(!D.trunk)
D.trunk = src
var/obj/structure/disposaloutlet/O = locate() in src.loc
var/obj/structure/disposaloutlet/O = locate() in loc
if(O)
linked = O
update()
return
// Override attackby so we disallow trunkremoval when somethings ontop
// Override attackby so we disallow trunkremoval when somethings ontop
/obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user)
//Disposal bins or chutes
/*
These shouldn't be required
var/obj/machinery/disposal/D = locate() in src.loc
if(D && D.anchored)
return
//Disposal outlet
var/obj/structure/disposaloutlet/O = locate() in src.loc
if(O && O.anchored)
return
*/
//Disposal constructors
var/obj/structure/disposalconstruct/C = locate() in src.loc
if(C && C.anchored)
@@ -1439,72 +1433,70 @@
var/turf/target // this will be where the output objects are 'thrown' to.
var/mode = 0
New()
..()
/obj/structure/disposaloutlet/Initialize()
. = ..()
spawn(1)
target = get_ranged_target_turf(src, dir, 10)
target = get_ranged_target_turf(src, dir, 10)
var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc
if(trunk)
trunk.linked = src // link the pipe trunk to self
var/obj/structure/disposalpipe/trunk/trunk = locate() in loc
if(trunk)
trunk.linked = src // link the pipe trunk to self
// expel the contents of the holder object, then delete it
// called when the holder exits the outlet
proc/expel(var/obj/structure/disposalholder/H)
/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H)
flick("outlet-open", src)
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
sleep(20) //wait until correct animation frame
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
flick("outlet-open", src)
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
sleep(20) //wait until correct animation frame
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
if(H)
for(var/atom/movable/AM in H)
AM.forceMove(src.loc)
AM.pipe_eject(dir)
if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
spawn(5)
AM.throw_at(target, 3, 1)
H.vent_gas(src.loc)
qdel(H)
if(H)
for(var/atom/movable/AM in H)
AM.forceMove(src.loc)
AM.pipe_eject(dir)
if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
spawn(5)
AM.throw_at(target, 3, 1)
H.vent_gas(src.loc)
qdel(H)
return
/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user)
if(!I || !user)
return
attackby(var/obj/item/I, var/mob/user)
if(!I || !user)
src.add_fingerprint(user)
if(I.is_screwdriver())
if(mode==0)
mode=1
to_chat(user, "You remove the screws around the power connection.")
playsound(src, I.usesound, 50, 1)
return
else if(mode==1)
mode=0
to_chat(user, "You attach the screws around the power connection.")
playsound(src, I.usesound, 50, 1)
return
else if(istype(I, /obj/item/weapon/weldingtool) && mode==1)
var/obj/item/weapon/weldingtool/W = I
if(W.remove_fuel(0,user))
playsound(src, W.usesound, 100, 1)
to_chat(user, "You start slicing the floorweld off the disposal outlet.")
if(do_after(user,20 * W.toolspeed))
if(!src || !W.isOn()) return
to_chat(user, "You sliced the floorweld off the disposal outlet.")
var/obj/structure/disposalconstruct/C = new (src.loc)
src.transfer_fingerprints_to(C)
C.ptype = 7 // 7 = outlet
C.update()
C.anchored = 1
C.density = 1
qdel(src)
return
else
to_chat(user, "You need more welding fuel to complete this task.")
return
src.add_fingerprint(user)
if(I.is_screwdriver())
if(mode==0)
mode=1
to_chat(user, "You remove the screws around the power connection.")
playsound(src, I.usesound, 50, 1)
return
else if(mode==1)
mode=0
to_chat(user, "You attach the screws around the power connection.")
playsound(src, I.usesound, 50, 1)
return
else if(istype(I, /obj/item/weapon/weldingtool) && mode==1)
var/obj/item/weapon/weldingtool/W = I
if(W.remove_fuel(0,user))
playsound(src, W.usesound, 100, 1)
to_chat(user, "You start slicing the floorweld off the disposal outlet.")
if(do_after(user,20 * W.toolspeed))
if(!src || !W.isOn()) return
to_chat(user, "You sliced the floorweld off the disposal outlet.")
var/obj/structure/disposalconstruct/C = new (src.loc)
src.transfer_fingerprints_to(C)
C.ptype = 7 // 7 = outlet
C.update()
C.anchored = 1
C.density = 1
qdel(src)
return
else
to_chat(user, "You need more welding fuel to complete this task.")
return
// called when movable is expelled from a disposal pipe or outlet
// by default does nothing, override for special behaviour

View File

@@ -13,12 +13,11 @@
var/obj/machinery/artifact_scanpad/owned_scanner = null
var/last_process = 0
/obj/machinery/artifact_harvester/New()
..()
spawn(50) //Delay so the scan pad has time to actually spawn in
owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir) //connect to a nearby scanner pad
if(!owned_scanner)
owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src)
/obj/machinery/artifact_harvester/Initialize()
. = ..()
owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir)
if(!owned_scanner)
owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src)
/obj/machinery/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I,/obj/item/weapon/anobattery))