Merge pull request #3 from Citadel-Station-13/master

Me update before do thing
This commit is contained in:
BlackMajor
2019-02-17 14:14:05 +13:00
committed by GitHub
125 changed files with 1542 additions and 354 deletions
+1 -1
View File
@@ -74,7 +74,7 @@
#define ISINRANGE(val, min, max) (min <= val && val <= max)
// Same as above, exclusive.
#define ISINRANGE_EX(val, min, max) (min < val && val > max)
#define ISINRANGE_EX(val, min, max) (min < val && val < max)
#define ISINTEGER(x) (round(x) == x)
+3 -2
View File
@@ -98,8 +98,9 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
//Security levels
#define SEC_LEVEL_GREEN 0
#define SEC_LEVEL_BLUE 1
#define SEC_LEVEL_RED 2
#define SEC_LEVEL_DELTA 3
#define SEC_LEVEL_AMBER 2
#define SEC_LEVEL_RED 3
#define SEC_LEVEL_DELTA 4
//some arbitrary defines to be used by self-pruning global lists. (see master_controller)
#define PROCESS_KILL 26 //Used to trigger removal from a processing list
+1 -1
View File
@@ -48,7 +48,7 @@
#define LINGHIVE_LINK 3
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
#define MAX_MESSAGE_LEN 1024
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
#define MAX_NAME_LEN 42
#define MAX_BROADCAST_LEN 512
#define MAX_CHARTER_LEN 80
@@ -162,16 +162,22 @@
config_entry_value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
/datum/config_entry/string/alert_blue_upto
config_entry_value = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted."
config_entry_value = "The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted."
/datum/config_entry/string/alert_blue_downto
config_entry_value = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed."
config_entry_value = "Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted."
/datum/config_entry/string/alert_amber_upto
config_entry_value = "There are significant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised."
/datum/config_entry/string/alert_amber_downto
config_entry_value = "The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored."
/datum/config_entry/string/alert_red_upto
config_entry_value = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised."
config_entry_value = "There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted."
/datum/config_entry/string/alert_red_downto
config_entry_value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised."
config_entry_value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force."
/datum/config_entry/string/alert_delta
config_entry_value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
+4 -1
View File
@@ -281,7 +281,10 @@ SUBSYSTEM_DEF(shuttle)
if(emergency.timeLeft(1) < emergencyCallTime)
return
if(SEC_LEVEL_BLUE)
if(emergency.timeLeft(1) < emergencyCallTime * 0.5)
if(emergency.timeLeft(1) < emergencyCallTime * 0.6)
return
if(SEC_LEVEL_AMBER)
if(emergency.timeLeft(1) < emergencyCallTime * 0.4)
return
else
if(emergency.timeLeft(1) < emergencyCallTime * 0.25)
+11 -5
View File
@@ -14,7 +14,7 @@ SUBSYSTEM_DEF(traumas)
//phobia types is to pull from randomly for brain traumas, e.g. conspiracies is for special assignment only
phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards",
"skeletons", "snakes", "robots", "doctors", "authority", "the supernatural",
"aliens", "strangers", "birds", "falling", "anime", "mimes"
"aliens", "strangers", "birds", "falling", "anime", "mimes", "cats"
)
phobia_words = list("spiders" = strings(PHOBIA_FILE, "spiders"),
@@ -35,7 +35,8 @@ SUBSYSTEM_DEF(traumas)
"birds" = strings(PHOBIA_FILE, "birds"),
"falling" = strings(PHOBIA_FILE, "falling"),
"anime" = strings(PHOBIA_FILE, "anime"),
"mimes" = strings(PHOBIA_FILE, "mimes")
"mimes" = strings(PHOBIA_FILE, "mimes"),
"cats" = strings(PHOBIA_FILE, "cats")
)
phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)),
@@ -54,7 +55,8 @@ SUBSYSTEM_DEF(traumas)
/mob/living/simple_animal/pet/penguin)),
"birds" = typecacheof(list(/mob/living/simple_animal/parrot, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
/mob/living/simple_animal/pet/penguin)),
"anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian))
"anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian)),
"cats"= typecacheof(list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/hostile/cat_butcherer))
)
@@ -152,7 +154,10 @@ SUBSYSTEM_DEF(traumas)
/obj/item/storage/backpack/mime, /obj/item/reagent_containers/food/snacks/grown/banana/mime,
/obj/item/grown/bananapeel/mimanapeel, /obj/item/cartridge/virus/mime, /obj/item/clothing/shoes/sneakers/mime,
/obj/item/bedsheet/mime, /obj/item/reagent_containers/food/snacks/burger/mime, /obj/item/clothing/head/beret, /obj/item/clothing/mask/gas/sexymime,
/obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence))
/obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence)),
"cats" = typecacheof(list(/obj/item/organ/ears/cat, /obj/item/organ/tail/cat, /obj/item/laser_pointer, /obj/item/toy/cattoy, /obj/item/clothing/head/kitty,
/obj/item/clothing/head/collectable/kitty, /obj/item/melee/chainofcommand/tailwhip/kitty, /obj/item/stack/sheet/animalhide/cat))
)
phobia_turfs = list("space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)),
@@ -170,7 +175,8 @@ SUBSYSTEM_DEF(traumas)
"the supernatural" = typecacheof(list(/datum/species/golem/clockwork, /datum/species/golem/runic)),
"aliens" = typecacheof(list(/datum/species/abductor, /datum/species/jelly, /datum/species/pod,
/datum/species/shadow)),
"anime" = typecacheof(list(/datum/species/human/felinid))
"anime" = typecacheof(list(/datum/species/human/felinid)),
"cats" = typecacheof(list(/datum/species/human/felinid))
)
return ..()
@@ -34,6 +34,7 @@
/datum/component/storage/concrete/pockets/shoes/Initialize()
. = ..()
cant_hold = typecacheof(list(/obj/item/screwdriver/power))
can_hold = typecacheof(list(
/obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
/obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
@@ -44,6 +45,7 @@
/datum/component/storage/concrete/pockets/shoes/clown/Initialize()
. = ..()
cant_hold = typecacheof(list(/obj/item/screwdriver/power))
can_hold = typecacheof(list(
/obj/item/kitchen/knife, /obj/item/switchblade, /obj/item/pen,
/obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector,
+2 -1
View File
@@ -51,7 +51,7 @@
/obj/screen/alert/status_effect/vanguard
name = "Vanguard"
desc = "You're absorbing stuns! 25% of all stuns taken will affect you after this effect ends."
desc = "You're absorbing stuns! Your stamina is greatly increased, but not infinite. 25% of all stuns taken will affect you after this effect ends."
icon_state = "vanguard"
alerttooltipstyle = "clockcult"
@@ -75,6 +75,7 @@
owner.visible_message("<span class='warning'>[owner] begins to faintly glow!</span>", "<span class='brass'>You will absorb all stuns for the next twenty seconds.</span>")
owner.SetStun(0, FALSE)
owner.SetKnockdown(0)
owner.setStaminaLoss(0, FALSE)
progbar = new(owner, duration, owner)
progbar.bar.color = list("#FAE48C", "#FAE48C", "#FAE48C", rgb(0,0,0))
progbar.update(duration - world.time)
+3 -3
View File
@@ -283,16 +283,16 @@
name = "Mute"
desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak."
value = -2 //HALP MAINTS
mob_trait = TRAIT_MUTE
gain_text = "<span class='danger'>You find yourself unable to speak!</span>"
lose_text = "<span class='notice'>You feel a growing strength in your vocal chords.</span>"
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
var/datum/brain_trauma/severe/mute
/datum/quirk/mute/add()
var/mob/living/carbon/human/H = quirk_holder
H.gain_trauma(mute, TRAUMA_RESILIENCE_SURGERY)
H.gain_trauma(TRAIT_MUTE, TRAUMA_RESILIENCE_SURGERY)
/datum/quirk/mute/on_process()
if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums))
to_chat(quirk_holder, "<span class='boldannounce'>Your antagonistic nature has caused your voice to return.</span>")
to_chat(quirk_holder, "<span class='boldannounce'>Your antagonistic nature has caused your voice to be heard.</span>")
qdel(src)
+2 -1
View File
@@ -37,6 +37,7 @@ Credit where due:
4. PJB3005 from /vg/ for the failed continuation PR
5. Xhuis from /tg/ for coding the first iteration of the mode, and the new, reworked version
6. ChangelingRain from /tg/ for maintaining the gamemode for months after its release prior to its rework
7. Clockwork cult code as of now, at least the one being pulled from Citadel Station's master branch, is being, or already is, fixed by Coolgat3 and Avunia.
*/
@@ -267,7 +268,7 @@ Credit where due:
//Servant of Ratvar outfit
/datum/outfit/servant_of_ratvar
name = "Servant of Ratvar"
uniform = /obj/item/clothing/under/chameleon/ratvar
uniform = /obj/item/clothing/under/rank/engineer //no more chameleon suit for them, as requested
shoes = /obj/item/clothing/shoes/sneakers/black
back = /obj/item/storage/backpack
ears = /obj/item/radio/headset
+110 -47
View File
@@ -6,53 +6,116 @@
icon_screen = "invaders"
clockwork = TRUE //it'd look weird
var/list/prizes = list(
/obj/item/storage/box/snappops = 2,
/obj/item/toy/talking/AI = 2,
/obj/item/toy/talking/codex_gigas = 2,
/obj/item/clothing/under/syndicate/tacticool = 2,
/obj/item/toy/sword = 2,
/obj/item/toy/gun = 2,
/obj/item/gun/ballistic/shotgun/toy/crossbow = 2,
/obj/item/storage/box/fakesyndiesuit = 2,
/obj/item/storage/crayons = 2,
/obj/item/toy/spinningtoy = 2,
/obj/item/toy/prize/ripley = 1,
/obj/item/toy/prize/fireripley = 1,
/obj/item/toy/prize/deathripley = 1,
/obj/item/toy/prize/gygax = 1,
/obj/item/toy/prize/durand = 1,
/obj/item/toy/prize/honk = 1,
/obj/item/toy/prize/marauder = 1,
/obj/item/toy/prize/seraph = 1,
/obj/item/toy/prize/mauler = 1,
/obj/item/toy/prize/odysseus = 1,
/obj/item/toy/prize/phazon = 1,
/obj/item/toy/prize/reticence = 1,
/obj/item/toy/cards/deck = 2,
/obj/item/toy/nuke = 2,
/obj/item/toy/minimeteor = 2,
/obj/item/toy/redbutton = 2,
/obj/item/toy/talking/owl = 2,
/obj/item/toy/talking/griffin = 2,
/obj/item/coin/antagtoken = 2,
/obj/item/stack/tile/fakespace/loaded = 2,
/obj/item/stack/tile/fakepit/loaded = 2,
/obj/item/toy/toy_xeno = 2,
/obj/item/storage/box/actionfigure = 1,
/obj/item/restraints/handcuffs/fake = 2,
/obj/item/grenade/chem_grenade/glitter/pink = 1,
/obj/item/grenade/chem_grenade/glitter/blue = 1,
/obj/item/grenade/chem_grenade/glitter/white = 1,
/obj/item/toy/eightball = 2,
/obj/item/toy/windupToolbox = 2,
/obj/item/toy/clockwork_watch = 2,
/obj/item/toy/toy_dagger = 2,
/obj/item/extendohand/acme = 1,
/obj/item/hot_potato/harmless/toy = 1,
/obj/item/card/emagfake = 1,
/obj/item/clothing/shoes/wheelys = 2,
/obj/item/clothing/shoes/kindleKicks = 2,
/obj/item/storage/belt/military/snack = 2
/obj/item/storage/box/snappops = 8,
/obj/item/toy/talking/AI = 8,
/obj/item/toy/talking/codex_gigas = 8,
/obj/item/clothing/under/syndicate/tacticool = 8,
/obj/item/toy/sword = 8,
/obj/item/toy/gun = 8,
/obj/item/gun/ballistic/shotgun/toy/crossbow = 8,
/obj/item/storage/box/fakesyndiesuit = 8,
/obj/item/storage/crayons = 8,
/obj/item/toy/spinningtoy = 8,
/obj/item/toy/prize/ripley = 4,
/obj/item/toy/prize/fireripley = 4,
/obj/item/toy/prize/deathripley = 4,
/obj/item/toy/prize/gygax = 4,
/obj/item/toy/prize/durand = 4,
/obj/item/toy/prize/honk = 4,
/obj/item/toy/prize/marauder = 4,
/obj/item/toy/prize/seraph = 4,
/obj/item/toy/prize/mauler = 4,
/obj/item/toy/prize/odysseus = 4,
/obj/item/toy/prize/phazon = 4,
/obj/item/toy/prize/reticence = 4,
/obj/item/toy/cards/deck = 8,
/obj/item/toy/nuke = 8,
/obj/item/toy/minimeteor = 8,
/obj/item/toy/redbutton = 8,
/obj/item/toy/talking/owl = 8,
/obj/item/toy/talking/griffin = 8,
/obj/item/coin/antagtoken = 8,
/obj/item/stack/tile/fakespace/loaded = 8,
/obj/item/stack/tile/fakepit/loaded = 8,
/obj/item/toy/toy_xeno = 8,
/obj/item/storage/box/actionfigure = 4,
/obj/item/restraints/handcuffs/fake = 8,
/obj/item/grenade/chem_grenade/glitter/pink = 4,
/obj/item/grenade/chem_grenade/glitter/blue = 4,
/obj/item/grenade/chem_grenade/glitter/white = 4,
/obj/item/toy/eightball = 8,
/obj/item/toy/windupToolbox = 8,
/obj/item/toy/clockwork_watch = 8,
/obj/item/toy/toy_dagger = 8,
/obj/item/extendohand/acme = 4,
/obj/item/hot_potato/harmless/toy = 4,
/obj/item/card/emagfake = 4,
/obj/item/clothing/shoes/wheelys = 8,
/obj/item/clothing/shoes/kindleKicks = 8,
/obj/item/storage/belt/military/snack = 8,
/obj/item/toy/plush/lizardplushie = 1,
/obj/item/toy/plush/lizardplushie/durgit = 1,
/obj/item/toy/plush/lizardplushie/rio = 1,
/obj/item/toy/plush/lizardplushie/urinsu = 1,
/obj/item/toy/plush/lizardplushie/arfrehn = 1,
/obj/item/toy/plush/lizardplushie/soars = 1,
/obj/item/toy/plush/lizardplushie/ghostie = 1,
/obj/item/toy/plush/lizardplushie/amber = 1,
/obj/item/toy/plush/lizardplushie/cyan = 1,
/obj/item/toy/plush/lizardplushie/meena = 1,
/obj/item/toy/plush/lizardplushie/stalks = 1,
/obj/item/toy/plush/lizardplushie/kobold = 1,
/obj/item/toy/plush/lizardplushie/gorgi = 1,
/obj/item/toy/plush/lizardplushie/almaz = 1,
/obj/item/toy/plush/snakeplushie/sasha = 1,
/obj/item/toy/plush/snakeplushie/shay = 1,
/obj/item/toy/plush/snakeplushie/vulken = 1,
/obj/item/toy/plush/mothplushie = 1,
/obj/item/toy/plush/mothplushie/bumble = 1,
/obj/item/toy/plush/mothplushie/nameko = 1,
/obj/item/toy/plush/mothplushie/suru = 1,
/obj/item/toy/plush/xeno = 1,
/obj/item/toy/plush/lampplushie = 1,
/obj/item/toy/plush/borgplushie = 1,
/obj/item/toy/plush/borgplushie/medihound = 1,
/obj/item/toy/plush/borgplushie/scrubpuppy = 1,
/obj/item/toy/plush/borgplushie/seeking = 1,
/obj/item/toy/plush/borgplushie/neeb = 1,
/obj/item/toy/plush/bird = 1,
/obj/item/toy/plush/bird/esela = 1,
/obj/item/toy/plush/bird/jahonna = 1,
/obj/item/toy/plush/bird/krick = 1,
/obj/item/toy/plush/bird/birddi = 1,
/obj/item/toy/plush/bird/jewel = 1,
/obj/item/toy/plush/mammal = 1,
/obj/item/toy/plush/mammal/dubious = 1,
/obj/item/toy/plush/mammal/gladwyn = 1,
/obj/item/toy/plush/mammal/gavin = 1,
/obj/item/toy/plush/mammal/blep = 1,
/obj/item/toy/plush/mammal/circe = 1,
/obj/item/toy/plush/mammal/pavel = 1,
/obj/item/toy/plush/mammal/oten = 1,
/obj/item/toy/plush/mammal/ray = 1,
/obj/item/toy/plush/mammal/dawud = 1,
/obj/item/toy/plush/mammal/edgar = 1,
/obj/item/toy/plush/mammal/frank = 1,
/obj/item/toy/plush/mammal/poojawa = 1,
/obj/item/toy/plush/mammal/hazel = 1,
/obj/item/toy/plush/mammal/jermaine = 1,
/obj/item/toy/plush/mammal/gunther = 1,
/obj/item/toy/plush/mammal/fox = 1,
/obj/item/toy/plush/mammal/zed = 1,
/obj/item/toy/plush/mammal/dog = 1,
/obj/item/toy/plush/mammal/dog/frost = 1,
/obj/item/toy/plush/mammal/dog/atticus = 1,
/obj/item/toy/plush/mammal/dog/fletch = 1,
/obj/item/toy/plush/mammal/dog/vincent = 1,
/obj/item/toy/plush/mammal/dog/zigfried = 1,
/obj/item/toy/plush/mammal/dog/nikolai = 1,
/obj/item/toy/plush/catgirl = 1,
/obj/item/toy/plush/catgirl/skylar = 1,
/obj/item/toy/plush/catgirl/mikeel = 1,
/obj/item/toy/plush/catgirl/robin = 1
)
light_color = LIGHT_COLOR_GREEN
+10 -4
View File
@@ -108,8 +108,10 @@
tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN)
tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel > SEC_LEVEL_BLUE)
tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
if(tmp_alertlevel == SEC_LEVEL_BLUE)
tmp_alertlevel = SEC_LEVEL_BLUE
if(tmp_alertlevel > SEC_LEVEL_AMBER)
tmp_alertlevel = SEC_LEVEL_AMBER //Cannot engage delta with this
set_security_level(tmp_alertlevel)
if(GLOB.security_level != old_level)
to_chat(usr, "<span class='notice'>Authorization confirmed. Modifying security level.</span>")
@@ -390,8 +392,10 @@
tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN)
tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel > SEC_LEVEL_BLUE)
tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
if(tmp_alertlevel == SEC_LEVEL_BLUE)
tmp_alertlevel = SEC_LEVEL_BLUE
if(tmp_alertlevel > SEC_LEVEL_AMBER)
tmp_alertlevel = SEC_LEVEL_AMBER //Cannot engage delta with this
set_security_level(tmp_alertlevel)
if(GLOB.security_level != old_level)
//Only notify people if an actual change happened
@@ -548,6 +552,7 @@
if(GLOB.security_level == SEC_LEVEL_DELTA)
dat += "<font color='red'><b>The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate.</b></font>"
else
dat += "<A HREF='?src=[REF(src)];operation=securitylevel;newalertlevel=[SEC_LEVEL_AMBER]'>Amber</A><BR>"
dat += "<A HREF='?src=[REF(src)];operation=securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
dat += "<A HREF='?src=[REF(src)];operation=securitylevel;newalertlevel=[SEC_LEVEL_GREEN]'>Green</A>"
if(STATE_CONFIRM_LEVEL)
@@ -690,6 +695,7 @@
if(GLOB.security_level == SEC_LEVEL_DELTA)
dat += "<font color='red'><b>The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate.</b></font>"
else
dat += "<A HREF='?src=[REF(src)];operation=ai-securitylevel;newalertlevel=[SEC_LEVEL_AMBER]'>Amber</A><BR>"
dat += "<A HREF='?src=[REF(src)];operation=ai-securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
dat += "<A HREF='?src=[REF(src)];operation=ai-securitylevel;newalertlevel=[SEC_LEVEL_GREEN]'>Green</A>"
@@ -56,6 +56,8 @@ would spawn and follow the beaker, even if it is carried or thrown.
/datum/effect_system/proc/generate_effect()
if(holder)
location = get_turf(holder)
if(location.contents.len > 200) //Bandaid to prevent server crash exploit
return
var/obj/effect/E = new effect_type(location)
total_effects++
var/direction
+5 -1
View File
@@ -536,12 +536,16 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
callback = CALLBACK(src, .proc/after_throw, callback) //replace their callback with our own
. = ..(target, range, speed, thrower, spin, diagonals_first, callback)
/obj/item/proc/after_throw(datum/callback/callback)
if (callback) //call the original callback
. = callback.Invoke()
throw_speed = initial(throw_speed) //explosions change this.
item_flags &= ~IN_INVENTORY
var/matrix/M = matrix(transform)
M.Turn(rand(-170, 170))
transform = M
pixel_x = rand(-12, 12)
pixel_y = rand(-12, 12)
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage
if(!newLoc)
+6
View File
@@ -76,6 +76,10 @@ RLD
loaded = loadwithsheets(W, plasmarglassmultiplier*sheetmultiplier, user) //8 matter for one plasma rglass sheet
else if(istype(W, /obj/item/stack/sheet/rglass))
loaded = loadwithsheets(W, rglassmultiplier*sheetmultiplier, user) //6 matter for one rglass sheet
else if(istype(W, /obj/item/stack/rods))
loaded = loadwithsheets(W, sheetmultiplier * 0.5, user) // 2 matter for 1 rod, as 2 rods are produced from 1 metal
else if(istype(W, /obj/item/stack/tile/plasteel))
loaded = loadwithsheets(W, sheetmultiplier * 0.25, user) // 1 matter for 1 floortile, as 4 tiles are produced from 1 metal
if(loaded)
to_chat(user, "<span class='notice'>[src] now holds [matter]/[max_matter] matter-units.</span>")
else
@@ -475,6 +479,8 @@ RLD
var/ammoamt = 40
/obj/item/rcd_ammo/large
name = "large compressed matter cartridge"
desc = "Highly compressed matter for the RCD. Has four times the matter packed into the same space as a normal cartridge."
materials = list(MAT_METAL=48000, MAT_GLASS=32000)
ammoamt = 160
+50 -1
View File
@@ -11,12 +11,45 @@
strip_delay = 80
dog_fashion = null
// CITADEL CHANGES: More variants
/obj/item/clothing/head/helmet/chaplain/bland
icon_state = "knight_generic"
item_state = "knight_generic"
/obj/item/clothing/head/helmet/chaplain/bland/horned
name = "horned crusader helmet"
desc = "Helfen, Wehren, Heilen."
icon_state = "knight_horned"
item_state = "knight_horned"
/obj/item/clothing/head/helmet/chaplain/bland/winged
name = "winged crusader helmet"
desc = "Helfen, Wehren, Heilen."
icon_state = "knight_winged"
item_state = "knight_winged"
// CITADEL CHANGES ENDS HERE
/obj/item/clothing/suit/armor/riot/chaplain
name = "crusader armour"
desc = "God wills it!"
icon_state = "knight_templar"
item_state = "knight_templar"
// CITADEL CHANGES: More variants
/obj/item/clothing/suit/armor/riot/chaplain/teutonic
desc = "Help, Defend, Heal!"
icon_state = "knight_teutonic"
item_state = "knight_teutonic"
/obj/item/clothing/suit/armor/riot/chaplain/teutonic/alt
icon_state = "knight_teutonic_alt"
item_state = "knight_teutonic_alt"
/obj/item/clothing/suit/armor/riot/chaplain/hospitaller
icon_state = "knight_hospitaller"
item_state = "knight_hospitaller"
// CITADEL CHANGES ENDS HERE
/obj/item/holybeacon
name = "armaments beacon"
desc = "Contains a set of armaments for the chaplain."
@@ -60,6 +93,22 @@
new /obj/item/clothing/head/helmet/chaplain(src)
new /obj/item/clothing/suit/armor/riot/chaplain(src)
// CITADEL CHANGES: More Variants
/obj/item/storage/box/holy/teutonic
name = "Teutonic Kit"
/obj/item/storage/box/holy/teutonic/PopulateContents() // It just works
pick(new /obj/item/clothing/head/helmet/chaplain/bland/horned(src), new /obj/item/clothing/head/helmet/chaplain/bland/winged(src))
pick(new /obj/item/clothing/suit/armor/riot/chaplain/teutonic(src), new /obj/item/clothing/suit/armor/riot/chaplain/teutonic/alt(src))
/obj/item/storage/box/holy/hospitaller
name = "Hospitaller Kit"
/obj/item/storage/box/holy/hospitaller/PopulateContents()
new /obj/item/clothing/head/helmet/chaplain/bland(src)
new /obj/item/clothing/suit/armor/riot/chaplain/hospitaller(src)
// CITADEL CHANGES ENDS HERE
/obj/item/storage/box/holy/student
name = "Profane Scholar Kit"
@@ -210,7 +259,7 @@
if(QDELETED(src) || !choice || M.stat || !in_range(M, src) || M.restrained() || !M.canmove || reskinned)
return
var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new
var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new
holy_weapon = new A
SSreligion.holy_weapon_type = holy_weapon.type
+15 -7
View File
@@ -15,7 +15,7 @@
var/mopping = 0
var/mopcount = 0
var/mopcap = 5
var/mopspeed = 30
var/stamusage = 5
force_string = "robust... against germs"
var/insertable = TRUE
@@ -39,6 +39,12 @@
if(!proximity)
return
var/mob/living/L = user
if(istype(L) && L.getStaminaLoss() >= STAMINA_SOFTCRIT)
to_chat(user, "<span class='danger'>You're too exhausted for that.</span>")
return
if(reagents.total_volume < 1)
to_chat(user, "<span class='warning'>Your mop is dry!</span>")
return
@@ -49,11 +55,13 @@
return
if(T)
user.visible_message("[user] begins to clean \the [T] with [src].", "<span class='notice'>You begin to clean \the [T] with [src]...</span>")
if(do_after(user, src.mopspeed, target = T))
to_chat(user, "<span class='notice'>You finish mopping.</span>")
clean(T)
user.visible_message("[user] cleans \the [T] with [src].", "<span class='notice'>You clean \the [T] with [src].</span>")
clean(T)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(T, used_item = src)
if(istype(L))
L.adjustStaminaLossBuffered(stamusage)
playsound(T, "slosh", 50, 1)
/obj/effect/attackby(obj/item/I, mob/user, params)
@@ -86,7 +94,7 @@
force = 6
throwforce = 8
throw_range = 4
mopspeed = 20
stamusage = 2
var/refill_enabled = TRUE //Self-refill toggle for when a janitor decides to mop with something other than water.
var/refill_rate = 1 //Rate per process() tick mop refills itself
var/refill_reagent = "water" //Determins what reagent to use for refilling, just in case someone wanted to make a HOLY MOP OF PURGING
+290 -1
View File
@@ -486,13 +486,79 @@
attack_verb = list("clawed", "hissed", "tail slapped")
squeak_override = list('sound/weapons/slash.ogg' = 1)
/obj/item/toy/plush/lizardplushie/durgit
icon_state = "durgit"
item_state = "durgit"
squeak_override = list('modular_citadel/sound/voice/weh.ogg' = 1) //Durgit's the origin of the sound
/obj/item/toy/plush/lizardplushie/rio
icon_state = "rio"
item_state = "rio"
/obj/item/toy/plush/lizardplushie/urinsu
icon_state = "urinsu"
item_state = "urinsu"
/obj/item/toy/plush/lizardplushie/arfrehn
icon_state = "arfrehn"
item_state = "arfrehn"
/obj/item/toy/plush/lizardplushie/soars
icon_state = "soars"
item_state = "soars"
/obj/item/toy/plush/lizardplushie/ghostie
icon_state = "ghostie"
item_state = "ghostie"
/obj/item/toy/plush/lizardplushie/amber
icon_state = "amber"
item_state = "amber"
/obj/item/toy/plush/lizardplushie/cyan
icon_state = "cyan"
item_state = "cyan"
/obj/item/toy/plush/lizardplushie/meena
icon_state = "meena"
item_state = "meena"
/obj/item/toy/plush/lizardplushie/stalks
icon_state = "stalks"
item_state = "stalks"
/obj/item/toy/plush/lizardplushie/kobold
icon_state = "kobold"
item_state = "kobold"
/obj/item/toy/plush/lizardplushie/gorgi
icon_state = "gorgi"
item_state = "gorgi"
/obj/item/toy/plush/lizardplushie/almaz
icon_state = "almaz"
item_state = "almaz"
squeak_override = list('modular_citadel/sound/voice/raptor_purr.ogg' = 1)
/obj/item/toy/plush/snakeplushie
name = "snake plushie"
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
icon_state = "plushie_snake"
item_state = "plushie_snake"
attack_verb = list("bitten", "hissed", "tail slapped")
squeak_override = list('sound/weapons/bite.ogg' = 1)
squeak_override = list('sound/voice/lowHiss2.ogg' = 1)
/obj/item/toy/plush/snakeplushie/sasha
icon_state = "sasha"
item_state = "sasha"
/obj/item/toy/plush/snakeplushie/shay
icon_state = "shay"
item_state = "shay"
/obj/item/toy/plush/snakeplushie/vulken
icon_state = "vulken"
item_state = "vulken"
/obj/item/toy/plush/nukeplushie
name = "operative plushie"
@@ -517,6 +583,229 @@
icon_state = "plushie_awake"
item_state = "plushie_awake"
/obj/item/toy/plush/mothplushie
name = "insect plushie"
desc = "An adorable stuffed toy that resembles some kind of insect"
icon_state = "cydia"
item_state = "cydia"
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
/obj/item/toy/plush/mothplushie/bumble
icon_state = "bumble"
item_state = "bumble"
/obj/item/toy/plush/mothplushie/nameko
icon_state = "nameko"
item_state = "nameko"
/obj/item/toy/plush/mothplushie/suru
icon_state = "suru"
item_state = "suru"
/obj/item/toy/plush/xeno
name = "xenohybrid plushie"
desc = "An adorable stuffed toy that resmembles a xenomorphic crewmember."
icon_state = "seras"
item_state = "seras"
squeak_override = list('sound/voice/hiss2.ogg' = 1)
/obj/item/toy/plush/lampplushie
name = "lamp plushie"
desc = "A toy lamp plushie, doesn't actually make light, but it still toggles on and off. Click clack!"
icon_state = "plushie_lamp"
item_state = "plushie_lamp"
attack_verb = list("lit", "flickered", "flashed")
squeak_override = list('sound/weapons/magout.ogg' = 1)
/obj/item/toy/plush/borgplushie
name = "robot plushie"
desc = "An adorable stuffed toy of a robot."
icon_state = "securityk9"
item_state = "securityk9"
attack_verb = list("beeped", "booped", "pinged")
squeak_override = list('sound/machines/beep.ogg' = 1)
/obj/item/toy/plush/borgplushie/medihound
icon_state = "medihound"
item_state = "medihound"
/obj/item/toy/plush/borgplushie/scrubpuppy
icon_state = "scrubpuppy"
item_state = "scrubpuppy"
/obj/item/toy/plush/borgplushie/seeking
icon_state = "seeking"
item_state = "seeking"
/obj/item/toy/plush/borgplushie/neeb
icon_state = "neeb"
item_state = "neeb"
/obj/item/toy/plush/bird
name = "bird plushie"
desc = "An adorable stuffed plushie that resembles an avian."
icon_state = "sylas"
item_state = "sylas"
attack_verb = list("peeped", "beeped", "poofed")
squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1)
/obj/item/toy/plush/bird/esela
icon_state = "esela"
item_state = "esela"
/obj/item/toy/plush/bird/jahonna
icon_state = "jahonna"
item_state = "jahonna"
/obj/item/toy/plush/bird/krick
icon_state = "krick"
item_state = "krick"
/obj/item/toy/plush/bird/birddi
icon_state = "birddi"
item_state = "birddi"
/obj/item/toy/plush/bird/jewel
icon_state = "jewel"
item_state = "jewel"
/obj/item/toy/plush/mammal
name = "mammal plushie"
desc = "An adorable stuffed toy resembling some sort of mammallian crew member."
icon_state = "faux"
item_state = "faux"
/obj/item/toy/plush/mammal/dubious
icon_state = "dubious"
item_state = "dubious"
/obj/item/toy/plush/mammal/gladwyn
icon_state = "gladwyn"
item_state = "gladwyn"
/obj/item/toy/plush/mammal/gavin
icon_state = "gavin"
item_state = "gavin"
/obj/item/toy/plush/mammal/blep
icon_state = "blep"
item_state = "blep"
/obj/item/toy/plush/mammal/circe
icon_state = "circe"
item_state = "circe"
/obj/item/toy/plush/mammal/pavel
icon_state = "pavel"
item_state = "pavel"
/obj/item/toy/plush/mammal/oten
icon_state = "oten"
item_state = "oten"
/obj/item/toy/plush/mammal/ray
icon_state = "ray"
item_state = "ray"
/obj/item/toy/plush/mammal/dawud
icon_state = "dawud"
item_state = "dawud"
/obj/item/toy/plush/mammal/edgar
icon_state = "edgar"
item_state = "edgar"
/obj/item/toy/plush/mammal/frank
icon_state = "frank"
item_state = "frank"
/obj/item/toy/plush/mammal/poojawa
icon_state = "poojawa"
item_state = "poojawa"
/obj/item/toy/plush/mammal/hazel
icon_state = "hazel"
item_state = "hazel"
/obj/item/toy/plush/mammal/joker
icon_state = "joker"
item_state = "joker"
/obj/item/toy/plush/mammal/jermaine
icon_state = "jermaine"
item_state = "jermaine"
/obj/item/toy/plush/mammal/gunther
icon_state = "gunther"
item_state = "gunther"
/obj/item/toy/plush/mammal/fox
icon_state = "fox"
item_state = "fox"
/obj/item/toy/plush/mammal/zed
icon_state = "zed"
item_state = "zed"
/obj/item/toy/plush/mammal/dog
desc = "An adorable stuffed toy that resembles a canine."
icon_state = "katlin"
item_state = "katlin"
attack_verb = list("barked", "boofed", "borked")
squeak_override = list(
'modular_citadel/sound/voice/bark1.ogg' = 1,
'modular_citadel/sound/voice/bark2.ogg' = 1
)
/obj/item/toy/plush/mammal/dog/frost
icon_state = "frost"
item_state = "frost"
/obj/item/toy/plush/mammal/dog/atticus
icon_state = "atticus"
item_state = "atticus"
/obj/item/toy/plush/mammal/dog/fletch
icon_state = "fletch"
item_state = "fletch"
/obj/item/toy/plush/mammal/dog/vincent
icon_state = "vincent"
item_state = "vincent"
/obj/item/toy/plush/mammal/dog/zigfried
desc = "An adorable stuffed toy of a very good boy."
icon_state = "zigfried"
item_state = "zigfried"
/obj/item/toy/plush/mammal/dog/nikolai
icon_state = "nikolai"
item_state = "nikolai"
/obj/item/toy/plush/catgirl
name = "feline plushie"
desc = "An adorable stuffed toy that resembles a felinid."
icon_state = "bailey"
item_state = "bailey"
attack_verb = list("headbutt", "scritched", "bit")
squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1)
/obj/item/toy/plush/catgirl/mikeel
desc = "An adorable stuffed toy of some tauric cat person."
icon_state = "mikeel"
item_state = "mikeel"
/obj/item/toy/plush/catgirl/skylar
desc = "An adorable stuffed toy that resembles a degenerate."
icon_state = "skylar"
item_state = "skylar"
attack_verb = list("powergamed", "merged", "tabled")
squeak_override = list('sound/effects/meow1.ogg' = 1)
/obj/item/toy/plush/catgirl/robin
icon_state = "robin"
item_state = "robin"
/obj/item/toy/plush/awakenedplushie/ComponentInitialize()
. = ..()
AddComponent(/datum/component/edit_complainer)
@@ -266,6 +266,9 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
if("large")
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
var/matrix/M = matrix(transform)
M.Turn(rand(-170, 170))
transform = M
/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity)
. = ..()
@@ -441,6 +441,23 @@
new /obj/item/clothing/mask/muzzle(src)
new /obj/item/mmi/syndie(src)
/obj/item/storage/backpack/duffelbag/syndie/surgery_adv
name = "advanced surgery duffel bag"
desc = "A large duffel bag for holding surgical tools. Bears the logo of an advanced med-tech firm."
/obj/item/storage/backpack/duffelbag/syndie/surgery_adv/PopulateContents()
new /obj/item/hemostat/adv(src)
new /obj/item/circular_saw/adv(src)
new /obj/item/scalpel/adv(src)
new /obj/item/retractor/adv(src)
new /obj/item/cautery/adv(src)
new /obj/item/surgicaldrill/adv(src)
new /obj/item/surgical_drapes(src)
new /obj/item/storage/firstaid/tactical(src)
new /obj/item/clothing/suit/straight_jacket(src)
new /obj/item/clothing/mask/muzzle(src)
new /obj/item/mmi/syndie(src)
/obj/item/storage/backpack/duffelbag/syndie/ammo
name = "ammunition duffel bag"
desc = "A large duffel bag for holding extra weapons ammunition and supplies."
+14
View File
@@ -168,6 +168,20 @@
/obj/item/pinpointer/crew
))
/obj/item/storage/belt/medical/surgery_belt_adv
name = "surgical supply belt"
desc = "A specialized belt designed for holding surgical equipment. It seems to have specific pockets for each and every surgical tool you can think of."
/obj/item/storage/belt/medical/surgery_belt_adv/PopulateContents()
new /obj/item/hemostat/adv(src)
new /obj/item/circular_saw/adv(src)
new /obj/item/scalpel/adv(src)
new /obj/item/retractor/adv(src)
new /obj/item/cautery/adv(src)
new /obj/item/surgicaldrill/adv(src)
new /obj/item/surgical_drapes(src)
/obj/item/storage/belt/security
name = "security belt"
desc = "Can hold security gear like handcuffs and flashes."
@@ -99,6 +99,26 @@
new /obj/item/storage/pill_bottle/charcoal(src)
new /obj/item/healthanalyzer(src)
/obj/item/storage/firstaid/radbgone
name = "radiation treatment kit"
desc = "Used to treat minor toxic blood content and major radiation poisoning."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
/obj/item/storage/firstaid/radbgone/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return TOXLOSS
/obj/item/storage/firstaid/radbgone/PopulateContents()
if(empty)
return
new /obj/item/reagent_containers/syringe/charcoal(src)
new /obj/item/storage/pill_bottle/charcoal(src)
new /obj/item/reagent_containers/pill/mutadone(src)
new /obj/item/reagent_containers/pill/antirad(src)
new /obj/item/reagent_containers/food/drinks/bottle/vodka(src)
new /obj/item/healthanalyzer(src)
/obj/item/storage/firstaid/o2
name = "oxygen deprivation treatment kit"
desc = "A box full of oxygen goodies."
@@ -191,6 +211,14 @@
for(var/i in 1 to 7)
new /obj/item/reagent_containers/pill/charcoal(src)
/obj/item/storage/pill_bottle/antirad
name = "bottle of charcoal pills"
desc = "Contains pills used to counter radiation poisoning."
/obj/item/storage/pill_bottle/anitrad/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/reagent_containers/pill/antirad(src)
/obj/item/storage/pill_bottle/epinephrine
name = "bottle of epinephrine pills"
desc = "Contains pills used to stabilize patients."
@@ -84,15 +84,6 @@
//Citadel change buffed to base levels
total_mass = 2
/obj/item/storage/toolbox/mechanical/old/heirloom/afterattack(atom/A, mob/user, proximity) //Citadel Adds massive buff to machinery destruction
. = ..()
if(proximity)
if(isobj(A))
var/obj/machinery/door/O = A
if(istype(O) && (O.damage_deflection >= 10)) //Eh fine. //This is a meme cast do not do what I did!
return
O.take_damage(13)
/obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents()
return
@@ -13,6 +13,7 @@
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
STR.max_items = 4
STR.cant_hold = typecacheof(list(/obj/item/screwdriver/power))
STR.can_hold = typecacheof(list(
/obj/item/stack/spacecash,
/obj/item/card,
@@ -74,6 +74,7 @@
new /obj/item/door_remote/chief_medical_officer(src)
new /obj/item/clothing/neck/petcollar(src)
new /obj/item/pet_carrier(src)
new /obj/item/storage/belt/medical/surgery_belt_adv(src)
new /obj/item/wallframe/defib_mount(src)
new /obj/item/circuitboard/machine/techfab/department/medical(src)
new /obj/item/storage/photo_album/CMO(src)
@@ -99,4 +100,4 @@
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)
new /obj/item/storage/box/medsprays(src)
@@ -63,7 +63,8 @@
/obj/structure/closet/firecloset/PopulateContents()
..()
if (prob(50))
new /obj/item/reagent_containers/hypospray/medipen/firelocker(src)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/tank/internals/oxygen/red(src)
@@ -71,6 +72,9 @@
new /obj/item/clothing/head/hardhat/red(src)
/obj/structure/closet/firecloset/full/PopulateContents()
..()
if (prob(50))
new /obj/item/reagent_containers/hypospray/medipen/firelocker(src)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/flashlight(src)
@@ -132,6 +136,8 @@
/obj/structure/closet/radiation/PopulateContents()
..()
if(prob(50))
new /obj/item/storage/firstaid/radbgone(src)
new /obj/item/geiger_counter(src)
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
@@ -146,18 +152,38 @@
/obj/structure/closet/bombcloset/PopulateContents()
..()
if(prob(70))
new /obj/item/screwdriver(src)
if(prob(50))
new /obj/item/multitool(src)
if(prob(70))
new /obj/item/wirecutters(src)
new /obj/item/clothing/suit/bomb_suit(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/head/bomb_hood(src)
/obj/structure/closet/bombcloset/security/PopulateContents()
..()
if(prob(90))
new /obj/item/screwdriver(src)
if(prob(70))
new /obj/item/multitool(src)
if(prob(90))
new /obj/item/wirecutters(src)
new /obj/item/clothing/suit/bomb_suit/security(src)
new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/head/bomb_hood/security(src)
/obj/structure/closet/bombcloset/white/PopulateContents()
..()
if(prob(50))
new /obj/item/screwdriver(src)
if(prob(20))
new /obj/item/multitool(src)
if(prob(50))
new /obj/item/wirecutters(src)
new /obj/item/clothing/suit/bomb_suit/white(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
+1 -1
View File
@@ -99,7 +99,7 @@
name = "magic mirror"
desc = "Turn and face the strange... face."
icon_state = "magic_mirror"
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush")
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush", "zombie", "memezombie")
var/list/choosable_races = list()
/obj/structure/mirror/magic/New()
+2
View File
@@ -204,5 +204,7 @@
soundin = pick('sound/effects/clang1.ogg', 'sound/effects/clang2.ogg')
if("clangsmall")
soundin = pick('sound/effects/clangsmall1.ogg', 'sound/effects/clangsmall2.ogg')
if("slosh")
soundin = pick('sound/effects/slosh1.ogg', 'sound/effects/slosh2.ogg')
//END OF CIT CHANGES
return soundin
+9
View File
@@ -102,6 +102,15 @@ GLOBAL_LIST(round_end_notifiees)
return "Query produced no output"
var/list/text_res = results.Copy(1, 3)
var/list/refs = results.len > 3 ? results.Copy(4) : null
if(refs)
var/list/L = list()
for(var/ref in refs)
var/atom/A = locate(ref)
if(A)
L += "[A]"
else
L += "[ref]"
refs = L
. = "[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]"
/datum/tgs_chat_command/reload_admins
+1 -1
View File
@@ -845,7 +845,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_ADMIN))
return
var/level = input("Select security level to change to","Set Security Level") as null|anything in list("green","blue","red","delta")
var/level = input("Select security level to change to","Set Security Level") as null|anything in list("green","blue","amber","red","delta")
if(level)
set_security_level(level)
@@ -194,7 +194,8 @@
else
L.visible_message("<span class='warning'>[L]'s eyes blaze with brilliant light!</span>", \
"<span class='userdanger'>Your vision suddenly screams with white-hot light!</span>")
L.Knockdown(15)
L.Knockdown(160)
L.adjustStaminaLoss(140) // now kindle works pretty much like bloodcult stun knockdown and stamcrit wise
L.apply_status_effect(STATUS_EFFECT_KINDLE)
L.flash_act(1, 1)
if(iscultist(L))
@@ -71,7 +71,7 @@
desc = "Charges your slab with divine energy, allowing you to overwhelm a target with Ratvar's light."
invocations = list("Divinity, show them your light!")
whispered = TRUE
channel_time = 30
channel_time = 20 // I think making kindle channel a third of the time less is a good make up for the fact that it silences people for such a little amount of time.
power_cost = 125
usage_tip = "The light can be used from up to two tiles away. Damage taken will GREATLY REDUCE the stun's duration."
tier = SCRIPTURE_DRIVER
@@ -112,21 +112,21 @@
quickbind_desc = "Applies handcuffs to a struck target."
//Vanguard: Provides twenty seconds of stun immunity. At the end of the twenty seconds, 25% of all stuns absorbed are applied to the invoker.
//Vanguard: Provides twenty seconds of greatly increased stamina and stun immunity. At the end of the twenty seconds, 25% of all stuns absorbed are applied to the invoker.
/datum/clockwork_scripture/vanguard
descname = "Self Stun Immunity"
name = "Vanguard"
desc = "Provides twenty seconds of stun immunity. At the end of the twenty seconds, the invoker is knocked down for the equivalent of 25% of all stuns they absorbed. \
desc = "Provides twenty seconds of greatly increased stamina and stun immunity. At the end of the twenty seconds, the invoker is knocked down for the equivalent of 25% of all stuns they absorbed. \
Excessive absorption will cause unconsciousness."
invocations = list("Shield me...", "...from darkness!")
channel_time = 30
power_cost = 25
power_cost = 75
usage_tip = "You cannot reactivate Vanguard while still shielded by it."
tier = SCRIPTURE_DRIVER
primary_component = VANGUARD_COGWHEEL
sort_priority = 6
quickbind = TRUE
quickbind_desc = "Allows you to temporarily absorb stuns. All stuns absorbed will affect you when disabled."
quickbind_desc = "Allows you to temporarily have quickly regenerating stamina and absorb stuns. All stuns absorbed will affect you when disabled."
/datum/clockwork_scripture/vanguard/check_special_requirements()
if(!GLOB.ratvar_awakens && islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time)
+3 -1
View File
@@ -508,7 +508,9 @@
if(SEC_LEVEL_GREEN)
set_coefficient = 2
if(SEC_LEVEL_BLUE)
set_coefficient = 1
set_coefficient = 1.2
if(SEC_LEVEL_AMBER)
set_coefficient = 0.8
else
set_coefficient = 0.5
var/surplus = timer - (SSshuttle.emergencyCallTime * set_coefficient)
+4 -2
View File
@@ -125,7 +125,9 @@
to_chat(M, "<span class='userdanger'>[user] blinds you with the flash!</span>")
else
to_chat(M, "<span class='userdanger'>You are blinded by [src]!</span>")
M.Knockdown(rand(80,120))
var/toblur = 20 - M.eye_blurry
if(toblur > 0)
M.blur_eyes(toblur)
else if(user)
visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
to_chat(user, "<span class='warning'>You fail to blind [M] with the flash!</span>")
@@ -141,7 +143,7 @@
if(!try_use_flash(user))
return FALSE
if(iscarbon(M))
flash_carbon(M, user, 5, 1)
flash_carbon(M, user, 20, 1)
return TRUE
else if(issilicon(M))
var/mob/living/silicon/robot/R = M
+14
View File
@@ -76,3 +76,17 @@
/datum/export/manifest_correct_denied/get_cost(obj/O)
var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
return ..() - M.order_cost
// Paper work done correctly
/datum/export/paperwork_correct
cost = 50
unit_name = "correct paperwork"
export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest/paperwork_correct)
// Paper work not done retruned
/datum/export/paperwork_incorrect
cost = -500 // Failed to meet NT standers
unit_name = "returned incorrect paperwork"
export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest/paperwork)
+11
View File
@@ -95,3 +95,14 @@
while(--lost >= 0)
qdel(pick(C.contents))
return C
//Paperwork for NT
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork
name = "Incomplete Paperwork"
desc = "These should've been filled out four months ago! Unfinished grant papers issued by Nanotrasen's finance department. Complete this page for additional funding."
icon = 'icons/obj/bureaucracy.dmi'
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork_correct
name = "Finished Paperwork"
desc = "A neat stack of filled-out forms, in triplicate and signed. Is there anything more satisfying? Make sure they get stamped."
icon = 'icons/obj/bureaucracy.dmi'
+143 -26
View File
@@ -84,7 +84,7 @@
/datum/supply_pack/emergency/rcds
name = "Emergency RCDs"
desc = "Bombs going off on station? SME blown and now you need to fix the hole it left behind? Well this crate has a pare of Rcds to be able to easily fix up any problem you may have!"
cost = 1500
cost = 1500
contains = list(/obj/item/construction/rcd,
/obj/item/construction/rcd)
crate_name = "emergency rcds"
@@ -93,7 +93,7 @@
/datum/supply_pack/emergency/soft_suit
name = "Emergency Space Suit "
desc = "Is there bombs going off left and right? Is there meteors shooting around the station? Well we have two fragile space suit for emergencys as well as air and masks."
cost = 1000
cost = 1000
contains = list(/obj/item/tank/internals/air,
/obj/item/tank/internals/air,
/obj/item/clothing/mask/gas,
@@ -268,7 +268,7 @@
/datum/supply_pack/medical/anitvirus
name = "Virus Containment Crate"
desc = "Viro let out a death plague Mk II again? Someone didnt wash there hands? Old plagues born anew? Well this crate is for you! Hope you cure it before it brakes out of the station... This crate needs medical access to open and has two bio suits, a box of needles and beakers, five spaceacillin needles, and a medibot."
cost = 3000
cost = 3000
access = ACCESS_MEDICAL
contains = list(/mob/living/simple_animal/bot/medbot,
/obj/item/clothing/head/bio_hood,
@@ -721,7 +721,7 @@
/datum/supply_pack/engineering/industrialrcd
name = "Industrial RCD"
desc = "A industrial RCD in case the station has gone through more then one meteor storm and the CE needs to bring out the somthing a bit more reliable. Dose not contain spare ammo for the industrial RCD or any other RCD modles."
cost = 4500
cost = 4500
access = ACCESS_CE
contains = list(/obj/item/construction/rcd/industrial)
crate_name = "industrial rcd"
@@ -1236,6 +1236,24 @@
/obj/item/storage/firstaid/regular)
crate_name = "first aid kit crate"
/datum/supply_pack/medical/iv_drip
name = "IV Drip Crate"
desc = "Contains a single IV drip stand for intravenous delivery."
cost = 700
contains = list(/obj/machinery/iv_drip)
crate_name = "iv drip crate"
/datum/supply_pack/science/adv_surgery_tools
name = "Med-Co Advanced surgery tools"
desc = "A full set of Med-Co advanced surgery tools, this crate also comes with a spay of synth flesh as well as a can of . Requires Surgery access to open."
cost = 5000
access = ACCESS_SURGERY
contains = list(/obj/item/storage/belt/medical/surgery_belt_adv,
/obj/item/reagent_containers/medspray/synthflesh,
/obj/item/reagent_containers/medspray/sterilizine)
crate_name = "medco newest surgery tools"
crate_type = /obj/structure/closet/crate/medical
/datum/supply_pack/medical/medicalhardsuit
name = "Medical Hardsuit"
desc = "Got people being spaced left and right? Hole in the same room as the dead body of Hos or cap? Fear not, now you can buy one medical hardsuit with a mask and air tank to save your fellow crewmembers."
@@ -1245,13 +1263,6 @@
/obj/item/clothing/suit/space/hardsuit/medical)
crate_name = "medical hardsuit"
/datum/supply_pack/medical/iv_drip
name = "IV Drip Crate"
desc = "Contains a single IV drip for administering blood to patients."
cost = 700
contains = list(/obj/machinery/iv_drip)
crate_name = "iv drip crate"
/datum/supply_pack/medical/supplies
name = "Medical Supplies Crate"
desc = "Contains seven beakers, syringes, and bodybags. Three morphine bottles, four insulin pills. Two charcoal bottles, epinephrine bottles, antitoxin bottles, and large beakers. Finally, a single roll of medical gauze, as well as a bottle of stimulant pills for long, hard work days. German doctor not included."
@@ -1479,6 +1490,19 @@
/datum/supply_pack/service
group = "Service"
/datum/supply_pack/service/advlighting
name = "Advanced Lighting crate"
desc = "Thanks to advanced lighting tech we here at the Lamp Factory have be able to produce more lamps and lamp items! This crate has three lamps, a box of lights and a state of the art rapid-light-device!"
cost = 2500 //Fair
contains = list(/obj/item/construction/rld,
/obj/item/flashlight/lamp,
/obj/item/flashlight/lamp,
/obj/item/flashlight/lamp/green,
/obj/item/storage/box/lights/mixed)
crate_name = "advanced lighting crate"
crate_type = /obj/structure/closet/crate/secure
/datum/supply_pack/service/cargo_supples
name = "Cargo Supplies Crate"
desc = "Sold everything that wasn't bolted down? You can get right back to work with this crate containing stamps, an export scanner, destination tagger, hand labeler and some package wrapping."
@@ -1537,17 +1561,19 @@
crate_name = "janitor backpack crate"
crate_type = /obj/structure/closet/crate/secure
/datum/supply_pack/service/advlighting
name = "Advanced Lighting crate"
desc = "Thanks to advanced lighting tech we here at the Lamp Factory have be able to produce more lamps and lamp items! This crate has three lamps, a box of lights and a state of the art rapid-light-device!"
cost = 2500 //Fair
contains = list(/obj/item/construction/rld,
/obj/item/flashlight/lamp,
/obj/item/flashlight/lamp,
/obj/item/flashlight/lamp/green,
/obj/item/storage/box/lights/mixed)
crate_name = "advanced lighting crate"
crate_type = /obj/structure/closet/crate/secure
/datum/supply_pack/service/janitor/janpremium
name = "Janitor Premium Supplies"
desc = "Do to the union for better supplies, we have desided to make a deal for you, In this crate you can get a brand new chem, Drying Angent this stuff is the work of slimes or magic! This crate also contains a rag to test out the Drying Angent magic, three wet floor signs, and some spare bottles of ammonia."
cost = 3000
access = ACCESS_JANITOR
contains = list(/obj/item/caution,
/obj/item/caution,
/obj/item/caution,
/obj/item/reagent_containers/glass/rag,
/obj/item/reagent_containers/glass/bottle/ammonia,
/obj/item/reagent_containers/glass/bottle/ammonia,
/obj/item/reagent_containers/spray/drying_agent)
crate_name = "janitor backpack crate"
/datum/supply_pack/service/mule
name = "MULEbot Crate"
@@ -1702,7 +1728,7 @@
name = "Kitchen Cutlery Deluxe Set"
desc = "Need to slice and dice away those ''Tomatos'' well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
cost = 10000
contraband = TRUE
contraband = TRUE
contains = list(/obj/item/sharpener,
/obj/item/kitchen/fork,
/obj/item/kitchen/fork,
@@ -2218,8 +2244,7 @@
/datum/supply_pack/costumes_toys/randomised/toys
name = "Toy Crate"
desc = "Who cares about pride and accomplishment? Skip the gaming and get straight to the sweet rewards with this product! Contains five random toys. Warranty void if used to prank research directors."
cost = 5000 // or play the arcade machines ya lazy bum
// TODID make this actually just use the arcade machine loot list
cost = 1500 // or play the arcade machines ya lazy bum
num_contained = 5
contains = list(/obj/item/storage/box/snappops,
/obj/item/toy/talking/AI,
@@ -2273,6 +2298,77 @@
crate_name = "toy crate"
crate_type = /obj/structure/closet/crate/wooden
/datum/supply_pack/costumes_toys/randomised/plush
name = "Plush Crate"
desc = "Plush tide station wide. Contains 5 random plushies for you to love. Warranty void if your love violates the terms of use."
cost = 1500 // or play the arcade machines ya lazy bum
num_contained = 5
contains = list(/obj/item/toy/plush/lizardplushie,
/obj/item/toy/plush/lizardplushie/durgit,
/obj/item/toy/plush/lizardplushie/rio,
/obj/item/toy/plush/lizardplushie/urinsu,
/obj/item/toy/plush/lizardplushie/arfrehn,
/obj/item/toy/plush/lizardplushie/soars,
/obj/item/toy/plush/lizardplushie/ghostie,
/obj/item/toy/plush/lizardplushie/amber,
/obj/item/toy/plush/lizardplushie/cyan,
/obj/item/toy/plush/lizardplushie/meena,
/obj/item/toy/plush/lizardplushie/stalks,
/obj/item/toy/plush/lizardplushie/kobold,
/obj/item/toy/plush/lizardplushie/gorgi,
/obj/item/toy/plush/lizardplushie/almaz,
/obj/item/toy/plush/snakeplushie/sasha,
/obj/item/toy/plush/snakeplushie/shay,
/obj/item/toy/plush/snakeplushie/vulken,
/obj/item/toy/plush/mothplushie,
/obj/item/toy/plush/mothplushie/bumble,
/obj/item/toy/plush/mothplushie/nameko,
/obj/item/toy/plush/mothplushie/suru,
/obj/item/toy/plush/xeno,
/obj/item/toy/plush/lampplushie,
/obj/item/toy/plush/borgplushie,
/obj/item/toy/plush/borgplushie/medihound,
/obj/item/toy/plush/borgplushie/scrubpuppy,
/obj/item/toy/plush/borgplushie/seeking,
/obj/item/toy/plush/borgplushie/neeb,
/obj/item/toy/plush/bird,
/obj/item/toy/plush/bird/esela,
/obj/item/toy/plush/bird/jahonna,
/obj/item/toy/plush/bird/krick,
/obj/item/toy/plush/bird/birddi,
/obj/item/toy/plush/bird/jewel,
/obj/item/toy/plush/mammal,
/obj/item/toy/plush/mammal/dubious,
/obj/item/toy/plush/mammal/gladwyn,
/obj/item/toy/plush/mammal/gavin,
/obj/item/toy/plush/mammal/blep,
/obj/item/toy/plush/mammal/circe,
/obj/item/toy/plush/mammal/pavel,
/obj/item/toy/plush/mammal/oten,
/obj/item/toy/plush/mammal/ray,
/obj/item/toy/plush/mammal/dawud,
/obj/item/toy/plush/mammal/edgar,
/obj/item/toy/plush/mammal/frank,
/obj/item/toy/plush/mammal/poojawa,
/obj/item/toy/plush/mammal/hazel,
/obj/item/toy/plush/mammal/jermaine,
/obj/item/toy/plush/mammal/gunther,
/obj/item/toy/plush/mammal/fox,
/obj/item/toy/plush/mammal/zed,
/obj/item/toy/plush/mammal/dog,
/obj/item/toy/plush/mammal/dog/frost,
/obj/item/toy/plush/mammal/dog/atticus,
/obj/item/toy/plush/mammal/dog/fletch,
/obj/item/toy/plush/mammal/dog/vincent,
/obj/item/toy/plush/mammal/dog/zigfried,
/obj/item/toy/plush/mammal/dog/nikolai,
/obj/item/toy/plush/catgirl,
/obj/item/toy/plush/catgirl/skylar,
/obj/item/toy/plush/catgirl/mikeel,
/obj/item/toy/plush/catgirl/robin)
crate_name = "plushie crate"
crate_type = /obj/structure/closet/crate/wooden
/datum/supply_pack/costumes_toys/wizard
name = "Wizard Costume Crate"
desc = "Pretend to join the Wizard Federation with this full wizard outfit! Nanotrasen would like to remind its employees that actually joining the Wizard Federation is subject to termination of job and life."
@@ -2516,7 +2612,7 @@
crate_type = /obj/structure/closet/crate
/datum/supply_pack/misc/lewdkeg
name = "Lewd Deluxe Keg"
name = "Lewd Deluxe Keg"
desc = "That other stuff not getting you ready? Well I have a Chemslut making tons of the good stuff."
cost = 7000 //It can be a weapon
contraband = TRUE
@@ -2524,6 +2620,27 @@
crate_name = "deluxe keg"
crate_type = /obj/structure/closet/crate
/datum/supply_pack/misc/paper_work
name = "Freelance Paper work"
desc = "The Nanotrasen Primary Bureaucratic Database Intelligence (PDBI) reports that the station has not completed its funding and grant paperwork this solar cycle. In order to gain further funding, your station is required to fill out (10) ten of these forms or no additional capital will be disbursed. We have sent you ten copies of the following form and we expect every one to be up to Nanotrasen Standards." // Disbursement. It's not a typo, look it up.
cost = 400 // Net of 0 credits
contains = list(/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork,
/obj/item/pen/fountain,
/obj/item/pen/fountain,
/obj/item/pen/fountain,
/obj/item/pen/fountain,
/obj/item/pen/fountain)
crate_name = "Paperwork"
/datum/supply_pack/misc/toner
name = "Toner Crate"
desc = "Spent too much ink printing butt pictures? Fret not, with these six toner refills, you'll be printing butts 'till the cows come home!'"
@@ -67,6 +67,11 @@
user.visible_message("<span class='suicide'>[user] is putting \the [src] to [user.p_their()] eyes and overloading the brightness! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return BRUTELOSS
/obj/item/clothing/glasses/meson/prescription
name = "prescription optical meson scanner"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting conditions. This one has prescription lens fitted in."
vision_correction = 1
/obj/item/clothing/glasses/meson/night
name = "night vision meson scanner"
desc = "An optical meson scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness."
@@ -159,6 +164,7 @@
attack_verb = list("sliced")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = IS_SHARP
vision_correction = 1
glass_colour_type = /datum/client_colour/glass_colour/lightgreen
/obj/item/clothing/glasses/regular
@@ -21,6 +21,11 @@
var/mode = MODE_NONE
var/range = 1
/obj/item/clothing/glasses/meson/engine/prescription
name = "prescription engineering scanner goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, the T-ray Scanner mode lets you see underfloor objects such as cables and pipes, and the Radiation Scanner mode let's you see objects contaminated by radiation. Each lens has been replaced with a corrective lens."
vision_correction = 1
/obj/item/clothing/glasses/meson/engine/Initialize()
. = ..()
START_PROCESSING(SSobj, src)
@@ -137,6 +142,11 @@
modes = list(MODE_NONE = MODE_TRAY, MODE_TRAY = MODE_NONE)
/obj/item/clothing/glasses/meson/engine/tray/prescription
name = "prescription optical t-ray scanner"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, the T-ray Scanner mode lets you see underfloor objects such as cables and pipes, and the Radiation Scanner mode let's you see objects contaminated by radiation. This one has a lens that help correct eye sight."
vision_correction = 1
/obj/item/clothing/glasses/meson/engine/shuttle
name = "shuttle region scanner"
icon_state = "trayson-shuttle"
+24
View File
@@ -37,6 +37,14 @@
hud_type = DATA_HUD_MEDICAL_ADVANCED
glass_colour_type = /datum/client_colour/glass_colour/lightblue
/obj/item/clothing/glasses/hud/health/prescription
name = "prescription health scanner HUD"
desc = "A heads-up display, made with a prescription lens, that scans the humans in view and provides accurate data about their health status."
icon_state = "healthhud"
hud_type = DATA_HUD_MEDICAL_ADVANCED
vision_correction = 1
glass_colour_type = /datum/client_colour/glass_colour/lightblue
/obj/item/clothing/glasses/hud/health/night
name = "night vision health scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
@@ -62,6 +70,14 @@
hud_type = DATA_HUD_DIAGNOSTIC_BASIC
glass_colour_type = /datum/client_colour/glass_colour/lightorange
/obj/item/clothing/glasses/hud/diagnostic/prescription
name = "prescription diagnostic HUD"
desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits. This one has a prescription lens."
icon_state = "diagnostichud"
hud_type = DATA_HUD_DIAGNOSTIC_BASIC
vision_correction = 1
glass_colour_type = /datum/client_colour/glass_colour/lightorange
/obj/item/clothing/glasses/hud/diagnostic/night
name = "night vision diagnostic HUD"
desc = "A robotics diagnostic HUD fitted with a light amplifier."
@@ -78,6 +94,14 @@
hud_type = DATA_HUD_SECURITY_ADVANCED
glass_colour_type = /datum/client_colour/glass_colour/red
/obj/item/clothing/glasses/hud/security/prescription
name = "prescription security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records. This one has a prescription lens so you can see the banana peal that slipped you."
icon_state = "securityhud"
hud_type = DATA_HUD_SECURITY_ADVANCED
vision_correction = 1
glass_colour_type = /datum/client_colour/glass_colour/red
/obj/item/clothing/glasses/hud/security/chameleon
name = "chameleon security HUD"
desc = "A stolen security HUD integrated with Syndicate chameleon technology. Provides flash protection."
+18 -4
View File
@@ -37,6 +37,7 @@
actions_types = list(/datum/action/item_action/toggle)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
hit_reaction_chance = 50 // Only on the chest yet blocks all attacks?
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/item/clothing/suit/armor/reactive/attack_self(mob/user)
active = !(active)
@@ -64,8 +65,9 @@
/obj/item/clothing/suit/armor/reactive/teleport
name = "reactive teleport armor"
desc = "Someone separated our Research Director from his own head!"
var/tele_range = 6
var/rad_amount= 15
var/tele_range = 8
var/rad_amount = 60
var/rad_amount_before = 120
reactivearmor_cooldown_duration = 100
/obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
@@ -79,6 +81,7 @@
owner.visible_message("<span class='danger'>The reactive teleport system flings [H] clear of [attack_text], shutting itself off in the process!</span>")
playsound(get_turf(owner),'sound/magic/blink.ogg', 100, 1)
var/list/turfs = new/list()
var/turf/old = get_turf(src)
for(var/turf/T in orange(tele_range, H))
if(T.density)
continue
@@ -93,7 +96,8 @@
if(!isturf(picked))
return
H.forceMove(picked)
H.rad_act(rad_amount)
radiation_pulse(old, rad_amount_before)
radiation_pulse(src, rad_amount)
reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
return 1
return 0
@@ -157,6 +161,8 @@
var/tesla_power = 25000
var/tesla_range = 20
var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE
var/legacy = FALSE
var/legacy_dmg = 30
/obj/item/clothing/suit/armor/reactive/tesla/dropped(mob/user)
..()
@@ -179,7 +185,15 @@
owner.visible_message("<span class='danger'>The tesla capacitors on [owner]'s reactive tesla armor are still recharging! The armor merely emits some sparks.</span>")
return
owner.visible_message("<span class='danger'>[src] blocks [attack_text], sending out arcs of lightning!</span>")
tesla_zap(owner, tesla_range, tesla_power, tesla_flags)
if(!legacy)
tesla_zap(owner, tesla_range, tesla_power, tesla_flags)
else
for(var/mob/living/M in view(7, owner))
if(M == owner)
continue
owner.Beam(M,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5)
M.adjustFireLoss(legacy_dmg)
playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1)
reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
return TRUE
+9 -1
View File
@@ -694,10 +694,18 @@
/obj/item/reagent_containers/food/snacks/grown/potato = 1)
category = CAT_MISC
/datum/crafting_recipe/paperwork
name = "Filed Paper Work"
result = /obj/item/paper/fluff/jobs/cargo/manifest/paperwork_correct
time = 90 //Takes time for people to file and complete paper work!
reqs = list(/obj/item/pen = 1,
/obj/item/paper/fluff/jobs/cargo/manifest/paperwork = 2)
category = CAT_MISC
/datum/crafting_recipe/ghettojetpack
name = "Improvised Jetpack"
result = /obj/item/tank/jetpack/improvised
time = 30
reqs = list(/obj/item/tank/internals/oxygen/red = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30)//red oxygen tank so it looks right
category = CAT_MISC
tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
+27 -2
View File
@@ -12,7 +12,7 @@
var/removeDontImproveChance = 10 //chance the randomly created law replaces a random law instead of simply being added
var/shuffleLawsChance = 10 //chance the AI's laws are shuffled afterwards
var/botEmagChance = 10
var/announceEvent = ION_RANDOM // -1 means don't announce, 0 means have it randomly announce, 1 means
var/announceEvent = ION_RANDOM // -1 means don't announce, 0 means have it randomly announce, 1 means it is announced
var/ionMessage = null
var/ionAnnounceChance = 33
announceWhen = 1
@@ -30,7 +30,7 @@
/datum/round_event/ion_storm/start()
//AI laws
//Generate AI law change
for(var/mob/living/silicon/ai/M in GLOB.alive_mob_list)
M.laws_sanity_check()
if(M.stat != DEAD && M.see_in_dark != 0)
@@ -53,6 +53,31 @@
log_game("Ion storm changed laws of [key_name(M)] to [english_list(M.laws.get_law_list(TRUE, TRUE))]")
M.post_lawchange()
//Generate Cyborg law change
for(var/mob/living/silicon/robot/M in GLOB.alive_mob_list)
M.laws_sanity_check()
if(M.stat != DEAD && M.see_in_dark != 0)
if(prob(replaceLawsetChance))
M.laws.pick_weighted_lawset()
if(prob(removeRandomLawChance))
M.remove_law(rand(1, M.laws.get_law_amount(list(LAW_INHERENT, LAW_SUPPLIED))))
var/message = ionMessage || generate_ion_law()
if(message)
if(prob(removeDontImproveChance))
M.replace_random_law(message, list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION))
else
M.add_ion_law(message)
if(prob(shuffleLawsChance))
M.shuffle_laws(list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION))
log_game("Ion storm changed laws of [key_name(M)] to [english_list(M.laws.get_law_list(TRUE, TRUE))]")
M.post_lawchange()
//Chance to emag a Bot
if(botEmagChance)
for(var/mob/living/simple_animal/bot/bot in GLOB.alive_mob_list)
if(prob(botEmagChance))
@@ -120,6 +120,12 @@
I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
B.icon = I
B.name = "broken [name]"
if(ranged)
var/matrix/M = matrix(B.transform)
M.Turn(rand(-170, 170))
B.transform = M
B.pixel_x = rand(-12, 12)
B.pixel_y = rand(-12, 12)
if(prob(33))
new/obj/item/shard(drop_location())
playsound(src, "shatter", 70, 1)
@@ -296,6 +302,12 @@
B.force = 0
B.throwforce = 0
B.desc = "A carton with the bottom half burst open. Might give you a papercut."
if(ranged)
var/matrix/M = matrix(B.transform)
M.Turn(rand(-170, 170))
B.transform = M
B.pixel_x = rand(-12, 12)
B.pixel_y = rand(-12, 12)
transfer_fingerprints_to(B)
qdel(src)
@@ -23,6 +23,12 @@
var/obj/item/broken_bottle/B = new (loc)
if(!ranged)
thrower.put_in_hands(B)
else
var/matrix/M = matrix(B.transform)
M.Turn(rand(-170, 170))
B.transform = M
B.pixel_x = rand(-12, 12)
B.pixel_y = rand(-12, 12)
B.icon_state = icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
@@ -563,9 +563,9 @@
/obj/item/reagent_containers/food/snacks/tinychocolate
name = "chocolate"
desc = "A tiny and sweet chocolate."
desc = "A tiny and sweet chocolate. Has a 'strawberry' filling!"
icon_state = "tiny_chocolate"
list_reagents = list("nutriment" = 1, "sugar" = 1, "cocoa" = 1)
list_reagents = list("nutriment" = 1, "sugar" = 1, "cocoa" = 1, "aphro" = 1)
filling_color = "#A0522D"
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
foodtype = JUNKFOOD | SUGAR
@@ -1,6 +1,5 @@
////////////////////////////////////////// COCKTAILS //////////////////////////////////////
/datum/chemical_reaction/goldschlager
name = "Goldschlager"
id = "goldschlager"
@@ -676,7 +675,6 @@
results = list("fernet_cola" = 2)
required_reagents = list("fernet" = 1, "cola" = 1)
/datum/chemical_reaction/fanciulli
name = "Fanciulli"
id = "fanciulli"
@@ -688,3 +686,9 @@
id = "branca_menta"
results = list("branca_menta" = 3)
required_reagents = list("fernet" = 1, "creme_de_menthe" = 1, "ice" = 1)
/datum/chemical_reaction/pwrgame
name = "Power Gamer"
id = "pwr_game"
results = list("pwr_game" = 5)
required_reagents = list("sodawater" = 1, "blackcrayonpowder" = 1, "sodiumchloride" = 1)
+69 -39
View File
@@ -33,7 +33,8 @@
return
/mob/dead/new_player/proc/new_player_panel()
var/output = "<center><p><a href='byond://?src=[REF(src)];show_preferences=1'>Setup Character</a></p>"
var/output = "<center><p>Welcome, <b>[client ? client.prefs.real_name : "Unknown User"]</b></p>"
output += "<p><a href='byond://?src=[REF(src)];show_preferences=1'>Setup Character</a></p>"
if(SSticker.current_state <= GAME_STATE_PREGAME)
switch(ready)
@@ -441,58 +442,87 @@
var/available_job_count = 0
for(var/datum/job/job in SSjob.occupations)
if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
available_job_count++;
available_job_count++
for(var/spawner in GLOB.mob_spawners)
available_job_count++
break
for(var/datum/job/prioritized_job in SSjob.prioritized_jobs)
if(prioritized_job.current_positions >= prioritized_job.total_positions)
SSjob.prioritized_jobs -= prioritized_job
if(!available_job_count)
dat += "<div class='notice red'>There are currently no open positions!</div>"
if(length(SSjob.prioritized_jobs))
dat += "<div class='notice red'>The station has flagged these jobs as high priority:<br>"
var/amt = length(SSjob.prioritized_jobs)
var/amt_count
for(var/datum/job/a in SSjob.prioritized_jobs)
amt_count++
if(amt_count != amt) // checks for the last job added.
dat += " [a.title], "
else
dat += " [a.title]. </div>"
else
dat += "<div class='clearBoth'>Choose from the following open positions:</div><br>"
var/list/categorizedJobs = list(
"Command" = list(jobs = list(), titles = GLOB.command_positions, color = "#aac1ee"),
"Engineering" = list(jobs = list(), titles = GLOB.engineering_positions, color = "#ffd699"),
"Supply" = list(jobs = list(), titles = GLOB.supply_positions, color = "#ead4ae"),
"Miscellaneous" = list(jobs = list(), titles = list(), color = "#ffffff", colBreak = TRUE),
"Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff"),
"Synthetic" = list(jobs = list(), titles = GLOB.nonhuman_positions, color = "#ccffcc"),
"Service" = list(jobs = list(), titles = GLOB.civilian_positions, color = "#cccccc"),
"Medical" = list(jobs = list(), titles = GLOB.medical_positions, color = "#99ffe6", colBreak = TRUE),
"Science" = list(jobs = list(), titles = GLOB.science_positions, color = "#e6b3e6"),
"Security" = list(jobs = list(), titles = GLOB.security_positions, color = "#ff9999"),
)
for(var/spawner in GLOB.mob_spawners)
categorizedJobs["Ghost Role"]["jobs"] += spawner
dat += "<div class='clearBoth'>Choose from the following open positions:</div><br>"
dat += "<small>(G) - Ghost Role</small><br>"
dat += "<div class='jobs'><div class='jobsColumn'>"
var/job_count = 0
for(var/datum/job/job in SSjob.occupations)
if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
job_count++;
if (job_count > round(available_job_count / 2))
dat += "</div><div class='jobsColumn'>"
var/position_class = "otherPosition"
if (job.title in GLOB.command_positions)
position_class = "commandPosition"
dat += "<a class='[position_class]' href='byond://?src=[REF(src)];SelectedJob=[job.title]'>[job.title] ([job.current_positions])</a><br>"
if(!job_count) //if there's nowhere to go, overflow opens up.
for(var/datum/job/job in SSjob.occupations)
if(job.title != SSjob.overflow_role)
if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
var/categorized = FALSE
for(var/jobcat in categorizedJobs)
var/list/jobs = categorizedJobs[jobcat]["jobs"]
if(job.title in categorizedJobs[jobcat]["titles"])
categorized = TRUE
if(jobcat == "Command")
if(job.title == "Captain") // Put captain at top of command jobs
jobs.Insert(1, job)
else
jobs += job
else // Put heads at top of non-command jobs
if(job.title in GLOB.command_positions)
jobs.Insert(1, job)
else
jobs += job
if(!categorized)
categorizedJobs["Miscellaneous"]["jobs"] += job
dat += "<table><tr><td valign='top'>"
for(var/jobcat in categorizedJobs)
if(categorizedJobs[jobcat]["colBreak"])
dat += "</td><td valign='top'>"
if(!length(categorizedJobs[jobcat]["jobs"]))
continue
dat += "<a class='otherPosition' href='byond://?src=[REF(src)];SelectedJob=[job.title]'>[job.title] ([job.current_positions])</a><br>"
break
for(var/spawner in GLOB.mob_spawners)
job_count++
if(job_count > round(available_job_count / 2))
dat += "<a class='otherPosition' href='byond://?src=[REF(src)];JoinAsGhostRole=[spawner]'>[spawner] (G)</a><br>"
dat += "</div></div>"
var/color = categorizedJobs[jobcat]["color"]
dat += "<fieldset style='border: 2px solid [color]; display: inline'>"
dat += "<legend align='center' style='color: [color]'>[jobcat]</legend>"
for(var/datum/job/job in categorizedJobs[jobcat]["jobs"])
var/position_class = "otherPosition"
if(job.title in GLOB.command_positions)
position_class = "commandPosition"
if(job in SSjob.prioritized_jobs)
dat += "<a class='[position_class]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job.title]'><font color='lime'><b>[job.title] ([job.current_positions])</b></font></a>"
else
dat += "<a class='[position_class]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job.title]'>[job.title] ([job.current_positions])</a>"
categorizedJobs[jobcat]["jobs"] -= job
for(var/spawner in categorizedJobs[jobcat]["jobs"])
dat += "<a class='otherPosition' style='display:block;width:170px' href='byond://?src=[REF(src)];JoinAsGhostRole=[spawner]'>[spawner]</a>"
dat += "</fieldset><br>"
dat += "</td></tr></table></center>"
dat += "</div></div>"
// Removing the old window method but leaving it here for reference
//src << browse(dat, "window=latechoices;size=300x640;can_close=1")
// Added the new browser window method
var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 440, 500)
var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 680, 580)
popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css')
popup.set_content(dat)
popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc
popup.open(FALSE) // FALSE is passed to open so that it doesn't use the onclose() proc
/mob/dead/new_player/proc/create_character(transfer_after)
+1
View File
@@ -188,6 +188,7 @@
update_inv_hands()
I.pixel_x = initial(I.pixel_x)
I.pixel_y = initial(I.pixel_y)
I.transform = initial(I.transform)
return hand_index || TRUE
return FALSE
@@ -88,6 +88,9 @@
if(digitalcamo)
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner.\n"
if(combatmode)
msg += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]\n"
GET_COMPONENT_FROM(mood, /datum/component/mood, src)
if(mood)
@@ -264,6 +264,8 @@
if(pocket_item)
if(pocket_item == (pocket_id == SLOT_R_STORE ? r_store : l_store)) //item still in the pocket we search
dropItemToGround(pocket_item)
if(!put_in_hands(pocket_item))
pocket_item.forceMove(drop_location())
else
if(place_item)
if(place_item.mob_can_equip(src, usr, pocket_id, FALSE, TRUE))
+4
View File
@@ -700,9 +700,13 @@
var/list/L = where
if(what == who.get_item_for_held_index(L[2]))
if(who.dropItemToGround(what))
if(!put_in_hands(what))
what.forceMove(drop_location())
log_combat(src, who, "stripped [what] off")
if(what == who.get_item_by_slot(where))
if(who.dropItemToGround(what))
if(!put_in_hands(what))
what.forceMove(drop_location())
log_combat(src, who, "stripped [what] off")
// The src mob is trying to place an item on someone
@@ -93,8 +93,15 @@
desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot."
gender = FEMALE
speak_emote = list("squeaks")
maxHealth = 90
health = 90
gold_core_spawnable = NO_SPAWN
faction = list(ROLE_SYNDICATE)
AIStatus = AI_OFF
harm_intent_damage = 12
obj_damage = 70
melee_damage_lower = 15
melee_damage_upper = 18
#undef REGENERATION_DELAY
@@ -73,6 +73,11 @@
/obj/item/ammo_casing/proc/bounce_away(still_warm = FALSE, bounce_delay = 3)
update_icon()
SpinAnimation(10, 1)
var/matrix/M = matrix(transform)
M.Turn(rand(-170,170))
transform = M
pixel_x = rand(-12, 12)
pixel_y = rand(-12, 12)
var/turf/T = get_turf(src)
if(still_warm && T && T.bullet_sizzle)
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/items/welder.ogg', 20, 1), bounce_delay) //If the turf is made of water and the shell casing is still hot, make a sizzling sound when it's ejected.
@@ -43,7 +43,7 @@
pump(user)
recentpump = world.time + 10
if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina.
user.adjustStaminaLossBuffered(5) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
return
/obj/item/gun/ballistic/shotgun/blow_up(mob/user)
@@ -206,7 +206,7 @@
desc = "A compact version of the semi automatic combat shotgun. For close encounters."
icon_state = "cshotgunc"
mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact
w_class = WEIGHT_CLASS_BULKY
w_class = WEIGHT_CLASS_NORMAL
//Dual Feed Shotgun
@@ -1280,6 +1280,7 @@
reagent_state = SOLID
color = "#FFFFFF" // rgb: 207, 54, 0
taste_description = "the back of class"
no_mob_color = TRUE
/datum/reagent/colorful_reagent/crayonpowder/New()
description = "\an [colorname] powder made by grinding down crayons, good for colouring chemical reagents."
@@ -1481,14 +1482,16 @@
color = "#C8A5DC"
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
taste_description = "rainbows"
var/no_mob_color = FALSE
/datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M)
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
if(!no_mob_color)
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
if(!no_mob_color)
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
@@ -592,3 +592,24 @@
id = "pax"
results = list("pax" = 3)
required_reagents = list("mindbreaker" = 1, "synaptizine" = 1, "water" = 1)
/datum/chemical_reaction/cat
name = "felined mutation toxic"
id = "cats"
results = list("felinidmutationtoxin" = 1)
required_reagents = list("mindbreaker" = 1, "ammonia" = 1, "water" = 1, "aphro" = 10, "stablemutationtoxin" = 1) // Maybe aphro+ if it becomes a shitty meme
required_temp = 450
/datum/chemical_reaction/moff
name = "moth mutation toxic"
id = "moffs"
results = list("mothmutationtoxin" = 1)
required_reagents = list("liquid_dark_matter" = 2, "ammonia" = 5, "lithium" = 1, "stablemutationtoxin" = 1)
required_temp = 320
/datum/chemical_reaction/notlight //Harder to make do to it being a hard race to play
name = "shadow muatatuin toxic"
id = "notlight"
results = list("shadowmutationtoxin" = 1)
required_reagents = list("liquid_dark_matter" = 5, "synaptizine" = 10, "oculine" = 10, "stablemutationtoxin" = 1)
required_temp = 600
@@ -103,6 +103,7 @@
else if(bartender_check(target) && thrown)
visible_message("<span class='notice'>[src] lands onto the [target.name] without spilling a single drop.</span>")
transform = initial(transform)
return
else
@@ -168,6 +168,13 @@
amount_per_transfer_from_this = 1
list_reagents = list("unstablemutationtoxin" = 1)
/obj/item/reagent_containers/hypospray/medipen/firelocker
name = "fire treatment medipen"
desc = "A medipen that has been fulled with burn healing chemicals for personnel without advanced medical knowledge."
volume = 15
amount_per_transfer_from_this = 15
list_reagents = list("oxandrolone" = 5, "kelotane" = 10)
/obj/item/reagent_containers/hypospray/combat/heresypurge
name = "holy water autoinjector"
desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with 5 doses of a holy water mixture."
@@ -81,66 +81,77 @@
icon_state = "pill5"
list_reagents = list("toxin" = 50)
roundstart = 1
/obj/item/reagent_containers/pill/cyanide
name = "cyanide pill"
desc = "Don't swallow this."
icon_state = "pill5"
list_reagents = list("cyanide" = 50)
roundstart = 1
/obj/item/reagent_containers/pill/adminordrazine
name = "adminordrazine pill"
desc = "It's magic. We don't have to explain it."
icon_state = "pill16"
list_reagents = list("adminordrazine" = 50)
roundstart = 1
/obj/item/reagent_containers/pill/morphine
name = "morphine pill"
desc = "Commonly used to treat insomnia."
icon_state = "pill8"
list_reagents = list("morphine" = 30)
roundstart = 1
/obj/item/reagent_containers/pill/stimulant
name = "stimulant pill"
desc = "Often taken by overworked employees, athletes, and the inebriated. You'll snap to attention immediately!"
icon_state = "pill19"
list_reagents = list("ephedrine" = 10, "antihol" = 10, "coffee" = 30)
roundstart = 1
/obj/item/reagent_containers/pill/salbutamol
name = "salbutamol pill"
desc = "Used to treat oxygen deprivation."
icon_state = "pill16"
list_reagents = list("salbutamol" = 30)
roundstart = 1
/obj/item/reagent_containers/pill/charcoal
name = "charcoal pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
list_reagents = list("charcoal" = 10)
roundstart = 1
/obj/item/reagent_containers/pill/epinephrine
name = "epinephrine pill"
desc = "Used to stabilize patients."
icon_state = "pill5"
list_reagents = list("epinephrine" = 15)
roundstart = 1
/obj/item/reagent_containers/pill/mannitol
name = "mannitol pill"
desc = "Used to treat brain damage."
icon_state = "pill17"
list_reagents = list("mannitol" = 50)
roundstart = 1
/obj/item/reagent_containers/pill/mutadone
name = "mutadone pill"
desc = "Used to treat genetic damage."
icon_state = "pill20"
list_reagents = list("mutadone" = 50)
roundstart = 1
/obj/item/reagent_containers/pill/salicyclic
name = "salicylic acid pill"
desc = "Used to dull pain."
icon_state = "pill9"
list_reagents = list("sal_acid" = 24)
roundstart = 1
/obj/item/reagent_containers/pill/oxandrolone
name = "oxandrolone pill"
desc = "Used to stimulate burn healing."
@@ -154,6 +165,13 @@
icon_state = "pill18"
list_reagents = list("insulin" = 50)
roundstart = 1
/obj/item/reagent_containers/pill/antirad
name = "potassium iodide pill"
desc = "Used to treat radition used to counter radiation poisoning."
icon_state = "pill18"
list_reagents = list("potass_iodide" = 50)
roundstart = 1
///////////////////////////////////////// this pill is used only in a legion mob drop
/obj/item/reagent_containers/pill/shadowtoxin
name = "black pill"
@@ -166,6 +166,15 @@
user.visible_message("<span class='suicide'>[user] decided life was worth living.</span>")
return
//Drying Agent
/obj/item/reagent_containers/spray/drying_agent
name = "drying agent spray"
desc = "A spray bottle for drying agent."
volume = 100
list_reagents = list("drying_agent" = 100)
amount_per_transfer_from_this = 2
stream_amount = 5
//spray tan
/obj/item/reagent_containers/spray/spraytan
name = "spray tan"
+141 -80
View File
@@ -13,6 +13,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/health_hud_prescription
name = "Prescription Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. This one has a prescription lens."
id = "health_hud_prescription"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 350)
build_path = /obj/item/clothing/glasses/hud/health/prescription
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/health_hud_night
name = "Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
@@ -33,6 +43,17 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/security_hud_prescription
name = "Prescription Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This one has a prescription lens."
id = "security_hud_prescription"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 350)
build_path = /obj/item/clothing/glasses/hud/security/prescription
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/security_hud_night
name = "Night Vision Security HUD"
desc = "A heads-up display which provides id data and vision in complete darkness."
@@ -53,6 +74,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/diagnostic_hud_prescription
name = "Prescription Diagnostic HUD"
desc = "A HUD used to analyze and determine faults within robotic machinery. This one has a prescription lens."
id = "diagnostic_hud_prescription"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 350)
build_path = /obj/item/clothing/glasses/hud/diagnostic/prescription
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/diagnostic_hud_night
name = "Night Vision Diagnostic HUD"
desc = "Upgraded version of the diagnostic HUD designed to function during a power failure."
@@ -107,6 +138,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/mesons_prescription
name = "Prescription Optical Meson Scanners"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. Prescription lens has been added into this design."
id = "mesons_prescription"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 350)
build_path = /obj/item/clothing/glasses/meson/prescription
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/engine_goggles
name = "Engineering Scanner Goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes."
@@ -117,6 +158,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/engine_goggles_prescription
name = "Prescription Engineering Scanner Goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes. Prescription lens has been added into this design."
id = "engine_goggles_prescription"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_PLASMA = 100, MAT_SILVER = 350)
build_path = /obj/item/clothing/glasses/meson/engine/prescription
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/tray_goggles
name = "Optical T-Ray Scanners"
desc = "Used by engineering staff to see underfloor objects such as cables and pipes."
@@ -127,6 +178,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/tray_goggles_prescription
name = "Prescription Optical T-Ray Scanners"
desc = "Used by engineering staff to see underfloor objects such as cables and pipes. Prescription lens has been added into this design."
id = "tray_goggles_prescription"
build_type = PROTOLATHE
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 150)
build_path = /obj/item/clothing/glasses/meson/engine/tray/prescription
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/nvgmesons
name = "Night Vision Optical Meson Scanners"
desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display."
@@ -187,86 +248,6 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/handdrill
name = "Hand Drill"
desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit"
id = "handdrill"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500)
build_path = /obj/item/screwdriver/power
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/jawsoflife
name = "Jaws of Life"
desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws"
id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP
build_path = /obj/item/crowbar/power
build_type = PROTOLATHE
materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwrench
name = "Alien Wrench"
desc = "An advanced wrench obtained through Abductor technology."
id = "alien_wrench"
build_path = /obj/item/wrench/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwirecutters
name = "Alien Wirecutters"
desc = "Advanced wirecutters obtained through Abductor technology."
id = "alien_wirecutters"
build_path = /obj/item/wirecutters/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienscrewdriver
name = "Alien Screwdriver"
desc = "An advanced screwdriver obtained through Abductor technology."
id = "alien_screwdriver"
build_path = /obj/item/screwdriver/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/aliencrowbar
name = "Alien Crowbar"
desc = "An advanced crowbar obtained through Abductor technology."
id = "alien_crowbar"
build_path = /obj/item/crowbar/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwelder
name = "Alien Welding Tool"
desc = "An advanced welding tool obtained through Abductor technology."
id = "alien_welder"
build_path = /obj/item/weldingtool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienmultitool
name = "Alien Multitool"
desc = "An advanced multitool obtained through Abductor technology."
id = "alien_multitool"
build_path = /obj/item/multitool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/diskplantgene
name = "Plant Data Disk"
desc = "A disk for storing plant genetic data."
@@ -385,6 +366,86 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/handdrill
name = "Hand Drill"
desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit"
id = "handdrill"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500)
build_path = /obj/item/screwdriver/power
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/jawsoflife
name = "Jaws of Life"
desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws"
id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP
build_path = /obj/item/crowbar/power
build_type = PROTOLATHE
materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwrench
name = "Alien Wrench"
desc = "An advanced wrench obtained through Abductor technology."
id = "alien_wrench"
build_path = /obj/item/wrench/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwirecutters
name = "Alien Wirecutters"
desc = "Advanced wirecutters obtained through Abductor technology."
id = "alien_wirecutters"
build_path = /obj/item/wirecutters/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienscrewdriver
name = "Alien Screwdriver"
desc = "An advanced screwdriver obtained through Abductor technology."
id = "alien_screwdriver"
build_path = /obj/item/screwdriver/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/aliencrowbar
name = "Alien Crowbar"
desc = "An advanced crowbar obtained through Abductor technology."
id = "alien_crowbar"
build_path = /obj/item/crowbar/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienwelder
name = "Alien Welding Tool"
desc = "An advanced welding tool obtained through Abductor technology."
id = "alien_welder"
build_path = /obj/item/weldingtool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/alienmultitool
name = "Alien Multitool"
desc = "An advanced multitool obtained through Abductor technology."
id = "alien_multitool"
build_path = /obj/item/multitool/abductor
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/anomaly_neutralizer
name = "Anomaly Neutralizer"
desc = "An advanced tool capable of instantly neutralizing anomalies, designed to capture the fleeting aberrations created by the engine."
+3 -3
View File
@@ -163,7 +163,7 @@
display_name = "Advanced Engineering"
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
prereq_ids = list("engineering", "emp_basic")
design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask")
design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
export_price = 5000
@@ -426,7 +426,7 @@
display_name = "Integrated HUDs"
description = "The usefulness of computerized records, projected straight onto your eyepiece!"
prereq_ids = list("comp_recordkeeping", "emp_basic")
design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles")
design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles", "health_hud_prescription", "security_hud_prescription", "diagnostic_hud_prescription")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
export_price = 5000
@@ -435,7 +435,7 @@
display_name = "Night Vision Technology"
description = "Allows seeing in the dark without actual light!"
prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv")
design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "night_visision_goggles_glasses", "nvgmesons")
design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "nvgmesons", "night_visision_goggles_glasses")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 5000
@@ -1,6 +1,7 @@
GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
//SEC_LEVEL_GREEN = code green
//SEC_LEVEL_BLUE = code blue
//SEC_LEVEL_AMBER = code amber
//SEC_LEVEL_RED = code red
//SEC_LEVEL_DELTA = code delta
@@ -12,6 +13,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
level = SEC_LEVEL_GREEN
if("blue")
level = SEC_LEVEL_BLUE
if("amber")
level = SEC_LEVEL_AMBER
if("red")
level = SEC_LEVEL_RED
if("delta")
@@ -25,8 +28,10 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
if(GLOB.security_level >= SEC_LEVEL_RED)
SSshuttle.emergency.modTimer(4)
else if(GLOB.security_level == SEC_LEVEL_AMBER)
SSshuttle.emergency.modTimer(2.5)
else
SSshuttle.emergency.modTimer(2)
SSshuttle.emergency.modTimer(1.66)
GLOB.security_level = SEC_LEVEL_GREEN
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
@@ -35,24 +40,46 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(GLOB.security_level < SEC_LEVEL_BLUE)
minor_announce(CONFIG_GET(string/alert_blue_upto), "Attention! Security level elevated to blue:",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
SSshuttle.emergency.modTimer(0.5)
SSshuttle.emergency.modTimer(0.6)
else
minor_announce(CONFIG_GET(string/alert_blue_downto), "Attention! Security level lowered to blue:")
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
SSshuttle.emergency.modTimer(2)
if(GLOB.security_level >= SEC_LEVEL_RED)
SSshuttle.emergency.modTimer(2.4)
else
SSshuttle.emergency.modTimer(1.5)
GLOB.security_level = SEC_LEVEL_BLUE
sound_to_playing_players('sound/misc/voybluealert.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
FA.update_icon()
if(SEC_LEVEL_AMBER)
if(GLOB.security_level < SEC_LEVEL_AMBER)
minor_announce(CONFIG_GET(string/alert_amber_upto), "Attention! Security level elevated to amber:",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
if(GLOB.security_level == SEC_LEVEL_GREEN)
SSshuttle.emergency.modTimer(0.4)
else
SSshuttle.emergency.modTimer(0.66)
else
minor_announce(CONFIG_GET(string/alert_amber_downto), "Attention! Security level lowered to amber:")
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
SSshuttle.emergency.modTimer(1.6)
GLOB.security_level = SEC_LEVEL_AMBER
sound_to_playing_players('sound/effects/alert.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
FA.update_icon()
if(SEC_LEVEL_RED)
if(GLOB.security_level < SEC_LEVEL_RED)
minor_announce(CONFIG_GET(string/alert_red_upto), "Attention! Code red!",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
if(GLOB.security_level == SEC_LEVEL_GREEN)
SSshuttle.emergency.modTimer(0.25)
else if(GLOB.security_level == SEC_LEVEL_BLUE)
SSshuttle.emergency.modTimer(0.416)
else
SSshuttle.emergency.modTimer(0.5)
SSshuttle.emergency.modTimer(0.625)
else
minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!")
GLOB.security_level = SEC_LEVEL_RED
@@ -66,10 +93,12 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(SEC_LEVEL_DELTA)
minor_announce(CONFIG_GET(string/alert_delta), "Attention! Delta security level reached!",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
if(GLOB.security_level == SEC_LEVEL_GREEN)
if(GLOB.security_level < SEC_LEVEL_BLUE)
SSshuttle.emergency.modTimer(0.25)
else if(GLOB.security_level == SEC_LEVEL_BLUE)
SSshuttle.emergency.modTimer(0.5)
SSshuttle.emergency.modTimer(0.416)
else
SSshuttle.emergency.modTimer(0.625)
GLOB.security_level = SEC_LEVEL_DELTA
sound_to_playing_players('sound/misc/deltakalaxon.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
@@ -93,6 +122,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
return "green"
if(SEC_LEVEL_BLUE)
return "blue"
if(SEC_LEVEL_AMBER)
return "amber"
if(SEC_LEVEL_RED)
return "red"
if(SEC_LEVEL_DELTA)
@@ -104,6 +135,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
return "green"
if(SEC_LEVEL_BLUE)
return "blue"
if(SEC_LEVEL_AMBER)
return "amber"
if(SEC_LEVEL_RED)
return "red"
if(SEC_LEVEL_DELTA)
@@ -115,6 +148,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
return SEC_LEVEL_GREEN
if("blue")
return SEC_LEVEL_BLUE
if("amber")
return SEC_LEVEL_AMBER
if("red")
return SEC_LEVEL_RED
if("delta")
+3 -1
View File
@@ -206,7 +206,9 @@
if(SEC_LEVEL_GREEN)
set_coefficient = 2
if(SEC_LEVEL_BLUE)
set_coefficient = 1
set_coefficient = 1.2
if(SEC_LEVEL_AMBER)
set_coefficient = 0.8
else
set_coefficient = 0.5
var/call_time = SSshuttle.emergencyCallTime * set_coefficient * engine_coeff
+2 -1
View File
@@ -295,6 +295,7 @@
var/datum/species/S = H.dna.species
species_id = S.limbs_id
should_draw_citadel = S.should_draw_citadel // Citadel Addition
species_flags_list = H.dna.species.species_traits
if(S.use_skintones)
@@ -396,7 +397,7 @@
limb.icon_state = "[species_id]_[body_zone]"
// Citadel Start
if(should_draw_citadel)
if(should_draw_citadel && !use_digitigrade)
limb.icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
+2 -2
View File
@@ -15,7 +15,7 @@
var/safe_co2_min = 0
var/safe_co2_max = 10 // Yes it's an arbitrary value who cares?
var/safe_toxins_min = 0
var/safe_toxins_max = 0.05
var/safe_toxins_max = MOLES_GAS_VISIBLE
var/SA_para_min = 1 //Sleeping agent
var/SA_sleep_min = 5 //Sleeping agent
var/BZ_trip_balls_min = 1 //BZ gas
@@ -324,7 +324,7 @@
// Clear out moods when no miasma at all
else
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
handle_breath_temperature(breath, H)
breath.garbage_collect()
return TRUE
+15 -1
View File
@@ -251,8 +251,10 @@
var/static/regex/clap_words = regex("clap|applaud")
var/static/regex/honk_words = regex("ho+nk") //hooooooonk
var/static/regex/multispin_words = regex("like a record baby|right round")
var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt") //CITADEL CHANGE
var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //CITADEL CHANGE
var/static/regex/dab_words = regex("dab|mood") //CITADEL CHANGE
var/static/regex/snap_words = regex("snap") //CITADEL CHANGE
var/static/regex/bwoink_words = regex("what the fuck are you doing|bwoink|hey you got a moment?") //CITADEL CHANGE
var/i = 0
//STUN
@@ -582,6 +584,18 @@
for(var/V in listeners)
var/mob/living/M = V
M.say("*dab")
//SNAP
else if((findtext(message, snap_words)))
cooldown = COOLDOWN_MEME
for(var/V in listeners)
var/mob/living/M = V
M.say("*snap")
//BWOINK
else if((findtext(message, bwoink_words)))
cooldown = COOLDOWN_MEME
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, get_turf(user), 'sound/effects/adminhelp.ogg', 300, 1), 25)
//END CITADEL CHANGES
else
+7
View File
@@ -988,6 +988,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/storage/backpack/duffelbag/syndie/surgery
cost = 3
/datum/uplink_item/device_tools/surgerybag_adv
name = "Syndicate Surgery Duffel Bag"
desc = "The Syndicate surgery duffel bag is a toolkit containing all newest surgery tools, surgical drapes, \
a Syndicate brand MMI, a straitjacket, a muzzle, and a full Syndicate Combat Medic Kit."
item = /obj/item/storage/backpack/duffelbag/syndie/surgery_adv
cost = 15 //Mite be to cheap
/datum/uplink_item/device_tools/military_belt
name = "Chest Rig"
desc = "A robust seven-slot set of webbing that is capable of holding all manner of tactical equipment."
+6 -4
View File
@@ -57,10 +57,12 @@ MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 1
## ALERT LEVELS ###
ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.
ALERT_BLUE_UPTO The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted.
ALERT_BLUE_DOWNTO The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed.
ALERT_RED_UPTO There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised. Additionally, access requirements on some doors have been lifted.
ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised.
ALERT_BLUE_UPTO The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted.
ALERT_BLUE_DOWNTO Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted.
ALERT_AMBER_UPTO There are signficant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised.
ALERT_AMBER_DOWNTO The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored.
ALERT_RED_UPTO There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted.
ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force.
ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
@@ -0,0 +1,4 @@
author: "deathride58"
delete-after: True
changes:
- rscadd: "The new player panel now displays your currently selected character's name"
@@ -0,0 +1,4 @@
author: "deathride58"
delete-after: True
changes:
- balance: "Flashes no longer knockdown. Instead, they deal eyeblur and have increased confusion"
@@ -0,0 +1,5 @@
author: "Ghom"
delete-after: True
changes:
- bugfix: "fixes the perpetual lack of moisture that has affected genitalia descriptions since, like, forever."
- rscadd: "implements the arousal state for mammary glands."
@@ -0,0 +1,6 @@
author: "Ghommie"
delete-after: True
changes:
- bugfix: "Fixes many possible situations of null icons for cit races' bodyparts."
- imagedel: "Removes duplicate slimepeople' sprites."
- code_imp: "Purges that draw_citadel_parts()."
@@ -0,0 +1,6 @@
author: "deathride58"
delete-after: True
changes:
- balance: "Mops no longer have a delay on their cleaning, making them an actually viable alternative to all of the janitor's other cleaning tools"
- balance: "To balance this, mops now take stamina to clean tiles. Standard mops take 5 stamina to use, while advanced mops take 2 stamina."
- tweak: "Oh and also mops make fancy new sounds and play animations when used now"
@@ -0,0 +1,6 @@
author: "CydiaButt13"
delete-after: True
changes:
- rscadd: "Lamp Plushie to loadout"
- imageadd: "added plushie_lamp to plush icons"
- code_imp: "added Lamp Plush to loadout and icons and items"
@@ -0,0 +1,4 @@
author: "deathride58"
delete-after: True
changes:
- balance: "Pump-action shotguns now take 2 stamina per pump instead of 5 stamina per pump. This also applies to bolt-action rifles, as bolt racking counts as pumping."
@@ -0,0 +1,7 @@
author: "Tupinambis"
delete-after: True
changes:
- rscadd: "Adds a new security level between Blue and Red (Amber). The shuttle call time at this level is 8 minutes."
- tweak: "Blue security level now has a shuttle call time of 12 minutes."
- tweak: "The security level increase/decrease texts have been modified to accommodate the change."
- imageadd: "Adds a code Amber sprite for the fire alarms"
@@ -0,0 +1,5 @@
author: "Zargserg"
delete-after: True
changes:
- balance: "Lungs maximum toxin threshold is 0.5% of the atmosphere."
- bugfix: "Permanently contaminated atmosphere does not murder crew anymore."
@@ -0,0 +1,4 @@
author: "Poojawa"
delete-after: True
changes:
- rscadd: "Added the Yogs/Oracle ported latejoin menu"
@@ -0,0 +1,4 @@
author: "Anonymous"
delete-after: True
changes:
- imageadd: "More crusader armor variants to pick from armament: Teutonic and Hospitaller."
@@ -0,0 +1,4 @@
author: "MediHound"
delete-after: True
changes:
- rscadd: "Made Cyborgs be affected by Ion Storm Law Changes like AIs"
@@ -0,0 +1,5 @@
author: "Tupinambis"
delete-after: True
changes:
- tweak: "Removed the plushes from the toy crate, giving them their own."
- tweak: "Plushes are now less likely to spawn out of arcades"
@@ -0,0 +1,9 @@
author: "Coolgat3 / Avunia"
delete-after: True
changes:
- rscadd: "Made kindle put the target into stamcrit, which makes it an actually working, useful stun."
- rscadd: "Added a stamina loss modifier to the vanguard spell which makes the user's stamina drain at a way slower rate. This doesn't make them immune to tasers, but it takes a few hits to actually get them to fall down."
- tweak: "Made it so that clock culties don't start with a chameleon suit. Instead they start with an engineer suit which is pretty much the same sprite and looks. If this is not perfect, then I am willing to make a slightly more brass-colored version of the engineer suit sprite and call it a ratvarian engineer jumpsuit."
- balance: "Increased the cost of vanguard, as it is now a spell that works somewhat like adrenals, minus the move speed, making your stamina drain really slow and making you unable to get knocked onto the ground by just a single taser shot."
- balance: "Lowered the charge time of kindle, reason being that you can usually have only one active spell on you, or two at max if you decide to run two slabs, but the fact that kindle silences people for such a small amount of time makes up for it, in my opinion."
- server: "Figured out that the consoles and their warp function actually work with the current code. The thing that makes them not work is when the gamemode is ran on debug mode, without the required players to actually support it. It also breaks the ark timer which is stuck on -1 seconds until activation. Whenever the gamemode starts properly, like any other gamemode, with player checks and all, everything seems to work just fine."
@@ -0,0 +1,4 @@
author: "Ghommie"
delete-after: True
changes:
- code_imp: "Fixes ISINRANGE_EX using the wrong relational operator."
@@ -0,0 +1,4 @@
author: "deathride58"
delete-after: True
changes:
- tweak: "Pickpocketing items will now place them in your hands if possible"
@@ -0,0 +1,5 @@
author: "deathride58"
delete-after: True
changes:
- rscadd: "Combat mode is now displayed in examine text"
- rscadd: "Combat mode now makes a visible message when enabled if you haven't touched your combat mode button in the last ten seconds. It's done this way to avoid chat spam from those who know how to pull off stam regen squeezing."
@@ -0,0 +1,4 @@
author: "deathride58"
delete-after: True
changes:
- balance: "All knockdown sources will now force people to be dismounted from ridden vehicles."
@@ -0,0 +1,9 @@
author: "deathride58"
delete-after: True
changes:
- rscadd: "When an item is thrown, it will now be rotated and displaced."
- rscadd: "Shards of glass will now be rotated when spawned."
- rscadd: "Bullet casings will now be rotated when they're ejected from a gun."
- rscadd: "Bottles now have random rotations and pixel offsets when smashed via throwing."
- rscadd: "Picking up an item will now reset its rotation."
- rscadd: "Glasses thrown onto tables by bartenders will now have their rotation reset."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 KiB

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 32 KiB

@@ -1,5 +1,8 @@
/datum/status_effect/incapacitating/knockdown/on_creation(mob/living/new_owner, set_duration, updating_canmove, override_duration, override_stam)
if(iscarbon(new_owner) && (isnum(set_duration) || isnum(override_duration)))
if(istype(new_owner.buckled, /obj/vehicle/ridden))
var/obj/buckl = new_owner.buckled
buckl.unbuckle_mob(new_owner)
new_owner.resting = TRUE
new_owner.adjustStaminaLoss(isnull(override_stam)? set_duration*0.25 : override_stam)
if(isnull(override_duration) && (set_duration > 80))
@@ -90,6 +90,24 @@
/mob/living/proc/updatearousal()
update_arousal_hud()
/mob/living/carbon/updatearousal()
. = ..()
for(var/obj/item/organ/genital/G in internal_organs)
if(istype(G))
var/datum/sprite_accessory/S
switch(G.type)
if(/obj/item/organ/genital/penis)
S = GLOB.cock_shapes_list[G.shape]
if(/obj/item/organ/genital/vagina)
S = GLOB.vagina_shapes_list[G.shape]
if(/obj/item/organ/genital/breasts)
S = GLOB.breasts_shapes_list[G.shape]
if(S?.alt_aroused)
G.aroused_state = isPercentAroused(G.aroused_amount)
else
G.aroused_state = FALSE
G.update_appearance()
/mob/living/proc/update_arousal_hud()
return 0
@@ -175,6 +193,7 @@
"<span class='userdanger'>You have relieved yourself.</span>")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
setArousalLoss(min_arousal)
adjustStaminaLoss(40) //Refractory periods
/*
switch(gender)
if(MALE)
@@ -215,6 +234,7 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/mob_climax_outside(obj/item/organ/genital/G, mb_time = 30) //This is used for forced orgasms and other hands-free climaxes
@@ -252,6 +272,7 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, mb_time = 30) //Used for climaxing with any living thing
@@ -284,6 +305,7 @@
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
adjustStaminaLoss(40) //Refractory periods
else //knots and other non-spilling orgasms
if(do_after(src, mb_time, target = src) && in_range(src, L))
fluid_source.trans_to(L, total_fluids)
@@ -295,6 +317,7 @@
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/mob_fill_container(obj/item/organ/genital/G, obj/item/reagent_containers/container, mb_time = 30) //For beaker-filling, beware the bartender
@@ -325,6 +348,7 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/pick_masturbate_genitals()
var/obj/item/organ/genital/ret_organ
@@ -311,10 +311,6 @@
if(!S || S.icon_state == "none")
continue
var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
if(S.alt_aroused)
G.aroused_state = H.isPercentAroused(G.aroused_amount)
else
G.aroused_state = FALSE
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[G.aroused_state]_[layertext]"
if(S.center)

Some files were not shown because too many files have changed in this diff Show More