mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
controllers, datums, game
This commit is contained in:
@@ -9,7 +9,7 @@ PROCESSING_SUBSYSTEM_DEF(traits)
|
|||||||
wait = 10
|
wait = 10
|
||||||
runlevels = RUNLEVEL_GAME
|
runlevels = RUNLEVEL_GAME
|
||||||
|
|
||||||
var/list/traits = list() //Assoc. list of all roundstart trait datums; "name" = /path/
|
var/list/traits = list() //Assoc. list of all roundstart trait datum types; "name" = /path/
|
||||||
var/list/trait_points = list() //Assoc. list of trait names and their "point cost"; positive numbers are good traits, and negative ones are bad
|
var/list/trait_points = list() //Assoc. list of trait names and their "point cost"; positive numbers are good traits, and negative ones are bad
|
||||||
var/list/trait_objects = list() //A list of all trait objects in the game, since some may process
|
var/list/trait_objects = list() //A list of all trait objects in the game, since some may process
|
||||||
|
|
||||||
@@ -24,11 +24,10 @@ PROCESSING_SUBSYSTEM_DEF(traits)
|
|||||||
traits[initial(T.name)] = T
|
traits[initial(T.name)] = T
|
||||||
trait_points[initial(T.name)] = initial(T.value)
|
trait_points[initial(T.name)] = initial(T.value)
|
||||||
|
|
||||||
/datum/controller/subsystem/processing/traits/proc/AssignTraits(mob/living/user, client/cli)
|
/datum/controller/subsystem/processing/traits/proc/AssignTraits(mob/living/user, client/cli, spawn_effects)
|
||||||
if(!isnewplayer(user))
|
|
||||||
GenerateTraits(cli)
|
GenerateTraits(cli)
|
||||||
for(var/V in cli.prefs.character_traits)
|
for(var/V in cli.prefs.character_traits)
|
||||||
user.add_trait_datum(V)
|
user.add_trait_datum(V, spawn_effects)
|
||||||
|
|
||||||
/datum/controller/subsystem/processing/traits/proc/GenerateTraits(client/user)
|
/datum/controller/subsystem/processing/traits/proc/GenerateTraits(client/user)
|
||||||
if(user.prefs.character_traits.len)
|
if(user.prefs.character_traits.len)
|
||||||
|
|||||||
@@ -387,6 +387,8 @@ SUBSYSTEM_DEF(ticker)
|
|||||||
captainless=0
|
captainless=0
|
||||||
if(player.mind.assigned_role != player.mind.special_role)
|
if(player.mind.assigned_role != player.mind.special_role)
|
||||||
SSjob.EquipRank(N, player.mind.assigned_role, 0)
|
SSjob.EquipRank(N, player.mind.assigned_role, 0)
|
||||||
|
if(CONFIG_GET(flag/roundstart_traits))
|
||||||
|
SStraits.AssignTraits(player, N.client, TRUE)
|
||||||
CHECK_TICK
|
CHECK_TICK
|
||||||
if(captainless)
|
if(captainless)
|
||||||
for(var/mob/dead/new_player/N in GLOB.player_list)
|
for(var/mob/dead/new_player/N in GLOB.player_list)
|
||||||
|
|||||||
@@ -458,7 +458,7 @@ SUBSYSTEM_DEF(timer)
|
|||||||
if (wait >= 1 && callback && callback.object && callback.object != GLOBAL_PROC && QDELETED(callback.object))
|
if (wait >= 1 && callback && callback.object && callback.object != GLOBAL_PROC && QDELETED(callback.object))
|
||||||
stack_trace("addtimer called with a callback assigned to a qdeleted object")
|
stack_trace("addtimer called with a callback assigned to a qdeleted object")
|
||||||
|
|
||||||
wait = max(wait, world.tick_lag)
|
wait = max(wait, 0)
|
||||||
|
|
||||||
if(wait >= INFINITY)
|
if(wait >= INFINITY)
|
||||||
CRASH("Attempted to create timer with INFINITY delay")
|
CRASH("Attempted to create timer with INFINITY delay")
|
||||||
|
|||||||
@@ -223,18 +223,20 @@
|
|||||||
/datum/browser/modal/listpicker
|
/datum/browser/modal/listpicker
|
||||||
var/valueslist = list()
|
var/valueslist = list()
|
||||||
|
|
||||||
/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox")
|
/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox", width, height, slidecolor)
|
||||||
if (!User)
|
if (!User)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/output = {"<form><input type="hidden" name="src" value="[REF(src)]"><ul class="sparse">"}
|
var/output = {"<form><input type="hidden" name="src" value="[REF(src)]"><ul class="sparse">"}
|
||||||
|
|
||||||
if (inputtype == "checkbox" || inputtype == "radio")
|
if (inputtype == "checkbox" || inputtype == "radio")
|
||||||
for (var/i in values)
|
for (var/i in values)
|
||||||
|
var/div_slider = slidecolor
|
||||||
|
if(!i["allowed_edit"])
|
||||||
|
div_slider = "locked"
|
||||||
output += {"<li>
|
output += {"<li>
|
||||||
<label class="switch">
|
<label class="switch">
|
||||||
<input type="[inputtype]" value="1" name="[i["name"]]"[i["checked"] ? " checked" : ""]>
|
<input type="[inputtype]" value="1" name="[i["name"]]"[i["checked"] ? " checked" : ""][i["allowed_edit"] ? "" : " onclick='return false' onkeydown='return false'"]>
|
||||||
<div class="slider"></div>
|
<div class="slider [div_slider ? "[div_slider]" : ""]"></div>
|
||||||
<span>[i["name"]]</span>
|
<span>[i["name"]]</span>
|
||||||
</label>
|
</label>
|
||||||
</li>"}
|
</li>"}
|
||||||
@@ -252,7 +254,7 @@
|
|||||||
output += {"<button type="submit" name="button" value="3" style="font-size:large;float:right">[Button3]</button>"}
|
output += {"<button type="submit" name="button" value="3" style="font-size:large;float:right">[Button3]</button>"}
|
||||||
|
|
||||||
output += {"</form></div>"}
|
output += {"</form></div>"}
|
||||||
..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, 350, 350, src, StealFocus, Timeout)
|
..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, width, height, src, StealFocus, Timeout)
|
||||||
set_content(output)
|
set_content(output)
|
||||||
|
|
||||||
/datum/browser/modal/listpicker/Topic(href,href_list)
|
/datum/browser/modal/listpicker/Topic(href,href_list)
|
||||||
@@ -272,30 +274,32 @@
|
|||||||
opentime = 0
|
opentime = 0
|
||||||
close()
|
close()
|
||||||
|
|
||||||
/proc/presentpicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values, inputtype = "checkbox")
|
/proc/presentpicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values, inputtype = "checkbox", width, height, slidecolor)
|
||||||
if (!istype(User))
|
if (!istype(User))
|
||||||
if (istype(User, /client/))
|
if (istype(User, /client/))
|
||||||
var/client/C = User
|
var/client/C = User
|
||||||
User = C.mob
|
User = C.mob
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values, inputtype)
|
var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values, inputtype, width, height, slidecolor)
|
||||||
A.open()
|
A.open()
|
||||||
A.wait()
|
A.wait()
|
||||||
if (A.selectedbutton)
|
if (A.selectedbutton)
|
||||||
return list("button" = A.selectedbutton, "values" = A.valueslist)
|
return list("button" = A.selectedbutton, "values" = A.valueslist)
|
||||||
|
|
||||||
/proc/input_bitfield(var/mob/User, title, bitfield, current_value)
|
/proc/input_bitfield(var/mob/User, title, bitfield, current_value, nwidth = 350, nheight = 350, nslidecolor, allowed_edit_list = null)
|
||||||
if (!User || !(bitfield in GLOB.bitfields))
|
if (!User || !(bitfield in GLOB.bitfields))
|
||||||
return
|
return
|
||||||
var/list/pickerlist = list()
|
var/list/pickerlist = list()
|
||||||
for (var/i in GLOB.bitfields[bitfield])
|
for (var/i in GLOB.bitfields[bitfield])
|
||||||
|
var/can_edit = 1
|
||||||
|
if(!isnull(allowed_edit_list) && !(allowed_edit_list & GLOB.bitfields[bitfield][i]))
|
||||||
|
can_edit = 0
|
||||||
if (current_value & GLOB.bitfields[bitfield][i])
|
if (current_value & GLOB.bitfields[bitfield][i])
|
||||||
pickerlist += list(list("checked" = 1, "value" = GLOB.bitfields[bitfield][i], "name" = i))
|
pickerlist += list(list("checked" = 1, "value" = GLOB.bitfields[bitfield][i], "name" = i, "allowed_edit" = can_edit))
|
||||||
else
|
else
|
||||||
pickerlist += list(list("checked" = 0, "value" = GLOB.bitfields[bitfield][i], "name" = i))
|
pickerlist += list(list("checked" = 0, "value" = GLOB.bitfields[bitfield][i], "name" = i, "allowed_edit" = can_edit))
|
||||||
var/list/result = presentpicker(User, "", title, Button1="Save", Button2 = "Cancel", Timeout=FALSE, values = pickerlist)
|
var/list/result = presentpicker(User, "", title, Button1="Save", Button2 = "Cancel", Timeout=FALSE, values = pickerlist, width = nwidth, height = nheight, slidecolor = nslidecolor)
|
||||||
|
|
||||||
if (islist(result))
|
if (islist(result))
|
||||||
if (result["button"] == 2) // If the user pressed the cancel button
|
if (result["button"] == 2) // If the user pressed the cancel button
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -109,6 +109,7 @@
|
|||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
//Proc to use when you 100% want to try to infect someone (ignoreing protective clothing and such), as long as they aren't immune
|
//Proc to use when you 100% want to try to infect someone (ignoreing protective clothing and such), as long as they aren't immune
|
||||||
/mob/living/proc/ForceContractDisease(datum/disease/D, make_copy = TRUE, del_on_fail = FALSE)
|
/mob/living/proc/ForceContractDisease(datum/disease/D, make_copy = TRUE, del_on_fail = FALSE)
|
||||||
if(!CanContractDisease(D))
|
if(!CanContractDisease(D))
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
var/mob_trait //if applicable, apply and remove this mob trait
|
var/mob_trait //if applicable, apply and remove this mob trait
|
||||||
var/mob/living/trait_holder
|
var/mob/living/trait_holder
|
||||||
|
|
||||||
/datum/trait/New(mob/living/trait_mob)
|
/datum/trait/New(mob/living/trait_mob, spawn_effects)
|
||||||
..()
|
..()
|
||||||
if(!trait_mob || (human_only && !ishuman(trait_mob)) || trait_mob.has_trait_datum(type))
|
if(!trait_mob || (human_only && !ishuman(trait_mob)) || trait_mob.has_trait_datum(type))
|
||||||
qdel(src)
|
qdel(src)
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
trait_holder.add_trait(mob_trait, ROUNDSTART_TRAIT)
|
trait_holder.add_trait(mob_trait, ROUNDSTART_TRAIT)
|
||||||
START_PROCESSING(SStraits, src)
|
START_PROCESSING(SStraits, src)
|
||||||
add()
|
add()
|
||||||
if(!SSticker.HasRoundStarted()) //on roundstart or on latejoin; latejoin code is in new_player.dm
|
if(spawn_effects)
|
||||||
on_spawn()
|
on_spawn()
|
||||||
addtimer(CALLBACK(src, .proc/post_add), 30)
|
addtimer(CALLBACK(src, .proc/post_add), 30)
|
||||||
|
|
||||||
@@ -38,16 +38,25 @@
|
|||||||
SStraits.trait_objects -= src
|
SStraits.trait_objects -= src
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/datum/trait/proc/transfer_mob(mob/living/to_mob)
|
||||||
|
trait_holder.roundstart_traits -= src
|
||||||
|
to_mob.roundstart_traits += src
|
||||||
|
trait_holder = to_mob
|
||||||
|
on_transfer()
|
||||||
|
|
||||||
/datum/trait/proc/add() //special "on add" effects
|
/datum/trait/proc/add() //special "on add" effects
|
||||||
/datum/trait/proc/on_spawn() //these should only trigger when the character is being created for the first time, i.e. roundstart/latejoin
|
/datum/trait/proc/on_spawn() //these should only trigger when the character is being created for the first time, i.e. roundstart/latejoin
|
||||||
/datum/trait/proc/remove() //special "on remove" effects
|
/datum/trait/proc/remove() //special "on remove" effects
|
||||||
/datum/trait/proc/on_process() //process() has some special checks, so this is the actual process
|
/datum/trait/proc/on_process() //process() has some special checks, so this is the actual process
|
||||||
/datum/trait/proc/post_add() //for text, disclaimers etc. given after you spawn in with the trait
|
/datum/trait/proc/post_add() //for text, disclaimers etc. given after you spawn in with the trait
|
||||||
|
/datum/trait/proc/on_transfer() //code called when the trait is transferred to a new mob
|
||||||
|
|
||||||
/datum/trait/process()
|
/datum/trait/process()
|
||||||
if(QDELETED(trait_holder))
|
if(QDELETED(trait_holder))
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return
|
return
|
||||||
|
if(trait_holder.stat == DEAD)
|
||||||
|
return
|
||||||
on_process()
|
on_process()
|
||||||
|
|
||||||
/mob/living/proc/get_trait_string(medical) //helper string. gets a string of all the traits the mob has
|
/mob/living/proc/get_trait_string(medical) //helper string. gets a string of all the traits the mob has
|
||||||
@@ -67,6 +76,16 @@
|
|||||||
return "None"
|
return "None"
|
||||||
return dat.Join("<br>")
|
return dat.Join("<br>")
|
||||||
|
|
||||||
|
/mob/living/proc/cleanse_trait_datums() //removes all trait datums
|
||||||
|
for(var/V in roundstart_traits)
|
||||||
|
var/datum/trait/T = V
|
||||||
|
qdel(T)
|
||||||
|
|
||||||
|
/mob/living/proc/transfer_trait_datums(mob/living/to_mob)
|
||||||
|
for(var/V in roundstart_traits)
|
||||||
|
var/datum/trait/T = V
|
||||||
|
T.transfer_mob(to_mob)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Commented version of Nearsighted to help you add your own traits
|
Commented version of Nearsighted to help you add your own traits
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
if(trait_holder.reagents.has_reagent("mindbreaker"))
|
if(trait_holder.reagents.has_reagent("mindbreaker"))
|
||||||
trait_holder.hallucination = 0
|
trait_holder.hallucination = 0
|
||||||
return
|
return
|
||||||
if(prob(1)) //we'll all be mad soon enough
|
if(prob(2)) //we'll all be mad soon enough
|
||||||
madness()
|
madness()
|
||||||
|
|
||||||
/datum/trait/insanity/proc/madness(mad_fools)
|
/datum/trait/insanity/proc/madness(mad_fools)
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
return examine(user)
|
return examine(user)
|
||||||
|
|
||||||
//Start growing a human clone in the pod!
|
//Start growing a human clone in the pod!
|
||||||
/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, se, mindref, datum/species/mrace, list/features, factions)
|
/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, se, mindref, datum/species/mrace, list/features, factions, list/traits)
|
||||||
if(panel_open)
|
if(panel_open)
|
||||||
return FALSE
|
return FALSE
|
||||||
if(mess || attempting)
|
if(mess || attempting)
|
||||||
@@ -198,6 +198,9 @@
|
|||||||
if(H)
|
if(H)
|
||||||
H.faction |= factions
|
H.faction |= factions
|
||||||
|
|
||||||
|
for(var/V in traits)
|
||||||
|
new V(H)
|
||||||
|
|
||||||
H.set_cloned_appearance()
|
H.set_cloned_appearance()
|
||||||
|
|
||||||
H.suiciding = FALSE
|
H.suiciding = FALSE
|
||||||
@@ -316,6 +319,7 @@
|
|||||||
SPEAK("An emergency ejection of [clonemind.name] has occurred. Survival not guaranteed.")
|
SPEAK("An emergency ejection of [clonemind.name] has occurred. Survival not guaranteed.")
|
||||||
to_chat(user, "<span class='notice'>You force an emergency ejection. </span>")
|
to_chat(user, "<span class='notice'>You force an emergency ejection. </span>")
|
||||||
go_out()
|
go_out()
|
||||||
|
mob_occupant.apply_vore_prefs()
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
@@ -398,6 +402,7 @@
|
|||||||
/obj/machinery/clonepod/container_resist(mob/living/user)
|
/obj/machinery/clonepod/container_resist(mob/living/user)
|
||||||
if(user.stat == CONSCIOUS)
|
if(user.stat == CONSCIOUS)
|
||||||
go_out()
|
go_out()
|
||||||
|
mob_occupant.apply_vore_prefs()
|
||||||
|
|
||||||
/obj/machinery/clonepod/emp_act(severity)
|
/obj/machinery/clonepod/emp_act(severity)
|
||||||
var/mob/living/mob_occupant = occupant
|
var/mob/living/mob_occupant = occupant
|
||||||
@@ -405,6 +410,7 @@
|
|||||||
connected_message(Gibberish("EMP-caused Accidental Ejection", 0))
|
connected_message(Gibberish("EMP-caused Accidental Ejection", 0))
|
||||||
SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of [mob_occupant.real_name] prematurely." ,0))
|
SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of [mob_occupant.real_name] prematurely." ,0))
|
||||||
go_out()
|
go_out()
|
||||||
|
mob_occupant.apply_vore_prefs()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/clonepod/ex_act(severity, target)
|
/obj/machinery/clonepod/ex_act(severity, target)
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
if(pod.occupant)
|
if(pod.occupant)
|
||||||
continue //how though?
|
continue //how though?
|
||||||
|
|
||||||
if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"]))
|
if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["traits"]))
|
||||||
temp = "[R.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
temp = "[R.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
||||||
records -= R
|
records -= R
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@
|
|||||||
else if(pod.occupant)
|
else if(pod.occupant)
|
||||||
temp = "<font class='bad'>Cloning cycle already in progress.</font>"
|
temp = "<font class='bad'>Cloning cycle already in progress.</font>"
|
||||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||||
else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"]))
|
else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"], C.fields["traits"]))
|
||||||
temp = "[C.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
temp = "[C.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
||||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||||
records.Remove(C)
|
records.Remove(C)
|
||||||
@@ -482,6 +482,10 @@
|
|||||||
R.fields["blood_type"] = dna.blood_type
|
R.fields["blood_type"] = dna.blood_type
|
||||||
R.fields["features"] = dna.features
|
R.fields["features"] = dna.features
|
||||||
R.fields["factions"] = mob_occupant.faction
|
R.fields["factions"] = mob_occupant.faction
|
||||||
|
R.fields["traits"] = list()
|
||||||
|
for(var/V in mob_occupant.roundstart_traits)
|
||||||
|
var/datum/trait/T = V
|
||||||
|
R.fields["traits"] += T.type
|
||||||
|
|
||||||
if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning.
|
if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning.
|
||||||
R.fields["mind"] = "[REF(mob_occupant.mind)]"
|
R.fields["mind"] = "[REF(mob_occupant.mind)]"
|
||||||
|
|||||||
@@ -101,8 +101,6 @@
|
|||||||
/obj/machinery/door/airlock/Initialize()
|
/obj/machinery/door/airlock/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
wires = new /datum/wires/airlock(src)
|
wires = new /datum/wires/airlock(src)
|
||||||
if (cyclelinkeddir)
|
|
||||||
cyclelinkairlock()
|
|
||||||
if(frequency)
|
if(frequency)
|
||||||
set_frequency(frequency)
|
set_frequency(frequency)
|
||||||
|
|
||||||
@@ -127,6 +125,8 @@
|
|||||||
|
|
||||||
/obj/machinery/door/airlock/LateInitialize()
|
/obj/machinery/door/airlock/LateInitialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
if (cyclelinkeddir)
|
||||||
|
cyclelinkairlock()
|
||||||
if(abandoned)
|
if(abandoned)
|
||||||
var/outcome = rand(1,100)
|
var/outcome = rand(1,100)
|
||||||
switch(outcome)
|
switch(outcome)
|
||||||
@@ -178,6 +178,7 @@
|
|||||||
limit--
|
limit--
|
||||||
while(!FoundDoor && limit)
|
while(!FoundDoor && limit)
|
||||||
if (!FoundDoor)
|
if (!FoundDoor)
|
||||||
|
log_world("### MAP WARNING, [src] at [get_area_name(src, TRUE)] [COORD(src)] failed to find a valid airlock to cyclelink with!")
|
||||||
return
|
return
|
||||||
FoundDoor.cyclelinkedairlock = src
|
FoundDoor.cyclelinkedairlock = src
|
||||||
cyclelinkedairlock = FoundDoor
|
cyclelinkedairlock = FoundDoor
|
||||||
|
|||||||
@@ -178,3 +178,4 @@
|
|||||||
priority = "Extreme"
|
priority = "Extreme"
|
||||||
else
|
else
|
||||||
priority = "Undetermined"
|
priority = "Undetermined"
|
||||||
|
|
||||||
|
|||||||
@@ -19,3 +19,4 @@
|
|||||||
/obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0)
|
/obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0)
|
||||||
..()
|
..()
|
||||||
defense_action.Remove(user)
|
defense_action.Remove(user)
|
||||||
|
|
||||||
|
|||||||
@@ -27,3 +27,4 @@
|
|||||||
..()
|
..()
|
||||||
switch_damtype_action.Remove(user)
|
switch_damtype_action.Remove(user)
|
||||||
phasing_action.Remove(user)
|
phasing_action.Remove(user)
|
||||||
|
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ update_label("John Doe", "Clowny")
|
|||||||
|
|
||||||
/obj/item/card/id/mining
|
/obj/item/card/id/mining
|
||||||
name = "mining ID"
|
name = "mining ID"
|
||||||
access = list(ACCESS_MINERAL_STOREROOM) // CITADEL CHANGE removes golem's ability to get on the station willy nilly.
|
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
|
||||||
|
|
||||||
/obj/item/card/id/away
|
/obj/item/card/id/away
|
||||||
name = "a perfectly generic identification card"
|
name = "a perfectly generic identification card"
|
||||||
|
|||||||
@@ -547,7 +547,6 @@
|
|||||||
/obj/item/circuitboard/machine/tesla_coil/Initialize()
|
/obj/item/circuitboard/machine/tesla_coil/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(build_path)
|
if(build_path)
|
||||||
name = "Tesla Coil (Machine Board)"
|
|
||||||
build_path = PATH_POWERCOIL
|
build_path = PATH_POWERCOIL
|
||||||
|
|
||||||
/obj/item/circuitboard/machine/tesla_coil/attackby(obj/item/I, mob/user, params)
|
/obj/item/circuitboard/machine/tesla_coil/attackby(obj/item/I, mob/user, params)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
//CREATOR'S NOTE: DO NOT FUCKING GIVE THIS TO BOTANY!
|
//CREATOR'S NOTE: DO NOT FUCKING GIVE THIS TO BOTANY!
|
||||||
/obj/item/hot_potato
|
/obj/item/hot_potato
|
||||||
name = "hot potato"
|
name = "hot potato"
|
||||||
|
|||||||
@@ -192,6 +192,14 @@
|
|||||||
for(var/i in 1 to 7)
|
for(var/i in 1 to 7)
|
||||||
new /obj/item/reagent_containers/glass/beaker( src )
|
new /obj/item/reagent_containers/glass/beaker( src )
|
||||||
|
|
||||||
|
/obj/item/storage/box/medsprays
|
||||||
|
name = "box of medical sprayers"
|
||||||
|
desc = "A box full of medical sprayers, with unscrewable caps and precision spray heads."
|
||||||
|
|
||||||
|
/obj/item/storage/box/medsprays/PopulateContents()
|
||||||
|
for(var/i in 1 to 7)
|
||||||
|
new /obj/item/reagent_containers/medspray( src )
|
||||||
|
|
||||||
/obj/item/storage/box/injectors
|
/obj/item/storage/box/injectors
|
||||||
name = "box of DNA injectors"
|
name = "box of DNA injectors"
|
||||||
desc = "This box contains injectors, it seems."
|
desc = "This box contains injectors, it seems."
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
icon_state = "waterballoon-e"
|
icon_state = "waterballoon-e"
|
||||||
item_state = "balloon-empty"
|
item_state = "balloon-empty"
|
||||||
|
|
||||||
|
|
||||||
/obj/item/toy/balloon/New()
|
/obj/item/toy/balloon/New()
|
||||||
create_reagents(10)
|
create_reagents(10)
|
||||||
..()
|
..()
|
||||||
@@ -286,6 +287,7 @@
|
|||||||
w_class = WEIGHT_CLASS_SMALL
|
w_class = WEIGHT_CLASS_SMALL
|
||||||
resistance_flags = FLAMMABLE
|
resistance_flags = FLAMMABLE
|
||||||
|
|
||||||
|
|
||||||
/obj/item/toy/windupToolbox
|
/obj/item/toy/windupToolbox
|
||||||
name = "windup toolbox"
|
name = "windup toolbox"
|
||||||
desc = "A replica toolbox that rumbles when you turn the key."
|
desc = "A replica toolbox that rumbles when you turn the key."
|
||||||
@@ -332,7 +334,7 @@
|
|||||||
|
|
||||||
/obj/item/toy/katana
|
/obj/item/toy/katana
|
||||||
name = "replica katana"
|
name = "replica katana"
|
||||||
desc = "Woefully underpowered in D20. Almost has a sharp edge."
|
desc = "Woefully underpowered in D20."
|
||||||
icon = 'icons/obj/items_and_weapons.dmi'
|
icon = 'icons/obj/items_and_weapons.dmi'
|
||||||
icon_state = "katana"
|
icon_state = "katana"
|
||||||
item_state = "katana"
|
item_state = "katana"
|
||||||
|
|||||||
@@ -96,3 +96,5 @@
|
|||||||
..()
|
..()
|
||||||
new /obj/item/storage/box/pillbottles(src)
|
new /obj/item/storage/box/pillbottles(src)
|
||||||
new /obj/item/storage/box/pillbottles(src)
|
new /obj/item/storage/box/pillbottles(src)
|
||||||
|
new /obj/item/storage/box/medsprays(src)
|
||||||
|
new /obj/item/storage/box/medsprays(src)
|
||||||
Reference in New Issue
Block a user