Merge remote-tracking branch 'refs/remotes/Citadel-Station-13/master' into syntheticbloods

This commit is contained in:
Poojawa
2019-04-13 02:47:34 -05:00
60 changed files with 564 additions and 325 deletions
+15
View File
@@ -126,3 +126,18 @@ GLOBAL_LIST(round_end_notifiees)
/datum/tgs_chat_command/reload_admins/proc/ReloadAsync()
set waitfor = FALSE
load_admins()
/datum/tgs_chat_command/addbunkerbypass
name = "whitelist"
help_text = "whitelist <ckey>"
admin_only = TRUE
/datum/tgs_chat_command/addbunkerbypass/Run(datum/tgs_chat_user/sender, params)
if(!CONFIG_GET(flag/sql_enabled))
return "The Database is not enabled!"
GLOB.bunker_passthrough |= ckey(params)
log_admin("[sender.friendly_name] has added [params] to the current round's bunker bypass list.")
message_admins("[sender.friendly_name] has added [params] to the current round's bunker bypass list.")
return "[params] has been added to the current round's bunker bypass list."
+28
View File
@@ -81,6 +81,21 @@
crate_name = "emergency crate"
crate_type = /obj/structure/closet/crate/internals
/datum/supply_pack/emergency/radiatione_emergency
name = "Emergenc Radiation Protection Crate"
desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and Geiger counter. We'll even throw in a few pill bottles that are able to handles radiation and the affects of the poisoning."
cost = 2500
contains = list(/obj/item/clothing/head/radiation,
/obj/item/clothing/head/radiation,
/obj/item/clothing/suit/radiation,
/obj/item/clothing/suit/radiation,
/obj/item/geiger_counter,
/obj/item/geiger_counter,
/obj/item/storage/pill_bottle/mutarad,
/obj/item/storage/firstaid/radbgone)
crate_name = "radiation protection crate"
crate_type = /obj/structure/closet/crate/radiation
/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!"
@@ -1357,6 +1372,19 @@
/obj/item/storage/firstaid/o2)
crate_name = "oxygen deprivation kit crate"
/datum/supply_pack/medical/advrad
name = "Radiation Treatment Crate Deluxe"
desc = "A crate for when radiation is out of hand... Contains two rad-b-gone kits, one bottle of anti radiation deluxe pill bottle, as well as a radiation treatment deluxe pill bottle!"
cost = 3500
contains = list(/obj/item/storage/pill_bottle/antirad_plus,
/obj/item/storage/pill_bottle/mutarad,
/obj/item/storage/firstaid/radbgone,
/obj/item/storage/firstaid/radbgone,
/obj/item/geiger_counter,
/obj/item/geiger_counter)
crate_name = "radiation protection crate"
crate_type = /obj/structure/closet/crate/radiation
/datum/supply_pack/medical/surgery
name = "Surgical Supplies Crate"
desc = "Do you want to perform surgery, but don't have one of those fancy shmancy degrees? Just get started with this crate containing a medical duffelbag, Sterilizine spray and collapsible roller bed."
-4
View File
@@ -1455,10 +1455,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["mam_body_markings"] = "Plain"
if("tail_lizard" in pref_species.default_features)
features["tail_lizard"] = "Smooth"
if("mam_tail" in pref_species.default_features)
features["mam_tail"] = "None"
if("mam_ears" in pref_species.default_features)
features["mam_ears"] = "None"
if(pref_species.id == "felinid")
features["mam_tail"] = "Cat"
features["mam_ears"] = "Cat"
+6 -10
View File
@@ -260,12 +260,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_lizard_body_markings"] >> features["body_markings"]
S["feature_lizard_legs"] >> features["legs"]
S["feature_moth_wings"] >> features["moth_wings"]
if(!CONFIG_GET(flag/join_with_mutant_humans))
features["tail_human"] = "none"
features["ears"] = "none"
else
S["feature_human_tail"] >> features["tail_human"]
S["feature_human_ears"] >> features["ears"]
S["feature_human_tail"] >> features["tail_human"]
S["feature_human_ears"] >> features["ears"]
//Custom names
for(var/custom_name_id in GLOB.preferences_custom_names)
@@ -388,15 +384,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc))
features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard)
features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human, "None")
features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human)
features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list)
features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list)
features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list, "None")
features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list)
features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list)
features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Normal Legs")
features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list, "Plain")
features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list)
features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list)
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
+37
View File
@@ -38,6 +38,12 @@
dog_fashion = null
/obj/item/clothing/head/caphat/beret
name = "captain's beret"
desc = "A beret fit for a leader."
icon_state = "capberet"
dog_fashion = null
//Head of Personnel
/obj/item/clothing/head/hopcap
@@ -47,6 +53,13 @@
armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
dog_fashion = /datum/dog_fashion/head/hop
/obj/item/clothing/head/hopcap/beret
name = "head of personnel's beret"
desc = "The symbol of true bureaucratic micromanagement, although in a fancy form."
icon_state = "hopberet"
dog_fashion = null
//Chaplain
/obj/item/clothing/head/nun_hood
name = "nun hood"
@@ -164,3 +177,27 @@
name = "treasure hunter's fedora"
desc = "You got red text today kid, but it doesn't mean you have to like it."
icon_state = "curator"
//Chief Medical Officer
/obj/item/clothing/head/beret/cmo
name = "chief medical officer's beret"
desc = "A fancy beret with a green cross, signifying your status in the station's medbay."
icon_state = "cmoberet"
//Research Director
/obj/item/clothing/head/beret/rd
name = "research director's beret"
desc = "A beret worn only by highly intelligent people."
icon_state = "rdberet"
//Chief Engineer
/obj/item/clothing/head/beret/ce
name = "chief engineer's beret"
desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price."
icon_state = "ceberet"
//Quartermaster
/obj/item/clothing/head/beret/qm
name = "quartermaster's beret"
desc = "This headwear shows off your Cargonian leadership"
icon_state = "qmberet"
+22 -1
View File
@@ -5,7 +5,28 @@
item_state = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
allowed = list(
/obj/item/analyzer,
/obj/item/stack/medical,
/obj/item/dnainjector,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/hypospray,
/obj/item/hypospray/mkii,
/obj/item/healthanalyzer,
/obj/item/flashlight/pen,
/obj/item/reagent_containers/glass/bottle,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/pill,
/obj/item/storage/pill_bottle,
/obj/item/paper,
/obj/item/melee/classic_baton/telescopic,
/obj/item/soap,
/obj/item/sensor_device,
/obj/item/tank/internals/emergency_oxygen,
/obj/item/tank/internals/plasmaman
)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50)
togglename = "buttons"
species_exception = list(/datum/species/golem)
+3 -5
View File
@@ -1,6 +1,4 @@
//this needs to come after the job_types subfolder to keep the correct ordering
#include "..\..\..\..\_maps\map_files\OmegaStation\job_changes.dm"
#undef JOB_MODIFICATION_MAP_NAME
#include "..\..\..\..\_maps\map_files\PubbyStation\job_changes.dm"
//this needs to come after the job_types subfolder to keep the correct ordering
#include "..\..\..\..\_maps\map_files\PubbyStation\job_changes.dm"
#undef JOB_MODIFICATION_MAP_NAME
+29 -5
View File
@@ -24,6 +24,7 @@
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
new /datum/data/mining_equipment("Larger Ore Bag", /obj/item/storage/bag/ore/large, 500),
new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card/mp500, 500),
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
@@ -42,9 +43,9 @@
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
new /datum/data/mining_equipment("1000 Point Transfer Card", /obj/item/card/mining_point_card/mp1000, 1000),
new /datum/data/mining_equipment("1500 Point Transfer Card", /obj/item/card/mining_point_card/mp1500, 1500),
new /datum/data/mining_equipment("2000 Point Transfer Card", /obj/item/card/mining_point_card/mp2000, 2000),
new /datum/data/mining_equipment("1000 Point Transfer Card", /obj/item/card/mining_point_card/mp1000, 1000),
new /datum/data/mining_equipment("1500 Point Transfer Card", /obj/item/card/mining_point_card/mp1500, 1500),
new /datum/data/mining_equipment("2000 Point Transfer Card", /obj/item/card/mining_point_card/mp2000, 2000),
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000),
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
@@ -66,7 +67,10 @@
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000),
new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 12000),
new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 15000)
)
/datum/data/mining_equipment
@@ -320,9 +324,29 @@
new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/card/mining_access_card(src)
//CITADEL ADDITIONS BELOW
/obj/item/storage/backpack/duffelbag/mining_cloned
name = "mining replacement kit"
desc = "A large bag that has advance tools and a spare jumpsuit, boots, and gloves for a newly cloned miner to get back in the field. Even as a new Id!"
/obj/item/storage/backpack/duffelbag/mining_cloned/PopulateContents()
new /obj/item/pickaxe/mini(src)
new /obj/item/clothing/under/rank/miner/lavaland(src)
new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/implanter/tracking/gps(src)
new /obj/item/kitchen/knife/combat/survival(src)
new /obj/item/storage/firstaid/regular(src)
new /obj/item/reagent_containers/hypospray/medipen/survival(src)
new /obj/item/t_scanner/adv_mining_scanner(src)
new /obj/item/clothing/suit/hooded/explorer(src)
new /obj/item/encryptionkey/headset_cargo(src)
new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/card/id/mining(src)
new /obj/item/storage/bag/ore(src)
new /obj/item/clothing/glasses/meson/prescription(src)
/obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer)
var/items = list("Exo-suit", "SEVA suit")
@@ -1142,15 +1142,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.add_trait(TRAIT_FAT, OBESITY)
H.update_inv_w_uniform()
H.update_inv_wear_suit()
if(H.noisy && H.nutrition <= NUTRITION_LEVEL_STARVING)
if(prob(10))
playsound(get_turf(H),"hunger_sounds",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
else if(H.noisy && H.nutrition <= NUTRITION_LEVEL_HUNGRY)
if(prob(10))
playsound(get_turf(H),"hunger_sounds",15,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
// nutrition decrease and satiety
if (H.nutrition > 0 && H.stat != DEAD && !H.has_trait(TRAIT_NOHUNGER))
// THEY HUNGER
@@ -94,4 +94,9 @@
inherent_traits = list(TRAIT_NOGUNS)
mutantlungs = /obj/item/organ/lungs/ashwalker
burnmod = 0.9
brutemod = 0.9
brutemod = 0.9
/datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
C.dna.features["tail"] = "Smooth"
return ..()
@@ -345,7 +345,15 @@
/mob/living/simple_animal/hostile/proc/AttackingTarget()
in_melee = TRUE
return target.attack_animal(src)
if(isliving(target))
var/mob/living/L = target
if(L.Adjacent(src) && vore_active && L.devourable) // aggressive check to ensure vore attacks can be made
if(prob(voracious_chance))
vore_attack(src,L,src)
else
return L.attack_animal(src)
else
return target.attack_animal(src)
/mob/living/simple_animal/hostile/proc/Aggro()
vision_range = aggro_vision_range
@@ -8,8 +8,6 @@
var/obj/belly/megafauna/dragon/maw/maw = new(src)
var/obj/belly/megafauna/dragon/gullet/gullet = new(src)
var/obj/belly/megafauna/dragon/gut/gut = new(src)
// for(var/obj/belly/X in list(maw, gullet, gut))
// vore_organs[X.name] = X
// Connect 'stomachs' together
maw.transferlocation = gullet
gullet.transferlocation = gut
@@ -49,6 +47,6 @@
vore_sound = "Tauric Swallow"
desc = "With a rush of burning ichor greeting you, you're introduced to the Drake's stomach. Wrinkled walls greedily grind against you, acidic slimes working into your body as you become fuel and nutriton for a superior predator. All that's left is your body's willingness to resist your destiny."
digest_mode = DM_DRAGON
digest_burn = 5
digest_burn = 2
swallow_time = 100 // costs extra time to eat directly to here
escapechance = 0
@@ -85,7 +85,7 @@
OpenFire()
if(L.Adjacent(src) && (L.stat != CONSCIOUS))
if(vore_active && L.devourable == TRUE)
dragon_feeding(src,L)
vore_attack(src,L,src)
LoseTarget()
else
devour(L)
@@ -1,21 +1,29 @@
#define VORACIOUS_CHANCE 40
#define VORE_SWALLOW_TIME 50
/mob/living/simple_animal
// List of targets excluded (for now) from being eaten by this mob.
var/list/prey_exclusions = list()
devourable = FALSE //insurance because who knows.
digestable = TRUE //I mean, if it's devourable it should also be digestible
var/vore_active = FALSE // If vore behavior is enabled for this mob
//Specific vore behaviors
var/vore_active = FALSE // If vore behavior is enabled for this mob
var/isPredator = FALSE //Are they capable of performing and pre-defined vore actions for their species?
var/swallowTime = VORE_SWALLOW_TIME //How long it takes to eat Human and other Simple_animal prey in 1/10 of a second. The default is 5 seconds.
var/list/prey_excludes = list() //For excluding people from being eaten.
var/voracious_chance = VORACIOUS_CHANCE //Mob AI Engagement probability when rolling between regular melee strike and a vore attempt, default 40%
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted
var/vore_escape_chance = 25 // Chance of resisting out of mob
var/vore_absorb_chance = 0 // chance of absorbtion by mob
// Vore belly interactions
// Most mobs are only going to have the one gut. Multi-gut set ups should refer to Ash Drake's dragon_vore.dm for set up.
var/vore_stomach_name // The name for the first belly if not "stomach"
var/vore_stomach_flavor // The flavortext for the first belly if not the default
var/vore_fullness = 0 // How "full" the belly is (controls icons)
var/list/living_mobs = list()
var/vore_default_sound = "Gulp" // Default vore sound
var/vore_default_release = "Splatter" // Default release sound
var/vore_wetness = TRUE // Default for a wet belly
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
var/vore_digest_chance = VORACIOUS_CHANCE // Chance to switch to digest mode if resisted, default 40%
var/vore_escape_chance = VORACIOUS_CHANCE // Chance of resisting out of mob, default 40%
var/vore_absorb_chance = 0 // chance of absorbtion by mob, default 0%
var/vore_stomach_name // The name for the first belly if not "stomach"
var/vore_stomach_flavor // The flavortext for the first belly if not the default
//Icon Memes
var/vore_fullness = 0 // How "full" the belly is (controls icons)
// Release belly contents before being gc'd!
/mob/living/simple_animal/Destroy()
@@ -34,35 +42,19 @@
vore_fullness = new_fullness
/*
/mob/living/simple_animal/proc/swallow_check()
for(var/I in vore_organs)
var/obj/belly/B = vore_organs[I]
if(vore_active)
update_fullness()
if(!vore_fullness)
// Nothing
return
else
addtimer(CALLBACK(src, .proc/swallow_mob), B.swallow_time)
/mob/living/simple_animal/proc/swallow_mob()
for(var/I in vore_organs)
var/obj/belly/B = vore_organs[I]
for(var/mob/living/M in B.contents)
B.transfer_contents(M, transferlocation)
*/
/mob/living/simple_animal/death()
release_vore_contents(silent = TRUE)
. = ..()
// Simple animals have only one belly. This creates it (if it isn't already set up)
/mob/living/simple_animal/proc/init_belly()
/mob/living/simple_animal/init_vore()
vore_init = TRUE
if(vore_organs.len)
return
if(no_vore) //If it can't vore, let's not give it a stomach.
return
if(vore_active && !IsAdvancedToolUser()) //vore active, but doesn't have thumbs to grab people with.
verbs |= /mob/living/simple_animal/proc/animal_nom
var/obj/belly/B = new /obj/belly(src)
vore_selected = B
@@ -70,6 +62,9 @@
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
B.digest_mode = vore_default_mode
B.vore_sound = vore_default_sound
B.release_sound = vore_default_release
B.is_wet = vore_wetness
B.escapable = vore_escape_chance > 0
B.escapechance = vore_escape_chance
B.digestchance = vore_digest_chance
@@ -97,21 +92,42 @@
"The juices pooling beneath you sizzle against your sore skin.",
"The churning walls slowly pulverize you into meaty nutrients.",
"The stomach glorps and gurgles as it tries to work you into slop.")
/* B.emote_lists[DM_ITEMWEAK] = list(
"The burning acids eat away at your form.",
"The muscular stomach flesh grinds harshly against you.",
"The caustic air stings your chest when you try to breathe.",
"The slimy guts squeeze inward to help the digestive juices soften you up.",
"The onslaught against your body doesn't seem to be letting up; you're food now.",
"The predator's body ripples and crushes against you as digestive enzymes pull you apart.",
"The juices pooling beneath you sizzle against your sore skin.",
"The churning walls slowly pulverize you into meaty nutrients.",
"The stomach glorps and gurgles as it tries to work you into slop.")*/
//Grab = Nomf
/*
/mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity)
. = ..()
//
// Simple proc for animals to have their digestion toggled on/off externally
//
/mob/living/simple_animal/verb/toggle_digestion()
set name = "Toggle Animal's Digestion"
set desc = "Enables digestion on this mob for 20 minutes."
set category = "Object"
set src in oview(1)
if(a_intent == I_GRAB && isliving(A) && !has_hands)
animal_nom(A)*/
var/datum/belly/B = vore_organs[vore_selected]
if(faction != usr.faction)
to_chat(usr,"<span class='warning'>This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you.</span>")
return
if(B.digest_mode == "Hold")
var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel")
if(confirm == "Enable")
B.digest_mode = "Digest"
sleep(20 MINUTES) //12000=20 minutes
B.digest_mode = "Hold"
else
var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel")
if(confirm == "Disable")
B.digest_mode = "Hold"
//
// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs.
//
/mob/living/simple_animal/proc/animal_nom(var/mob/living/T in oview(1))
set name = "Animal Nom"
set category = "Vore"
set desc = "Since you can't grab, you get a verb!"
if (stat != CONSCIOUS)
return
if (T.devourable == FALSE)
to_chat(usr, "<span class='warning'>You can't eat this!</span>")
return
return vore_attack(usr,T,usr)
+3 -3
View File
@@ -134,7 +134,7 @@
var/locid = 0
var/laststart = 1
var/textindex = 1
while(1) //I know this can cause infinite loops and fuck up the whole server, but the if(istart==0) should be safe as fuck
while(locid < 15) //hey whoever decided a while(1) was a good idea here, i hate you
var/istart = 0
if(links)
istart = findtext(info_links, "<span class=\"paper_field\">", laststart)
@@ -198,7 +198,7 @@
// Count the fields
var/laststart = 1
while(1)
while(fields < 15)
var/i = findtext(t, "<span class=\"paper_field\">", laststart)
if(i == 0)
break
@@ -210,7 +210,7 @@
/obj/item/paper/proc/reload_fields() // Useful if you made the paper programicly and want to include fields. Also runs updateinfolinks() for you.
fields = 0
var/laststart = 1
while(1)
while(fields < 15)
var/i = findtext(info, "<span class=\"paper_field\">", laststart)
if(i == 0)
break
@@ -62,7 +62,6 @@
)
var/list/upgrade_reagents3 = list(
"glycerol",
"mine_salve",
"toxin"
)
@@ -463,6 +463,19 @@
M.radiation -= min(M.radiation, 8)
..()
/datum/reagent/medicine/prussian_blue
name = "Prussian Blue"
id = "prussian_blue"
description = "Efficiently restores heavy radiation damage."
reagent_state = LIQUID
color = "#003153" // RGB 0, 49, 83
metabolization_rate = 0.5 * REAGENTS_METABOLISM
/datum/reagent/medicine/prussian_blue/on_mob_life(mob/living/carbon/M)
if(M.radiation > 0)
M.radiation -= min(M.radiation, 20)
..()
/datum/reagent/medicine/pen_acid
name = "Pentetic Acid"
id = "pen_acid"
@@ -172,6 +172,23 @@
icon_state = "pill18"
list_reagents = list("potass_iodide" = 50)
roundstart = 1
/obj/item/reagent_containers/pill/antirad_plus
name = "prussian blue pill"
desc = "Used to treat heavy radition poisoning."
icon = 'modular_citadel/icons/obj/modularpills.dmi'
icon_state = "prussian_blue"
list_reagents = list("prussian_blue" = 25, "water" = 10)
roundstart = 1
/obj/item/reagent_containers/pill/mutarad
name = "radiation treatment deluxe pill"
desc = "Used to treat heavy radition poisoning and genetic defects."
icon = 'modular_citadel/icons/obj/modularpills.dmi'
icon_state = "anit_rad_fixgene"
list_reagents = list("prussian_blue" = 15, "potass_iodide" = 15, "mutadone" = 15, "water" = 5)
roundstart = 1
///////////////////////////////////////// this pill is used only in a legion mob drop
/obj/item/reagent_containers/pill/shadowtoxin
name = "black pill"
@@ -495,7 +495,6 @@
if(should_draw_greyscale)
marking.color = null
var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone))
if(draw_color)
limb.color = "#[draw_color]"