mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Merge branch 'master' of github.com:Baystation12/Baystation12 into dev-freeze
Conflicts: code/game/objects/items/weapons/implants/implant.dm code/modules/reagents/Chemistry-Machinery.dm
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -4,9 +4,3 @@
|
|||||||
*.rsc
|
*.rsc
|
||||||
*.dmb
|
*.dmb
|
||||||
*.lk
|
*.lk
|
||||||
|
|
||||||
#ignore any files in config/, except those in subdirectories.
|
|
||||||
/config/*
|
|
||||||
!/config/*/*
|
|
||||||
|
|
||||||
/baystation12.int
|
|
||||||
|
|||||||
@@ -75,6 +75,7 @@
|
|||||||
#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
|
#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
|
||||||
#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
|
#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
|
||||||
#include "code\controllers\_DynamicAreaLighting_TG.dm"
|
#include "code\controllers\_DynamicAreaLighting_TG.dm"
|
||||||
|
#include "code\controllers\autotransfer.dm"
|
||||||
#include "code\controllers\configuration.dm"
|
#include "code\controllers\configuration.dm"
|
||||||
#include "code\controllers\failsafe.dm"
|
#include "code\controllers\failsafe.dm"
|
||||||
#include "code\controllers\lighting_controller.dm"
|
#include "code\controllers\lighting_controller.dm"
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
/datum/medical_effect/proc/cure(mob/living/carbon/human/H)
|
/datum/medical_effect/proc/cure(mob/living/carbon/human/H)
|
||||||
for(var/R in cures)
|
for(var/R in cures)
|
||||||
if(H.reagents.has_reagent(R))
|
if(H.reagents.has_reagent(R))
|
||||||
H <<"\red [cure_message]"
|
if (cure_message)
|
||||||
|
H <<"\blue [cure_message]"
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -39,16 +40,21 @@
|
|||||||
M.start = life_tick
|
M.start = life_tick
|
||||||
return
|
return
|
||||||
|
|
||||||
var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect
|
|
||||||
|
|
||||||
for(var/T in L)
|
var/T = side_effects[name]
|
||||||
var/datum/medical_effect/M = new T
|
if (!T)
|
||||||
if(M.name == name)
|
return
|
||||||
M.strength = strength
|
|
||||||
M.start = life_tick
|
var/datum/medical_effect/M = new T
|
||||||
side_effects += M
|
if(M.name == name)
|
||||||
|
M.strength = strength
|
||||||
|
M.start = life_tick
|
||||||
|
side_effects += M
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/handle_medical_side_effects()
|
/mob/living/carbon/human/proc/handle_medical_side_effects()
|
||||||
|
//Going to handle those things only every few ticks.
|
||||||
|
if(life_tick % 15 != 0)
|
||||||
|
return 0
|
||||||
|
|
||||||
var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect
|
var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect
|
||||||
for(var/T in L)
|
for(var/T in L)
|
||||||
@@ -60,18 +66,14 @@
|
|||||||
for (var/datum/medical_effect/M in side_effects)
|
for (var/datum/medical_effect/M in side_effects)
|
||||||
if (!M) continue
|
if (!M) continue
|
||||||
var/strength_percent = sin((life_tick - M.start) / 2)
|
var/strength_percent = sin((life_tick - M.start) / 2)
|
||||||
// log_debug ("[src], tick [life_tick] : Processing [M], Current phase: [strength_percent]")
|
|
||||||
|
|
||||||
// Only do anything if the effect is currently strong enough
|
// Only do anything if the effect is currently strong enough
|
||||||
if(strength_percent >= 0.4)
|
if(strength_percent >= 0.4)
|
||||||
log_debug ("[src], tick [life_tick] : Active phase ; strength [M.strength]")
|
|
||||||
if (M.cure(src) || M.strength > 50)
|
if (M.cure(src) || M.strength > 50)
|
||||||
// log_debug ("[src], tick [life_tick] : [M] cured or reached end of lifecycle")
|
|
||||||
side_effects -= M
|
side_effects -= M
|
||||||
del(M)
|
M = null
|
||||||
else
|
else
|
||||||
if(life_tick % 45 == 0)
|
if(life_tick % 45 == 0)
|
||||||
// log_debug ("[src], tick [life_tick] : Activating [M] ")
|
|
||||||
M.on_life(src, strength_percent*M.strength)
|
M.on_life(src, strength_percent*M.strength)
|
||||||
// Effect slowly growing stronger
|
// Effect slowly growing stronger
|
||||||
M.strength+=0.08
|
M.strength+=0.08
|
||||||
@@ -92,7 +94,6 @@
|
|||||||
H.custom_pain("You feel a throbbing pain in your head!",1)
|
H.custom_pain("You feel a throbbing pain in your head!",1)
|
||||||
if(31 to INFINITY)
|
if(31 to INFINITY)
|
||||||
H.custom_pain("You feel an excrutiating pain in your head!",1)
|
H.custom_pain("You feel an excrutiating pain in your head!",1)
|
||||||
H.adjustBrainLoss(1)
|
|
||||||
|
|
||||||
// BAD STOMACH
|
// BAD STOMACH
|
||||||
// ===========
|
// ===========
|
||||||
@@ -110,7 +111,6 @@
|
|||||||
H.custom_pain("Your stomach hurts.",0)
|
H.custom_pain("Your stomach hurts.",0)
|
||||||
if(31 to INFINITY)
|
if(31 to INFINITY)
|
||||||
H.custom_pain("You feel sick.",1)
|
H.custom_pain("You feel sick.",1)
|
||||||
H.adjustToxLoss(1)
|
|
||||||
|
|
||||||
// CRAMPS
|
// CRAMPS
|
||||||
// ======
|
// ======
|
||||||
@@ -129,7 +129,6 @@
|
|||||||
if(31 to INFINITY)
|
if(31 to INFINITY)
|
||||||
H.emote("me",1,"flinches as all the muscles in their body cramp up.")
|
H.emote("me",1,"flinches as all the muscles in their body cramp up.")
|
||||||
H.custom_pain("There's pain all over your body.",1)
|
H.custom_pain("There's pain all over your body.",1)
|
||||||
H.adjustToxLoss(1)
|
|
||||||
|
|
||||||
// ITCH
|
// ITCH
|
||||||
// ====
|
// ====
|
||||||
@@ -148,4 +147,3 @@
|
|||||||
if(31 to INFINITY)
|
if(31 to INFINITY)
|
||||||
H.emote("me",1,"shivers slightly.")
|
H.emote("me",1,"shivers slightly.")
|
||||||
H.custom_pain("This itch makes it really hard to concentrate.",1)
|
H.custom_pain("This itch makes it really hard to concentrate.",1)
|
||||||
H.adjustToxLoss(1)
|
|
||||||
@@ -15,6 +15,7 @@ var/global/list/chemical_reactions_list //list of all /datum/chemical_reactio
|
|||||||
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
|
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
|
||||||
var/global/list/landmarks_list = list() //list of all landmarks created
|
var/global/list/landmarks_list = list() //list of all landmarks created
|
||||||
var/global/list/surgery_steps = list() //list of all surgery steps |BS12
|
var/global/list/surgery_steps = list() //list of all surgery steps |BS12
|
||||||
|
var/global/list/side_effects = list() //list of all medical sideeffects types by thier names |BS12
|
||||||
var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking.
|
var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking.
|
||||||
|
|
||||||
//Languages/species/whitelist.
|
//Languages/species/whitelist.
|
||||||
@@ -75,6 +76,13 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
|
|||||||
surgery_steps += S
|
surgery_steps += S
|
||||||
sort_surgeries()
|
sort_surgeries()
|
||||||
|
|
||||||
|
//Medical side effects. List all effects by their names
|
||||||
|
paths = typesof(/datum/medical_effect)-/datum/medical_effect
|
||||||
|
for(var/T in paths)
|
||||||
|
var/datum/medical_effect/M = new T
|
||||||
|
side_effects[M.name] = T
|
||||||
|
|
||||||
|
|
||||||
//Languages and species.
|
//Languages and species.
|
||||||
paths = typesof(/datum/language)-/datum/language
|
paths = typesof(/datum/language)-/datum/language
|
||||||
for(var/T in paths)
|
for(var/T in paths)
|
||||||
|
|||||||
17
code/controllers/autotransfer.dm
Normal file
17
code/controllers/autotransfer.dm
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
var/datum/controller/transfer_controller/transfer_controller
|
||||||
|
|
||||||
|
datum/controller/transfer_controller
|
||||||
|
var/timerbuffer = 0 //buffer for time check
|
||||||
|
var/currenttick = 0
|
||||||
|
datum/controller/transfer_controller/New()
|
||||||
|
timerbuffer = config.vote_autotransfer_initial
|
||||||
|
processing_objects += src
|
||||||
|
|
||||||
|
datum/controller/transfer_controller/Del()
|
||||||
|
processing_objects -= src
|
||||||
|
|
||||||
|
datum/controller/transfer_controller/proc/process()
|
||||||
|
currenttick = currenttick + 1
|
||||||
|
if (world.time >= timerbuffer - 600)
|
||||||
|
vote.autotransfer()
|
||||||
|
timerbuffer = timerbuffer + config.vote_autotransfer_interval
|
||||||
@@ -67,6 +67,8 @@ datum/controller/game_controller/proc/setup()
|
|||||||
setupfactions()
|
setupfactions()
|
||||||
setup_economy()
|
setup_economy()
|
||||||
|
|
||||||
|
transfer_controller = new
|
||||||
|
|
||||||
for(var/i=0, i<max_secret_rooms, i++)
|
for(var/i=0, i<max_secret_rooms, i++)
|
||||||
make_mining_asteroid_secret()
|
make_mining_asteroid_secret()
|
||||||
|
|
||||||
@@ -119,6 +121,7 @@ datum/controller/game_controller/proc/process()
|
|||||||
controller_iteration++
|
controller_iteration++
|
||||||
|
|
||||||
vote.process()
|
vote.process()
|
||||||
|
transfer_controller.process()
|
||||||
process_newscaster()
|
process_newscaster()
|
||||||
|
|
||||||
//AIR
|
//AIR
|
||||||
@@ -196,7 +199,7 @@ datum/controller/game_controller/proc/process()
|
|||||||
timer = world.timeofday
|
timer = world.timeofday
|
||||||
process_nano()
|
process_nano()
|
||||||
nano_cost = (world.timeofday - timer) / 10
|
nano_cost = (world.timeofday - timer) / 10
|
||||||
|
|
||||||
sleep(breather_ticks)
|
sleep(breather_ticks)
|
||||||
|
|
||||||
//EVENTS
|
//EVENTS
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras"))
|
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller"))
|
||||||
set category = "Debug"
|
set category = "Debug"
|
||||||
set name = "Debug Controller"
|
set name = "Debug Controller"
|
||||||
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
|
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
|
||||||
@@ -74,5 +74,8 @@
|
|||||||
if("Cameras")
|
if("Cameras")
|
||||||
debug_variables(cameranet)
|
debug_variables(cameranet)
|
||||||
feedback_add_details("admin_verb","DCameras")
|
feedback_add_details("admin_verb","DCameras")
|
||||||
|
if("Transfer Controller")
|
||||||
|
debug_variables(transfer_controller)
|
||||||
|
feedback_add_details("admin_verb","DAutovoter")
|
||||||
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
|
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -48,8 +48,11 @@ datum/controller/vote
|
|||||||
|
|
||||||
proc/autotransfer()
|
proc/autotransfer()
|
||||||
initiate_vote("crew_transfer","the server")
|
initiate_vote("crew_transfer","the server")
|
||||||
log_debug("The server has called an Autotransfer")
|
log_debug("The server has called a crew transfer vote")
|
||||||
|
|
||||||
|
/* proc/autogamemode() //This is here for whoever can figure out how to make this work
|
||||||
|
initiate_vote("gamemode","the server")
|
||||||
|
log_debug("The server has called a gamemode vote")*/
|
||||||
|
|
||||||
proc/reset()
|
proc/reset()
|
||||||
initiator = null
|
initiator = null
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ datum/mind
|
|||||||
out += "Factions and special roles:<br>"
|
out += "Factions and special roles:<br>"
|
||||||
|
|
||||||
var/list/sections = list(
|
var/list/sections = list(
|
||||||
|
"implant",
|
||||||
"revolution",
|
"revolution",
|
||||||
"cult",
|
"cult",
|
||||||
"wizard",
|
"wizard",
|
||||||
@@ -122,19 +123,23 @@ datum/mind
|
|||||||
"malfunction",
|
"malfunction",
|
||||||
)
|
)
|
||||||
var/text = ""
|
var/text = ""
|
||||||
|
var/mob/living/carbon/human/H = current
|
||||||
if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey))
|
if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey))
|
||||||
|
/** Impanted**/
|
||||||
|
if(H.is_loyalty_implanted(H))
|
||||||
|
text = "Loyalty Implant:<a href='?src=\ref[src];implant=remove'>Remove</a>|<b>Implanted</b></br>"
|
||||||
|
else
|
||||||
|
text = "Loyalty Implant:<b>No Implant</b>|<a href='?src=\ref[src];implant=add'>Implant him!</a></br>"
|
||||||
|
sections["implant"] = text
|
||||||
/** REVOLUTION ***/
|
/** REVOLUTION ***/
|
||||||
text = "revolution"
|
text = "revolution"
|
||||||
if (ticker.mode.config_tag=="revolution")
|
if (ticker.mode.config_tag=="revolution")
|
||||||
text = uppertext(text)
|
text += uppertext(text)
|
||||||
text = "<i><b>[text]</b></i>: "
|
text = "<i><b>[text]</b></i>: "
|
||||||
if (assigned_role in command_positions)
|
if (H.is_loyalty_implanted(H))
|
||||||
text += "<b>HEAD</b>|employee|headrev|rev"
|
text += "<b>LOYAL EMPLOYEE</b>|headrev|rev"
|
||||||
// else if (assigned_role in list("Security Officer", "Detective", "Warden"))
|
|
||||||
// text += "head|<b>OFFICER</b>|employee|headre|rev"
|
|
||||||
else if (src in ticker.mode.head_revolutionaries)
|
else if (src in ticker.mode.head_revolutionaries)
|
||||||
text = "head|<a href='?src=\ref[src];revolution=clear'>employee</a>|<b>HEADREV</b>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
text = "<a href='?src=\ref[src];revolution=clear'>employee</a>|<b>HEADREV</b>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
||||||
text += "<br>Flash: <a href='?src=\ref[src];revolution=flash'>give</a>"
|
text += "<br>Flash: <a href='?src=\ref[src];revolution=flash'>give</a>"
|
||||||
|
|
||||||
var/list/L = current.get_contents()
|
var/list/L = current.get_contents()
|
||||||
@@ -151,9 +156,9 @@ datum/mind
|
|||||||
if (objectives.len==0)
|
if (objectives.len==0)
|
||||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];revolution=autoobjectives'>Set to kill all heads</a>."
|
text += "<br>Objectives are empty! <a href='?src=\ref[src];revolution=autoobjectives'>Set to kill all heads</a>."
|
||||||
else if (src in ticker.mode.revolutionaries)
|
else if (src in ticker.mode.revolutionaries)
|
||||||
text += "head|<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
|
text += "<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
|
||||||
else
|
else
|
||||||
text += "head|<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
||||||
sections["revolution"] = text
|
sections["revolution"] = text
|
||||||
|
|
||||||
/** CULT ***/
|
/** CULT ***/
|
||||||
@@ -161,19 +166,17 @@ datum/mind
|
|||||||
if (ticker.mode.config_tag=="cult")
|
if (ticker.mode.config_tag=="cult")
|
||||||
text = uppertext(text)
|
text = uppertext(text)
|
||||||
text = "<i><b>[text]</b></i>: "
|
text = "<i><b>[text]</b></i>: "
|
||||||
if (assigned_role in command_positions)
|
if (H.is_loyalty_implanted(H))
|
||||||
text += "<b>HEAD</b>|employee|cultist"
|
text += "<B>LOYAL EMPLOYEE</B>|cultist"
|
||||||
// else if (assigned_role in list("Security Officer", "Detective", "Warden"))
|
|
||||||
// text += "head|<b>OFFICER</b>|employee|cultist"
|
|
||||||
else if (src in ticker.mode.cult)
|
else if (src in ticker.mode.cult)
|
||||||
text += "head|<a href='?src=\ref[src];cult=clear'>employee</a>|<b>CULTIST</b>"
|
text += "<a href='?src=\ref[src];cult=clear'>employee</a>|<b>CULTIST</b>"
|
||||||
text += "<br>Give <a href='?src=\ref[src];cult=tome'>tome</a>|<a href='?src=\ref[src];cult=amulet'>amulet</a>."
|
text += "<br>Give <a href='?src=\ref[src];cult=tome'>tome</a>|<a href='?src=\ref[src];cult=amulet'>amulet</a>."
|
||||||
/*
|
/*
|
||||||
if (objectives.len==0)
|
if (objectives.len==0)
|
||||||
text += "<br>Objectives are empty! Set to sacrifice and <a href='?src=\ref[src];cult=escape'>escape</a> or <a href='?src=\ref[src];cult=summon'>summon</a>."
|
text += "<br>Objectives are empty! Set to sacrifice and <a href='?src=\ref[src];cult=escape'>escape</a> or <a href='?src=\ref[src];cult=summon'>summon</a>."
|
||||||
*/
|
*/
|
||||||
else
|
else
|
||||||
text += "head|<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
|
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
|
||||||
sections["cult"] = text
|
sections["cult"] = text
|
||||||
|
|
||||||
/** WIZARD ***/
|
/** WIZARD ***/
|
||||||
@@ -232,12 +235,16 @@ datum/mind
|
|||||||
if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan")
|
if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan")
|
||||||
text = uppertext(text)
|
text = uppertext(text)
|
||||||
text = "<i><b>[text]</b></i>: "
|
text = "<i><b>[text]</b></i>: "
|
||||||
if (src in ticker.mode.traitors)
|
if(istype(current, /mob/living/carbon/human))
|
||||||
text += "<b>TRAITOR</b>|<a href='?src=\ref[src];traitor=clear'>loyal</a>"
|
if (H.is_loyalty_implanted(H))
|
||||||
if (objectives.len==0)
|
text +="traitor|<b>LOYAL EMPLOYEE</b>"
|
||||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];traitor=autoobjectives'>Randomize</a>!"
|
|
||||||
else
|
else
|
||||||
text += "<a href='?src=\ref[src];traitor=traitor'>traitor</a>|<b>LOYAL</b>"
|
if (src in ticker.mode.traitors)
|
||||||
|
text += "<b>TRAITOR</b>|<a href='?src=\ref[src];traitor=clear'>Employee</a>"
|
||||||
|
if (objectives.len==0)
|
||||||
|
text += "<br>Objectives are empty! <a href='?src=\ref[src];traitor=autoobjectives'>Randomize</a>!"
|
||||||
|
else
|
||||||
|
text += "<a href='?src=\ref[src];traitor=traitor'>traitor</a>|<b>Employee</b>"
|
||||||
sections["traitor"] = text
|
sections["traitor"] = text
|
||||||
|
|
||||||
/** MONKEY ***/
|
/** MONKEY ***/
|
||||||
@@ -485,6 +492,48 @@ datum/mind
|
|||||||
if(!istype(objective)) return
|
if(!istype(objective)) return
|
||||||
objective.completed = !objective.completed
|
objective.completed = !objective.completed
|
||||||
|
|
||||||
|
else if(href_list["implant"])
|
||||||
|
var/mob/living/carbon/human/H = current
|
||||||
|
switch(href_list["implant"])
|
||||||
|
if("remove")
|
||||||
|
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
|
||||||
|
for(var/datum/organ/external/organs in H.organs)
|
||||||
|
if(I in organs.implants)
|
||||||
|
I.Del()
|
||||||
|
break
|
||||||
|
H << "\blue <Font size =3><B>Your loyalty implant has been deactivated.</B></FONT>"
|
||||||
|
if("add")
|
||||||
|
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||||
|
L.imp_in = H
|
||||||
|
L.implanted = 1
|
||||||
|
var/datum/organ/external/affected = H.organs_by_name["head"]
|
||||||
|
affected.implants += L
|
||||||
|
L.part = affected
|
||||||
|
|
||||||
|
H << "\red <Font size =3><B>You somehow have become the recepient of a loyalty transplant, and it just activated!</B></FONT>"
|
||||||
|
if(src in ticker.mode.revolutionaries)
|
||||||
|
special_role = null
|
||||||
|
ticker.mode.revolutionaries -= src
|
||||||
|
src << "\red <Font size = 3><B>The nanobots in the loyalty implant remove all thoughts about being a revolutionary. Get back to work!</B></Font>"
|
||||||
|
if(src in ticker.mode.head_revolutionaries)
|
||||||
|
special_role = null
|
||||||
|
ticker.mode.head_revolutionaries -=src
|
||||||
|
src << "\red <Font size = 3><B>The nanobots in the loyalty implant remove all thoughts about being a revolutionary. Get back to work!</B></Font>"
|
||||||
|
if(src in ticker.mode.cult)
|
||||||
|
ticker.mode.cult -= src
|
||||||
|
ticker.mode.update_cult_icons_removed(src)
|
||||||
|
special_role = null
|
||||||
|
var/datum/game_mode/cult/cult = ticker.mode
|
||||||
|
if (istype(cult))
|
||||||
|
cult.memoize_cult_objectives(src)
|
||||||
|
current << "\red <FONT size = 3><B>The nanobots in the loyalty implant remove all thoughts about being in a cult. Have a productive day!</B></FONT>"
|
||||||
|
memory = ""
|
||||||
|
if(src in ticker.mode.traitors)
|
||||||
|
ticker.mode.traitors -= src
|
||||||
|
special_role = null
|
||||||
|
current << "\red <FONT size = 3><B>The nanobots in the loyalty implant remove all thoughts about being a traitor to Nanotrasen. Have a nice day!</B></FONT>"
|
||||||
|
log_admin("[key_name_admin(usr)] has de-traitor'ed [current].")
|
||||||
|
|
||||||
else if (href_list["revolution"])
|
else if (href_list["revolution"])
|
||||||
switch(href_list["revolution"])
|
switch(href_list["revolution"])
|
||||||
if("clear")
|
if("clear")
|
||||||
@@ -750,8 +799,8 @@ datum/mind
|
|||||||
special_role = "traitor"
|
special_role = "traitor"
|
||||||
current << "<B>\red You are a traitor!</B>"
|
current << "<B>\red You are a traitor!</B>"
|
||||||
log_admin("[key_name_admin(usr)] has traitor'ed [current].")
|
log_admin("[key_name_admin(usr)] has traitor'ed [current].")
|
||||||
if(isAI(current))
|
if(istype(current, /mob/living/silicon))
|
||||||
var/mob/living/silicon/ai/A = current
|
var/mob/living/silicon/A = current
|
||||||
call(/datum/game_mode/proc/add_law_zero)(A)
|
call(/datum/game_mode/proc/add_law_zero)(A)
|
||||||
A.show_laws()
|
A.show_laws()
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
for(var/obj/machinery/power/smes/S in world)
|
for(var/obj/machinery/power/smes/S in world)
|
||||||
if(istype(get_area(S), /area/turret_protected) || S.z != 1)
|
if(istype(get_area(S), /area/turret_protected) || S.z != 1)
|
||||||
continue
|
continue
|
||||||
|
S.last_charge = S.charge
|
||||||
|
S.last_output = S.output
|
||||||
|
S.last_online = S.online
|
||||||
S.charge = 0
|
S.charge = 0
|
||||||
S.output = 0
|
S.output = 0
|
||||||
S.online = 0
|
S.online = 0
|
||||||
@@ -60,9 +63,9 @@
|
|||||||
for(var/obj/machinery/power/smes/S in world)
|
for(var/obj/machinery/power/smes/S in world)
|
||||||
if(S.z != 1)
|
if(S.z != 1)
|
||||||
continue
|
continue
|
||||||
S.charge = S.capacity
|
S.charge = S.last_charge
|
||||||
S.output = 200000
|
S.output = S.last_output
|
||||||
S.online = 1
|
S.online = S.last_online
|
||||||
S.updateicon()
|
S.updateicon()
|
||||||
S.power_change()
|
S.power_change()
|
||||||
for(var/area/A in world)
|
for(var/area/A in world)
|
||||||
|
|||||||
@@ -36,8 +36,6 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
|
|
||||||
var/triai = 0//Global holder for Triumvirate
|
var/triai = 0//Global holder for Triumvirate
|
||||||
|
|
||||||
var/initialtpass = 0 //holder for inital autotransfer vote timer
|
|
||||||
|
|
||||||
/datum/controller/gameticker/proc/pregame()
|
/datum/controller/gameticker/proc/pregame()
|
||||||
login_music = pick(\
|
login_music = pick(\
|
||||||
/*'sound/music/halloween/skeletons.ogg',\
|
/*'sound/music/halloween/skeletons.ogg',\
|
||||||
@@ -63,17 +61,6 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
current_state = GAME_STATE_SETTING_UP
|
current_state = GAME_STATE_SETTING_UP
|
||||||
while (!setup())
|
while (!setup())
|
||||||
|
|
||||||
/datum/controller/gameticker/proc/votetimer()
|
|
||||||
var/timerbuffer = 0
|
|
||||||
if (initialtpass == 0)
|
|
||||||
timerbuffer = config.vote_autotransfer_initial
|
|
||||||
else
|
|
||||||
timerbuffer = config.vote_autotransfer_interval
|
|
||||||
spawn(timerbuffer)
|
|
||||||
vote.autotransfer()
|
|
||||||
initialtpass = 1
|
|
||||||
votetimer()
|
|
||||||
|
|
||||||
|
|
||||||
/datum/controller/gameticker/proc/setup()
|
/datum/controller/gameticker/proc/setup()
|
||||||
//Create and announce mode
|
//Create and announce mode
|
||||||
@@ -166,7 +153,6 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
spawn(3000)
|
spawn(3000)
|
||||||
statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE
|
statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE
|
||||||
|
|
||||||
votetimer()
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/controller/gameticker
|
/datum/controller/gameticker
|
||||||
|
|||||||
@@ -119,6 +119,11 @@ var/bomb_set
|
|||||||
|
|
||||||
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
|
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
|
||||||
if (src.extended)
|
if (src.extended)
|
||||||
|
|
||||||
|
if (!ishuman(user))
|
||||||
|
usr << "\red You don't have the dexterity to do this!"
|
||||||
|
return 1
|
||||||
|
|
||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
var/dat = text("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
var/dat = text("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
||||||
if (src.auth)
|
if (src.auth)
|
||||||
@@ -155,6 +160,12 @@ var/bomb_set
|
|||||||
set name = "Make Deployable"
|
set name = "Make Deployable"
|
||||||
set src in oview(1)
|
set src in oview(1)
|
||||||
|
|
||||||
|
if (!usr.canmove || usr.stat || usr.restrained())
|
||||||
|
return
|
||||||
|
if (!ishuman(usr))
|
||||||
|
usr << "\red You don't have the dexterity to do this!"
|
||||||
|
return 1
|
||||||
|
|
||||||
if (src.deployable)
|
if (src.deployable)
|
||||||
usr << "\red You close several panels to make [src] undeployable."
|
usr << "\red You close several panels to make [src] undeployable."
|
||||||
src.deployable = 0
|
src.deployable = 0
|
||||||
|
|||||||
@@ -85,8 +85,8 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the chief engineer"
|
supervisors = "the chief engineer"
|
||||||
selection_color = "#fff5cc"
|
selection_color = "#fff5cc"
|
||||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
|
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
|
||||||
minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
|
minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
|
||||||
|
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
equip(var/mob/living/carbon/human/H)
|
||||||
@@ -104,4 +104,4 @@
|
|||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
|
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
|
||||||
else
|
else
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
|
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
//Clonepod
|
//Clonepod
|
||||||
|
|
||||||
//Start growing a human clone in the pod!
|
//Start growing a human clone in the pod!
|
||||||
/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace)
|
/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace, var/languages)
|
||||||
if(mess || attempting)
|
if(mess || attempting)
|
||||||
return 0
|
return 0
|
||||||
var/datum/mind/clonemind = locate(mindref)
|
var/datum/mind/clonemind = locate(mindref)
|
||||||
@@ -195,7 +195,8 @@
|
|||||||
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
|
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
|
||||||
|
|
||||||
H.species = mrace
|
H.species = mrace
|
||||||
H.add_language(mrace.language)
|
for(var/datum/language/L in languages)
|
||||||
|
H.add_language(L.name)
|
||||||
H.update_mutantrace()
|
H.update_mutantrace()
|
||||||
H.suiciding = 0
|
H.suiciding = 0
|
||||||
src.attempting = 0
|
src.attempting = 0
|
||||||
@@ -437,4 +438,4 @@
|
|||||||
/* EMP grenade/spell effect
|
/* EMP grenade/spell effect
|
||||||
if(istype(A, /obj/machinery/clonepod))
|
if(istype(A, /obj/machinery/clonepod))
|
||||||
A:malfunction()
|
A:malfunction()
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -313,7 +313,7 @@
|
|||||||
else if(!config.revival_cloning)
|
else if(!config.revival_cloning)
|
||||||
temp = "Error: Unable to initiate cloning cycle."
|
temp = "Error: Unable to initiate cloning cycle."
|
||||||
|
|
||||||
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"]))
|
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"]))
|
||||||
temp = "Initiating cloning cycle..."
|
temp = "Initiating cloning cycle..."
|
||||||
records.Remove(C)
|
records.Remove(C)
|
||||||
del(C)
|
del(C)
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
var/mob/selected = find_dead_player("[C.fields["ckey"]]")
|
var/mob/selected = find_dead_player("[C.fields["ckey"]]")
|
||||||
selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable
|
selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable
|
||||||
var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
|
var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
|
||||||
if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"]))
|
if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"], C.fields["interface"]))
|
||||||
temp = "Initiating cloning cycle..."
|
temp = "Initiating cloning cycle..."
|
||||||
records.Remove(C)
|
records.Remove(C)
|
||||||
del(C)
|
del(C)
|
||||||
@@ -370,6 +370,7 @@
|
|||||||
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
||||||
R.fields["UI"] = subject.dna.uni_identity
|
R.fields["UI"] = subject.dna.uni_identity
|
||||||
R.fields["SE"] = subject.dna.struc_enzymes
|
R.fields["SE"] = subject.dna.struc_enzymes
|
||||||
|
R.fields["languages"] = subject.languages
|
||||||
|
|
||||||
//Add an implant if needed
|
//Add an implant if needed
|
||||||
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
||||||
|
|||||||
@@ -439,8 +439,18 @@
|
|||||||
var/atom/movable/locked
|
var/atom/movable/locked
|
||||||
var/mode = 1 //1 - gravsling 2 - gravpush
|
var/mode = 1 //1 - gravsling 2 - gravpush
|
||||||
|
|
||||||
|
var/last_fired = 0 //Concept stolen from guns.
|
||||||
|
var/fire_delay = 10 //Used to prevent spam-brute against humans.
|
||||||
|
|
||||||
action(atom/movable/target)
|
action(atom/movable/target)
|
||||||
|
|
||||||
|
if(world.time >= last_fired + fire_delay)
|
||||||
|
last_fired = world.time
|
||||||
|
else
|
||||||
|
if (world.time % 3)
|
||||||
|
occupant_message("<span class='warning'>[src] is not ready to fire again!")
|
||||||
|
return 0
|
||||||
|
|
||||||
switch(mode)
|
switch(mode)
|
||||||
if(1)
|
if(1)
|
||||||
if(!action_checks(target) && !locked) return
|
if(!action_checks(target) && !locked) return
|
||||||
|
|||||||
@@ -115,6 +115,7 @@
|
|||||||
cell = C
|
cell = C
|
||||||
return
|
return
|
||||||
cell = new(src)
|
cell = new(src)
|
||||||
|
cell.name = "high-capacity power cell"
|
||||||
cell.charge = 15000
|
cell.charge = 15000
|
||||||
cell.maxcharge = 15000
|
cell.maxcharge = 15000
|
||||||
|
|
||||||
|
|||||||
@@ -715,8 +715,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
|||||||
U.show_message("\red Energy feeds back into your [src]!", 1)
|
U.show_message("\red Energy feeds back into your [src]!", 1)
|
||||||
U << browse(null, "window=pda")
|
U << browse(null, "window=pda")
|
||||||
explode()
|
explode()
|
||||||
|
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up")
|
||||||
|
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1)
|
||||||
else
|
else
|
||||||
U.show_message("\blue Success!", 1)
|
U.show_message("\blue Success!", 1)
|
||||||
|
log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded")
|
||||||
|
message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeded", 1)
|
||||||
P.explode()
|
P.explode()
|
||||||
else
|
else
|
||||||
U << "PDA not found."
|
U << "PDA not found."
|
||||||
@@ -1193,4 +1197,4 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
|||||||
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
|
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
|
||||||
/obj/item/device/pda/emp_act(severity)
|
/obj/item/device/pda/emp_act(severity)
|
||||||
for(var/atom/A in src)
|
for(var/atom/A in src)
|
||||||
A.emp_act(severity)
|
A.emp_act(severity)
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
icon_state = "id"
|
icon_state = "id"
|
||||||
item_state = "card-id"
|
item_state = "card-id"
|
||||||
var/access = list()
|
var/access = list()
|
||||||
var/registered_name = null // The name registered_name on the card
|
var/registered_name = "Unknown" // The name registered_name on the card
|
||||||
slot_flags = SLOT_ID
|
slot_flags = SLOT_ID
|
||||||
|
|
||||||
var/blood_type = "\[UNSET\]"
|
var/blood_type = "\[UNSET\]"
|
||||||
@@ -280,4 +280,4 @@
|
|||||||
assignment = "General"
|
assignment = "General"
|
||||||
New()
|
New()
|
||||||
access = get_all_centcom_access()
|
access = get_all_centcom_access()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -158,11 +158,14 @@ Implant Specifics:<BR>"}
|
|||||||
activate()
|
activate()
|
||||||
if (malfunction == MALFUNCTION_PERMANENT)
|
if (malfunction == MALFUNCTION_PERMANENT)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
var/need_gib = null
|
||||||
if(istype(imp_in, /mob/))
|
if(istype(imp_in, /mob/))
|
||||||
var/mob/T = imp_in
|
var/mob/T = imp_in
|
||||||
message_admins("Explosive implant triggered in [T] ([T.key]). (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>) ")
|
message_admins("Explosive implant triggered in [T] ([T.key]). (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>) ")
|
||||||
log_game("Explosive implant triggered in [T] ([T.key]).")
|
log_game("Explosive implant triggered in [T] ([T.key]).")
|
||||||
|
need_gib = 1
|
||||||
|
|
||||||
if(ishuman(imp_in))
|
if(ishuman(imp_in))
|
||||||
if (elevel == "Localized Limb")
|
if (elevel == "Localized Limb")
|
||||||
if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste.
|
if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste.
|
||||||
@@ -186,8 +189,12 @@ Implant Specifics:<BR>"}
|
|||||||
explosion(get_turf(T), 0, 1, 3, 6)
|
explosion(get_turf(T), 0, 1, 3, 6)
|
||||||
T.gib()
|
T.gib()
|
||||||
|
|
||||||
else
|
else
|
||||||
explosion(get_turf(imp_in), 0, 1, 3, 6)
|
explosion(get_turf(imp_in), 0, 1, 3, 6)
|
||||||
|
|
||||||
|
if(need_gib)
|
||||||
|
imp_in.gib()
|
||||||
|
|
||||||
var/turf/t = get_turf(imp_in)
|
var/turf/t = get_turf(imp_in)
|
||||||
|
|
||||||
if(t)
|
if(t)
|
||||||
|
|||||||
@@ -55,6 +55,8 @@
|
|||||||
handle_rotation()
|
handle_rotation()
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
|
if(istype(usr,/mob/living/simple_animal/mouse))
|
||||||
|
return
|
||||||
if(!usr || !isturf(usr.loc))
|
if(!usr || !isturf(usr.loc))
|
||||||
return
|
return
|
||||||
if(usr.stat || usr.restrained())
|
if(usr.stat || usr.restrained())
|
||||||
|
|||||||
@@ -510,6 +510,12 @@
|
|||||||
if(counter >= 5) //So things dont get squiiiiished!
|
if(counter >= 5) //So things dont get squiiiiished!
|
||||||
jobs += "</tr><tr align='center'>"
|
jobs += "</tr><tr align='center'>"
|
||||||
counter = 0
|
counter = 0
|
||||||
|
|
||||||
|
if(jobban_isbanned(M, "Internal Affairs Agent"))
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'><font color=red>Internal Affairs Agent</font></a></td>"
|
||||||
|
else
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Internal Affairs Agent;jobban4=\ref[M]'>Internal Affairs Agent</a></td>"
|
||||||
|
|
||||||
jobs += "</tr></table>"
|
jobs += "</tr></table>"
|
||||||
|
|
||||||
//Non-Human (Green)
|
//Non-Human (Green)
|
||||||
@@ -583,6 +589,13 @@
|
|||||||
else
|
else
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", " ")]</a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", " ")]</a></td>"
|
||||||
|
|
||||||
|
//ERT
|
||||||
|
if(jobban_isbanned(M, "Emergency Response Team") || isbanned_dept)
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'><font color=red>Emergency Response Team</font></a></td>"
|
||||||
|
else
|
||||||
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>Emergency Response Team</a></td>"
|
||||||
|
|
||||||
|
|
||||||
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
|
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
|
||||||
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
|
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
|
||||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[replacetext("Malf AI", " ", " ")]</font></a></td>"
|
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[replacetext("Malf AI", " ", " ")]</font></a></td>"
|
||||||
@@ -2594,4 +2607,4 @@
|
|||||||
show_player_info(ckey)
|
show_player_info(ckey)
|
||||||
if("list")
|
if("list")
|
||||||
PlayerNotesPage(text2num(href_list["index"]))
|
PlayerNotesPage(text2num(href_list["index"]))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
if(H.species.name in species_restricted)
|
if(H.species.name in species_restricted)
|
||||||
wearable = 1
|
wearable = 1
|
||||||
|
|
||||||
if(!wearable)
|
if(!wearable && (slot != 15 && slot != 16)) //Pockets.
|
||||||
M << "\red Your species cannot wear [src]."
|
M << "\red Your species cannot wear [src]."
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,7 @@
|
|||||||
desc = "Covers the eyes, preventing sight."
|
desc = "Covers the eyes, preventing sight."
|
||||||
icon_state = "blindfold"
|
icon_state = "blindfold"
|
||||||
item_state = "blindfold"
|
item_state = "blindfold"
|
||||||
vision_flags = BLIND
|
//vision_flags = BLIND // This flag is only supposed to be used if it causes permanent blindness, not temporary because of glasses
|
||||||
|
|
||||||
/obj/item/clothing/glasses/sunglasses/prescription
|
/obj/item/clothing/glasses/sunglasses/prescription
|
||||||
name = "prescription sunglasses"
|
name = "prescription sunglasses"
|
||||||
@@ -193,4 +193,4 @@
|
|||||||
name = "Optical Thermal Implants"
|
name = "Optical Thermal Implants"
|
||||||
desc = "A set of implantable lenses designed to augment your vision"
|
desc = "A set of implantable lenses designed to augment your vision"
|
||||||
icon_state = "thermalimplants"
|
icon_state = "thermalimplants"
|
||||||
item_state = "syringe_kit"
|
item_state = "syringe_kit"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
else
|
else
|
||||||
user << "<span class='notice'>[src] already have a cell.</span>"
|
user << "<span class='notice'>[src] already have a cell.</span>"
|
||||||
|
|
||||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
|
||||||
|
|
||||||
|
|
||||||
wired = null
|
wired = null
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
cell = null
|
cell = null
|
||||||
if(clipped == 0)
|
if(clipped == 0)
|
||||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
||||||
user.visible_message("\red [user] snips the fingertips off [src].","\red You snip the fingertips off [src].")
|
user.visible_message("\red [user] cut the fingertips off [src].","\red You cut the fingertips off [src].")
|
||||||
clipped = 1
|
clipped = 1
|
||||||
if("exclude" in species_restricted)
|
if("exclude" in species_restricted)
|
||||||
name = "mangled [name]"
|
name = "mangled [name]"
|
||||||
@@ -78,4 +78,4 @@
|
|||||||
if(wired)
|
if(wired)
|
||||||
overlays += "gloves_wire"
|
overlays += "gloves_wire"
|
||||||
if(cell)
|
if(cell)
|
||||||
overlays += "gloves_cell"
|
overlays += "gloves_cell"
|
||||||
|
|||||||
@@ -97,8 +97,6 @@ log transactions
|
|||||||
user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
|
user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
|
||||||
return
|
return
|
||||||
if(get_dist(src,user) <= 1)
|
if(get_dist(src,user) <= 1)
|
||||||
//check to see if the user has low security enabled
|
|
||||||
scan_user(user)
|
|
||||||
|
|
||||||
//js replicated from obj/machinery/computer/card
|
//js replicated from obj/machinery/computer/card
|
||||||
var/dat = "<h1>NanoTrasen Automatic Teller Machine</h1>"
|
var/dat = "<h1>NanoTrasen Automatic Teller Machine</h1>"
|
||||||
@@ -223,7 +221,11 @@ log transactions
|
|||||||
var/new_sec_level = max( min(text2num(href_list["new_security_level"]), 2), 0)
|
var/new_sec_level = max( min(text2num(href_list["new_security_level"]), 2), 0)
|
||||||
authenticated_account.security_level = new_sec_level
|
authenticated_account.security_level = new_sec_level
|
||||||
if("attempt_auth")
|
if("attempt_auth")
|
||||||
if(!ticks_left_locked_down)
|
|
||||||
|
// check if they have low security enabled
|
||||||
|
scan_user(usr)
|
||||||
|
|
||||||
|
if(!ticks_left_locked_down && held_card)
|
||||||
var/tried_account_num = text2num(href_list["account_num"])
|
var/tried_account_num = text2num(href_list["account_num"])
|
||||||
if(!tried_account_num)
|
if(!tried_account_num)
|
||||||
tried_account_num = held_card.associated_account_number
|
tried_account_num = held_card.associated_account_number
|
||||||
@@ -363,3 +365,5 @@ log transactions
|
|||||||
T.date = current_date_string
|
T.date = current_date_string
|
||||||
T.time = worldtime2text()
|
T.time = worldtime2text()
|
||||||
authenticated_account.transaction_log.Add(T)
|
authenticated_account.transaction_log.Add(T)
|
||||||
|
|
||||||
|
view_screen = NO_SCREEN
|
||||||
@@ -44,39 +44,39 @@ var/list/event_last_fired = list()
|
|||||||
//see:
|
//see:
|
||||||
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events.dm
|
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events.dm
|
||||||
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events_Mundane.dm
|
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events_Mundane.dm
|
||||||
possibleEvents[/datum/event/economic_event] = 200
|
possibleEvents[/datum/event/economic_event] = 300
|
||||||
possibleEvents[/datum/event/trivial_news] = 300
|
possibleEvents[/datum/event/trivial_news] = 400
|
||||||
possibleEvents[/datum/event/mundane_news] = 200
|
possibleEvents[/datum/event/mundane_news] = 300
|
||||||
|
|
||||||
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
||||||
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
||||||
if(account_hack_attempted)
|
if(account_hack_attempted)
|
||||||
possibleEvents[/datum/event/money_hacker] = max(min(25, player_list.len) * 4, 200)
|
possibleEvents[/datum/event/money_hacker] = max(min(25, player_list.len) * 4, 200)
|
||||||
|
|
||||||
possibleEvents[/datum/event/carp_migration] = 50 + 50 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/carp_migration] = 20 + 10 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/brand_intelligence] = 50 + 25 * active_with_role["Janitor"]
|
possibleEvents[/datum/event/brand_intelligence] = 20 + 25 * active_with_role["Janitor"]
|
||||||
|
|
||||||
possibleEvents[/datum/event/rogue_drone] = 25 + 25 * active_with_role["Engineer"] + 25 * active_with_role["Security"]
|
possibleEvents[/datum/event/rogue_drone] = 5 + 25 * active_with_role["Engineer"] + 25 * active_with_role["Security"]
|
||||||
possibleEvents[/datum/event/infestation] = 50 + 25 * active_with_role["Janitor"]
|
possibleEvents[/datum/event/infestation] = 100 + 100 * active_with_role["Janitor"]
|
||||||
|
|
||||||
possibleEvents[/datum/event/communications_blackout] = 50 + 25 * active_with_role["AI"] + active_with_role["Scientist"] * 25
|
possibleEvents[/datum/event/communications_blackout] = 50 + 25 * active_with_role["AI"] + active_with_role["Scientist"] * 25
|
||||||
possibleEvents[/datum/event/ionstorm] = active_with_role["AI"] * 25 + active_with_role["Cyborg"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5
|
possibleEvents[/datum/event/ionstorm] = active_with_role["AI"] * 25 + active_with_role["Cyborg"] * 25 + active_with_role["Engineer"] * 10 + active_with_role["Scientist"] * 5
|
||||||
possibleEvents[/datum/event/grid_check] = 25 + 20 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/grid_check] = 25 + 10 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/electrical_storm] = 10 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/electrical_storm] = 15 * active_with_role["Janitor"] + 5 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/wallrot] = 30 * active_with_role["Engineer"] + 50 * active_with_role["Botanist"]
|
possibleEvents[/datum/event/wallrot] = 30 * active_with_role["Engineer"] + 50 * active_with_role["Botanist"]
|
||||||
|
|
||||||
if(!spacevines_spawned)
|
if(!spacevines_spawned)
|
||||||
possibleEvents[/datum/event/spacevine] = 5 + 5 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/spacevine] = 10 + 5 * active_with_role["Engineer"]
|
||||||
if(minutes_passed >= 30) // Give engineers time to set up engine
|
if(minutes_passed >= 30) // Give engineers time to set up engine
|
||||||
possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/meteor_shower] = 40 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/meteor_shower] = 20 * active_with_role["Engineer"]
|
||||||
possibleEvents[/datum/event/blob] = 20 * active_with_role["Engineer"]
|
possibleEvents[/datum/event/blob] = 20 * active_with_role["Engineer"]
|
||||||
|
|
||||||
possibleEvents[/datum/event/viral_infection] = 25 + active_with_role["Medical"] * 100
|
possibleEvents[/datum/event/viral_infection] = 25 + active_with_role["Medical"] * 15
|
||||||
if(active_with_role["Medical"] > 0)
|
if(active_with_role["Medical"] > 0)
|
||||||
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 50
|
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 10
|
||||||
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 150
|
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 10
|
||||||
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 10
|
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 20
|
||||||
possibleEvents[/datum/event/organ_failure] = active_with_role["Medical"] * 50
|
possibleEvents[/datum/event/organ_failure] = active_with_role["Medical"] * 50
|
||||||
|
|
||||||
possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50
|
possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ var/list/allEvents = typesof(/datum/event) - /datum/event
|
|||||||
var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event
|
var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event
|
||||||
//var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event - /datum/event/spider_infestation - /datum/event/alien_infestation
|
//var/list/potentialRandomEvents = typesof(/datum/event) - /datum/event - /datum/event/spider_infestation - /datum/event/alien_infestation
|
||||||
|
|
||||||
var/eventTimeLower = 9000 //15 minutes
|
var/eventTimeLower = 12000 //20 minutes
|
||||||
var/eventTimeUpper = 15000 //25 minutes
|
var/eventTimeUpper = 24000 //40 minutes
|
||||||
var/scheduledEvent = null
|
var/scheduledEvent = null
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,23 @@
|
|||||||
real_name = name
|
real_name = name
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/mob/dead/attackby(obj/item/W, mob/user)
|
||||||
|
if(istype(W,/obj/item/weapon/tome))
|
||||||
|
var/mob/dead/M = src
|
||||||
|
if(src.invisibility != 0)
|
||||||
|
M.invisibility = 0
|
||||||
|
user.visible_message( \
|
||||||
|
"\red [user] drags ghost, [M], to our plan of reality!", \
|
||||||
|
"\red You drag [M] to our plan of reality!" \
|
||||||
|
)
|
||||||
|
else
|
||||||
|
user.visible_message ( \
|
||||||
|
"\red [user] just tried to smash his book into that ghost! It's not very effective", \
|
||||||
|
"\red You get the feeling that the ghost can't become any more visible." \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||||
return 1
|
return 1
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -296,6 +296,14 @@
|
|||||||
if(armor >= 2) return
|
if(armor >= 2) return
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/carbon/human/proc/is_loyalty_implanted(mob/living/carbon/human/M)
|
||||||
|
for(var/L in M.contents)
|
||||||
|
if(istype(L, /obj/item/weapon/implant/loyalty))
|
||||||
|
for(var/datum/organ/external/O in M.organs)
|
||||||
|
if(L in O.implants)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
/mob/living/carbon/human/attack_slime(mob/living/carbon/slime/M as mob)
|
/mob/living/carbon/human/attack_slime(mob/living/carbon/slime/M as mob)
|
||||||
if(M.Victim) return // can't attack while eating!
|
if(M.Victim) return // can't attack while eating!
|
||||||
|
|
||||||
@@ -1257,4 +1265,4 @@ mob/living/carbon/human/yank_out_object()
|
|||||||
if(species)
|
if(species)
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -262,7 +262,7 @@
|
|||||||
|
|
||||||
grabbed_by += G
|
grabbed_by += G
|
||||||
G.synch()
|
G.synch()
|
||||||
|
G.affecting = src
|
||||||
LAssailant = M
|
LAssailant = M
|
||||||
|
|
||||||
for(var/mob/O in viewers(src, null))
|
for(var/mob/O in viewers(src, null))
|
||||||
@@ -298,6 +298,7 @@
|
|||||||
|
|
||||||
grabbed_by += G
|
grabbed_by += G
|
||||||
G.synch()
|
G.synch()
|
||||||
|
G.affecting = src
|
||||||
LAssailant = M
|
LAssailant = M
|
||||||
|
|
||||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||||
|
|||||||
@@ -91,7 +91,7 @@
|
|||||||
I.take_damage(rand(3,5))
|
I.take_damage(rand(3,5))
|
||||||
|
|
||||||
//Special effects for limbs.
|
//Special effects for limbs.
|
||||||
if(E.name in list("l_hand","l_arm","r_hand","r_arm"))
|
if(E.name in list("l_hand","l_arm","r_hand","r_arm") && (broken||malfunction))
|
||||||
var/obj/item/c_hand //Getting what's in this hand
|
var/obj/item/c_hand //Getting what's in this hand
|
||||||
if(E.name == "l_hand" || E.name == "l_arm")
|
if(E.name == "l_hand" || E.name == "l_arm")
|
||||||
c_hand = l_hand
|
c_hand = l_hand
|
||||||
@@ -99,8 +99,7 @@
|
|||||||
c_hand = r_hand
|
c_hand = r_hand
|
||||||
|
|
||||||
if (c_hand)
|
if (c_hand)
|
||||||
if (broken||malfunction)
|
u_equip(c_hand)
|
||||||
u_equip(c_hand)
|
|
||||||
|
|
||||||
if(broken)
|
if(broken)
|
||||||
emote("me", 1, "screams in pain and drops what they were holding in their [E.display_name?"[E.display_name]":"[E]"]!")
|
emote("me", 1, "screams in pain and drops what they were holding in their [E.display_name?"[E.display_name]":"[E]"]!")
|
||||||
@@ -124,35 +123,11 @@
|
|||||||
paralysis = 10
|
paralysis = 10
|
||||||
|
|
||||||
//Check arms and legs for existence
|
//Check arms and legs for existence
|
||||||
var/canstand_l = 1 //Can stand on left leg
|
can_stand = 2 //can stand on both legs
|
||||||
var/canstand_r = 1 //Can stand on right leg
|
var/datum/organ/external/E = organs_by_name["l_foot"]
|
||||||
var/hasleg_l = 1 //Have left leg
|
if(E.status & ORGAN_DESTROYED)
|
||||||
var/hasleg_r = 1 //Have right leg
|
can_stand--
|
||||||
var/hasarm_l = 1 //Have left arm
|
|
||||||
var/hasarm_r = 1 //Have right arm
|
|
||||||
var/datum/organ/external/E
|
|
||||||
E = get_organ("l_leg")
|
|
||||||
if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
|
|
||||||
canstand_l = 0
|
|
||||||
hasleg_l = 0
|
|
||||||
E = get_organ("r_leg")
|
|
||||||
if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
|
|
||||||
canstand_r = 0
|
|
||||||
hasleg_r = 0
|
|
||||||
E = get_organ("l_foot")
|
|
||||||
if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
|
|
||||||
canstand_l = 0
|
|
||||||
E = get_organ("r_foot")
|
|
||||||
if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
|
|
||||||
canstand_r = 0
|
|
||||||
E = get_organ("l_arm")
|
|
||||||
if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
|
|
||||||
hasarm_l = 0
|
|
||||||
E = get_organ("r_arm")
|
|
||||||
if(E.status & ORGAN_DESTROYED && !(E.status & ORGAN_SPLINTED))
|
|
||||||
hasarm_r = 0
|
|
||||||
|
|
||||||
// Can stand if have at least one full leg (with leg and foot parts present)
|
E = organs_by_name["r_foot"]
|
||||||
// Has limbs to move around if at least one arm or leg is at least partially there
|
if(E.status & ORGAN_DESTROYED)
|
||||||
can_stand = canstand_l||canstand_r
|
can_stand--
|
||||||
has_limbs = hasleg_l||hasleg_r||hasarm_l||hasarm_r
|
|
||||||
|
|||||||
@@ -203,7 +203,6 @@ This function completely restores a damaged organ to perfect condition.
|
|||||||
implants -= implanted_object
|
implants -= implanted_object
|
||||||
|
|
||||||
owner.updatehealth()
|
owner.updatehealth()
|
||||||
update_icon()
|
|
||||||
|
|
||||||
|
|
||||||
/datum/organ/external/proc/createwound(var/type = CUT, var/damage)
|
/datum/organ/external/proc/createwound(var/type = CUT, var/damage)
|
||||||
@@ -290,7 +289,6 @@ This function completely restores a damaged organ to perfect condition.
|
|||||||
perma_injury = 0
|
perma_injury = 0
|
||||||
|
|
||||||
update_germs()
|
update_germs()
|
||||||
update_icon()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
//Updating germ levels. Handles organ germ levels and necrosis.
|
//Updating germ levels. Handles organ germ levels and necrosis.
|
||||||
@@ -383,6 +381,8 @@ This function completely restores a damaged organ to perfect condition.
|
|||||||
|
|
||||||
// sync the organ's damage with its wounds
|
// sync the organ's damage with its wounds
|
||||||
src.update_damages()
|
src.update_damages()
|
||||||
|
if (update_icon())
|
||||||
|
owner.UpdateDamageIcon(1)
|
||||||
|
|
||||||
//Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status.
|
//Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status.
|
||||||
/datum/organ/external/proc/update_damages()
|
/datum/organ/external/proc/update_damages()
|
||||||
@@ -415,10 +415,6 @@ This function completely restores a damaged organ to perfect condition.
|
|||||||
var/n_is = damage_state_text()
|
var/n_is = damage_state_text()
|
||||||
if (n_is != damage_state)
|
if (n_is != damage_state)
|
||||||
damage_state = n_is
|
damage_state = n_is
|
||||||
if(status & ORGAN_DESTROYED)
|
|
||||||
owner.update_body(1)
|
|
||||||
else
|
|
||||||
owner.UpdateDamageIcon(1)
|
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
@@ -550,7 +546,7 @@ This function completely restores a damaged organ to perfect condition.
|
|||||||
var/lol = pick(cardinal)
|
var/lol = pick(cardinal)
|
||||||
step(organ,lol)
|
step(organ,lol)
|
||||||
|
|
||||||
owner.regenerate_icons()
|
owner.update_body(1)
|
||||||
|
|
||||||
|
|
||||||
/****************************************************
|
/****************************************************
|
||||||
|
|||||||
@@ -23,7 +23,10 @@
|
|||||||
var/online = 1
|
var/online = 1
|
||||||
var/n_tag = null
|
var/n_tag = null
|
||||||
var/obj/machinery/power/terminal/terminal = null
|
var/obj/machinery/power/terminal/terminal = null
|
||||||
|
//Holders for powerout event.
|
||||||
|
var/last_output = 0
|
||||||
|
var/last_charge = 0
|
||||||
|
var/last_online = 0
|
||||||
|
|
||||||
/obj/machinery/power/smes/New()
|
/obj/machinery/power/smes/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -290,6 +290,7 @@
|
|||||||
var/bottlesprite = "1" //yes, strings
|
var/bottlesprite = "1" //yes, strings
|
||||||
var/pillsprite = "1"
|
var/pillsprite = "1"
|
||||||
var/client/has_sprites = list()
|
var/client/has_sprites = list()
|
||||||
|
var/max_pill_count = 20
|
||||||
|
|
||||||
/obj/machinery/chem_master/New()
|
/obj/machinery/chem_master/New()
|
||||||
var/datum/reagents/R = new/datum/reagents(100)
|
var/datum/reagents/R = new/datum/reagents(100)
|
||||||
@@ -433,12 +434,26 @@
|
|||||||
reagents.clear_reagents()
|
reagents.clear_reagents()
|
||||||
icon_state = "mixer0"
|
icon_state = "mixer0"
|
||||||
else if (href_list["createpill"] || href_list["createpill_multiple"])
|
else if (href_list["createpill"] || href_list["createpill_multiple"])
|
||||||
var/name = reject_bad_text(input(usr,"Name:","Name your pill!",reagents.get_master_reagent_name()))
|
|
||||||
var/count = 1
|
var/count = 1
|
||||||
if (href_list["createpill_multiple"]) count = isgoodnumber(input("Select the number of pills to make.", 10, pillamount) as num)
|
|
||||||
if (count > 20) count = 20 //Pevent people from creating huge stacks of pills easily. Maybe move the number to defines?
|
if(reagents.total_volume/count < 1) //Sanity checking.
|
||||||
|
return
|
||||||
|
|
||||||
|
if (href_list["createpill_multiple"])
|
||||||
|
count = Clamp(isgoodnumber(input("Select the number of pills to make.", 10, pillamount) as num),1,max_pill_count)
|
||||||
|
|
||||||
|
if(reagents.total_volume/count < 1) //Sanity checking.
|
||||||
|
return
|
||||||
|
|
||||||
var/amount_per_pill = reagents.total_volume/count
|
var/amount_per_pill = reagents.total_volume/count
|
||||||
if (amount_per_pill > 50) amount_per_pill = 50
|
if (amount_per_pill > 50) amount_per_pill = 50
|
||||||
|
|
||||||
|
var/name = reject_bad_text(input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill] units)"))
|
||||||
|
|
||||||
|
if(reagents.total_volume/count < 1) //Sanity checking.
|
||||||
|
return
|
||||||
|
|
||||||
while (count--)
|
while (count--)
|
||||||
var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc)
|
var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc)
|
||||||
if(!name) name = reagents.get_master_reagent_name()
|
if(!name) name = reagents.get_master_reagent_name()
|
||||||
@@ -451,6 +466,7 @@
|
|||||||
if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots)
|
if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots)
|
||||||
P.loc = loaded_pill_bottle
|
P.loc = loaded_pill_bottle
|
||||||
src.updateUsrDialog()
|
src.updateUsrDialog()
|
||||||
|
|
||||||
else if (href_list["createbottle"])
|
else if (href_list["createbottle"])
|
||||||
if(!condi)
|
if(!condi)
|
||||||
var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()))
|
var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()))
|
||||||
|
|||||||
@@ -31,8 +31,8 @@
|
|||||||
return ..() && target.op_stage.appendix == 0
|
return ..() && target.op_stage.appendix == 0
|
||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("[user] starts to separating [target]'s appendix from the abdominal wall with \the [tool].", \
|
user.visible_message("[user] starts to separate [target]'s appendix from the abdominal wall with \the [tool].", \
|
||||||
"You start to separating [target]'s appendix from the abdominal wall with \the [tool]." )
|
"You start to separate [target]'s appendix from the abdominal wall with \the [tool]." )
|
||||||
target.custom_pain("The pain in your abdomen is living hell!",1)
|
target.custom_pain("The pain in your abdomen is living hell!",1)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -88,8 +88,8 @@
|
|||||||
return affected.name == "head" && affected.open == 2 && affected.stage == 1
|
return affected.name == "head" && affected.open == 2 && affected.stage == 1
|
||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("[user] is beginning piece together [target]'s skull with \the [tool]." , \
|
user.visible_message("[user] is beginning to piece together [target]'s skull with \the [tool]." , \
|
||||||
"You are beginning piece together [target]'s skull with \the [tool].")
|
"You are beginning to piece together [target]'s skull with \the [tool].")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
|
|||||||
@@ -27,8 +27,8 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\blue [user] has cut through [target]'s skull open with \the [tool].", \
|
user.visible_message("\blue [user] has cut [target]'s skull open with \the [tool].", \
|
||||||
"\blue You have cut through [target]'s skull open with \the [tool].")
|
"\blue You have cut [target]'s skull open with \the [tool].")
|
||||||
target.brain_op_stage = 2
|
target.brain_op_stage = 2
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
@@ -122,13 +122,13 @@
|
|||||||
return ..() && target.brain_op_stage == 2
|
return ..() && target.brain_op_stage == 2
|
||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("[user] starts taking out bone chips out of [target]'s brain with \the [tool].", \
|
user.visible_message("[user] starts taking bone chips out of [target]'s brain with \the [tool].", \
|
||||||
"You start taking out bone chips out of [target]'s brain with \the [tool].")
|
"You start taking bone chips out of [target]'s brain with \the [tool].")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\blue [user] takes out all bone chips out of [target]'s brain with \the [tool].", \
|
user.visible_message("\blue [user] takes out all the bone chips in [target]'s brain with \the [tool].", \
|
||||||
"\blue You take out all bone chips out of [target]'s brain with \the [tool].")
|
"\blue You take out all the bone chips in [target]'s brain with \the [tool].")
|
||||||
target.brain_op_stage = 3
|
target.brain_op_stage = 3
|
||||||
|
|
||||||
|
|
||||||
@@ -189,12 +189,12 @@
|
|||||||
return ..() && target.brain_op_stage == 0
|
return ..() && target.brain_op_stage == 0
|
||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("[user] starts cutting [target]'s flesh with \the [tool].", \
|
user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \
|
||||||
"You start cutting [target]'s flesh with \the [tool].")
|
"You start cutting through [target]'s flesh with \the [tool].")
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\blue [user] cuts [target]'s flesh with \the [tool].", \
|
user.visible_message("\blue [user] cuts through [target]'s flesh with \the [tool].", \
|
||||||
"\blue You cut [target]'s flesh with \the [tool], exposing the cores")
|
"\blue You cut through [target]'s flesh with \the [tool], exposing the cores.")
|
||||||
target.brain_op_stage = 1
|
target.brain_op_stage = 1
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
||||||
@@ -219,8 +219,8 @@
|
|||||||
"You start cutting [target]'s silky innards apart with \the [tool].")
|
"You start cutting [target]'s silky innards apart with \the [tool].")
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\blue [user] cuts [target]'s innards apart with \the [tool], exposing the cores", \
|
user.visible_message("\blue [user] cuts [target]'s innards apart with \the [tool], exposing the cores.", \
|
||||||
"\blue You cut [target]'s innards apart with \the [tool], exposing the cores")
|
"\blue You cut [target]'s innards apart with \the [tool], exposing the cores.")
|
||||||
target.brain_op_stage = 2
|
target.brain_op_stage = 2
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
||||||
@@ -256,5 +256,5 @@
|
|||||||
|
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\red [user]'s hand slips, failing to cut core out!", \
|
user.visible_message("\red [user]'s hand slips, causing \him to miss the core!", \
|
||||||
"\red Your hand slips, failing to cut core out!")
|
"\red Your hand slips, causing you to miss the core!")
|
||||||
@@ -85,13 +85,13 @@
|
|||||||
return ..() && target.op_stage.face == 2
|
return ..() && target.op_stage.face == 2
|
||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("[user] starts pulling skin on [target]'s face back in place with \the [tool].", \
|
user.visible_message("[user] starts pulling the skin on [target]'s face back in place with \the [tool].", \
|
||||||
"You start pulling skin on [target]'s face back in place with \the [tool].")
|
"You start pulling the skin on [target]'s face back in place with \the [tool].")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\blue [user] pulls skin on [target]'s face back in place with \the [tool].", \
|
user.visible_message("\blue [user] pulls the skin on [target]'s face back in place with \the [tool].", \
|
||||||
"\blue You pull skin on [target]'s face back in place with \the [tool].")
|
"\blue You pull the skin on [target]'s face back in place with \the [tool].")
|
||||||
target.op_stage.face = 3
|
target.op_stage.face = 3
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
|
|||||||
@@ -52,8 +52,8 @@
|
|||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||||
user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.display_name] in a wrong spot with \the [tool]!", \
|
user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.display_name] in the wrong place with \the [tool]!", \
|
||||||
"\red Your hand slips, slicing open [target]'s [affected.display_name] in a wrong spot with \the [tool]!")
|
"\red Your hand slips, slicing open [target]'s [affected.display_name] in the wrong place with \the [tool]!")
|
||||||
affected.createwound(CUT, 10)
|
affected.createwound(CUT, 10)
|
||||||
|
|
||||||
/datum/surgery_step/generic/clamp_bleeders
|
/datum/surgery_step/generic/clamp_bleeders
|
||||||
@@ -133,14 +133,14 @@
|
|||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||||
var/msg = "\red [user]'s hand slips, tearing the edges of incision on [target]'s [affected.display_name] with \the [tool]!"
|
var/msg = "\red [user]'s hand slips, tearing the edges of the incision on [target]'s [affected.display_name] with \the [tool]!"
|
||||||
var/self_msg = "\red Your hand slips, tearing the edges of incision on [target]'s [affected.display_name] with \the [tool]!"
|
var/self_msg = "\red Your hand slips, tearing the edges of the incision on [target]'s [affected.display_name] with \the [tool]!"
|
||||||
if (target_zone == "chest")
|
if (target_zone == "chest")
|
||||||
msg = "\red [user]'s hand slips, damaging several organs [target]'s torso with \the [tool]!"
|
msg = "\red [user]'s hand slips, damaging several organs in [target]'s torso with \the [tool]!"
|
||||||
self_msg = "\red Your hand slips, damaging several organs [target]'s torso with \the [tool]!"
|
self_msg = "\red Your hand slips, damaging several organs in [target]'s torso with \the [tool]!"
|
||||||
if (target_zone == "groin")
|
if (target_zone == "groin")
|
||||||
msg = "\red [user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]"
|
msg = "\red [user]'s hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]"
|
||||||
self_msg = "\red Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!"
|
self_msg = "\red Your hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!"
|
||||||
user.visible_message(msg, self_msg)
|
user.visible_message(msg, self_msg)
|
||||||
target.apply_damage(12, BRUTE, affected)
|
target.apply_damage(12, BRUTE, affected)
|
||||||
|
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
|
user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
|
||||||
"\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
|
"\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
|
||||||
if (tool.w_class > get_max_wclass(affected)/2 && prob(50))
|
if (tool.w_class > get_max_wclass(affected)/2 && prob(50))
|
||||||
user << "\red You tear some vessels trying to fit such big object in this cavity."
|
user << "\red You tear some blood vessels trying to fit such a big object in this cavity."
|
||||||
var/datum/wound/internal_bleeding/I = new (15)
|
var/datum/wound/internal_bleeding/I = new (15)
|
||||||
affected.wounds += I
|
affected.wounds += I
|
||||||
affected.owner.custom_pain("You feel something rip in your [affected.display_name]!", 1)
|
affected.owner.custom_pain("You feel something rip in your [affected.display_name]!", 1)
|
||||||
|
|||||||
@@ -31,8 +31,8 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
user.visible_message("\blue [user] has cut through [target]'s ribcage open with \the [tool].", \
|
user.visible_message("\blue [user] has cut [target]'s ribcage open with \the [tool].", \
|
||||||
"\blue You have cut through [target]'s ribcage open with \the [tool].")
|
"\blue You have cut [target]'s ribcage open with \the [tool].")
|
||||||
target.op_stage.ribcage = 1
|
target.op_stage.ribcage = 1
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
@@ -111,14 +111,14 @@
|
|||||||
target.op_stage.ribcage = 1
|
target.op_stage.ribcage = 1
|
||||||
|
|
||||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
var/msg = "\red [user]'s hand slips, bending [target]'s ribcage in a wrong shape!"
|
var/msg = "\red [user]'s hand slips, bending [target]'s ribs the wrong way!"
|
||||||
var/self_msg = "\red Your hand slips, bending [target]'s ribcage in a wrong shape!"
|
var/self_msg = "\red Your hand slips, bending [target]'s ribs the wrong way!"
|
||||||
user.visible_message(msg, self_msg)
|
user.visible_message(msg, self_msg)
|
||||||
var/datum/organ/external/chest/affected = target.get_organ("chest")
|
var/datum/organ/external/chest/affected = target.get_organ("chest")
|
||||||
affected.createwound(BRUISE, 20)
|
affected.createwound(BRUISE, 20)
|
||||||
affected.fracture()
|
affected.fracture()
|
||||||
if (prob(40))
|
if (prob(40))
|
||||||
user.visible_message("\red Rib pierces the lung!")
|
user.visible_message("\red A rib pierces the lung!")
|
||||||
target.rupture_lung()
|
target.rupture_lung()
|
||||||
|
|
||||||
/datum/surgery_step/ribcage/mend_ribcage
|
/datum/surgery_step/ribcage/mend_ribcage
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
if (affected.parent)
|
if (affected.parent)
|
||||||
affected = affected.parent
|
affected = affected.parent
|
||||||
user.visible_message("\red [user]'s hand slips, cutting [target]'s [affected.display_name] open!", \
|
user.visible_message("\red [user]'s hand slips, cutting [target]'s [affected.display_name] open!", \
|
||||||
"\red Your hand slips, cutting [target]'s [affected.display_name] open!")
|
"\red Your hand slips, cutting [target]'s [affected.display_name] open!")
|
||||||
affected.createwound(CUT, 10)
|
affected.createwound(CUT, 10)
|
||||||
|
|
||||||
|
|
||||||
@@ -65,8 +65,8 @@
|
|||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||||
user.visible_message("[user] is beginning reposition flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].", \
|
user.visible_message("[user] is beginning to reposition flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].", \
|
||||||
"You start repositioning flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].")
|
"You start repositioning flesh and nerve endings where [target]'s [affected.display_name] used to be with [tool].")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
@@ -101,8 +101,8 @@
|
|||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||||
user.visible_message("[user] starts adjusting area around [target]'s [affected.display_name] with \the [tool].", \
|
user.visible_message("[user] starts adjusting the area around [target]'s [affected.display_name] with \the [tool].", \
|
||||||
"You start adjusting area around [target]'s [affected.display_name] with \the [tool]..")
|
"You start adjusting the area around [target]'s [affected.display_name] with \the [tool].")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
@@ -140,14 +140,14 @@
|
|||||||
|
|
||||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||||
user.visible_message("[user] starts attaching [tool] where [target]'s [affected.display_name] used to be.", \
|
user.visible_message("[user] starts attaching \the [tool] where [target]'s [affected.display_name] used to be.", \
|
||||||
"You start attaching [tool] where [target]'s [affected.display_name] used to be.")
|
"You start attaching \the [tool] where [target]'s [affected.display_name] used to be.")
|
||||||
|
|
||||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
var/obj/item/robot_parts/L = tool
|
var/obj/item/robot_parts/L = tool
|
||||||
var/datum/organ/external/affected = target.get_organ(target_zone)
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
||||||
user.visible_message("\blue [user] has attached [tool] where [target]'s [affected.display_name] used to be.", \
|
user.visible_message("\blue [user] has attached \the [tool] where [target]'s [affected.display_name] used to be.", \
|
||||||
"\blue You have attached [tool] where [target]'s [affected.display_name] used to be.")
|
"\blue You have attached \the [tool] where [target]'s [affected.display_name] used to be.")
|
||||||
affected.robotize()
|
affected.robotize()
|
||||||
if(L.sabotaged)
|
if(L.sabotaged)
|
||||||
affected.sabotaged = 1
|
affected.sabotaged = 1
|
||||||
|
|||||||
3
config/.gitignore
vendored
Normal file
3
config/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#ignore everything here, except subdirectories.
|
||||||
|
*
|
||||||
|
!*/
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Reference in New Issue
Block a user