Merge branch 'CHOMPStation2:master' into master

This commit is contained in:
Cyrelius
2022-02-08 23:29:16 -08:00
committed by GitHub
96 changed files with 53217 additions and 50805 deletions
@@ -88,7 +88,8 @@
/datum/category_item/player_setup_item/general/flavor/proc/SetFlavorText(mob/user)
var/HTML = "<body>"
HTML += "<tt><center>"
HTML += "<b>Set Flavour Text</b> <hr />"
HTML += "<b>Set Flavor Text</b> <hr />"
HTML += "Note: This is not *literal* flavor of your character. This is visual description of what they look like. <hr />"
HTML += "<br></center>"
HTML += "<a href='?src=\ref[src];flavor_text=general'>General:</a> "
HTML += TextPreview(pref.flavor_texts["general"])
@@ -58,11 +58,11 @@
/datum/gear/accessory/brown_vest
display_name = "webbing, brown (Eng, Sec, Med, Exploration, Miner)"
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard","Security Pilot") //YW ADDITIONS
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Blueshield Guard","Security Pilot", "Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner") //YW ADDITIONS
/datum/gear/accessory/black_vest
display_name = "webbing, black (Eng, Sec, Med, Exploration, Miner)"
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard","Security Pilot") //YW ADDITIONS
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Blueshield Guard","Security Pilot", "Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner") //YW ADDITIONS
/datum/gear/accessory/white_vest
display_name = "webbing, white (Medical)"
@@ -70,11 +70,11 @@
/datum/gear/accessory/brown_drop_pouches
display_name = "drop pouches, brown (Eng, Sec, Med, Exploration, Miner)"
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard","Security Pilot") //YW ADDITIONS
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Blueshield Guard","Security Pilot", "Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner") //YW ADDITIONS
/datum/gear/accessory/black_drop_pouches
display_name = "drop pouches, black (Eng, Sec, Med, Exploration, Miner)"
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard","Security Pilot") //YW ADDITIONS
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Blueshield Guard","Security Pilot", "Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner") //YW ADDITIONS
/datum/gear/accessory/white_drop_pouches
display_name = "drop pouches, white (Medical)"
@@ -83,7 +83,6 @@
/datum/gear/accessory/bluespace
display_name = "bluespace badge (Eng, Sec, Med, Exploration, Miner)"
path = /obj/item/clothing/accessory/storage/bluespace
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner")
cost = 2
/datum/gear/accessory/webbing
@@ -1216,3 +1216,9 @@
display_name = "Nehi's Radio"
ckeywhitelist = list("zodiacshadow")
character_name = list("Nehi Maximus")
/datum/gear/fluff/lucky_amour
path = /obj/item/device/modkit_conversion/crusader_luck
display_name = "Lucky's amour"
ckeywhitelist = list ("thedavestdave")
character_name = list("Lucky")
+248
View File
@@ -0,0 +1,248 @@
/obj/machinery/item_bank
name = "electronic lockbox"
desc = "A place to store things you might want later!"
icon = 'icons/obj/stationobjs_vr.dmi'
icon_state = "item_bank"
idle_power_usage = 1
active_power_usage = 5
anchored = TRUE
density = FALSE
var/busy_bank = FALSE
var/static/list/item_takers = list()
/obj/machinery/item_bank/proc/persist_item_savefile_path(mob/user)
return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/persist_item.sav"
/obj/machinery/item_bank/proc/persist_item_savefile_save(mob/user, obj/item/O)
if(IsGuestKey(user.key))
return 0
var/savefile/F = new /savefile(src.persist_item_savefile_path(user))
F["persist item"] << O.type
F["persist name"] << initial(O.name)
return 1
/obj/machinery/item_bank/proc/persist_item_savefile_load(mob/user, thing)
if (IsGuestKey(user.key))
return 0
var/path = src.persist_item_savefile_path(user)
if (!fexists(path))
return 0
var/savefile/F = new /savefile(path)
if(!F) return 0
var/persist_item
F["persist item"] >> persist_item
if (isnull(persist_item) || !ispath(persist_item))
fdel(path)
tgui_alert_async(user, "An item could not be retrieved.")
return 0
if(thing == "type")
return persist_item
if(thing == "name")
var/persist_name
F["persist name"] >> persist_name
return persist_name
/obj/machinery/item_bank/Initialize()
. = ..()
/obj/machinery/item_bank/attack_hand(mob/living/user)
. = ..()
if(!ishuman(user))
return
if(istype(user) && Adjacent(user))
if(inoperable() || panel_open)
to_chat(user, "<span class='warning'>\The [src] seems to be nonfunctional...</span>")
else
start_using(user)
/obj/machinery/item_bank/proc/start_using(mob/living/user)
if(!ishuman(user))
return
if(busy_bank)
to_chat(user, "<span class='warning'>\The [src] is already in use.</span>")
return
busy_bank = TRUE
var/I = persist_item_savefile_load(user, "type")
var/Iname = persist_item_savefile_load(user, "name")
var/choice = tgui_alert(user, "What would you like to do [src]?", "[src]", list("Check contents", "Retrieve item", "Info", "Cancel"), timeout = 10 SECONDS)
if(!choice || choice == "Cancel" || !Adjacent(user) || inoperable() || panel_open)
busy_bank = FALSE
return
else if(choice == "Check contents" && I)
to_chat(user, "<span class='notice'>\The [src] has \the [Iname] for you!</span>")
busy_bank = FALSE
else if(choice == "Retrieve item" && I)
if(user.hands_are_full())
to_chat(user,"<span class='notice'>Your hands are full!</span>")
busy_bank = FALSE
return
if(user.ckey in item_takers)
to_chat(user, "<span class='warning'>You have already taken something out of \the [src] this shift.</span>")
busy_bank = FALSE
return
choice = tgui_alert(user, "If you remove this item from the bank, it will be unable to be stored again. Do you still want to remove it?", "[src]", list("No", "Yes"), timeout = 10 SECONDS)
icon_state = "item_bank_o"
if(!choice || choice == "No" || !Adjacent(user) || inoperable() || panel_open)
busy_bank = FALSE
icon_state = "item_bank"
return
else if(!do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) || inoperable())
busy_bank = FALSE
icon_state = "item_bank"
return
var/obj/N = new I(get_turf(src))
log_admin("[key_name_admin(user)] retrieved [N] from the item bank.")
visible_message("<span class='notice'>\The [src] dispenses the [N] to \the [user].</span>")
user.put_in_hands(N)
N.persist_storable = FALSE
var/path = src.persist_item_savefile_path(user)
var/savefile/F = new /savefile(src.persist_item_savefile_path(user))
F["persist item"] << null
F["persist name"] << null
fdel(path)
item_takers += user.ckey
busy_bank = FALSE
icon_state = "item_bank"
else if(choice == "Info")
to_chat(user, "<span class='notice'>\The [src] can store a single item for you between shifts! Anything that has been retrieved from the bank cannot be stored again in the same shift. Anyone can withdraw from the bank one time per shift. Some items are not able to be accepted by the bank.</span>")
busy_bank = FALSE
return
else if(!I)
to_chat(user, "<span class='warning'>\The [src] doesn't seem to have anything for you...</span>")
busy_bank = FALSE
/obj/machinery/item_bank/attackby(obj/item/O, mob/living/user)
if(!ishuman(user))
return
if(busy_bank)
to_chat(user, "<span class='warning'>\The [src] is already in use.</span>")
return
busy_bank = TRUE
var/I = persist_item_savefile_load(user, "type")
if(!istool(O) && O.persist_storable)
if(ispath(I))
to_chat(user, "<span class='warning'>You cannot store \the [O]. You already have something stored.</span>")
busy_bank = FALSE
return
var/choice = tgui_alert(user, "If you store \the [O], anything it contains may be lost to \the [src]. Are you sure?", "[src]", list("Store", "Cancel"), timeout = 10 SECONDS)
if(!choice || choice == "Cancel" || !Adjacent(user) || inoperable() || panel_open)
busy_bank = FALSE
return
for(var/obj/check in O.contents)
if(!check.persist_storable)
to_chat(user, "<span class='warning'>\The [src] buzzes. \The [O] contains [check], which cannot be stored. Please remove this item before attempting to store \the [O]. As a reminder, any contents of \the [O] will be lost if you store it with contents.</span>")
busy_bank = FALSE
return
user.visible_message("<span class='notice'>\The [user] begins storing \the [O] in \the [src].</span>","<span class='notice'>You begin storing \the [O] in \the [src].</span>")
icon_state = "item_bank_o"
if(!do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE) || inoperable())
busy_bank = FALSE
icon_state = "item_bank"
return
src.persist_item_savefile_save(user, O)
user.visible_message("<span class='notice'>\The [user] stores \the [O] in \the [src].</span>","<span class='notice'>You stored \the [O] in \the [src].</span>")
log_admin("[key_name_admin(user)] stored [O] in the item bank.")
qdel(O)
busy_bank = FALSE
icon_state = "item_bank"
else
to_chat(user, "<span class='warning'>You cannot store \the [O]. \The [src] either does not accept that, or it has already been retrieved from storage this shift.</span>")
busy_bank = FALSE
/////STORABLE ITEMS AND ALL THAT JAZZ/////
//I am only really intending this to be used for single items. Mostly stuff you got right now, but can't/don't want to use right now.
//It is not at all intended to be a thing that just lets you hold on to stuff forever, but just until it's the right time to use it.
/obj
var/persist_storable = TRUE //If this is true, this item can be stored in the item bank.
//This is automatically set to false when an item is removed from storage
/////LIST OF STUFF WE DON'T WANT PEOPLE STORING/////
/obj/item/device/pda
persist_storable = FALSE
/obj/item/device/communicator
persist_storable = FALSE
/obj/item/weapon/card
persist_storable = FALSE
/obj/item/weapon/holder
persist_storable = FALSE
/obj/item/device/radio
persist_storable = FALSE
/obj/item/device/encryptionkey
persist_storable = FALSE
/obj/item/weapon/storage //There are lots of things that have stuff that we may not want people to just have. And this is mostly intended for a single thing.
persist_storable = FALSE //And it would be annoying to go through and consider all of them, so default to disabled.
/obj/item/weapon/storage/backpack //But we can enable some where it makes sense. Backpacks and their variants basically never start with anything in them, as an example.
persist_storable = TRUE
/obj/item/weapon/reagent_containers/hypospray/vial
persist_storable = FALSE
/obj/item/weapon/cmo_disk_holder
persist_storable = FALSE
/obj/item/device/defib_kit/compact/combat
persist_storable = FALSE
/obj/item/clothing/glasses/welding/superior
persist_storable = FALSE
/obj/item/clothing/shoes/magboots/adv
persist_storable = FALSE
/obj/item/weapon/rig
persist_storable = FALSE
/obj/item/clothing/head/helmet/space/void
persist_storable = FALSE
/obj/item/clothing/suit/space/void
persist_storable = FALSE
/obj/item/weapon/grab
persist_storable = FALSE
/obj/item/weapon/grenade
persist_storable = FALSE
/obj/item/weapon/hand_tele
persist_storable = FALSE
/obj/item/weapon/paper
persist_storable = FALSE
/obj/item/weapon/backup_implanter
persist_storable = FALSE
/obj/item/weapon/disk/nuclear
persist_storable = FALSE
/obj/item/weapon/gun/energy/locked //These are guns with security measures on them, so let's say the box won't let you put them in there.
persist_storable = FALSE //(otherwise explo will just put their locker/vendor guns into it every round)
/obj/item/device/retail_scanner
persist_storable = FALSE
/obj/item/weapon/telecube
persist_storable = FALSE
/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
persist_storable = FALSE
/obj/item/weapon/gun/energy/sizegun/admin
persist_storable = FALSE
/obj/item/weapon/gun/energy/sizegun/abductor
persist_storable = FALSE
/obj/item/stack
persist_storable = FALSE
/obj/item/weapon/book
persist_storable = FALSE
/obj/item/weapon/melee/cursedblade
persist_storable = FALSE
/obj/item/device/paicard
persist_storable = FALSE
/obj/item/organ
persist_storable = FALSE
/obj/item/device/soulstone
persist_storable = FALSE
/obj/item/device/aicard
persist_storable = FALSE
/obj/item/device/mmi
persist_storable = FALSE
/obj/item/seeds
persist_storable = FALSE
/obj/item/weapon/reagent_containers/food/snacks/grown
persist_storable = FALSE
@@ -260,6 +260,32 @@
/obj/item/weapon/cell
)
//Miner's Crewsuit (BROWN)
//Basically just the basic suit, but with brown markings. If anyone wants to tweak this, go wild.
/obj/item/clothing/head/helmet/space/void/refurb/mining
name = "vintage miner's's voidsuit helmet"
desc = "A refurbished early contact era voidsuit helmet of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. The visor has a bad habit of fogging up and collecting condensation, but it beats sucking hard vacuum. This one has brown markings, denoting it as a miner's helmet."
icon_state = "rig0-vintageminer"
item_state_slots = list(slot_r_hand_str = "syndicate-helm-black", slot_l_hand_str = "syndicate-helm-black")
armor = list(melee = 30, bullet = 15, laser = 15,energy = 5, bomb = 20, bio = 100, rad = 50)
light_overlay = "helmet_light"
/obj/item/clothing/suit/space/void/refurb/mining
name = "vintage miner's voidsuit"
desc = "A refurbished early contact era voidsuit of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. Many old-timer spacers swear by these old things, even if new powered hardsuits have more features and better armor. This one has brown markings, denoting it as a miner's suit."
icon_state = "rig-vintageminer"
item_state_slots = list(slot_r_hand_str = "sec_voidsuitTG", slot_l_hand_str = "sec_voidsuitTG")
armor = list(melee = 30, bullet = 15, laser = 15,energy = 5, bomb = 20, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/device/gps,
/obj/item/device/radio/beacon,
/obj/item/weapon/pickaxe,
/obj/item/weapon/shovel
)
//Mercenary Crewsuit (RED, CROSS)
//The best of the best, this should be ultra-rare
/obj/item/clothing/head/helmet/space/void/refurb/mercenary
@@ -55,6 +55,15 @@
/obj/item/clothing/suit/space/void/refurb/pilot/talon
name = "talon pilot voidsuit"
/obj/item/clothing/head/helmet/space/void/refurb/mining/talon
name = "talon miner voidsuit helmet"
desc = "A refurbished early contact era voidsuit helmet of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. The visor has a bad habit of fogging up and collecting condensation, but it beats sucking hard vacuum. \"ITV TALON\" has been stamped onto the sides of the helmet."
camera_networks = list(NETWORK_TALON_HELMETS)
/obj/item/clothing/suit/space/void/refurb/mining/talon
name = "talon miner voidsuit"
desc = "A refurbished early contact era voidsuit of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. Many old-timer spacers swear by these old things, even if new powered hardsuits have more features and better armor. \"ITV TALON\" is stamped across the left side of the breastplate in faded faux-gold."
/obj/item/clothing/head/helmet/space/void/refurb/research/talon
name = "talon scientific voidsuit helmet"
camera_networks = list(NETWORK_TALON_HELMETS)
@@ -238,3 +238,14 @@
icon_state = "summerdress3"
/obj/item/clothing/under/summerdress/blue
icon_state = "summerdress2"
/obj/item/clothing/under/dress/dress_cap/femformal // formal in the loosest sense. because it's going to be taken off. or something. funnier in my head i swear
name = "site manager's feminine formalwear"
desc = "Essentially a skimpy...dress? Leotard? Whatever it is, it has the coloration and markings suitable for a site manager or rough equivalent."
icon = 'icons/inventory/uniform/item_vr.dmi'
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
icon_state = "lewdcap"
item_state = "lewdcap"
rolled_sleeves = -1
rolled_down = -1
body_parts_covered = UPPER_TORSO // frankly this thing's a fucking embarassment
+1
View File
@@ -10,6 +10,7 @@
name = "diamond"
icon_state = "sheet-diamond"
default_type = "diamond"
no_variants = FALSE //CHOMPedit - Variants added
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
+4 -4
View File
@@ -1,6 +1,6 @@
/obj/item/stack/material/glass
name = "glass"
icon_state = "sheet-transparent"
icon_state = "sheet-glass" //CHOMPedit - replace materials update
default_type = "glass"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
@@ -9,7 +9,7 @@
/obj/item/stack/material/glass/reinforced
name = "reinforced glass"
icon_state = "sheet-rtransparent"
icon_state = "sheet-rglass" //CHOMPedit - replace materials update
default_type = "rglass"
no_variants = FALSE
apply_colour = TRUE
@@ -18,7 +18,7 @@
name = "borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures"
singular_name = "borosilicate glass sheet"
icon_state = "sheet-transparent"
icon_state = "sheet-phoronglass" //CHOMPedit - replace materials update
default_type = "borosilicate glass"
no_variants = FALSE
apply_colour = TRUE
@@ -27,7 +27,7 @@
name = "reinforced borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods."
singular_name = "reinforced borosilicate glass sheet"
icon_state = "sheet-rtransparent"
icon_state = "sheet-phoronrglass" //CHOMPedit - replace materials update
default_type = "reinforced borosilicate glass"
no_variants = FALSE
apply_colour = TRUE
@@ -1,20 +1,20 @@
/obj/item/stack/material/steel
name = MAT_STEEL
icon_state = "sheet-refined"
icon_state = "sheet-metal" //CHOMPedit - replace materials update
default_type = MAT_STEEL
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/plasteel
name = "plasteel"
icon_state = "sheet-reinforced"
icon_state = "sheet-plasteel" //CHOMPedit - replace materials update
default_type = "plasteel"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/durasteel
name = "durasteel"
icon_state = "sheet-reinforced"
icon_state = "sheet-durasteel" //CHOMPedit - replace materials update
item_state = "sheet-metal"
default_type = "durasteel"
no_variants = FALSE
@@ -22,7 +22,7 @@
/obj/item/stack/material/titanium
name = MAT_TITANIUM
icon_state = "sheet-refined"
icon_state = "sheet-titanium" //CHOMPedit - replace materials update
apply_colour = TRUE
item_state = "sheet-silver"
default_type = MAT_TITANIUM
+1 -1
View File
@@ -295,7 +295,7 @@
if(supports.len >= braces_needed)
supported = 1
else for(var/obj/machinery/mining/brace/check in supports)
if(check.brace_tier > 3)
if(check.brace_tier >= 3)
supported = 1
for(var/obj/machinery/mining/brace/check in supports)
total_brace_tier += check.brace_tier
@@ -123,6 +123,7 @@
EQUIPMENT("Plush Toy", /obj/random/plushie, 300),
EQUIPMENT("Soap", /obj/item/weapon/soap/nanotrasen, 200),
EQUIPMENT("Thalers - 100", /obj/item/weapon/spacecash/c100, 1000),
EQUIPMENT("Thalers - 1000", /obj/item/weapon/spacecash/c1000, 10000),
EQUIPMENT("Umbrella", /obj/item/weapon/melee/umbrella/random, 200),
EQUIPMENT("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 125),
)
@@ -242,7 +243,10 @@
return
remove_points(inserted_id, prize.cost)
new prize.equipment_path(loc)
//VOREStation Edit Start
var/obj/I = new prize.equipment_path(loc)
I.persist_storable = FALSE
//VOREStation Edit End
flick(icon_vend, src) //VOREStation Add
else
flick(icon_deny, src) //VOREStation Add
@@ -56,9 +56,9 @@
var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes.
var/allergens = null // Things that will make this species very sick
var/allergen_reaction = AG_TOX_DMG|AG_OXY_DMG|AG_EMOTE|AG_PAIN|AG_WEAKEN // What type of reactions will you have? These the 'main' options and are intended to approximate anaphylactic shock at high doses.
var/allergen_damage_severity = 1.2 // How bad are reactions to the allergen? Touch with extreme caution.
var/allergen_disable_severity = 3 // Whilst this determines how long nonlethal effects last and how common emotes are.
var/allergen_reaction = AG_TOX_DMG|AG_OXY_DMG|AG_EMOTE|AG_PAIN|AG_BLURRY|AG_CONFUSE // What type of reactions will you have? These the 'main' options and are intended to approximate anaphylactic shock at high doses. VOREStation Edit'd.
var/allergen_damage_severity = 5 // How bad are reactions to the allergen? Touch with extreme caution. VOREStation Edit'd.
var/allergen_disable_severity = 4 // Whilst this determines how long nonlethal effects last and how common emotes are. VOREStation Edit'd.
var/min_age = 17
var/max_age = 70
@@ -196,7 +196,7 @@
//Allergen traits! Not available to any species with a base allergens var.
/datum/trait/neutral/allergy
name = "Allergy: Gluten"
desc = "You're highly allergic to gluten proteins, which are found in most common grains."
desc = "You're highly allergic to gluten proteins, which are found in most common grains. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
var/allergen = ALLERGEN_GRAINS
@@ -207,73 +207,82 @@
/datum/trait/neutral/allergy/meat
name = "Allergy: Meat"
desc = "You're highly allergic to just about any form of meat. You're probably better off just sticking to vegetables. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to just about any form of meat. You're probably better off just sticking to vegetables. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_MEAT
/datum/trait/neutral/allergy/fish
name = "Allergy: Fish"
desc = "You're highly allergic to fish. It's probably best to avoid seafood in general. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to fish. It's probably best to avoid seafood in general. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_FISH
/datum/trait/neutral/allergy/fruit
name = "Allergy: Fruit"
desc = "You're highly allergic to fruit. Vegetables are fine, but you should probably read up on how to tell the difference. Remember, tomatoes are a fruit. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to fruit. Vegetables are fine, but you should probably read up on how to tell the difference. Remember, tomatoes are a fruit. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_FRUIT
/datum/trait/neutral/allergy/vegetable
name = "Allergy: Vegetable"
desc = "You're highly allergic to vegetables. Fruit are fine, but you should probably read up on how to tell the difference. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to vegetables. Fruit are fine, but you should probably read up on how to tell the difference. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_VEGETABLE
/datum/trait/neutral/allergy/nuts
name = "Allergy: Nuts"
desc = "You're highly allergic to hard-shell seeds, such as peanuts. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to hard-shell seeds, such as peanuts. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_SEEDS
/datum/trait/neutral/allergy/soy
name = "Allergy: Soy"
desc = "You're highly allergic to soybeans, and some other kinds of bean. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to soybeans, and some other kinds of bean. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_BEANS
/datum/trait/neutral/allergy/dairy
name = "Allergy: Lactose"
desc = "You're highly allergic to lactose, and consequently, just about all forms of dairy. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to lactose, and consequently, just about all forms of dairy. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_DAIRY
/datum/trait/neutral/allergy/fungi
name = "Allergy: Fungi"
desc = "You're highly allergic to fungi such as mushrooms. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to fungi such as mushrooms. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_FUNGI
/datum/trait/neutral/allergy/coffee
name = "Allergy: Coffee"
desc = "You're highly allergic to coffee in specific. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
desc = "You're highly allergic to coffee in specific. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = ALLERGEN_COFFEE
/datum/trait/neutral/allergen_reduced_effect
name = "Reduced Allergen Reaction"
desc = "This trait halves the lethality of allergen reactions. If you don't have any allergens set, it does nothing. It does not apply to nonlethal reactions or special reactions (such as unathi drowsiness from sugars)."
desc = "This trait drastically reduces the effects of allergen reactions. If you don't have any allergens set, it does nothing. It does not apply to special reactions (such as unathi drowsiness from sugars)."
cost = 0
custom_only = FALSE
var_changes = list("allergen_damage_severity" = 0.6)
var_changes = list("allergen_damage_severity" = 2.5, "allergen_disable_severity" = 3)
excludes = list(/datum/trait/neutral/allergen_increased_effect)
/datum/trait/neutral/allergen_increased_effect
name = "Increased Allergen Reaction"
desc = "This trait drastically increases the effects of allergen reactions, enough that even a small dose can be lethal. If you don't have any allergens set, it does nothing. It does not apply to special reactions (such as unathi drowsiness from sugars)."
cost = 0
custom_only = FALSE
var_changes = list("allergen_damage_severity" = 10, "allergen_disable_severity" = 6)
excludes = list(/datum/trait/neutral/allergen_reduced_effect)
// Spicy Food Traits, from negative to positive.
/datum/trait/neutral/spice_intolerance_extreme
+1 -1
View File
@@ -269,7 +269,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable
/obj/item/device/nif/proc/handle_install()
if(human.stat || !human.mind) //No stuff while KO or not sleeved
return FALSE
persist_storable = FALSE //VOREStation edit - I am not sure if polaris has nifs, but just in case.
//Firsties
if(!install_done)
if(human.mind.name == owner)
+1
View File
@@ -341,6 +341,7 @@
t = replacetext(t, "\[/u\]", "</U>")
t = replacetext(t, "\[time\]", "[stationtime2text()]")
t = replacetext(t, "\[date\]", "[stationdate2text()]")
t = replacetext(t, "\[station\]", "[station_name()]")
t = replacetext(t, "\[large\]", "<font size=\"4\">")
t = replacetext(t, "\[/large\]", "</font>")
if(findtext(t, "\[sign\]"))
+4 -2
View File
@@ -168,20 +168,22 @@
if(M.species.allergen_reaction & AG_TOX_DMG)
M.adjustToxLoss(damage_severity)
if(M.species.allergen_reaction & AG_OXY_DMG)
M.adjustOxyLoss(damage_severity)
M.adjustOxyLoss(damage_severity*1.5) //VOREStation Edit
if(prob(2.5*disable_severity))
M.emote(pick("cough","gasp","choke"))
if(M.species.allergen_reaction & AG_EMOTE)
if(prob(2.5*disable_severity)) //this has a higher base chance, but not *too* high
M.emote(pick("pale","shiver","twitch"))
if(M.species.allergen_reaction & AG_PAIN)
M.adjustHalLoss(disable_severity)
M.adjustHalLoss(disable_severity*2) //VOREStation Edit
if(M.species.allergen_reaction & AG_WEAKEN)
M.Weaken(disable_severity)
if(M.species.allergen_reaction & AG_BLURRY)
M.eye_blurry = max(M.eye_blurry, disable_severity)
if(M.species.allergen_reaction & AG_SLEEPY)
M.drowsyness = max(M.drowsyness, disable_severity)
if(M.species.allergen_reaction & AG_CONFUSE) //VOREStation Addition
M.Confuse(disable_severity/4) //VOREStation Addition
remove_self(removed)
return
+16
View File
@@ -770,6 +770,22 @@
materials = list(MAT_STEEL = 10000, MAT_SILVER = 1000, MAT_GOLD = 1000)
build_path = /obj/item/mecha_parts/mecha_equipment/speedboost
/datum/design/item/mecha/auxstorage
name = "Auxillary Exosuit Storage Bay"
desc = "An auxillary storage compartment, for attaching to exosuits."
id = "mech_storage"
req_tech = list(TECH_MATERIAL = 4)
materials = list(MAT_STEEL = 10000)
build_path = /obj/item/mecha_parts/mecha_equipment/storage
/datum/design/item/mecha/bsauxstorage
name = "Auxillary Exosuit Storage Wormhole"
desc = "An auxillary storage wormhole, for attaching to exosuits."
id = "mech_storage_bs"
req_tech = list(TECH_MATERIAL = 4)
materials = list(MAT_PLASTEEL = 10000, MAT_GRAPHITE = 8000, MAT_OSMIUM = 6000, MAT_PHORON = 6000, MAT_SILVER = 4000, MAT_GOLD = 4000)
build_path = /obj/item/mecha_parts/mecha_equipment/storage/bluespace
/datum/design/item/synthetic_flash
name = "Synthetic Flash"
id = "sflash"
@@ -1416,4 +1416,24 @@ End CHOMP Removal*/
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "stamp-midhorror"
stamptext = "This paper has been certified by The Council of Mid Horror"
//thedavestdave Lucky
///I know this is pretty bodgey but if it stupid and it works it isn't stupid
/obj/item/clothing/suit/storage/hooded/explorer/lucky
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "luck"
icon_override = 'icons/vore/custom_clothes_vr.dmi'
item_state = "luck"
name = "Lucky's armor"
desc = "A chain mail suit with a badly drawn one eared cat on the front."
/obj/item/device/modkit_conversion/crusader_luck
skip_content_check = TRUE
name = "Lucky's armor"
desc = "A chain mail suit with a badly drawn one eared cat on the front."
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "modkit"
from_suit = /obj/item/clothing/suit/storage/hooded/explorer
to_suit = /obj/item/clothing/suit/storage/hooded/explorer/lucky