Merge branch 'master' of https://github.com/VOREStation/VOREStation into brrrrped

This commit is contained in:
Hatterhat
2021-10-27 16:43:45 -05:00
187 changed files with 3953 additions and 1724 deletions
+45 -5
View File
@@ -132,6 +132,8 @@
corpseshoes = /obj/item/clothing/shoes/black
random_species = TRUE
/obj/effect/landmark/corpse/chef
name = "Chef"
corpseuniform = /obj/item/clothing/under/rank/chef
@@ -198,7 +200,7 @@
corpseid = 1
corpseidjob = "Scientist"
corpseidaccess = "Scientist"
/obj/effect/landmark/corpse/security
name = "Security Officer"
corpseradio = /obj/item/device/radio/headset/headset_sec
@@ -212,18 +214,18 @@
corpseid = 1
corpseidjob = "Security Officer"
corpseidaccess = "Security Officer"
/obj/effect/landmark/corpse/security/rig
corpsesuit = /obj/item/clothing/suit/space/void/security
corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security
corpseback = /obj/item/weapon/tank/jetpack/oxygen
/obj/effect/landmark/corpse/security/rig/eva
corpsesuit = /obj/item/clothing/suit/space/void/security/alt
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt
corpseidjob = "Starship Security Officer"
/obj/effect/landmark/corpse/prisoner
name = "Unknown Prisoner"
corpseuniform = /obj/item/clothing/under/color/prison
@@ -247,7 +249,7 @@
corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining
corpseback = /obj/item/weapon/tank/oxygen
/////////////////Vintage//////////////////////
//define the basic props at this level and only change specifics for variants, e.z.
@@ -337,3 +339,41 @@
corpseid = 1
corpseidjob = "Commander"
corpseidaccess = "Captain"
/////////////////Lore Factions//////////////////////
/obj/effect/landmark/corpse/sifguard
name = "Patrolman"
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
corpsesuit = /obj/item/clothing/suit/storage/hooded/wintercoat/solgov
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
corpsemask = /obj/item/clothing/mask/balaclava
corpsehelmet = /obj/item/clothing/head/beret/solgov/sifguard
corpsegloves = /obj/item/clothing/gloves/duty
corpseshoes = /obj/item/clothing/shoes/boots/tactical
corpsepocket1 = /obj/item/clothing/accessory/armor/tag/sifguard
corpseid = 1
corpseidjob = "Sif Defense Force Patrolman"
/obj/effect/landmark/corpse/hedberg
name = "Hedberg-Hammarstrom Mercenary"
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
corpsesuit = /obj/item/clothing/suit/storage/vest/solgov/hedberg
corpsebelt = /obj/item/weapon/storage/belt/security
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
corpsehelmet = /obj/item/clothing/head/beret/corp/hedberg
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
corpseid = 1
corpseidjob = "Hedberg-Hammarstrom Officer"
/obj/effect/landmark/corpse/hedberg/merc
name = "Hedberg-Hammarstrom Mercenary"
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
corpsehelmet = /obj/item/clothing/head/helmet/flexitac
corpsegloves = /obj/item/clothing/gloves/combat
corpseshoes = /obj/item/clothing/shoes/boots/tactical
corpseid = 1
corpseidjob = "Hedberg-Hammarstrom Enforcer"
+1 -1
View File
@@ -282,7 +282,7 @@
for(var/i=0,i<num,i++)
new /mob/living/simple_mob/animal/space/carp(C)
else // Just a costume.
new /obj/item/clothing/suit/storage/hooded/carp_costume(C)
new /obj/item/clothing/suit/storage/hooded/costume/carp(C)
else if(prob(50))
if(live_cargo) // Something else very much alive and angry.
var/spawn_type = pick(/mob/living/simple_mob/animal/space/alien, /mob/living/simple_mob/animal/space/alien/drone, /mob/living/simple_mob/animal/space/alien/sentinel)
+34 -25
View File
@@ -4,12 +4,12 @@
var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
/datum/lore/atc_controller
var/delay_min = 25 MINUTES //How long between ATC traffic
var/delay_max = 35 MINUTES //Adjusted to give approx 2 per hour, will work out to 10-14 over a full shift
var/delay_min = 20 MINUTES //How long between ATC traffic, minimum
var/delay_max = 30 MINUTES //Ditto, maximum
//Shorter delays means more traffic, which gives the impression of a busier system, but also means a lot more radio noise
var/backoff_delay = 5 MINUTES //How long to back off if we can't talk and want to. Default is 5 mins.
var/initial_delay = 2 MINUTES //How long to wait before sending the first message of the shift.
var/next_message = 30 MINUTES //When the next message should happen in world.time - Making it default to min value
var/next_message = 20 MINUTES //When the next message should happen in world.time - Making it default to min value
var/force_chatter_type //Force a specific type of messages
var/squelched = 0 //If ATC is squelched currently
@@ -77,18 +77,15 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
var/mission = source.ship_prefixes[prefix] //The value of the prefix is the mission type that prefix does
var/shipname = pick(source.ship_names) //Pick a random ship name
var/destname = pick(source.destination_names) //destination is where?
var/law_abiding = source.lawful //do we fully observe system law (or are we otherwise favored by the system owners, i.e. NT)?
var/law_breaker = source.hostile //or are we part of a pirate group
var/system_defense = source.sysdef //are we actually system law/SDF? unlocks the SDF-specific events
var/slogan = pick(source.slogans) //god help you all
var/org_type = source.org_type //which group do we belong to?
//pick our second ship
//var/secondname = secondary.name //not used atm, commented out to suppress errors
var/secondowner = secondary.short_name
var/secondprefix = pick(secondary.ship_prefixes) //Pick a random prefix
var/secondshipname = pick(secondary.ship_names) //Pick a random ship name
var/law_abiding2 = secondary.lawful
var/law_breaker2 = secondary.hostile
var/system_defense2 = secondary.sysdef //mostly here as a secondary check to ensure SDF don't interrogate other SDF
var/org_type2 = secondary.org_type
var/combined_first_name = "[owner][prefix] |[shipname]|"
var/combined_second_name = "[secondowner][secondprefix] |[secondshipname]|"
@@ -102,7 +99,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
var/requests = list(
"special flight rules" = list("authorizing special flight rules", "denying special flight rules, not allowed for your traffic class"),
"current solar weather info" = list("sending you the relevant information via tightbeam", "your request has been queued, stand by"),
"aerospace priority" = list("affirmative, aerospace priority is yours", "negative, another vessel has priority right now"),
"sector aerospace priority" = list("affirmative, sector aerospace priority is yours", "negative, another vessel in your sector has priority right now"),
"system traffic info" = list("sending you current traffic info", "request queued, please hold"),
"refueling information" = list("sending refueling information now", "depots currently experiencing fuel shortages, advise you move on"),
"a current system time sync" = list("sending time sync ping to you now", "your ship isn't compatible with our time sync, set time manually"),
@@ -113,30 +110,38 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
var/chatter_type = "normal"
if(force_chatter_type)
chatter_type = force_chatter_type
else if(law_abiding && !system_defense) //I have to offload this from the chatter_type switch below and do it here, otherwise BYOND throws a shitfit for no discernable reason
else if((org_type == "government" || org_type == "neutral" || org_type == "military" || org_type == "corporate" || org_type == "system defense") && org_type2 == "pirate") //this is ugly but when I tried to do it with !='s it fired for pirate-v-pirate, still not sure why. might as well stick it up here so it takes priority over other combos.
chatter_type = "distress"
else if(org_type == "corporate") //corporate-specific subset for the slogan event. despite the relatively high weight it was still quite rare in tests.
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",30;"dockingrequestgeneric",30;"dockingrequestdenied",30;"dockingrequestdelayed",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",30;"undockingrequest","normal",30;"undockingdenied",30;"undockingdelayed",300;"slogan")
else if((org_type == "government" || org_type == "neutral" || org_type == "military"))
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",30;"dockingrequestgeneric",30;"dockingrequestdenied",30;"dockingrequestdelayed",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",30;"undockingrequest","normal",30;"undockingdenied",30;"undockingdelayed")
//the following filters *always* fire their 'unique' event when they're tripped, simply because the conditions behind them are quite rare to begin with
else if(name == "Smugglers" && !system_defense2) //just straight up funnel smugglers into always being caught, otherwise we get them asking for traffic info and stuff
else if(org_type == "smuggler" && org_type2 != "system defense") //just straight up funnel smugglers into always being caught, otherwise we get them asking for traffic info and stuff
chatter_type = "policeflee"
else if(name == "Smugglers" && system_defense2) //ditto, if an SDF ship catches them
else if(org_type == "smuggler" && org_type2 == "system defense") //ditto, if an SDF ship catches them
chatter_type = "policeshipflee"
else if(law_abiding && law_breaker2) //on the offchance that we manage to roll a goodguy and a badguy, run a new distress event - it's like emerg but better
chatter_type = "distress"
else if(law_breaker && system_defense2) //if we roll this combo instead, time for the SDF to do their fucking job
else if((org_type == "smuggler" || org_type == "pirate") && org_type2 == "system defense") //if we roll this combo instead, time for the SDF to do their fucking job
chatter_type = "policeshipcombat"
else if(law_breaker && !system_defense2) //but if we roll THIS combo, time to alert the SDF to get off their asses
else if((org_type == "smuggler" || org_type == "pirate") && org_type2 != "system defense") //but if we roll THIS combo, time to alert the SDF to get off their asses
chatter_type = "hostiledetected"
//SDF-specific events that need to filter based on the second party (basically just the following SDF-unique list with the soft-result ship scan thrown in)
else if(system_defense && law_abiding2 && !system_defense2) //let's see if we can narrow this down, I didn't see many ship-to-ship scans
else if(org_type == "system defense" && (org_type == "government" || org_type == "neutral" || org_type == "military" || org_type == "corporate")) //let's see if we can narrow this down, I didn't see many ship-to-ship scans
chatter_type = pick(75;"policeshipscan","sdfpatrolupdate",75;"sdfendingpatrol",30;"dockingrequestgeneric",30;"dockingrequestdelayed",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",20;"undockingrequest",75;"sdfbeginpatrol",50;"normal")
//SDF-specific events that don't require the secondary at all, in the event that we manage to roll SDF + hostile/smuggler or something
else if(system_defense)
else if(org_type == "system defense")
chatter_type = pick("sdfpatrolupdate",60;"sdfendingpatrol",30;"dockingrequestgeneric",30;"dockingrequestdelayed",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",20;"undockingrequest",80;"sdfbeginpatrol","normal")
//if we somehow don't match any of the other existing filters once we've run through all of them
else
chatter_type = pick(5;"emerg",25;"policescan",25;"traveladvisory",30;"pathwarning",30;"dockingrequestgeneric",30;"dockingrequestdelayed",30;"dockingrequestdenied",30;"dockingrequestsupply",30;"dockingrequestrepair",30;"dockingrequestmedical",30;"dockingrequestsecurity",30;"undockingrequest",30;"undockingdenied",30;"undockingdelayed","normal")
//I probably should do some kind of pass here to work through all the possible combinations of major factors and see if the filtering list needs reordering or modifying, but I really can't be arsed
//DEBUG BLOCK
//to_world("DEBUG OUTPUT 1: [name], [owner], [prefix], [mission], [shipname], [org_type], [destname]")
//to_world("DEBUG OUTPUT 2: [secondowner], [secondprefix], [secondshipname], [org_type2]")
//to_world("DEBUG OUTPUT 3: Chose [chatter_type]")
//DEBUG BLOCK ENDS
var/yes = prob(90) //Chance for them to say yes vs no
var/request = pick(requests)
@@ -167,7 +172,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
switch(chatter_type)
//mayday call
if("emerg")
var/problem = pick("We have hull breaches on multiple decks","We have unknown hostile life forms on board","Our primary drive is failing","We have asteroids impacting the hull","We're experiencing a total loss of engine power","We have hostile ships closing fast","There's smoke in the cockpit","We have unidentified boarders","Our life support has failed")
var/problem = pick("We have hull breaches on multiple decks","We have unknown hostile life forms on board","Our primary drive is failing","We have [pick("asteroids","space debris")] impacting the hull","We're experiencing a total loss of engine power","We have hostile ships closing fast","There's smoke in the cockpit","We have unidentified boarders","Our RCS are malfunctioning and we're losing stability","Our life support [pick("is failing","has failed")]")
msg("+Mayday, mayday, mayday!+ This is [combined_first_name] declaring an emergency! [problem]!","[prefix] [shipname]")
sleep(5 SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control, copy. Switch to emergency responder channel [ertchannel].")
@@ -175,7 +180,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
msg("Understood [using_map.dock_name] Control, switching now.","[prefix] [shipname]")
//Control scan event: soft outcome
if("policescan")
var/confirm = pick("Understood","Roger that","Affirmative")
var/confirm = pick("Understood","Roger that","Affirmative","Very well","Copy that")
var/complain = pick("I hope this doesn't take too long.","Can we hurry this up?","Make it quick.","This better not take too long.","Is this really necessary?")
var/completed = pick("You're free to proceed.","Everything looks fine, carry on.","You're clear, move along.","Apologies for the delay, you're clear.","Switch to channel [sdfchannel] and await further instruction.")
msg("[combined_first_name], this is [using_map.dock_name] Control, your [pick("ship","vessel","starship")] has been flagged for routine inspection. Hold position and prepare to be scanned.")
@@ -190,7 +195,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
//Control scan event: hard outcome
if("policeflee")
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, Control.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!")
msg("Unknown [pick("ship","vessel","starship")], this is [using_map.dock_name] Control, identify yourself and submit to a full inspection. Flying without an active transponder is a violation of system regulations.")
msg("Unknown [pick("ship","vessel","starship")], this is [using_map.dock_name] Control, identify yourself and submit to a full inspection. Flying without an active transponder is a violation of interstellar shipping regulations.")
sleep(5 SECONDS)
msg("[uhoh]","[shipname]")
sleep(5 SECONDS)
@@ -212,11 +217,11 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
//SDF scan event: hard outcome
if("policeshipflee")
var/uhoh = pick("No can do chief, we got places to be.","Sorry but we've got places to be.","Not happening.","Ah fuck, who ratted us out this time?!","You'll never take me alive!","Hey, I have a cloaking device! You can't see me!","I'm going to need to ask for a refund on that stealth drive...","I'm afraid I can't do that, |[shipname]|.","Ah |hell|.","Fuck!","This isn't the ship you're looking for.","Well. This is awkward.","Uh oh.","I surrender!")
msg("Unknown [pick("ship","vessel","starship")], this is [combined_second_name], identify yourself and submit to a full inspection. Flying without an active transponder is a violation of system regulations.","[secondprefix] [secondshipname]")
msg("Unknown [pick("ship","vessel","starship")], this is [combined_second_name], identify yourself and submit to a full inspection. Flying without an active transponder is a violation of interstellar shipping regulations.","[secondprefix] [secondshipname]")
sleep(5 SECONDS)
msg("[uhoh]","[shipname]")
sleep(5 SECONDS)
msg("[using_map.starsys_name] Defense Control, this is [combined_second_name], we have a situation here, please advise.","[secondprefix] [secondshipname]")
msg("[using_map.starsys_name] Defense Control, this is [combined_second_name]. We have a situation here, please advise.","[secondprefix] [secondshipname]")
sleep(5 SECONDS)
msg("Defense Control copies, [combined_second_name], reinforcements are en route. Switch further communications to encrypted band [sdfchannel].","[using_map.starsys_name] Defense Control")
//SDF scan event: engage primary in combat! fairly rare since it needs a pirate/vox + SDF roll
@@ -282,7 +287,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
if("dockingrequestdenied")
var/reason = pick("we don't have any landing pads large enough for your vessel","we don't have the necessary facilities for your vessel type or class")
var/disappointed = pick("That's unfortunate. [combined_first_name], out.","Damn shame. We'll just have to keep moving. [combined_first_name], out.","[combined_first_name], out.")
msg("[callname], this is [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_move].","[prefix] [shipname]")
msg("[callname], this is [combined_first_name], [pick("stopping by","passing through")] on our way to [destname], requesting permission to [landing_short].","[prefix] [shipname]")
sleep(5 SECONDS)
msg("[combined_first_name], this is [using_map.dock_name] Control. Request denied, [reason].")
sleep(5 SECONDS)
@@ -388,6 +393,10 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller
msg("[combined_first_name], this is [using_map.dock_name] Control. Everything appears to be in order now, permission granted. Docking clamps released. [safetravels].")
sleep(5 SECONDS)
msg("[thanks], [using_map.dock_name] Control. This is [combined_first_name] setting course for [destname], out.","[prefix] [shipname]")
if("slogan")
msg("The following is a sponsored message from [name].","Facility PA")
sleep (5 SECONDS)
msg("[slogan]","Facility PA")
else //time for generic message
msg("[callname], this is [combined_first_name] on [mission] [pick(mission_noun)] to [destname], requesting [request].","[prefix] [shipname]")
sleep(5 SECONDS)
+246 -4
View File
@@ -14,7 +14,7 @@
//how does it work? simple: if you have complex tasks enabled, it goes; PREFIX + TASK_TYPE + FLIGHT_TYPE
//e.g. NDV = Asset Protection + Patrol + Flight
//this allows you to use the ship prefix for subfactions (warbands, religions, whatever) within a faction, and define task_types at the faction level
//this overrides the standard PREFIX = TASK logic and allows you to use the ship prefix for subfactions (warbands, religions, whatever) within a faction, and define task_types at the faction level
//task_types are picked from completely at random in air_traffic.dm, much like flight_types, so be careful not to potentially create combos that make no sense!
var/list/task_types = list(
@@ -86,14 +86,114 @@
"Falcon",
"Casper",
"Orion",
"Columbia",
"Atlantis",
"Enterprise",
"Challenger",
"Pathfinder",
"Buran",
"Aldrin",
"Armstrong",
"Tranquility",
"Nostrodamus",
"Soyuz",
"Cosmos",
"Sputnik",
"Belka",
"Strelka",
"Gagarin",
"Shepard",
"Tereshkova",
"Leonov",
"Vostok",
"Apollo",
"Mir",
"Titan",
"Serenity",
"Andiamo",
"Aurora",
"Phoenix",
"Lucky",
"Raven",
"Valkyrie",
"Halcyon",
"Nakatomi",
"Cutlass",
"Unicorn",
"Sheepdog",
"Arcadia",
"Gigantic",
"Goliath",
"Pequod",
"Poseidon",
"Venture",
"Evergreen",
"Natal",
"Maru",
"Djinn",
"Witch",
"Wolf",
"Lone Star",
"Grey Fox",
"Dutchman",
"Sultana",
"Siren",
"Venus",
"Anastasia",
"Rasputin",
"Stride",
"Suzaku",
"Hathor",
"Dream",
"Gaia",
"Ibis",
"Progress",
"Olympic",
"Venture",
"Brazil",
"Tiger",
"Hedgehog",
"Potemkin",
"Fountainhead",
"Sinbad",
"Esteban",
"Mumbai",
"Shanghai",
"Madagascar",
"Kampala",
"Bangkok",
"Emerald",
"Guo Hong",
"Shun Kai",
"Fu Xing",
"Zhenyang",
"Da Qing",
"Rascal",
"Flamingo",
"Jackal",
"Andromeda",
"Ferryman",
"Panchatantra",
"Nunda",
"Fortune",
"New Dawn",
"Fionn MacCool",
"Red Bird",
"Star Rat",
"Cwn Annwn",
"Morning Swan",
"Black Cat",
"Challenger"
)
var/list/destination_names = list() //Names of static holdings that the organization's ships visit regularly.
var/lawful = TRUE //Are we exempt from routine inspections? to avoid incidents where SysDef appears to go rogue -- defaults to TRUE now (regular ships always get the "soft" result)
var/hostile = FALSE //Are we explicitly lawless, hostile, or otherwise bad? allows for a finer alignment system, since my last checks weren't working properly
var/org_type = "neutral" //Valid options are "neutral", "corporate", "government", "system defense", "military, "smuggler", & "pirate"
var/sysdef = FALSE //Are we the space cops?
var/autogenerate_destination_names = TRUE //Pad the destination lists with some extra random ones? see the proc below for info on that
var/slogans = list("This is a placeholder slogan, ding dong!") //Advertising slogans. Who doesn't want more obnoxiousness on the radio? Picked at random each time the slogan event fires. This has a placeholder so it doesn't runtime on trying to draw from a 0-length list in the event that new corps are added without full support.
/datum/lore/organization/New()
..()
@@ -213,7 +313,7 @@
and therapy.\
<br><br>\
NT's most well known products are its phoron based creations, especially those used in Cryotherapy. \
It also boasts an prosthetic line, which is provided to its employees as needed, and is used as an incentive \
It also boasts a prosthetic line, which is provided to its employees as needed, and is used as an incentive \
for newly tested posibrains to remain with the company. \
<br><br>\
NT's ships are named for famous scientists."
@@ -222,6 +322,12 @@
headquarters = "Luna, Sol"
motto = ""
org_type = "corporate"
slogans = list(
"NanoTrasen - Phoron Makes The Galaxy Go 'Round.",
"NanoTrasen - Join for the Medical, stay for the Company.",
"NanoTrasen - Advancing Humanity."
)
ship_prefixes = list("NTV" = "a general operations", "NEV" = "an exploration", "NGV" = "a hauling", "NDV" = "a patrol", "NRV" = "an emergency response", "NDV" = "an asset protection")
//Scientist naming scheme
ship_names = list(
@@ -247,13 +353,11 @@
"Nye",
"Hawking",
"Aristotle",
"Von Braun",
"Kaku",
"Oppenheimer",
"Renwick",
"Hubble",
"Alcubierre",
"Robineau",
"Glass"
)
// Note that the current station being used will be pruned from this list upon being instantiated
@@ -297,6 +401,12 @@
headquarters = "Luna, Sol"
motto = ""
org_type = "corporate"
slogans = list(
"Hephaestus Arms - When it comes to personal protection, nobody does it better.",
"Hephaestus Arms - Peace through Superior Firepower.",
"Hephaestus Arms - Don't be caught firing blanks."
)
ship_prefixes = list("HCV" = "a general operations", "HTV" = "a freight", "HLV" = "a munitions resupply", "HDV" = "an asset protection", "HDV" = "a preemptive deployment")
//War God Theme, updated
ship_names = list(
@@ -401,6 +511,12 @@
headquarters = "Toledo, New Ohio"
motto = ""
org_type = "corporate"
slogans = list(
"Vey-Medical. Medical care you can trust.",
"Vey-Medical. Only the finest in surgical equipment.",
"Vey-Medical. Because your patients deserve the best."
)
ship_prefixes = list("VMV" = "a general operations", "VTV" = "a transportation", "VHV" = "a medical resupply", "VSV" = "a research", "VRV" = "an emergency medical support")
// Diona names, mostly
ship_names = list(
@@ -415,6 +531,9 @@
"Fire Blown Out By Wind",
"Star That Fades From View",
"Eyes Which Turn Inwards",
"Still Water Upon An Endless Shore",
"Sunlight Glitters Upon Tranquil Sands",
"Growth Within The Darkest Abyss",
"Joy Without Which The World Would Come Undone",
"A Thousand Thousand Planets Dangling From Branches",
"Light Streaming Through Interminable Branches",
@@ -447,6 +566,13 @@
headquarters = "Earth, Sol"
motto = ""
org_type = "corporate"
slogans = list(
"Zeng-Hu! WE make the medicines that YOU need!",
"Zeng-Hu! Having acid reflux problems? Consult your local physician to see if Dylovene is right for YOU!",
"Zeng-Hu! Tired of getting left in the dust? Try Hyperzine! You'll never fall behind again!",
"Zeng-Hu! Life's aches and pains getting to you? Try Tramadol - available at any good pharmacy!"
)
ship_prefixes = list("ZHV" = "a general operations", "ZTV" = "a transportation", "ZMV" = "a medical resupply", "ZRV" = "a medical research")
//ship names: a selection of famous physicians who advanced the cause of medicine
ship_names = list(
@@ -527,6 +653,12 @@
headquarters = ""
motto = ""
org_type = "corporate"
slogans = list(
"Takahashi Appliances - keeping your home running smoothly.",
"W-T Automotive - keeping you on time, all the time.",
"Ward-Takahashi Electronics - keeping you in touch with the galaxy."
)
ship_prefixes = list("WTV" = "a general operations", "WTFV" = "a freight", "WTGV" = "a transport", "WTDV" = "an asset protection")
ship_names = list(
"Comet",
@@ -560,6 +692,8 @@
"Curtain",
"Planetar",
"Quasar",
"Blazar",
"Corona",
"Binary"
)
destination_names = list()
@@ -581,6 +715,12 @@
headquarters = ""
motto = ""
org_type = "corporate"
slogans = list(
"Bishop Cybernetics - only the best in personal augmentation.",
"Bishop Cybernetics - why settle for flesh when you can have metal?",
"Bishop Cybernetics - make a statement."
)
ship_prefixes = list("BCV" = "a general operations", "BCTV" = "a transportation", "BCSV" = "a research exchange")
//famous mechanical engineers
ship_names = list(
@@ -660,6 +800,10 @@
headquarters = "Shelf flotilla"
motto = ""
org_type = "neutral" //disables slogans for morpheus as they don't advertise, per the description above
/*
slogans = list()
*/
ship_prefixes = list("MCV" = "a general operations", "MTV" = "a freight", "MDV" = "a market protection", "MSV" = "an outreach")
//periodic elements; something 'unusual' for the posibrain TSC without being full on 'quirky' culture ship names (much as I love them, they're done to death)
ship_names = list(
@@ -749,6 +893,12 @@
headquarters = ""
motto = ""
org_type = "corporate"
slogans = list(
"Xion Manufacturing - We have what you need.",
"Xion Manufacturing - The #1 choice of the SolCom Engineer's Union for 150 years.",
"Xion Manufacturing - Our products are as bulletproof as our contracts."
)
ship_prefixes = list("XMV" = "a general operations", "XTV" = "a hauling", "XFV" = "a bulk transport", "XIV" = "a resupply")
//martian mountains
ship_names = list(
@@ -803,6 +953,12 @@
headquarters = ""
motto = ""
org_type = "corporate"
slogans = list(
"The FTU. We look out for the little guy.",
"There's no Trade like Free Trade.",
"Join the Free Trade Union. Because anything worth doing, is worth doing for money." //rule of acquisition #13
)
ship_prefixes = list("FTV" = "a general operations", "FTRP" = "a trade protection", "FTRR" = "a piracy suppression", "FTLV" = "a logistical support", "FTTV" = "a mercantile", "FTDV" = "a market establishment")
//famous merchants and traders, taken from Civ6's Great Merchants, plus the TSC's founder
ship_names = list(
@@ -846,6 +1002,12 @@
headquarters = "Mars, Sol"
motto = "With Major Bill's, you won't pay major bills!"
org_type = "corporate"
slogans = list(
"With Major Bill's, you won't pay major bills!",
"Major Bill's - Private Couriers - General Shipping!",
"Major Bill's got you covered, now get out there!"
)
ship_prefixes = list("TTV" = "a general operations", "TTV" = "a transport", "TTV" = "a luxury transit", "TTV" = "a priority transit", "TTV" = "a secure data courier")
//ship names: big rivers
ship_names = list (
@@ -916,6 +1078,12 @@
headquarters = "Mars, Sol"
motto = ""
org_type = "corporate"
slogans = list(
"Grayson Mining - It's An Ore Effort, For The War Effort!",
"Grayson Mining - Winning The War On Ore!",
"Grayson Mining - Come On Down To Our Ore Chasm!"
)
ship_prefixes = list("GMV" = "a general operations", "GMT" = "a transport", "GMR" = "a resourcing", "GMS" = "a surveying", "GMH" = "a bulk transit")
//rocks
ship_names = list(
@@ -976,6 +1144,12 @@
headquarters = ""
motto = "Dum spiro spero"
org_type = "corporate"
slogans = list(
"Aether A&R - We're Absolutely Breathtaking.",
"Aether A&R - You Can Breathe Easy With Us!",
"Aether A&R - The SolCom's #1 Environmental Systems Provider."
)
ship_prefixes = list("AARV" = "a general operations", "AARE" = "a resource extraction", "AARG" = "a gas transport", "AART" = "a transport")
//weather systems/patterns
ship_names = list (
@@ -1025,6 +1199,12 @@
headquarters = ""
motto = ""
org_type = "corporate"
slogans = list(
"Focal Point Energistics - Sustainable Power for a Sustainable Future.",
"Focal Point Energistics - Powering The Future Before It Even Happens.",
"Focal Point Energistics - Let There Be Light."
)
ship_prefixes = list("FPV" = "a general operations", "FPH" = "a transport", "FPC" = "an energy relay", "FPT" = "a fuel transport")
//famous electrical engineers
ship_names = list (
@@ -1085,6 +1265,12 @@
headquarters = "Spin Aerostat, Jupiter"
motto = "Sic itur ad astra"
org_type = "corporate"
slogans = list(
"StarFlight - travel the stars.",
"StarFlight - bringing you to new horizons.",
"StarFlight - getting you where you need to be since 2137."
)
ship_prefixes = list("SFI-X" = "a VIP liner", "SFI-L" = "a luxury liner", "SFI-B" = "a business liner", "SFI-E" = "an economy liner", "SFI-M" = "a mixed class liner", "SFI-S" = "a sightseeing", "SFI-M" = "a wedding", "SFI-O" = "a marketing", "SFI-S" = "a safari", "SFI-A" = "an aquatic adventure")
flight_types = list( //no military-sounding ones here
"flight",
@@ -1143,6 +1329,12 @@
headquarters = ""
motto = "News from all across the spectrum"
org_type = "corporate"
slogans = list(
"Oculum - All News, All The Time.",
"Oculum - We Keep An Eye Out.",
"Oculum - Your Eye On The Galaxy."
)
ship_prefixes = list("OBV" = "an investigation", "OBV" = "a distribution", "OBV" = "a journalism", "OBV" = "a general operations")
destination_names = list(
"Oculus HQ"
@@ -1158,6 +1350,12 @@
headquarters = "Alpha Centauri"
motto = "The largest brands of food and drink - most of them are Centauri."
org_type = "corporate"
slogans = list(
"Centauri Provisions Bread Tubes - They're Not Just Edible, They're |Breadible!|",
"Centauri Provisions SkrellSnax - Not |Just| For Skrell!",
"Centauri Provisions Space Mountain Wind - It'll Take Your |Breath| Away!"
)
ship_prefixes = list("CPTV" = "a transport", "CPCV" = "a catering", "CPRV" = "a resupply", "CPV" = "a general operations")
destination_names = list(
"Centauri Provisions HQ",
@@ -1175,6 +1373,12 @@
headquarters = ""
motto = "Engine designs, emergency generators, and old memories"
org_type = "corporate"
slogans = list(
"Einstein Engines - you don't have to be Einstein to use |our| engines!",
"Einstein Engines - bringing power to the people.",
"Einstein Engines - because it's the smart thing to do."
)
ship_prefixes = list("EETV" = "a transport", "EERV" = "a research", "EEV" = "a general operations")
destination_names = list(
"Einstein HQ"
@@ -1190,6 +1394,12 @@
headquarters = ""
motto = "We build it - you fly it"
org_type = "corporate"
slogans = list(
"Wulf Aeronautics. We build it - you fly it.",
"Wulf Aeronautics, the Commonwealth's favorite shipwrights.",
"Wulf Aeronautics, building tomorrow's ships today."
)
ship_prefixes = list("WATV" = "a transport", "WARV" = "a repair", "WAV" = "a general operations")
destination_names = list(
"Wulf Aeronautics HQ",
@@ -1207,6 +1417,12 @@
headquarters = ""
motto = ""
org_type = "corporate"
slogans = list(
"Why choose |luxury| when you can choose |Gilthari|?",
"|Gilthari|. Because |you're| worth it.",
"|Gilthari|. Why settle for |anything| less?"
)
ship_prefixes = list("GETV" = "a transport", "GECV" = "a luxury catering", "GEV" = "a general operations")
//precious stones
ship_names = list(
@@ -1283,6 +1499,12 @@
headquarters = "N/A"
motto = "one man's trash is another man's treasure"
org_type = "corporate"
slogans = list(
"Coyote Salvage Corp. 'cause your trash ain't gonna clean itself.",
"Coyote Salvage Corp. 'cause one man's trash is another man's treasure.",
"Coyote Salvage Corp. We'll take your scrap - but not your crap."
)
ship_prefixes = list("CSV" = "a salvage", "CRV" = "a recovery", "CTV" = "a transport", "CSV" = "a shipbreaking", "CHV" = "a towing")
//mostly-original, maybe some references, and more than a few puns
ship_names = list(
@@ -1351,6 +1573,12 @@
headquarters = "Titan, Sol"
motto = "the whole is greater than the sum of its parts"
org_type = "corporate"
slogans = list(
"Chimera Genetics. Find your true self today!",
"Chimera Genetics. Bring us your genes and we'll clean them right up.",
"Chimera Genetics. Better bodies for a better tomorrow."
)
ship_prefixes = list("CGV" = "a general operations", "CGT" = "a transport", "CGT" = "a delivery", "CGH" = "a medical")
//edgy mythological critters!
ship_names = list(
@@ -1506,6 +1734,7 @@
sysdef = TRUE //we're the space law, we don't impersonate people and stuff
autogenerate_destination_names = FALSE //don't add extra destinations to our pool, or else we leave the system which makes no sense
org_type = "system defense"
ship_prefixes = list ("SDB" = "a patrol", "SDF" = "a patrol", "SDV" = "a patrol", "SDB" = "an escort", "SDF" = "an escort", "SDV" = "an escort", "SAR" = "a search and rescue", "SDT" = "a logistics", "SDT" = "a resupply", "SDJ" = "a prisoner transport") //b = boat, f = fleet (generic), v = vessel, t = tender
//ship names: weapons
ship_names = list(
@@ -1605,6 +1834,7 @@
sysdef = FALSE
autogenerate_destination_names = TRUE //the events we get called for don't fire a destination, but we need entries to avoid runtimes.
org_type = "smuggler"
ship_prefixes = list ("suspected smuggler" = "an illegal smuggling", "possible smuggler" = "an illegal smuggling") //as assigned by control, second part shouldn't even come up
//blank out our shipnames for redesignation
ship_names = list(
@@ -1781,6 +2011,7 @@
hostile = TRUE
autogenerate_destination_names = TRUE //the events we get called for don't fire a destination, but we need entries to avoid runtimes.
org_type = "pirate"
ship_prefixes = list ("known pirate" = "a piracy", "suspected pirate" = "a piracy", "rogue privateer" = "a piracy", "Cartel enforcer" = "a piracy", "known outlaw" = "a piracy", "bandit" = "a piracy", "roving corsair" = "a piracy", "illegal salvager" = "an illegal salvage", "rogue mercenary" = "a mercenary") //as assigned by control, second part shouldn't even come up, but it exists to avoid hiccups/weirdness just in case
ship_names = list(
"Morally Bankrupt",
@@ -1953,6 +2184,7 @@
hostile = TRUE
autogenerate_destination_names = TRUE
org_type = "pirate"
ship_prefixes = list("Ue-Katish pirate" = "a raiding", "Ue-Katish bandit" = "a raiding", "Ue-Katish raider" = "a raiding", "Ue-Katish enforcer" = "an enforcement")
ship_names = list(
"Keqxuer'xeu's Prize",
@@ -1987,6 +2219,7 @@
hostile = TRUE
autogenerate_destination_names = TRUE //the events we get called for don't fire a destination, but we need *some* entries to avoid runtimes.
org_type = "pirate"
ship_prefixes = list("vox marauder" = "a marauding", "vox raider" = "a raiding", "vox ravager" = "a raiding", "vox corsair" = "a raiding") //as assigned by control, second part shouldn't even come up
//blank out our shipnames for redesignation
ship_names = list(
@@ -2063,6 +2296,7 @@
motto = "Nil Mortalibus Ardui Est" // Latin, because latin. Says 'Nothing is too steep for mortals'
autogenerate_destination_names = TRUE
org_type = "government"
ship_prefixes = list("CWS-A" = "an administrative", "CWS-T" = "a transportation", "CWS-D" = "a diplomatic", "CWS-F" = "a freight", "CWS-J" = "a prisoner transfer")
//earth's biggest impact craters
ship_names = list(
@@ -2158,6 +2392,7 @@
headquarters = "Paraiso a Àstrea"
motto = "Liberty to the Stars!"
org_type = "government"
ship_prefixes = list("UFHV" = "military", "FFHV" = "classified")
ship_names = list(
"Bulwark of the Free",
@@ -2236,6 +2471,7 @@
headquarters = ""
motto = ""
org_type = "government"
ship_prefixes = list("ECS-M" = "a military", "ECS-T" = "a transport", "ECS-T" = "a special transport", "ECS-D" = "a diplomatic") //The Special Transport is SLAAAAVES. but let's not advertise that openly.
ship_names = list(
"Bring Me Wine!",
@@ -2291,6 +2527,7 @@
headquarters = "The Pact, Myria"
motto = ""
org_type = "government"
ship_prefixes = list("SFM-M" = "a military", "SFM-M" = "a patrol") // The Salthans don't do anything else.
flight_types = list(
"mission",
@@ -2394,6 +2631,7 @@
motto = ""
autogenerate_destination_names = TRUE //big list of own holdings to come
org_type = "government"
//the tesh expeditionary fleet's closest analogue in modern terms would be the US Army Corps of Engineers, just with added combat personnel as well
ship_prefixes = list("TEF" = "a diplomatic", "TEF" = "a peacekeeping", "TEF" = "an escort", "TEF" = "an exploration", "TEF" = "a survey", "TEF" = "an expeditionary", "TEF" = "a pioneering")
//TODO: better ship names? I just took a bunch of random teshnames from the Random Name button and added a word.
@@ -2441,6 +2679,7 @@
motto = "Si Vis Pacem Para Bellum" //if you wish for peace, prepare for war
autogenerate_destination_names = TRUE
org_type = "military"
ship_prefixes = list ("USDF" = "a logistical", "USDF" = "a training", "USDF" = "a patrol", "USDF" = "a piracy suppression", "USDF" = "a peacekeeping", "USDF" = "a relief", "USDF" = "an escort", "USDF" = "a search and rescue", "USDF" = "a classified")
flight_types = list(
"mission",
@@ -2539,6 +2778,7 @@
motto = ""
autogenerate_destination_names = TRUE
org_type = "military"
ship_prefixes = list("PCRC" = "a risk control", "PCRC" = "a private security")
flight_types = list(
"flight",
@@ -2602,6 +2842,7 @@
motto = "Strength in Numbers"
autogenerate_destination_names = TRUE
org_type = "military"
ship_prefixes = list("HPF" = "a secure freight", "HPT" = "a training", "HPS" = "a logistics", "HPV" = "a patrol", "HPH" = "a bounty hunting", "HPX" = "an experimental", "HPC" = "a command", "HPI" = "a mercy")
flight_types = list(
"flight",
@@ -2686,6 +2927,7 @@
motto = "Aut Neca Aut Necare"
autogenerate_destination_names = TRUE
org_type = "military"
ship_prefixes = list("SAARE" = "a secure freight", "SAARE" = "a training", "SAARE" = "a logistics", "SAARE" = "a patrol", "SAARE" = "a security", "SAARE" = "an experimental", "SAARE" = "a command", "SAARE" = "a classified")
flight_types = list(
"flight",
+2 -2
View File
@@ -88,8 +88,8 @@
CASINO_PRIZE("Dolphin mask", /obj/item/clothing/mask/dolphin, 1, 50, "clothing"),
CASINO_PRIZE("Demon mask", /obj/item/clothing/mask/demon, 1, 50, "clothing"),
CASINO_PRIZE("Chameleon mask", /obj/item/clothing/under/chameleon, 1, 250, "clothing"),
CASINO_PRIZE("Ian costume", /obj/item/clothing/suit/storage/hooded/ian_costume, 1, 50, "clothing"),
CASINO_PRIZE("Carp costume", /obj/item/clothing/suit/storage/hooded/carp_costume, 1, 50, "clothing"),
CASINO_PRIZE("Ian costume", /obj/item/clothing/suit/storage/hooded/costume/ian, 1, 50, "clothing"),
CASINO_PRIZE("Carp costume", /obj/item/clothing/suit/storage/hooded/costume/carp, 1, 50, "clothing"),
)
item_list["Miscellaneous"] = list(
CASINO_PRIZE("Toy sword", /obj/item/toy/sword, 1, 50, "misc"),
@@ -30,7 +30,7 @@
// Sanitize illegal languages
for(var/language in pref.alternate_languages)
var/datum/language/L = GLOB.all_languages[language]
if(!istype(L) || (L.flags & RESTRICTED) || (!(language in S.secondary_langs) && !is_lang_whitelisted(pref.client, L)))
if(!istype(L) || (L.flags & RESTRICTED) || (!(language in S.secondary_langs) && pref.client && !is_lang_whitelisted(pref.client, L)))
testing("LANGSANI: Removed [L?.name || "lang not found"] from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] because it failed allowed checks")
pref.alternate_languages -= language
@@ -92,14 +92,17 @@
ringtype["engagement ring"] = /obj/item/clothing/gloves/ring/engagement
ringtype["signet ring"] = /obj/item/clothing/gloves/ring/seal/signet
ringtype["masonic ring"] = /obj/item/clothing/gloves/ring/seal/mason
ringtype["ring, steel"] = /obj/item/clothing/gloves/ring/material/steel
ringtype["ring, iron"] = /obj/item/clothing/gloves/ring/material/iron
ringtype["ring, silver"] = /obj/item/clothing/gloves/ring/material/silver
ringtype["ring, gold"] = /obj/item/clothing/gloves/ring/material/gold
ringtype["ring, platinum"] = /obj/item/clothing/gloves/ring/material/platinum
ringtype["ring, glass"] = /obj/item/clothing/gloves/ring/material/glass
ringtype["ring, wood"] = /obj/item/clothing/gloves/ring/material/wood
ringtype["ring, plastic"] = /obj/item/clothing/gloves/ring/material/plastic
ringtype["ring, iron"] = /obj/item/clothing/gloves/ring/material/iron
ringtype["ring, bronze"] = /obj/item/clothing/gloves/ring/material/bronze
ringtype["ring, steel"] = /obj/item/clothing/gloves/ring/material/steel
ringtype["ring, copper"] = /obj/item/clothing/gloves/ring/material/copper
ringtype["ring, silver"] = /obj/item/clothing/gloves/ring/material/silver
ringtype["ring, gold"] = /obj/item/clothing/gloves/ring/material/gold
ringtype["ring, platinum"] = /obj/item/clothing/gloves/ring/material/platinum
gear_tweaks += new/datum/gear_tweak/path(ringtype)
/datum/gear/gloves/circuitry
@@ -29,4 +29,25 @@
/datum/gear/mask/plaguedoctor2
display_name = "golden plague doctor's mask"
path = /obj/item/clothing/mask/gas/plaguedoctor/gold
cost = 3 ///Because it functions as a gas mask, and therefore has a mechanical advantage.
cost = 3 ///Because it functions as a gas mask, and therefore has a mechanical advantage.
/datum/gear/mask/papermask
display_name = "paper mask"
path = /obj/item/clothing/mask/paper
/datum/gear/mask/emotionalmask
display_name = "emotional mask"
path = /obj/item/clothing/mask/emotions
/datum/gear/mask/gaiter
display_name = "neck gaiter selection"
path = /obj/item/clothing/mask/gaiter
cost = 1
/datum/gear/mask/gaiter/New()
..()
var/list/gaiters = list()
for(var/gaiter in typesof(/obj/item/clothing/mask/gaiter))
var/obj/item/clothing/mask/gaiter_type = gaiter
gaiters[initial(gaiter_type.name)] = gaiter_type
gear_tweaks += new/datum/gear_tweak/path(sortTim(gaiters, /proc/cmp_text_asc))
@@ -89,37 +89,37 @@
display_name = "flashlight"
path = /obj/item/device/flashlight
/datum/gear/utility/flashlight_blue
display_name = "flashlight, blue"
path = /obj/item/device/flashlight/color
/datum/gear/utility/flashlight_orange
display_name = "flashlight, orange"
path = /obj/item/device/flashlight/color/orange
/datum/gear/utility/flashlight_red
display_name = "flashlight, red"
path = /obj/item/device/flashlight/color/red
/datum/gear/utility/flashlight_yellow
display_name = "flashlight, yellow"
path = /obj/item/device/flashlight/color/yellow
/datum/gear/utility/maglight
display_name = "flashlight, maglight"
path = /obj/item/device/flashlight/maglight
cost = 2
/datum/gear/utility/flashlight/color
display_name = "flashlight, small (selection)"
path = /obj/item/device/flashlight/color
/datum/gear/utility/flashlight/color/New()
..()
var/list/flashlights = list(
"Blue Flashlight" = /obj/item/device/flashlight/color,
"Red Flashlight" = /obj/item/device/flashlight/color/red,
"Green Flashlight" = /obj/item/device/flashlight/color/green,
"Yellow Flashlight" = /obj/item/device/flashlight/color/yellow,
"Purple Flashlight" = /obj/item/device/flashlight/color/purple,
"Orange Flashlight" = /obj/item/device/flashlight/color/orange
)
gear_tweaks += new/datum/gear_tweak/path(flashlights)
/datum/gear/utility/battery
display_name = "cell, device"
path = /obj/item/weapon/cell/device
/datum/gear/utility/pen
display_name = "Fountain Pen"
display_name = "fountain pen"
path = /obj/item/weapon/pen/fountain
/datum/gear/utility/umbrella
display_name = "Umbrella"
display_name = "umbrella"
path = /obj/item/weapon/melee/umbrella
cost = 3
@@ -131,7 +131,7 @@
display_name = "wheelchair selection"
path = /obj/item/wheelchair
cost = 4
/datum/gear/utility/wheelchair/New()
..()
gear_tweaks += gear_tweak_free_color_choice
@@ -148,8 +148,11 @@
. += "<del>[rank]</del></td></a><td><b> \[WHITELIST ONLY]</b></td></tr>"
continue
//VOREStation Add End
if(job.minimum_character_age && user.client && (user.client.prefs.age < job.minimum_character_age))
. += "<del>[rank]</del></td></a><td> \[MINIMUM CHARACTER AGE: [job.minimum_character_age]]</td></tr>"
if(job.is_species_banned(user.client.prefs.species, user.client.prefs.organ_data["brain"]) == TRUE)
. += "<del>[rank]</del></td></a><td> \[THIS RACE/BRAIN TYPE CANNOT TAKE THIS ROLE.\]</td></tr>"
continue
if((job.minimum_character_age || job.min_age_by_species) && user.client && (user.client.prefs.age < job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])))
. += "<del>[rank]</del></td></a><td> \[MINIMUM CHARACTER AGE FOR SELECTED RACE/BRAIN TYPE: [job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])]\]</td></tr>"
continue
if((pref.job_civilian_low & ASSISTANT) && job.type != /datum/job/assistant)
. += "<font color=grey>[rank]</font></a></td><td></td></tr>"
@@ -112,12 +112,17 @@
else if(!pref.custom_base || !(pref.custom_base in GLOB.custom_species_bases))
pref.custom_base = SPECIES_HUMAN
pref.custom_say = lowertext(trim(pref.custom_say))
pref.custom_whisper = lowertext(trim(pref.custom_whisper))
pref.custom_ask = lowertext(trim(pref.custom_ask))
pref.custom_exclaim = lowertext(trim(pref.custom_exclaim))
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
character.custom_species = pref.custom_species
character.custom_say = pref.custom_say
character.custom_ask = pref.custom_ask
character.custom_whisper = pref.custom_whisper
character.custom_exclaim = pref.custom_exclaim
character.custom_say = lowertext(trim(pref.custom_say))
character.custom_ask = lowertext(trim(pref.custom_ask))
character.custom_whisper = lowertext(trim(pref.custom_whisper))
character.custom_exclaim = lowertext(trim(pref.custom_exclaim))
if(character.isSynthetic()) //Checking if we have a synth on our hands, boys.
pref.dirty_synth = 1
+5 -79
View File
@@ -1,6 +1,6 @@
/mob/var/suiciding = 0
/mob/living/carbon/human/verb/suicide()
/mob/living/carbon/human/verb/suicide() /// At best, useful for admins to see if it's being called.
set hidden = 1
if (stat == DEAD)
@@ -10,83 +10,9 @@
if (!ticker)
to_chat(src, "You can't commit suicide before the game starts!")
return
if(!player_is_antag(mind))
message_admins("[ckey] has tried to suicide, but they were not permitted due to not being antagonist as human.", 1)
to_chat(src, "No. Adminhelp if there is a legitimate reason.")
return
if (suiciding)
to_chat(src, "You're already committing suicide! Be patient!")
return
var/confirm = tgui_alert(usr, "Are you sure you want to commit suicide?", "Confirm Suicide", list("Yes", "No"))
if(confirm == "Yes")
if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))")
return
suiciding = 15
does_not_breathe = 0 //Prevents ling-suicide zombies, or something
var/obj/item/held_item = get_active_hand()
if(held_item)
var/damagetype = held_item.suicide_act(src)
if(damagetype)
log_and_message_admins("[key_name(src)] commited suicide using \a [held_item]")
var/damage_mod = 1
switch(damagetype) //Sorry about the magic numbers.
//brute = 1, burn = 2, tox = 4, oxy = 8
if(15) //4 damage types
damage_mod = 4
if(6, 11, 13, 14) //3 damage types
damage_mod = 3
if(3, 5, 7, 9, 10, 12) //2 damage types
damage_mod = 2
if(1, 2, 4, 8) //1 damage type
damage_mod = 1
else //This should not happen, but if it does, everything should still work
damage_mod = 1
//Do 175 damage divided by the number of damage types applied.
if(damagetype & BRUTELOSS)
adjustBruteLoss(30/damage_mod) //hack to prevent gibbing
adjustOxyLoss(145/damage_mod)
if(damagetype & FIRELOSS)
adjustFireLoss(175/damage_mod)
if(damagetype & TOXLOSS)
adjustToxLoss(175/damage_mod)
if(damagetype & OXYLOSS)
adjustOxyLoss(175/damage_mod)
//If something went wrong, just do normal oxyloss
if(!(damagetype | BRUTELOSS) && !(damagetype | FIRELOSS) && !(damagetype | TOXLOSS) && !(damagetype | OXYLOSS))
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth()
return
log_and_message_admins("[key_name(src)] commited suicide")
var/datum/gender/T = gender_datums[get_visible_gender()]
var/suicidemsg
suicidemsg = pick("<span class='danger'>[src] is attempting to bite [T.his] tongue off! It looks like [T.he] [T.is] trying to commit suicide.</span>", \
"<span class='danger'>[src] is jamming [T.his] thumbs into [T.his] eye sockets! It looks like [T.he] [T.is] trying to commit suicide.</span>", \
"<span class='danger'>[src] is twisting [T.his] own neck! It looks like [T.he] [T.is] trying to commit suicide.</span>", \
"<span class='danger'>[src] is holding [T.his] breath! It looks like [T.he] [T.is] trying to commit suicide.</span>")
if(isSynthetic())
suicidemsg = "<span class='danger'>[src] is attempting to switch [T.his] power off! It looks like [T.he] [T.is] trying to commit suicide.</span>"
visible_message(suicidemsg)
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth()
to_chat(src, "<span class='warning'>No. Adminhelp if there is a legitimate reason, and please review our server rules.</span>")
message_admins("[ckey] has tried to trigger the suicide verb as human, but it is currently disabled.")
/mob/living/carbon/brain/verb/suicide()
set hidden = 1
@@ -165,4 +91,4 @@
M.show_message("<span class='notice'>[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"</span>", 3, "<span class='notice'>[src] bleeps electronically.</span>", 2)
death(0)
else
to_chat(src, "Aborting suicide attempt.")
to_chat(src, "Aborting suicide attempt.")
+7
View File
@@ -292,6 +292,12 @@ BLIND // can't see anything
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
body_parts_covered = 0
/obj/item/clothing/glasses/artist
name = "4-D Glasses"
desc = "You can see in every dimension, and get four times the amount of headache!"
icon_state = "artist"
item_state = "artist_glasses"
/obj/item/clothing/glasses/gglasses
name = "green glasses"
desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme."
@@ -590,3 +596,4 @@ BLIND // can't see anything
to_chat(usr, "You push \the [src] up from in front of your eyes.")
update_clothing_icon()
usr.update_action_buttons()
+7 -1
View File
@@ -192,4 +192,10 @@
/obj/item/clothing/head/hood/techpriest
name = "techpriest hood"
desc = "A techpriest hood."
icon_state = "techpriesthood"
icon_state = "techpriesthood"
/obj/item/clothing/head/hood/siffet_hood
name = "siffet hood"
desc = "A hood that looks vaguely like a siffet's head. Guaranteed to traumatize your Promethean coworkers."
icon_state = "siffet"
item_state_slots = list(slot_r_hand_str = "siffet", slot_l_hand_str = "siffet")
+94 -1
View File
@@ -294,4 +294,97 @@
desc = "A black veil, typically worn at funerals or by goths."
w_class = ITEMSIZE_TINY
body_parts_covered = FACE
icon_state = "veil"
icon_state = "veil"
/obj/item/clothing/mask/paper
name = "paper mask"
desc = "A neat, circular mask made out of paper. Perhaps you could try drawing on it with a pen!"
w_class = ITEMSIZE_SMALL
body_parts_covered = FACE
icon_state = "papermask"
/obj/item/clothing/mask/paper/attackby(obj/item/I as obj, mob/living/user as mob, proximity)
if(!proximity) return
if(istype(I, /obj/item/weapon/pen))
var/drawtype = tgui_alert(user, "Choose what you'd like to draw.", "Faces", list("blank","neutral","eyes","sleeping", "heart", "core", "plus", "square", "bullseye", "vertical", "horizontal", "X", "bug eyes", "double", "mark" ))
switch(drawtype)
if("blank")
src.icon_state = "papermask"
if("neutral")
src.icon_state = "neutralmask"
if("eyes")
src.icon_state = "eyemask"
if("sleeping")
src.icon_state = "sleepingmask"
if("heart")
src.icon_state = "heartmask"
if("core")
src.icon_state = "coremask"
if("plus")
src.icon_state = "plusmask"
if("square")
src.icon_state = "squaremask"
if("bullseye")
src.icon_state = "bullseyemask"
if("vertical")
src.icon_state = "verticalmask"
if("horizontal")
src.icon_state = "horizontalmask"
if("X")
src.icon_state = "xmask"
if("bug eyes")
src.icon_state = "bugmask"
if("double")
src.icon_state = "doublemask"
if("mark")
src.icon_state = "markmask"
return
/obj/item/clothing/mask/emotions
name = "emotional mask"
desc = "Express your happiness or hide your sorrows with this modular cutout. Draw your current emotions onto it with a pen!"
w_class = ITEMSIZE_SMALL
body_parts_covered = FACE
icon_state = "joy"
/obj/item/clothing/mask/emotions/attackby(obj/item/I as obj, mob/living/user as mob, proximity)
if(!proximity) return
if(istype(I, /obj/item/weapon/pen))
var/drawtype = tgui_alert(user, "Choose what emotions you'd like to display.", "Emotions", list("joy","pensive","angry","flushed" ))
switch(drawtype)
if("joy")
src.icon_state = "joy"
if("pensive")
src.icon_state = "pensive"
if("angry")
src.icon_state = "angry"
if("flushed")
src.icon_state = "flushed"
return
//Gaiter scarves
/obj/item/clothing/mask/gaiter
name = "red neck gaiter"
desc = "A slightly worn neck gaiter, it's loose enough to be worn comfortably like a scarf. Commonly used by outdoorsmen and mercenaries, both to keep warm and keep debris away from the face."
icon_state = "gaiter_red"
/obj/item/clothing/mask/gaiter/attack_self(mob/user as mob)
if(src.icon_state == initial(icon_state))
src.icon_state = "[icon_state]_up"
to_chat(user, "You pull the gaiter up over your nose.")
else
src.icon_state = initial(icon_state)
to_chat(user, "You tug the gaiter down around your neck.")
update_clothing_icon() //so our mob-overlays update
/obj/item/clothing/mask/gaiter/tan
name = "tan neck gaiter"
icon_state = "gaiter_tan"
/obj/item/clothing/mask/gaiter/gray
name = "gray neck gaiter"
icon_state = "gaiter_gray"
/obj/item/clothing/mask/gaiter/green
name = "green neck gaiter"
icon_state = "gaiter_green"
+43 -19
View File
@@ -20,28 +20,52 @@
return material
/obj/item/clothing/gloves/ring/material/wood/New(var/newloc)
..(newloc, "wood")
..(newloc, MAT_WOOD)
/obj/item/clothing/gloves/ring/material/plastic/New(var/newloc)
..(newloc, "plastic")
..(newloc, MAT_PLASTIC)
/obj/item/clothing/gloves/ring/material/iron/New(var/newloc)
..(newloc, "iron")
/obj/item/clothing/gloves/ring/material/steel/New(var/newloc)
..(newloc, "steel")
/obj/item/clothing/gloves/ring/material/silver/New(var/newloc)
..(newloc, "silver")
/obj/item/clothing/gloves/ring/material/gold/New(var/newloc)
..(newloc, "gold")
/obj/item/clothing/gloves/ring/material/platinum/New(var/newloc)
..(newloc, "platinum")
/obj/item/clothing/gloves/ring/material/phoron/New(var/newloc)
..(newloc, "phoron")
..(newloc, MAT_IRON)
/obj/item/clothing/gloves/ring/material/glass/New(var/newloc)
..(newloc, "glass")
..(newloc, MAT_GLASS)
/obj/item/clothing/gloves/ring/material/steel/New(var/newloc)
..(newloc, MAT_STEEL)
/obj/item/clothing/gloves/ring/material/silver/New(var/newloc)
..(newloc, MAT_SILVER)
/obj/item/clothing/gloves/ring/material/gold/New(var/newloc)
..(newloc, MAT_GOLD)
/obj/item/clothing/gloves/ring/material/platinum/New(var/newloc)
..(newloc, MAT_PLATINUM)
/obj/item/clothing/gloves/ring/material/phoron/New(var/newloc)
..(newloc, MAT_PHORON)
/obj/item/clothing/gloves/ring/material/titanium/New(var/newloc)
..(newloc, MAT_TITANIUM)
/obj/item/clothing/gloves/ring/material/copper/New(var/newloc)
..(newloc, MAT_COPPER)
/obj/item/clothing/gloves/ring/material/bronze/New(var/newloc)
..(newloc, MAT_BRONZE)
/obj/item/clothing/gloves/ring/material/uranium/New(var/newloc)
..(newloc, MAT_URANIUM)
/obj/item/clothing/gloves/ring/material/osmium/New(var/newloc)
..(newloc, MAT_OSMIUM)
/obj/item/clothing/gloves/ring/material/lead/New(var/newloc)
..(newloc, MAT_LEAD)
/obj/item/clothing/gloves/ring/material/diamond/New(var/newloc)
..(newloc, MAT_DIAMOND)
/obj/item/clothing/gloves/ring/material/tin/New(var/newloc)
..(newloc, MAT_TIN)
+1 -1
View File
@@ -166,7 +166,7 @@
/obj/item/clothing/shoes/athletic
name = "athletic shoes"
desc = "A pair of sleek atheletic shoes. Made by and for the sporty types."
desc = "A pair of sleek athletic shoes. Made by and for the sporty types."
icon_state = "sportshoe"
addblends = "sportshoe_a"
item_state_slots = list(slot_r_hand_str = "sportheld", slot_l_hand_str = "sportheld")
+16 -10
View File
@@ -63,26 +63,32 @@
else
RemoveHood()
/obj/item/clothing/suit/storage/hooded/carp_costume
/obj/item/clothing/suit/storage/hooded/costume
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
action_button_name = "Toggle Hood"
/obj/item/clothing/suit/storage/hooded/costume/siffet
name = "siffet costume"
desc = "A costume made from 'synthetic' siffet fur, it smells like a weasel nest."
icon_state = "siffet"
item_state_slots = list(slot_r_hand_str = "siffet", slot_l_hand_str = "siffet")
hoodtype = /obj/item/clothing/head/hood/siffet_hood
/obj/item/clothing/suit/storage/hooded/costume/carp
name = "carp costume"
desc = "A costume made from 'synthetic' carp scales, it smells."
icon_state = "carp_casual"
item_state_slots = list(slot_r_hand_str = "carp_casual", slot_l_hand_str = "carp_casual") //Does not exist -S2-
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE //Space carp like space, so you should too
action_button_name = "Toggle Carp Hood"
hoodtype = /obj/item/clothing/head/hood/carp_hood
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE //Space carp like space, so you should too
/obj/item/clothing/suit/storage/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts?
/obj/item/clothing/suit/storage/hooded/costume/ian //It's Ian, rub his bell- oh god what happened to his inside parts?
name = "corgi costume"
desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs."
icon_state = "ian"
item_state_slots = list(slot_r_hand_str = "ian", slot_l_hand_str = "ian") //Does not exist -S2-
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
action_button_name = "Toggle Ian Hood"
hoodtype = /obj/item/clothing/head/hood/ian_hood
// winter coats go here
+1 -1
View File
@@ -518,7 +518,7 @@
/obj/item/clothing/suit/storage/toggle/bomber/retro
name = "retro bomber jacket"
desc = "A retro style, fur-lined leather bomber jacket that invokes the early days of space exploration when spacemen were spacemen, and laser guns had funny little antennae on them."
icon_state = "retro_bomber"
icon_state = "retrojacket"
/obj/item/clothing/suit/storage/bomber/alt
name = "bomber jacket"
@@ -1,6 +1,6 @@
/obj/item/clothing/accessory/holster/waist/kinetic_accelerator
name = "KA holster"
desc = "A specialized holster, made specifically for Kinetic Accelerator."
desc = "A specialized holster, made specifically for Kinetic Accelerators."
can_hold = list(/obj/item/weapon/gun/energy/kinetic_accelerator)
/obj/item/clothing/accessory/holster/machete/rapier
@@ -1020,6 +1020,25 @@
desc = "A rather skimpy cow patterned swimsuit."
icon_state = "swim_cow"
/obj/item/clothing/under/wetsuit
name = "wetsuit"
desc = "For when you need to scuba dive your way into an enemy base."
icon_state = "wetsuit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
/obj/item/clothing/under/wetsuit_skimpy
name = "tactical wetsuit"
desc = "For when you need to scuba dive your way into an enemy base but still want to show off a little skin."
icon_state = "wetsuit_skimpy"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/wetsuit_rec
name = "recreational wetsuit"
desc = "For when you need to kayak your way into an enemy base."
icon_state = "wetsuit_rec"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
cold_protection = UPPER_TORSO|LOWER_TORSO
/*
* Pyjamas
+4 -9
View File
@@ -98,16 +98,11 @@
if(!reagents.total_volume)
to_chat(user, "<span class='warning'>The [initial(name)] is dry!</span>")
else
user.visible_message("\The [user] starts to wipe down [A] with [src]!")
//reagents.splash(A, 1) //get a small amount of liquid on the thing we're wiping.
user.visible_message("[user] starts to wipe [A] with [src].")
update_name()
if(do_after(user,30))
user.visible_message("\The [user] finishes wiping off the [A]!")
A.clean_blood()
if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) //VOREStation Edit - "Allows rags to clean dirt from turfs"
var/turf/T = get_turf(A)
if(T)
T.clean(src, user) //VOREStation Edit End
user.visible_message("[user] finishes wiping [A]!")
A.on_rag_wipe(src)
/obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag)
if(isliving(target)) //Leaving this as isliving.
@@ -121,7 +116,7 @@
var/mob/living/carbon/human/H = target
if(H.head && (H.head.body_parts_covered & FACE)) //Check human head coverage.
to_chat(user, "<span class='warning'>Remove their [H.head] first.</span>")
return
return
else if(reagents.total_volume) //Final check. If the rag is not on fire and their face is uncovered, smother target.
user.do_attack_animation(src)
user.visible_message(
+3
View File
@@ -216,6 +216,9 @@
/datum/reagent/ethanol/cuba_libre
price_tag = 4
/datum/reagent/ethanol/rum_and_cola
price_tag = 4
/datum/reagent/ethanol/demonsblood
price_tag = 4
+7
View File
@@ -91,6 +91,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/milk = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/decaf_cola = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb = 5,
@@ -139,6 +140,7 @@
products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,
/obj/item/weapon/reagent_containers/food/drinks/decaf = 15,
/obj/item/weapon/reagent_containers/food/drinks/tea = 25,
/obj/item/weapon/reagent_containers/food/drinks/decaf_tea = 25,
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25,
/obj/item/weapon/reagent_containers/food/drinks/greentea = 15,
/obj/item/weapon/reagent_containers/food/drinks/chaitea = 15)
@@ -146,6 +148,7 @@
prices = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 2,
/obj/item/weapon/reagent_containers/food/drinks/decaf = 3,
/obj/item/weapon/reagent_containers/food/drinks/tea = 2,
/obj/item/weapon/reagent_containers/food/drinks/decaf_tea = 2,
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 2,
/obj/item/weapon/reagent_containers/food/drinks/greentea = 10,
/obj/item/weapon/reagent_containers/food/drinks/chaitea = 5) // VOREStation Edit - Lowers Coffee/Hot Chocolate/Tea Prices from 3 -> 2.
@@ -233,10 +236,12 @@
product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!"
product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in the galaxy."
products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/decaf_cola = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkistdecaf = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 10,
@@ -247,10 +252,12 @@
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko = 5,
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 6)
prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/decaf_cola = 2,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkistdecaf = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 2,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,
+12 -12
View File
@@ -1325,8 +1325,8 @@
product_ads = "Don't let your art be stifled!;Remember, practice makes perfect!;Break a leg!;Don't make me get the cane!;Thespian's Delight entering stage right!;Costumes for your acting needs!"
icon = 'icons/obj/vending.dmi'
icon_state = "theater"
products = list(/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
products = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/chickensuit = 3,
/obj/item/clothing/head/chicken = 3,
/obj/item/clothing/head/helmet/gladiator = 3,
@@ -1390,8 +1390,8 @@
/obj/item/clothing/gloves/combat/knight_costume/brown = 3,
/obj/item/clothing/shoes/knight_costume = 3,
/obj/item/clothing/shoes/knight_costume/black = 3)
prices = list(/obj/item/clothing/suit/storage/hooded/carp_costume = 200,
/obj/item/clothing/suit/storage/hooded/carp_costume = 200,
prices = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
/obj/item/clothing/suit/chickensuit = 200,
/obj/item/clothing/head/chicken = 200,
/obj/item/clothing/head/helmet/gladiator = 300,
@@ -2505,8 +2505,8 @@
product_ads = "Don't let your art be stifled!;Remember, practice makes perfect!;Break a leg!;Don't make me get the cane!;Thespian's Delight entering stage right!;Costumes for your acting needs!"
icon = 'icons/obj/vending.dmi'
icon_state = "theater"
products = list(/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
products = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/chickensuit = 3,
/obj/item/clothing/head/chicken = 3,
/obj/item/clothing/head/helmet/gladiator = 3,
@@ -2570,8 +2570,8 @@
/obj/item/clothing/gloves/combat/knight_costume/brown = 3,
/obj/item/clothing/shoes/knight_costume = 3,
/obj/item/clothing/shoes/knight_costume/black = 3)
prices = list(/obj/item/clothing/suit/storage/hooded/carp_costume = 200,
/obj/item/clothing/suit/storage/hooded/carp_costume = 200,
prices = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
/obj/item/clothing/suit/chickensuit = 200,
/obj/item/clothing/head/chicken = 200,
/obj/item/clothing/head/helmet/gladiator = 300,
@@ -2668,8 +2668,8 @@
/obj/item/clothing/under/color/yellow = 5,
/obj/item/clothing/shoes/black = 5,
/obj/item/clothing/shoes/white = 5,
/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/chickensuit = 3,
/obj/item/clothing/head/chicken = 3,
/obj/item/clothing/head/helmet/gladiator = 3,
@@ -3411,8 +3411,8 @@
product_ads = "Don't let your art be stifled!;Remember, practice makes perfect!;Break a leg!;Don't make me get the cane!;Thespian's Delight entering stage right!;Costumes for your acting needs!"
icon = 'icons/obj/vending.dmi'
icon_state = "theater"
products = list(/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
/obj/item/clothing/suit/storage/hooded/carp_costume = 3,
products = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/storage/hooded/costume/carp = 3,
/obj/item/clothing/suit/chickensuit = 3,
/obj/item/clothing/head/chicken = 3,
/obj/item/clothing/head/helmet/gladiator = 3,
+5 -1
View File
@@ -23,7 +23,7 @@
icon = R.glass_icon_file
else
icon = initial(icon)
if(R.glass_icon_state)
icon_state = R.glass_icon_state
else
@@ -373,6 +373,10 @@ Drinks Data
glass_icon_state = "martiniglass"
glass_center_of_mass = list("x"=17, "y"=8)
/datum/reagent/ethanol/rum_and_cola
glass_icon_state = "rumcolaglass"
glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/ethanol/cuba_libre
glass_icon_state = "cubalibreglass"
glass_center_of_mass = list("x"=16, "y"=8)
+28 -6
View File
@@ -9,7 +9,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/cola
name = "\improper Space Cola"
desc = "Reassuringly artificial."
desc = "Reassuringly artificial. Contains caffeine."
description_fluff = "The 'Space' branding was originally added to the 'Alpha Cola' product line in order to justify selling cans for 50% higher prices to 'off-world' retailers. Despite being chemically identical, Space Cola proved so popular that Centauri Provisions eventually applied the name to the entire product line - price hike and all."
icon_state = "cola"
center_of_mass = list("x"=16, "y"=10)
@@ -18,6 +18,17 @@
. = ..()
reagents.add_reagent("cola", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/decaf_cola
name = "\improper Space Cola Free"
desc = "More reassuringly artificial than ever before."
description_fluff = "The 'Space' branding was originally added to the 'Alpha Cola' product line in order to justify selling cans for 50% higher prices to 'off-world' retailers. Despite being chemically identical, Space Cola proved so popular that Centauri Provisions eventually applied the name to the entire product line - price hike and all."
icon_state = "decafcola"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/decaf_cola/Initialize()
. = ..()
reagents.add_reagent("decafcola", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle
name = "bottled water"
desc = "Ice cold and utterly tasteless, this 'all-natural' mineral water comes 'fresh' from one of NanoTrasen's heavy-duty bottling plants in the Sivian poles."
@@ -32,7 +43,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
desc = "Blows right through you like a space wind. Contains caffeine."
description_fluff = "The 'Space' branding was originally added to the 'Alpha Cola' product line in order to justify selling cans for 50% higher prices to 'off-world' retailers. Despite being chemically identical, Space Cola proved so popular that Centauri Provisions eventually applied the name to the entire product line - price hike and all."
icon_state = "space_mountain_wind"
center_of_mass = list("x"=16, "y"=8)
@@ -53,7 +64,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb
name = "\improper Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
desc = "A delicious mixture of 42 different flavors. Contains caffine."
description_fluff = "Following a 2490 lawsuit and a spate of deaths, Gilthari Exports reminds customers that the 'Dr.' legally stands for 'Drink'."
icon_state = "dr_gibb"
center_of_mass = list("x"=16, "y"=8)
@@ -64,7 +75,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet
name = "\improper Diet Dr. Gibb"
desc = "A delicious mixture of 42 different flavors, one of which is water."
desc = "A delicious mixture of 42 different flavors, one of which is water. Contains caffeine."
description_fluff = "Following a 2490 lawsuit and a spate of deaths, Gilthari Exports reminds customers that the 'Dr.' legally stands for 'Drink'."
icon_state = "dr_gibb_diet"
center_of_mass = list("x"=16, "y"=8)
@@ -75,7 +86,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist
name = "\improper Star-kist"
desc = "The taste of a star in liquid form. And, a bit of tuna...?"
desc = "The taste of a star in liquid form. And, a bit of tuna...? Contains caffeine."
description_fluff = "Brought back by popular demand in 2515 after a limited-run release in 2510, the cult success of this bizarre tasting soda has never truly been accounted for by economists."
icon_state = "starkist"
center_of_mass = list("x"=16, "y"=8)
@@ -84,6 +95,17 @@
. = ..()
reagents.add_reagent("brownstar", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/starkistdecaf
name = "\improper Star-kist Classic"
desc = "The taste of a star in liquid form, in a special decaffineated blend. Still tastes faintly of tuna?"
description_fluff = "A special variant of the Starkist brand soda introduced after popular outcry following a reformulation of the basic drink decades ago. This decaffineated variant outsells 'New' Starkist in many markets."
icon_state = "decafstarkist"
center_of_mass = list("x"=16, "y"=8)
/obj/item/weapon/reagent_containers/food/drinks/cans/starkistdecaf/Initialize()
. = ..()
reagents.add_reagent("brownstar_decaf", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
@@ -108,7 +130,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea
name = "\improper Vrisk Serket Iced Tea"
desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?"
desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth? Contains caffeine."
description_fluff = "Produced exclusively on the planet Oasis, Vrisk Serket Iced Tea is not sold outside of the Golden Crescent, let alone Earth."
icon_state = "ice_tea_can"
center_of_mass = list("x"=16, "y"=8)
+18
View File
@@ -38,6 +38,9 @@
qdel(src)
return
/obj/item/weapon/reagent_containers/food/drinks/on_rag_wipe(var/obj/item/weapon/reagent_containers/glass/rag/R)
clean_blood()
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
if(!is_open_container())
open(user)
@@ -218,6 +221,21 @@
. = ..()
reagents.add_reagent("tea", 30)
/obj/item/weapon/reagent_containers/food/drinks/decaf_tea
name = "cup of Count Mauve decaffeinated tea"
desc = "Why should bedtime stop you from enjoying a nice cuppa?"
description_fluff = "Count Mauve is a milder strain of NanoPasture's proprietary black tea, noted for its strong but otherwise completely non-distinctive flavour and total lack of caffeination."
icon_state = "chai_vended"
item_state = "coffee"
trash = /obj/item/trash/coffee
center_of_mass = list("x"=16, "y"=14)
drop_sound = 'sound/items/drop/papercup.ogg'
pickup_sound = 'sound/items/pickup/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/decaf_tea/Initialize()
. = ..()
reagents.add_reagent("teadecaf", 30)
/obj/item/weapon/reagent_containers/food/drinks/ice
name = "cup of ice"
desc = "Careful, cold ice, do not chew."
+17 -7
View File
@@ -466,9 +466,9 @@
//////////////////////////JUICES AND STUFF///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola //MODIFIED ON 04/21/2021
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
name = "\improper two-liter Space Cola"
desc = "Cola. In space."
desc = "Cola. In space. Contains caffeine."
icon_state = "colabottle"
center_of_mass = list("x"=16, "y"=6)
@@ -476,7 +476,17 @@
. = ..()
reagents.add_reagent("cola", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up //MODIFIED ON 04/21/2021
/obj/item/weapon/reagent_containers/food/drinks/bottle/decaf_cola
name = "\improper two-liter Space Cola Free"
desc = "Cola. In space. Caffeine free."
icon_state = "decafcolabottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/decaf_cola/Initialize()
. = ..()
reagents.add_reagent("decafcola", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
name = "\improper two-liter Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up_bottle"
@@ -486,9 +496,9 @@
. = ..()
reagents.add_reagent("space_up", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind //MODIFIED ON 04/21/2021
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
name = "\improper two-liter Space Mountain Wind"
desc = "Blows right through you like a space wind."
desc = "Blows right through you like a space wind. Contains caffeine."
icon_state = "space_mountain_wind_bottle"
center_of_mass = list("x"=16, "y"=6)
@@ -496,9 +506,9 @@
. = ..()
reagents.add_reagent("spacemountainwind", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb //ADDED ON 04/21/2021
/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb
name = "\improper two-liter Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
desc = "A delicious mixture of 42 different flavors. Contains caffeine."
icon_state = "dr_gibb_bottle"
center_of_mass = list("x"=16, "y"=6)
+106 -74
View File
@@ -34,6 +34,11 @@
/// Packaged meals switch to this state when opened, if set
var/package_open_state
/// If this is canned. If true, it will print a message and ask you to open it
var/canned = FALSE
/// Canned food switch to this state when opened, if set
var/canned_open_state
/obj/item/weapon/reagent_containers/food/snacks/Initialize()
. = ..()
if(nutriment_amt)
@@ -63,6 +68,9 @@
if(package && !user.incapacitated())
unpackage(user)
if(canned && !user.incapacitated())
uncan(user)
/obj/item/weapon/reagent_containers/food/snacks/attack(mob/living/M as mob, mob/user as mob, def_zone)
if(reagents && !reagents.total_volume)
to_chat(user, "<span class='danger'>None of [src] left!</span>")
@@ -74,6 +82,10 @@
to_chat(M, "<span class='warning'>How do you expect to eat this with the package still on?</span>")
return FALSE
if(canned)
to_chat(M, "<span class='warning'>How do you expect to eat this without opening it?</span>")
return FALSE
if(istype(M, /mob/living/carbon))
//TODO: replace with standard_feed_mob() call.
@@ -251,6 +263,13 @@
if(package_open_state)
icon_state = package_open_state
/obj/item/weapon/reagent_containers/food/snacks/proc/uncan(mob/user)
canned = FALSE
to_chat(user, "<span class='notice'>You unseal \the [src] with a crack of metal.</span>")
playsound(loc,'sound/effects/tincanopen.ogg', rand(10,50), 1)
if(canned_open_state)
icon_state = canned_open_state
////////////////////////////////////////////////////////////////////////////////
/// FOOD END
////////////////////////////////////////////////////////////////////////////////
@@ -4218,10 +4237,12 @@
desc = "Musical fruit in a slightly less musical container."
filling_color = "#FC6F28"
icon_state = "bakedbeans"
nutriment_amt = 4
nutriment_desc = list("beans" = 4)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/berry/Initialize()
. = ..()
reagents.add_reagent("bean_protein", 6)
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
name = "sugar cookie"
desc = "Just like your little sister used to make."
@@ -6128,6 +6149,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cb06/Initialize()
. = ..()
reagents.add_reagent("sugar", 1)
reagents.add_reagent("coffee", 1)
/obj/item/weapon/reagent_containers/food/snacks/cb07
name = "\improper TaroMilk Bar"
@@ -6177,6 +6199,7 @@
. = ..()
reagents.add_reagent("sugar", 1)
reagents.add_reagent("milk", 1)
reagents.add_reagent("peanutoil", 1)
/obj/item/weapon/reagent_containers/food/snacks/cb10
name = "\improper Shantak Bar"
@@ -6194,6 +6217,7 @@
. = ..()
reagents.add_reagent("sugar", 1)
reagents.add_reagent("protein", 1)
reagents.add_reagent("peanutoil", 1)
////////////////////Misc Vend Items////////////////////////////////////////////////////////////////
@@ -6337,7 +6361,7 @@
desc = "Space squid tentacles, Carefully removed (from the squid) then dried into strips of delicious rubbery goodness!"
trash = /obj/item/trash/squid
filling_color = "#c0a9d7"
center_of_mass = list("x"=15, "y"=9)
center_of_mass = list ("x"=15, "y"=9)
nutriment_desc = list("fish" = 1, "salt" = 1)
nutriment_amt = 2
bitesize = 1
@@ -6353,7 +6377,7 @@
desc = "Fried bread cubes. Popular in Terran territories."
trash = /obj/item/trash/croutons
filling_color = "#c6b17f"
center_of_mass = list("x"=15, "y"=9)
center_of_mass = list ("x"=15, "y"=9)
nutriment_desc = list("bread" = 1, "salt" = 1)
nutriment_amt = 3
bitesize = 1
@@ -6365,7 +6389,7 @@
desc = "Pig fat. Salted. Just as good as it sounds."
trash = /obj/item/trash/salo
filling_color = "#e0bcbc"
center_of_mass = list("x"=15, "y"=9)
center_of_mass = list ("x"=15, "y"=9)
nutriment_desc = list("fat" = 1, "salt" = 1)
nutriment_amt = 2
bitesize = 2
@@ -6381,7 +6405,7 @@
desc = "Dried salted beer snack fish."
trash = /obj/item/trash/driedfish
filling_color = "#c8a5bb"
center_of_mass = list("x"=15, "y"=9)
center_of_mass = list ("x"=15, "y"=9)
nutriment_desc = list("fish" = 1, "salt" = 1)
nutriment_amt = 2
bitesize = 1
@@ -6688,7 +6712,7 @@
/obj/item/weapon/reagent_containers/food/snacks/old
name = "master old-food"
desc = "they're all inedible and potentially dangerous items"
center_of_mass = list("x"=15,"y"=12)
center_of_mass = list ("x"=15, "y"=9)
nutriment_desc = list("rot" = 5, "mold" = 5)
nutriment_amt = 10
bitesize = 3
@@ -6736,34 +6760,8 @@
//////////////////////Canned Foods - crack open and eat (ADDED 04/11/2021)//////////////////////
/obj/item/weapon/reagent_containers/food/snacks/canned
name = "void can"
icon = 'icons/obj/food_canned.dmi'
flags = 0
var/sealed = TRUE
/obj/item/weapon/reagent_containers/food/snacks/canned/Initialize()
. = ..()
if(!sealed)
unseal()
/obj/item/weapon/reagent_containers/food/snacks/canned/examine(mob/user)
. = ..()
to_chat(user, "It is [sealed ? "" : "un"]sealed.")
/obj/item/weapon/reagent_containers/food/snacks/canned/proc/unseal()
flags |= OPENCONTAINER
sealed = FALSE
update_icon()
/obj/item/weapon/reagent_containers/food/snacks/canned/attack_self(var/mob/user)
if(sealed)
playsound(loc,'sound/effects/tincanopen.ogg', rand(10,50), 1)
to_chat(user, "<span class='notice'>You unseal \the [src] with a crack of metal.</span>")
unseal()
/obj/item/weapon/reagent_containers/food/snacks/canned/update_icon()
if(!sealed)
icon_state = "[initial(icon_state)]-open"
canned = TRUE
//////////Just a short line of Canned Consumables, great for treasure in faraway abandoned outposts//////////
@@ -6772,6 +6770,7 @@
icon_state = "beef"
desc = "A can of premium preserved vat-grown holstein beef. Now 99.9% bone free!"
trash = /obj/item/trash/beef
canned_open_state = "beef-open"
filling_color = "#663300"
center_of_mass = list("x"=15, "y"=9)
nutriment_desc = list("beef" = 1)
@@ -6780,54 +6779,54 @@
/obj/item/weapon/reagent_containers/food/snacks/canned/beef/Initialize()
.=..()
reagents.add_reagent("protein", 4)
reagents.add_reagent("sodiumchloride", 1)
reagents.add_reagent("sodiumchloride", 2)
/obj/item/weapon/reagent_containers/food/snacks/canned/beans
name = "baked beans"
icon_state = "beans"
desc = "Luna Colony beans. Carefully synthethized from soy."
trash = /obj/item/trash/beans
canned_open_state = "beans-open"
filling_color = "#ff6633"
center_of_mass = list("x"=15, "y"=9)
nutriment_desc = list("beans" = 1, "tomato sauce" = 1)
nutriment_amt = 15
bitesize = 2
///obj/item/weapon/reagent_containers/food/snacks/canned/tomato (NEED TO SEE HOW TO CHANGE EATING SOUND)
// name = "tomato soup"
// icon_state = "tomato"
// desc = "Plain old unseasoned tomato soup. This can has no use-by date."
// trash = "/obj/item/trash/tomato"
// filling_color = "#ae0000"
// center_of_mass = list("x"=15, "y"=9)
// nutriment_desc = list("tomato" = 1)
// bitesize = 3
// eat_sound = 'sound/items/drink.ogg'
//
///obj/item/weapon/reagent_containers/food/snacks/canned/tomato/Initialize()
// .=..()
// reagents.add_reagent(/datum/reagent/drink/juice/tomato, 12)
//
//
///obj/item/weapon/reagent_containers/food/snacks/canned/tomato/feed_sound(var/mob/user)
// playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
/obj/item/weapon/reagent_containers/food/snacks/canned/beans/Initialize()
.=..()
reagents.add_reagent("bean_protein", 5)
reagents.add_reagent("tomatojuice", 5)
/obj/item/weapon/reagent_containers/food/snacks/canned/tomato
name = "tomato soup"
icon_state = "tomato"
desc = "Plain old unseasoned tomato soup. This can has no use-by date."
trash = /obj/item/trash/tomato
package_open_state = "tomato-open"
filling_color = "#ae0000"
center_of_mass = list("x"=15, "y"=9)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/canned/tomato/Initialize()
.=..()
reagents.add_reagent("tomatojuice", 12)
/obj/item/weapon/reagent_containers/food/snacks/canned/spinach
name = "spinach"
icon_state = "spinach"
desc = "Wup-Az! Brand canned spinach. Notably has less iron in it than a watermelon."
trash = /obj/item/trash/spinach
canned_open_state = "spinach-open"
filling_color = "#003300"
center_of_mass = list("x"=15, "y"=9)
nutriment_amt = 5
nutriment_desc = list("soggy" = 1, "vegetable" = 1)
bitesize = 5
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/canned/spinach/Initialize()
.=..()
reagents.add_reagent("adrenaline", 5)
reagents.add_reagent("hyperzine", 5)
reagents.add_reagent("iron", 5)
reagents.add_reagent("adrenaline", 4)
reagents.add_reagent("hyperzine", 4)
reagents.add_reagent("iron", 4)
//////////////////////////////Advanced Canned Food//////////////////////////////
@@ -6836,30 +6835,30 @@
icon_state = "fisheggs"
desc = "Terran caviar, or space carp eggs. Carefully faked using alginate, artificial flavoring and salt. Skrell approved!"
trash = /obj/item/trash/fishegg
canned_open_state = "fisheggs-open"
filling_color = "#000000"
center_of_mass = list("x"=15, "y"=9)
nutriment_desc = list("fish" = 1, "salt" = 1)
nutriment_amt = 6
nutriment_desc = list("salt" = 1)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/caviar/Initialize()
/obj/item/weapon/reagent_containers/food/snacks/canned/caviar/Initialize()
. = ..()
reagents.add_reagent("protein", 5)
reagents.add_reagent("seafood", 5)
/obj/item/weapon/reagent_containers/food/snacks/canned/caviar/true
name = "\improper Classic Terran Caviar"
icon_state = "carpeggs"
desc = "Terran caviar, or space carp eggs. Banned by the Vir Food Health Administration for exceeding the legally set amount of carpotoxins in food stuffs."
trash = /obj/item/trash/carpegg
canned_open_state = "carpeggs-open"
filling_color = "#330066"
center_of_mass = list("x"=15, "y"=9)
nutriment_desc = list("fish" = 1, "salt" = 1, "a numbing sensation" = 1)
nutriment_amt = 6
nutriment_desc = list("salt" = 1, "a numbing sensation" = 1)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/caviar/true/Initialize()
/obj/item/weapon/reagent_containers/food/snacks/canned/caviar/true/Initialize()
. = ..()
reagents.add_reagent("protein", 4)
reagents.add_reagent("seafood", 4)
reagents.add_reagent("carpotoxin", 1)
/obj/item/weapon/reagent_containers/food/snacks/canned/maps
@@ -6867,13 +6866,12 @@
icon_state = "maps"
desc = "A re-branding of a classic Terran snack! Contains mostly edible ingredients."
trash = /obj/item/trash/maps
canned_open_state = "maps-open"
filling_color = "#330066"
center_of_mass = list("x"=15, "y"=9)
nutriment_desc = list("meat" = 1, "salt" = 1)
nutriment_amt = 8
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/maps/Initialize()
/obj/item/weapon/reagent_containers/food/snacks/canned/maps/Initialize()
. = ..()
reagents.add_reagent("protein", 6)
reagents.add_reagent("sodiumchloride", 2)
@@ -6883,10 +6881,10 @@
icon_state = "appleberry"
desc = "A classic snack favored by Sol astronauts. Made from dried apple-hybidized berries grown on the lunar colonies."
trash = /obj/item/trash/appleberry
canned_open_state = "appleberry-open"
filling_color = "#FFFFFF"
center_of_mass = list("x"=15, "y"=9)
nutriment_desc = list("apple" = 1, "sweetness" = 1)
nutriment_amt = 8
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/appleberry/Initialize()
@@ -6898,16 +6896,50 @@
icon_state = "ntbeans"
desc = "Musical fruit in a slightly less musical container. Now with bacon!"
trash = /obj/item/trash/ntbeans
canned_open_state = "ntbeans-open"
filling_color = "#FC6F28"
center_of_mass = list("x"=15, "y"=9)
nutriment_desc = list("beans" = 4)
nutriment_amt = 6
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/canned/ntbeans/Initialize()
. = ..()
reagents.add_reagent("bean_protein", 6)
reagents.add_reagent("protein", 2)
/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax
name = "\improper BrainzSnax"
icon_state = "brainzsnax"
desc = "A can of grey matter marketed for xenochimeras."
description_fluff = "As the cartoon brain with limbs proudly proclaims, \"It's meat. Eat it!\" On the can is printed \"Rich in limbic system\" and \
under that in infinitely small letters, \"Warning, product must be eaten within two hours of opening. May contain prion disease. \
GrubCo LTD is not liable for any brain damage occuring after consumption of product.\""
trash = /obj/item/trash/brainzsnax
canned_open_state = "brainzsnax-open"
filling_color = "#caa3c9"
center_of_mass = list("x"=15, "y"=9)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/Initialize()
. = ..()
reagents.add_reagent("brain_protein", 10)
/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red
name = "\improper BrainzSnax RED"
icon_state = "brainzsnaxred"
desc = "A can of grey matter marketed for xenochimeras. This one has added tomato sauce."
description_fluff = "As the cartoonish brain with limbs proudly proclaims, \"It's meat. Eat it!\" On the can is printed \"Yummy red stuff!\" and \
under that in infinitely small letters, \"Warning, product must be eaten within two hours of opening. May contain prion disease. \
GrubCo LTD is not liable for any brain damage occuring after consumption of product.\""
trash = /obj/item/trash/brainzsnaxred
canned_open_state = "brainzsnaxred-open"
filling_color = "#a6898d"
center_of_mass = list("x"=15, "y"=9)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red/Initialize()
. = ..()
reagents.add_reagent("red_brain_protein", 10)
//////////////Packaged Food - break open and eat//////////////
/obj/item/weapon/reagent_containers/food/snacks/packaged
@@ -6999,7 +7031,7 @@
/obj/item/weapon/reagent_containers/food/snacks/packaged/meatration/Initialize()
. = ..()
reagents.add_reagent("protein", 3)
reagents.add_reagent("protein", 4)
/obj/item/weapon/reagent_containers/food/snacks/packaged/vegration
name = "veggie ration"
+1 -1
View File
@@ -510,7 +510,7 @@
src.visible_message("<span class='warning'>The microwave gets covered in muck!</span>")
src.dirty = 100 // Make it dirty so it can't be used util cleaned
src.flags = null //So you can't add condiments
src.icon_state = "mwbloody" // Make it look dirty too
src.icon_state = "mwbloody0" // Make it look dirty too
src.operating = 0 // Turn it off again aferwards
SStgui.update_uis(src)
soundloop.stop()
+2 -3
View File
@@ -358,7 +358,7 @@
//BASKETBALL OBJECTS
/obj/item/weapon/beach_ball/holoball
icon = 'icons/obj/basketball.dmi'
icon = 'icons/obj/balls_vr.dmi'
icon_state = "basketball"
name = "basketball"
desc = "Here's your chance, do your dance at the Space Jam."
@@ -370,7 +370,7 @@
/obj/structure/holohoop
name = "basketball hoop"
desc = "Boom, Shakalaka!"
icon = 'icons/obj/basketball.dmi'
icon = 'icons/obj/32x64.dmi'
icon_state = "hoop"
anchored = TRUE
density = TRUE
@@ -406,7 +406,6 @@
return FALSE
return ..()
/obj/machinery/readybutton
name = "Ready Declaration Device"
desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!"
+41 -10
View File
@@ -11,11 +11,13 @@
icon_state = "mining_drill"
circuit = /obj/item/weapon/circuitboard/miningdrill
var/braces_needed = 2
var/list/supports = list()
var/list/obj/machinery/mining/brace/supports = list()
var/supported = 0
var/active = 0
var/list/resource_field = list()
var/obj/item/device/radio/intercom/faultreporter
var/drill_range = 5
var/offset = 2
var/list/ore_types = list(
"hematite" = /obj/item/weapon/ore/iron,
@@ -242,10 +244,14 @@
harvest_speed = 0
capacity = 0
charge_use = 50
drill_range = 5
offset = 2
for(var/obj/item/weapon/stock_parts/P in component_parts)
if(istype(P, /obj/item/weapon/stock_parts/micro_laser))
harvest_speed = P.rating
if(P.rating >= 5)
harvest_speed *= 2
exotic_drilling = P.rating - 1
if(exotic_drilling >= 1)
ore_types |= ore_types_uncommon
@@ -254,6 +260,14 @@
else
ore_types -= ore_types_uncommon
ore_types -= ore_types_rare
if(P.rating > 3) // are we t4+?
// default drill range 5, offset 2
if(P.rating >= 5) // t5
drill_range = 9
offset = 4
else if(P.rating >= 4) // t4
drill_range = 7
offset = 3
if(istype(P, /obj/item/weapon/stock_parts/matter_bin))
capacity = 200 * P.rating
if(istype(P, /obj/item/weapon/stock_parts/capacitor))
@@ -271,8 +285,12 @@
else
anchored = TRUE
if(supports && supports.len >= braces_needed)
supported = 1
if(supports)
if(supports.len >= braces_needed)
supported = 1
else for(var/obj/machinery/mining/brace/check in supports)
if(check.brace_tier > 3)
supported = 1
update_icon()
@@ -293,11 +311,11 @@
var/turf/T = get_turf(src)
if(!istype(T)) return
var/tx = T.x - 2
var/ty = T.y - 2
var/tx = T.x - offset
var/ty = T.y - offset
var/turf/simulated/mine_turf
for(var/iy = 0,iy < 5, iy++)
for(var/ix = 0, ix < 5, ix++)
for(var/iy = 0,iy < drill_range, iy++)
for(var/ix = 0, ix < drill_range, ix++)
mine_turf = locate(tx + ix, ty + iy, T.z)
if(!istype(mine_turf, /turf/space/))
if(mine_turf && mine_turf.has_resources)
@@ -334,12 +352,23 @@
desc = "A machinery brace for an industrial drill. It looks easily two feet thick."
icon_state = "mining_brace"
circuit = /obj/item/weapon/circuitboard/miningdrillbrace
var/brace_tier = 1
var/obj/machinery/mining/drill/connected
/obj/machinery/mining/brace/New()
..()
/obj/machinery/mining/brace/examine(mob/user)
. = ..()
if(brace_tier > 3)
. += SPAN_NOTICE("The internals of the brace look resilient enough to support a drill by itself.")
component_parts = list()
/obj/machinery/mining/brace/Initialize()
. = ..()
default_apply_parts()
/obj/machinery/mining/brace/RefreshParts()
..()
brace_tier = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
brace_tier += M.rating
/obj/machinery/mining/brace/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(connected && connected.active)
@@ -350,6 +379,8 @@
return
if(default_deconstruction_crowbar(user, W))
return
if(default_part_replacement(user,W))
return
if(W.is_wrench())
+1 -1
View File
@@ -246,7 +246,7 @@
slot_r_hand_str = 'icons/mob/items/righthand_melee_vr.dmi',
)
item_state = "c-machete"
w_class = ITEMSIZE_SMALL
w_class = ITEMSIZE_NORMAL
attack_verb = list("cleaved", "chopped", "pulped", "stabbed", "skewered")
can_cleave = TRUE
requires_wield = FALSE
+27 -28
View File
@@ -58,34 +58,33 @@
for(var/ore in stored_ore)
. += "- [stored_ore[ore]] [ore]"
/obj/structure/ore_box/verb/empty_box()
set name = "Empty Ore Box"
set category = "Object"
set src in view(1)
if(!ishuman(usr) && !isrobot(usr)) //Only living, intelligent creatures with gripping aparatti can empty ore boxes.
to_chat(usr, "<span class='warning'>You are physically incapable of emptying the ore box.</span>")
return
if(usr.stat || usr.restrained())
return
if(!Adjacent(usr)) //You can only empty the box if you can physically reach it
to_chat(usr, "You cannot reach the ore box.")
return
add_fingerprint(usr)
if(contents.len < 1)
to_chat(usr, "<span class='warning'>The ore box is empty.</span>")
return
for (var/obj/item/weapon/ore/O in contents)
contents -= O
O.loc = src.loc
to_chat(usr, "<span class='notice'>You empty the ore box.</span>")
return
// /obj/structure/ore_box/verb/empty_box()
// set name = "Empty Ore Box"
// set category = "Object"
// set src in view(1)
//
// if(!ishuman(usr) && !isrobot(usr)) //Only living, intelligent creatures with gripping aparatti can empty ore boxes.
// to_chat(usr, "<span class='warning'>You are physically incapable of emptying the ore box.</span>")
// return
// if(usr.stat || usr.restrained())
// return
//
// if(!Adjacent(usr)) //You can only empty the box if you can physically reach it
// to_chat(usr, "You cannot reach the ore box.")
// return
//
// add_fingerprint(usr)
//
// if(contents.len < 1)
// to_chat(usr, "<span class='warning'>The ore box is empty.</span>")
// return
//
// for (var/obj/item/weapon/ore/O in contents)
// contents -= O
// O.loc = src.loc
// to_chat(usr, "<span class='notice'>You empty the ore box.</span>")
//
// return
/obj/structure/ore_box/ex_act(severity)
if(severity == 1.0 || (severity < 3.0 && prob(50)))
@@ -120,7 +120,7 @@
EQUIPMENT("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 900),
EQUIPMENT("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
EQUIPMENT("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
EQUIPMENT("KA Efficiency Increase", /obj/item/borg/upgrade/modkit/efficiency, 1200),
EQUIPMENT("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1200),
EQUIPMENT("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000),
EQUIPMENT("KA Holster", /obj/item/clothing/accessory/holster/waist/kinetic_accelerator, 350),
EQUIPMENT("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
+2 -2
View File
@@ -7,7 +7,7 @@
colour = "soghun"
key = "q"
machine_understands = 0
flags = RESTRICTED
flags = WHITELISTED // RESTRICTED would make this completely unavailable from character select
syllables = list("hs","zt","kr","st","sh")
/datum/language/diona_local/get_random_name()
@@ -20,7 +20,7 @@
desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses low frequency waves for slow communication at long ranges."
key = "w"
machine_understands = 0
flags = RESTRICTED | HIVEMIND
flags = WHITELISTED | HIVEMIND // RESTRICTED would make this completely unavailable from character select
/datum/language/unathi
name = LANGUAGE_UNATHI
+1 -1
View File
@@ -451,7 +451,7 @@
return treatment_emag
// If they're injured, we're using a beaker, and they don't have on of the chems in the beaker
if(reagent_glass && use_beaker && ((H.getBruteLoss() >= heal_threshold) || (H.getToxLoss() >= heal_threshold) || (H.getToxLoss() >= heal_threshold) || (H.getOxyLoss() >= (heal_threshold + 15))))
if(reagent_glass && use_beaker && ((H.getBruteLoss() >= heal_threshold) || (H.getToxLoss() >= heal_threshold) || (H.getFireLoss() >= heal_threshold) || (H.getOxyLoss() >= (heal_threshold + 15))))
for(var/datum/reagent/R in reagent_glass.reagents.reagent_list)
if(!H.reagents.has_reagent(R))
return 1
@@ -173,7 +173,8 @@ This saves us from having to call add_fingerprint() any time something is put in
if(I.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR))
update_hair(0) //rebuild hair
update_inv_ears(0)
if(internal)
// If this is how the internals are connected, disable them
if(internal && !(head?.item_flags & AIRTIGHT))
if(internals)
internals.icon_state = "internal0"
internal = null
@@ -108,6 +108,7 @@
sleep(5) //The duration of the TP animation
canmove = original_canmove
alpha = initial(alpha)
remove_modifiers_of_type(/datum/modifier/shadekin_phase_vision)
//Potential phase-in vore
if(can_be_drop_pred) //Toggleable in vore panel
@@ -143,6 +144,7 @@
var/obj/effect/temp_visual/shadekin/phase_out/phaseanim = new /obj/effect/temp_visual/shadekin/phase_out(src.loc)
phaseanim.dir = dir
alpha = 0
add_modifier(/datum/modifier/shadekin_phase_vision)
sleep(5)
invisibility = INVISIBILITY_LEVEL_TWO
see_invisible = INVISIBILITY_LEVEL_TWO
@@ -155,6 +157,10 @@
density = FALSE
force_max_speed = TRUE
/datum/modifier/shadekin_phase_vision
name = "Shadekin Phase Vision"
vision_flags = SEE_THRU
//////////////////////////
/// REGENERATE OTHER ///
//////////////////////////
@@ -45,7 +45,7 @@ var/datum/species/shapeshifter/promethean/prometheans
female_cough_sounds = list('sound/effects/slime_squish.ogg')
min_age = 1
max_age = 10
max_age = 16
economic_modifier = 3
@@ -235,7 +235,7 @@
base_color = "#333333"
reagent_tag = IS_TAJARA
allergens = ALLERGEN_COFFEE
allergens = ALLERGEN_STIMULANT
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
@@ -484,7 +484,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
var/image/em_block_ears
if(ears_s)
if(ears_s.Height() > face_standing.Height()) // Tol ears
face_standing.Crop(face_standing.Width(), ears_s.Height())
face_standing.Crop(1, 1, face_standing.Width(), ears_s.Height())
face_standing.Blend(ears_s, ICON_OVERLAY)
if(ear_style?.em_block)
em_block_ears = em_block_image_generic(image(ears_s))
+15 -12
View File
@@ -1030,6 +1030,13 @@
if((N.health + N.halloss) < config.health_threshold_crit || N.stat == DEAD)
N.adjustBruteLoss(rand(10,30))
src.drop_from_inventory(G)
src.visible_message("<span class='warning'>[src] has thrown [item].</span>")
if((isspace(src.loc)) || (src.lastarea?.has_gravity == 0))
src.inertia_dir = get_dir(target, src)
step(src, inertia_dir)
item.throw_at(target, throw_range, item.throw_speed, src)
return TRUE
else
return FALSE
@@ -1037,19 +1044,15 @@
if(!item)
return FALSE //Grab processing has a chance of returning null
if(a_intent == I_HELP && Adjacent(target) && isitem(item))
if(a_intent == I_HELP && Adjacent(target) && isitem(item) && ishuman(target))
var/obj/item/I = item
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.in_throw_mode && H.a_intent == I_HELP && unEquip(I))
H.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea.
visible_message("<b>[src]</b> hands \the [H] \a [I].", SPAN_NOTICE("You give \the [target] \a [I]."))
else
to_chat(src, SPAN_NOTICE("You offer \the [I] to \the [target]."))
do_give(H)
return TRUE
make_item_drop_sound(I)
I.forceMove(get_turf(target))
var/mob/living/carbon/human/H = target
if(H.in_throw_mode && H.a_intent == I_HELP && unEquip(I))
H.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea.
visible_message("<b>[src]</b> hands \the [H] \a [I].", SPAN_NOTICE("You give \the [target] \a [I]."))
else
to_chat(src, SPAN_NOTICE("You offer \the [I] to \the [target]."))
do_give(H)
return TRUE
drop_from_inventory(item)
+4 -4
View File
@@ -12,13 +12,13 @@
var/sayselect = tgui_alert(src, "Which say-verb do you wish to customize?", "Select Verb", list("Say","Whisper","Ask (?)","Exclaim/Shout/Yell (!)","Cancel"))
if(sayselect == "Say")
custom_say = sanitize(input(usr, "This word or phrase will appear instead of 'says': [src] says, \"Hi.\"", "Custom Say", null) as text)
custom_say = lowertext(sanitize(input(usr, "This word or phrase will appear instead of 'says': [src] says, \"Hi.\"", "Custom Say", null) as text))
else if(sayselect == "Whisper")
custom_whisper = sanitize(input(usr, "This word or phrase will appear instead of 'whispers': [src] whispers, \"Hi...\"", "Custom Whisper", null) as text)
custom_whisper = lowertext(sanitize(input(usr, "This word or phrase will appear instead of 'whispers': [src] whispers, \"Hi...\"", "Custom Whisper", null) as text))
else if(sayselect == "Ask (?)")
custom_ask = sanitize(input(usr, "This word or phrase will appear instead of 'asks': [src] asks, \"Hi?\"", "Custom Ask", null) as text)
custom_ask = lowertext(sanitize(input(usr, "This word or phrase will appear instead of 'asks': [src] asks, \"Hi?\"", "Custom Ask", null) as text))
else if(sayselect == "Exclaim/Shout/Yell (!)")
custom_exclaim = sanitize(input(usr, "This word or phrase will appear instead of 'exclaims', 'shouts' or 'yells': [src] exclaims, \"Hi!\"", "Custom Exclaim", null) as text)
custom_exclaim = lowertext(sanitize(input(usr, "This word or phrase will appear instead of 'exclaims', 'shouts' or 'yells': [src] exclaims, \"Hi!\"", "Custom Exclaim", null) as text))
else
return
@@ -612,7 +612,6 @@
for(var/tech in tech_item.origin_tech)
files.UpdateTech(tech, tech_item.origin_tech[tech])
synced = FALSE
drain(-50 * digested)
if(volume)
water.add_charge(volume)
if(recycles && T.matter)
@@ -630,8 +629,7 @@
plastic.add_charge(total_material)
if(material == "wood")
wood.add_charge(total_material)
else
drain(-50 * digested)
drain(-50 * digested)
else if(istype(target,/obj/effect/decal/remains))
qdel(target)
drain(-100)
@@ -726,4 +724,4 @@
icon_state = "sleeperert"
injection_chems = list("inaprovaline", "paracetamol") // short list
#undef SLEEPER_INJECT_COST
#undef SLEEPER_INJECT_COST
@@ -271,8 +271,10 @@
modules.Add(robot_module_types)
if(crisis || security_level == SEC_LEVEL_RED || crisis_override)
to_chat(src, "<font color='red'>Crisis mode active. Combat module available.</font>")
modules+="Combat"
modules+="ERT"
modules += emergency_module_types
for(var/module_name in whitelisted_module_types)
if(is_borg_whitelisted(src, module_name))
modules += module_name
//VOREStatation Edit End: shell restrictions
modtype = tgui_input_list(usr, "Please, select a module!", "Robot module", modules)
@@ -280,6 +282,8 @@
return
if(!(modtype in robot_modules))
return
if(!is_borg_whitelisted(src, modtype))
return
var/module_type = robot_modules[modtype]
transform_with_anim() //VOREStation edit: sprite animation
@@ -9,7 +9,12 @@ var/global/list/robot_modules = list(
"Security" = /obj/item/weapon/robot_module/robot/security/general,
"Combat" = /obj/item/weapon/robot_module/robot/security/combat,
"Engineering" = /obj/item/weapon/robot_module/robot/engineering/general,
"Janitor" = /obj/item/weapon/robot_module/robot/janitor
"Janitor" = /obj/item/weapon/robot_module/robot/janitor,
"Gravekeeper" = /obj/item/weapon/robot_module/robot/gravekeeper,
"Lost" = /obj/item/weapon/robot_module/robot/lost,
"Protector" = /obj/item/weapon/robot_module/robot/syndicate/protector,
"Mechanist" = /obj/item/weapon/robot_module/robot/syndicate/mechanist,
"Combat Medic" = /obj/item/weapon/robot_module/robot/syndicate/combat_medic
)
/obj/item/weapon/robot_module
@@ -49,6 +49,7 @@
robot_modules["Service-Hound"] = /obj/item/weapon/robot_module/robot/clerical/brodog
robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/booze
robot_modules["KMine"] = /obj/item/weapon/robot_module/robot/kmine
robot_modules["Stray"] = /obj/item/weapon/robot_module/robot/stray
return 1
//Just add a new proc with the robot_module type if you wish to run some other vore code
@@ -124,7 +124,7 @@
vore_icons = 0
/mob/living/simple_mob/animal/space/carp/large/huge
vore_icons = 0
/mob/living/simple_mob/animal/space/carp/holographic
/mob/living/simple_mob/animal/space/carp/holodeck
vore_icons = 0
/* //VOREStation AI Temporary removal
+3 -2
View File
@@ -178,8 +178,9 @@
//VOREStation Edit
if(BP_HEAD)
if(force_down)
if(announce)
assailant.visible_message("<span class='warning'>[assailant] sits on [target]'s face!</span>")
if(user.a_intent == I_HELP)
if(announce)
assailant.visible_message("<span class='warning'>[assailant] sits on [target]'s face!</span>")
//VOREStation Edit End
/obj/item/weapon/grab/attack_self()
+1 -1
View File
@@ -513,7 +513,7 @@
for(var/datum/job/job in job_master.occupations)
if(job && IsJobAvailable(job.title))
// Checks for jobs with minimum age requirements
if(job.minimum_character_age && (client.prefs.age < job.minimum_character_age))
if((job.minimum_character_age || job.min_age_by_species) && (client.prefs.age < job.get_min_age(client.prefs.species, client.prefs.organ_data["brain"])))
continue
// Checks for jobs set to "Never" in preferences //TODO: Figure out a better way to check for this
if(!(client.prefs.GetJobDepartment(job, 1) & job.flag))
@@ -26,8 +26,8 @@
//Hoooo boy.
/datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer)
var/mob/living/L = ridden
var/scale_x = L.icon_scale_x
var/scale_y = L.icon_scale_y
var/scale_x = L.icon_scale_x * L.size_multiplier //VOREStation Edit
var/scale_y = L.icon_scale_y * L.size_multiplier //VOREStation Edit
var/list/values = list(
"[NORTH]" = list(0, 8*scale_y, ABOVE_MOB_LAYER),
+41 -40
View File
@@ -18,13 +18,13 @@
// Returns TRUE if the stairs are a complete and connected unit, FALSE if a piece is missing or obstructed
// Will attempt to reconnect broken pieces
// Parameters:
// Parameters:
// - B1: Loc of bottom stair
// - B2: Loc of middle stair
// - T1: Openspace over bottom stair
// - T2: Loc of top stair, over middle stair
/obj/structure/stairs/proc/check_integrity(var/obj/structure/stairs/bottom/B = null,
var/obj/structure/stairs/middle/M = null,
/obj/structure/stairs/proc/check_integrity(var/obj/structure/stairs/bottom/B = null,
var/obj/structure/stairs/middle/M = null,
var/obj/structure/stairs/top/T = null,
var/turf/simulated/open/O = null)
@@ -91,14 +91,14 @@
var/obj/structure/stairs/middle/M = null,
var/obj/structure/stairs/top/T = null,
var/turf/simulated/open/O = null)
// In the case where we're provided all the pieces, just try connecting them.
// In order: all exist, they are appropriately adjacent, and they can connect
if(istype(B) && istype(M) && istype(T) && istype(O) && \
B.Adjacent(M) && (GetBelow(O) == get_turf(B)) && T.Adjacent(O) && \
..())
return TRUE
// If we're already configured, just check those
else if(istype(top) && istype(middle))
O = locate(/turf/simulated/open) in GetAbove(src)
@@ -118,7 +118,7 @@
// If you set the dir, that's the dir it *wants* to connect in. It only chooses the others if that doesn't work
// Everything is simply linked in our original direction
if(istype(M) && istype(T) && ..(src, M, T, O))
if(istype(M) && istype(T) && ..(src, M, T, O))
return TRUE
// Else, we have to look in other directions
@@ -127,12 +127,12 @@
T2 = GetAbove(B2)
if(!istype(B2) || !istype(T2))
continue
T = locate(/obj/structure/stairs/top) in T2
M = locate(/obj/structure/stairs/middle) in B2
if(..(src, M, T, O))
return TRUE
// Out of the dir check, we have no valid neighbors, and thus are not complete.
return FALSE
@@ -143,18 +143,18 @@
use_stairs(AM, oldloc)
..()
/obj/structure/stairs/bottom/use_stairs(var/atom/movable/AM, var/atom/oldloc)
/obj/structure/stairs/bottom/use_stairs(var/atom/movable/AM, var/atom/oldloc)
// If we're coming from the top of the stairs, don't trap us in an infinite staircase
// Or if we fell down the openspace
if((top in oldloc) || oldloc == GetAbove(src))
return
if(isobserver(AM)) // Ghosts have their own methods for going up and down
return
if(AM.pulledby) // Animating the movement of pulled things is handled when the puller goes up the stairs
return
if(AM.has_buckled_mobs()) // Similarly, the rider entering the turf will bring along whatever they're buckled to
return
@@ -173,7 +173,7 @@
pulling |= L.pulling
for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand))
pulling |= G.affecting
// If the stairs aren't broken, go up.
if(check_integrity())
AM.dir = src.dir
@@ -185,7 +185,7 @@
// Move to Top
AM.forceMove(get_turf(top))
// If something is being pulled, bring it along directly to avoid the mob being torn away from it due to movement delays
for(var/atom/movable/P in pulling)
P.forceMove(get_turf(top)) // Just bring it along directly, no fussing with animation timing
@@ -202,16 +202,18 @@
if(isliving(AM))
var/mob/living/L = AM
if(L.grabbed_by.len) // Same as pulledby, whoever's holding you will keep you from going down stairs.
return
if(L.has_buckled_mobs())
return
if(L.buckled)
L.buckled.forceMove(get_turf(top))
L.forceMove(get_turf(top))
// If the object is pulling or grabbing anything, we'll want to move those too. A grab chain may be disrupted in doing so.
if(L.pulling && !L.pulling.anchored)
var/atom/movable/P = L.pulling
@@ -220,8 +222,7 @@
for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand))
G.affecting.forceMove(get_turf(top))
L.forceMove(get_turf(top))
if(L.client)
L.client.Process_Grab()
else
@@ -255,10 +256,10 @@
// These are necessarily fairly similar, but because the positional relations are different, we have to copy-pasta a fair bit
/obj/structure/stairs/middle/check_integrity(var/obj/structure/stairs/bottom/B = null,
var/obj/structure/stairs/middle/M = null,
var/obj/structure/stairs/middle/M = null,
var/obj/structure/stairs/top/T = null,
var/turf/simulated/open/O = null)
// In the case where we're provided all the pieces, just try connecting them.
// In order: all exist, they are appropriately adjacent, and they can connect
if(istype(B) && istype(M) && istype(T) && istype(O) && \
@@ -281,7 +282,7 @@
// Top is static for Middle stair, if it's invalid we can't do much
if(!istype(T))
return FALSE
// If you set the dir, that's the dir it *wants* to connect in. It only chooses the others if that doesn't work
// Everything is simply linked in our original direction
if(istype(B1) && istype(T2) && istype(O) && ..(B, src, T, O))
@@ -293,11 +294,11 @@
O = GetAbove(B1)
if(!istype(B1) || !istype(O))
continue
B = locate(/obj/structure/stairs/bottom) in B1
if(..(B, src, T, O))
return TRUE
// The middle stair has some further special logic, in that it can be climbed, and so is technically valid if only the top exists
// T is enforced by a prior if
T.middle = src
@@ -341,7 +342,7 @@
var/obj/structure/stairs/middle/M = null,
var/obj/structure/stairs/top/T = null,
var/turf/simulated/open/O = null)
// In the case where we're provided all the pieces, just try connecting them.
// In order: all exist, they are appropriately adjacent, and they can connect
if(istype(B) && istype(M) && istype(T) && istype(O) && \
@@ -377,11 +378,11 @@
B1 = GetBelow(O)
if(!istype(B1) || !istype(O))
continue
B = locate(/obj/structure/stairs/bottom) in B1
if((. = ..(B, M, src, O)))
return
// Out of the dir check, we have no valid neighbors, and thus are not complete. `.` was set by ..()
return
@@ -403,13 +404,13 @@
// Or if we climb up the middle
if((bottom in oldloc) || oldloc == GetBelow(src))
return
if(isobserver(AM)) // Ghosts have their own methods for going up and down
return
if(AM.pulledby) // Animating the movement of pulled things is handled when the puller goes up the stairs
return
if(AM.has_buckled_mobs()) // Similarly, the rider entering the turf will bring along whatever they're buckled to
return
@@ -428,7 +429,7 @@
pulling |= L.pulling
for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand))
pulling |= G.affecting
// If the stairs aren't broken, go up.
if(check_integrity())
AM.dir = turn(src.dir, 180)
@@ -438,7 +439,7 @@
// Move to Top
AM.forceMove(get_turf(bottom))
// If something is being pulled, bring it along directly to avoid the mob being torn away from it due to movement delays
for(var/atom/movable/P in pulling)
P.forceMove(get_turf(bottom)) // Just bring it along directly, no fussing with animation timing
@@ -455,16 +456,18 @@
if(isliving(AM))
var/mob/living/L = AM
if(L.grabbed_by.len) // Same as pulledby, whoever's holding you will keep you from going down stairs.
return
if(L.has_buckled_mobs())
return
if(L.buckled)
L.buckled.forceMove(get_turf(bottom))
L.forceMove(get_turf(bottom))
// If the object is pulling or grabbing anything, we'll want to move those too. A grab chain may be disrupted in doing so.
if(L.pulling && !L.pulling.anchored)
var/atom/movable/P = L.pulling
@@ -473,8 +476,6 @@
for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand))
G.affecting.forceMove(get_turf(bottom))
L.forceMove(get_turf(bottom))
if(L.client)
L.client.Process_Grab()
@@ -493,14 +494,14 @@
var/turf/B2 = get_turf(src)
var/turf/T1 = GetAbove(B1)
var/turf/T2 = GetAbove(B2)
if(!istype(B1) || !istype(B2))
warning("Stair created at invalid loc: ([loc.x], [loc.y], [loc.z])")
return INITIALIZE_HINT_QDEL
if(!istype(T1) || !istype(T2))
warning("Stair created without level above: ([loc.x], [loc.y], [loc.z])")
return INITIALIZE_HINT_QDEL
// Spawn the stairs
// Railings sold separately
var/turf/simulated/open/O = T1
@@ -516,7 +517,7 @@
B.check_integrity(B, M, T, O)
return INITIALIZE_HINT_QDEL
// For ease of spawning. While you *can* spawn the base type and set its dir, this is useful for adminbus and a little bit quicker to map in
/obj/structure/stairs/spawner/north
dir = NORTH
+12 -9
View File
@@ -5,15 +5,16 @@
known = FALSE
in_space = TRUE
/obj/effect/overmap/visitable/sector/temporary/Initialize(var/nx, var/ny)
/obj/effect/overmap/visitable/sector/temporary/Initialize()
if(!istype(loc, /turf/unsimulated/map))
CRASH("Attempt to create deepspace which is not on overmap: [log_info_line(loc)]")
// Tell sector initializer where are is where we want to be.
start_x = loc.x
start_y = loc.y
// But pick an empty z level to use
map_z += global.using_map.get_empty_zlevel()
. = ..()
loc = locate(nx, ny, global.using_map.overmap_z)
x = nx
y = ny
var/emptyz = global.using_map.get_empty_zlevel()
map_z += emptyz
map_sectors["[emptyz]"] = src
testing("Temporary sector at [x],[y] was created, corresponding zlevel is [emptyz].")
testing("Temporary sector at [x],[y],[z] was created, corresponding zlevel is [english_list(map_z)].")
/obj/effect/overmap/visitable/sector/temporary/Destroy()
for(var/zlevel in map_z)
@@ -43,7 +44,7 @@
var/obj/effect/overmap/visitable/sector/temporary/res = locate() in overmap_turf
if(istype(res))
return res
return new /obj/effect/overmap/visitable/sector/temporary(x, y)
return new /obj/effect/overmap/visitable/sector/temporary(overmap_turf)
/atom/movable/proc/lost_in_space()
for(var/atom/movable/AM in contents)
@@ -133,6 +134,8 @@
TM = get_deepspace(M.x,M.y)
nz = pick(TM.get_space_zlevels())
testing("spacetravel chose [nz],[ny],[nz] in sector [TM] @ ([TM.x],[TM.y],[TM.z])")
var/turf/dest = locate(nx,ny,nz)
if(istype(dest))
A.forceMove(dest)
+4
View File
@@ -14,6 +14,8 @@
throw_speed = 3
throw_range = 5
w_class = ITEMSIZE_NORMAL
/// Are we EMP immune?
var/emp_proof = FALSE
var/static/cell_uid = 1 // Unique ID of this power cell. Used to reduce bunch of uglier code in nanoUI.
var/c_uid
var/charge = 0 // note %age conveted to actual charge in New
@@ -189,6 +191,8 @@
rigged = 1 //broken batterys are dangerous
/obj/item/weapon/cell/emp_act(severity)
if(emp_proof)
return
//remove this once emp changes on dev are merged in
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
+3
View File
@@ -25,6 +25,9 @@
charge = 0
update_icon()
/obj/item/weapon/cell/device/weapon/empproof
emp_proof = TRUE
/obj/item/weapon/cell/device/weapon/recharge
name = "self-charging weapon power cell"
desc = "A small power cell designed to power handheld weaponry. This one recharges itself."
+9 -7
View File
@@ -21,6 +21,7 @@
var/recharge_time = 4
var/charge_tick = 0
var/charge_delay = 75 //delay between firing and charging
var/shot_counter = TRUE // does this gun tell you how many shots it has?
var/battery_lock = 0 //If set, weapon cannot switch batteries
@@ -175,14 +176,15 @@
/obj/item/weapon/gun/energy/examine(mob/user)
. = ..()
if(power_supply)
if(charge_cost)
var/shots_remaining = round(power_supply.charge / max(1, charge_cost)) // Paranoia
. += "Has [shots_remaining] shot\s remaining."
if(shot_counter)
if(power_supply)
if(charge_cost)
var/shots_remaining = round(power_supply.charge / max(1, charge_cost)) // Paranoia
. += "Has [shots_remaining] shot\s remaining."
else
. += "Has infinite shots remaining."
else
. += "Has infinite shots remaining."
else
. += "Does not have a power cell."
. += "Does not have a power cell."
/obj/item/weapon/gun/energy/update_icon(var/ignore_inhands)
if(power_supply == null)
@@ -1,51 +1,126 @@
#define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50 //what pressure you have to be under to increase the effect of equipment meant for lavaland
#define HEATMODE_ATMOSPHERE 312.1 //kPa. basically virgo 2's
#define HEATMODE_TEMP 612 //kelvin. basically virgo 2's
/**
* This is here for now
*/
/proc/lavaland_environment_check(turf/simulated/T)
. = TRUE
if(!istype(T))
return
var/datum/gas_mixture/environment = T.return_air()
if(!istype(environment))
return
var/pressure = environment.return_pressure()
if(pressure > LAVALAND_EQUIPMENT_EFFECT_PRESSURE)
. = FALSE
if(environment.temperature < (T20C - 30))
. = TRUE
/proc/virgotwo_environment_check(turf/simulated/T)
. = TRUE
if(!istype(T))
return
var/datum/gas_mixture/environment = T.return_air()
if(!istype(environment))
return
var/pressure = environment.return_pressure()
if(pressure < HEATMODE_ATMOSPHERE - 20)
. = FALSE
if(environment.temperature > HEATMODE_TEMP - 30)
. = TRUE
/obj/item/weapon/gun/energy/kinetic_accelerator
name = "proto-kinetic accelerator"
desc = "A self recharging, ranged mining tool that does increased damage in low temperature. Capable of holding up to six slots worth of mod kits."
desc = "A self recharging, ranged mining tool that does increased damage in low pressure."
icon = 'icons/obj/gun_vr.dmi'
icon_state = "kineticgun"
item_state = "kineticgun"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi')
slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi',
)
item_state = "kineticgun"
// ammo_type = list(/obj/item/ammo_casing/energy/kinetic)
cell_type = /obj/item/weapon/cell/device/weapon/empproof
item_flags = NONE
charge_meter = FALSE
// obj_flags = UNIQUE_RENAME
// weapon_weight = WEAPON_LIGHT
// can_flashlight = 1
// flight_x_offset = 15
// flight_y_offset = 9
// automatic_charge_overlays = FALSE
projectile_type = /obj/item/projectile/kinetic
origin_tech = list(TECH_COMBAT = 3, TECH_POWER = 3, TECH_ENGINEERING = 3)
can_flashlight = TRUE
flight_x_offset = 15
flight_y_offset = 9
charge_cost = 120 // 20 shots on weapon power cell
fire_delay = 16
self_recharge = TRUE
recharge_time = 10 // every 20*2 seconds will get 20% power restored
charge_cost = 1200
battery_lock = TRUE
fire_sound = 'sound/weapons/kenetic_accel.ogg'
var/overheat_time = 16
var/holds_charge = FALSE
var/unique_frequency = FALSE // modified by KA modkits
var/overheat = FALSE
var/emptystate = "kineticgun_empty"
shot_counter = FALSE
// can_bayonet = TRUE
// knife_x_offset = 20
// knife_y_offset = 12
var/max_mod_capacity = 100
var/list/modkits = list()
var/empty_state = "kineticgun_empty"
var/recharge_timerid
/obj/item/weapon/gun/energy/kinetic_accelerator/consume_next_projectile()
if(overheat)
return
. = ..()
if(.)
var/obj/item/projectile/P = .
modify_projectile(P)
/obj/item/weapon/gun/energy/kinetic_accelerator/handle_post_fire(mob/user, atom/target, pointblank, reflex)
. = ..()
attempt_reload()
/obj/item/weapon/gun/energy/kinetic_accelerator/premiumka
name = "premium accelerator"
desc = "A premium kinetic accelerator fitted with an extended barrel and increased pressure tank."
icon_state = "premiumgun"
item_state = "premiumgun"
projectile_type = /obj/item/projectile/kinetic/premium
/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user)
. = ..()
if(Adjacent(user) && max_mod_capacity)
if(max_mod_capacity)
. += "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining."
for(var/obj/item/borg/upgrade/modkit/M as anything in get_modkits())
. += "<span class='notice'>There is a [M.name] mod installed, using <b>[M.cost]%</b> capacity.</span>"
for(var/A in get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
. += "<span class='notice'>There is \a [M] installed, using <b>[M.cost]%</b> capacity.</span>"
/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/weapon/tool/crowbar))
/obj/item/weapon/gun/energy/kinetic_accelerator/Exited(atom/movable/AM)
. = ..()
if((AM in modkits) && istype(AM, /obj/item/borg/upgrade/modkit))
var/obj/item/borg/upgrade/modkit/M = AM
M.uninstall(src, FALSE)
/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/I, mob/user)
if(I.has_tool_quality(TOOL_CROWBAR))
if(modkits.len)
to_chat(user, "<span class='notice'>You pry the modifications out.</span>")
playsound(src, A.usesound, 100, 1)
playsound(loc, I.usesound, 100, 1)
for(var/obj/item/borg/upgrade/modkit/M in modkits)
M.uninstall(src)
else
to_chat(user, "<span class='notice'>There are no modifications currently installed.</span>")
else if(istype(A, /obj/item/borg/upgrade/modkit))
var/obj/item/borg/upgrade/modkit/MK = A
if(istype(I, /obj/item/borg/upgrade/modkit))
var/obj/item/borg/upgrade/modkit/MK = I
MK.install(src, user)
else
..()
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity()
var/current_capacity_used = 0
for(var/obj/item/borg/upgrade/modkit/M as anything in get_modkits())
for(var/A in get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
current_capacity_used += M.cost
return max_mod_capacity - current_capacity_used
@@ -55,134 +130,243 @@
. += A
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K)
for(var/obj/item/borg/upgrade/modkit/M as anything in get_modkits())
K.kinetic_gun = src //do something special on-hit, easy!
for(var/A in get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
M.modify_projectile(K)
/obj/item/weapon/gun/energy/kinetic_accelerator/consume_next_projectile()
var/obj/item/projectile/kinetic/BB = ..()
if(!istype(BB))
return
modify_projectile(BB)
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg
holds_charge = TRUE
unique_frequency = TRUE
var/turf/proj_turf = get_turf(src)
if(!isturf(proj_turf))
return
var/datum/gas_mixture/environment = proj_turf.return_air()
if(environment.temperature > 250)
BB.name = "weakened [BB.name]"
BB.damage *= BB.pressure_decrease
return BB
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/Destroy()
for(var/obj/item/borg/upgrade/modkit/M in modkits)
M.uninstall(src)
return ..()
/obj/item/weapon/gun/energy/kinetic_accelerator/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0)
/obj/item/weapon/gun/energy/kinetic_accelerator/premiumka/cyborg
holds_charge = TRUE
unique_frequency = TRUE
/obj/item/weapon/gun/energy/kinetic_accelerator/premiumka/cyborg/Destroy()
for(var/obj/item/borg/upgrade/modkit/M in modkits)
M.uninstall(src)
return ..()
/obj/item/weapon/gun/energy/kinetic_accelerator/minebot
// trigger_guard = TRIGGER_GUARD_ALLOW_ALL
overheat_time = 20
holds_charge = TRUE
unique_frequency = TRUE
/obj/item/weapon/gun/energy/kinetic_accelerator/Initialize()
. = ..()
spawn(fire_delay)
if(power_supply && power_supply.check_charge(charge_cost))
playsound(src, 'sound/weapons/kenetic_reload.ogg', 60, 1)
if(!holds_charge)
empty()
AddElement(/datum/element/conflict_checking, CONFLICT_ELEMENT_KA)
/obj/item/weapon/gun/energy/kinetic_accelerator/equipped(mob/user)
. = ..()
if(power_supply.charge < charge_cost)
attempt_reload()
/obj/item/weapon/gun/energy/kinetic_accelerator/dropped(mob/user)
. = ..()
if(!QDELING(src) && !holds_charge)
// Put it on a delay because moving item from slot to hand
// calls dropped().
addtimer(CALLBACK(src, .proc/empty_if_not_held), 2)
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty_if_not_held()
if(!ismob(loc) && !istype(loc, /obj/item/integrated_circuit))
empty()
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty()
if(power_supply)
power_supply.use(power_supply.charge)
update_icon()
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time)
if(!power_supply)
return
if(overheat)
return
if(!recharge_time)
recharge_time = overheat_time
overheat = TRUE
update_icon()
var/carried = max(1, loc.ConflictElementCount(CONFLICT_ELEMENT_KA))
deltimer(recharge_timerid)
recharge_timerid = addtimer(CALLBACK(src, .proc/reload), recharge_time * carried, TIMER_STOPPABLE)
/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity)
return
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload()
power_supply.give(power_supply.maxcharge)
// process_chamber()
// if(!suppressed)
playsound(src, 'sound/weapons/kenetic_reload.ogg', 60, 1)
// else
// to_chat(loc, "<span class='warning'>[src] silently charges up.</span>")
overheat = FALSE
update_icon()
/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon()
cut_overlays()
if(!power_supply || !power_supply.check_charge(charge_cost))
add_overlay(empty_state)
if(can_flashlight)
var/iconF = "flight"
if(gun_light)
iconF = "flight_on"
add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset))
if(overheat || (power_supply.charge == 0))
add_overlay(emptystate)
#define KA_ENVIRO_TYPE_COLD 0
#define KA_ENVIRO_TYPE_HOT 1
//Projectiles
/obj/item/projectile/kinetic
name = "kinetic force"
icon = 'icons/obj/projectiles_vr.dmi'
icon_state = null
damage = 32
damage = 30
damage_type = BRUTE
check_armour = "bomb"
range = 3 // Our "range" var is named "kill_count". Yes it is.
range = 4
// log_override = TRUE
var/pressure_decrease = 0.25
var/turf_aoe = FALSE
var/mob_aoe = FALSE
var/list/hit_overlays = list()
var/pressure_decrease_active = FALSE
var/pressure_decrease = 1/3
var/environment = KA_ENVIRO_TYPE_COLD
var/obj/item/weapon/gun/energy/kinetic_accelerator/kinetic_gun
// /obj/item/projectile/kinetic/pod
// kill_count = 4
//
// /obj/item/projectile/kinetic/pod/regular
// damage = 50
// pressure_decrease = 0.5
//
// /obj/item/projectile/kinetic/pod/enhanced
// turf_aoe = TRUE
// mob_aoe = TRUE
/obj/item/projectile/kinetic/premium
damage = 40
damage_type = BRUTE
range = 5
/obj/item/projectile/kinetic/on_impact(var/atom/A)
strike_thing(A)
. = ..()
/obj/item/projectile/kinetic/Destroy()
kinetic_gun = null
return ..()
/obj/item/projectile/kinetic/on_hit(var/atom/target)
/obj/item/projectile/kinetic/Bump(atom/target)
if(kinetic_gun)
var/list/mods = kinetic_gun.get_modkits()
for(var/obj/item/borg/upgrade/modkit/M in mods)
M.projectile_prehit(src, target, kinetic_gun)
if(!pressure_decrease_active)
if(environment == KA_ENVIRO_TYPE_COLD)
if(!lavaland_environment_check(get_turf(src)))
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
else if(environment == KA_ENVIRO_TYPE_HOT)
if(!virgotwo_environment_check(get_turf(src)))
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
return ..()
/obj/item/projectile/kinetic/attack_mob(mob/living/target_mob, distance, miss_modifier)
if(!pressure_decrease_active)
if(environment == KA_ENVIRO_TYPE_COLD)
if(!lavaland_environment_check(get_turf(src)))
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
else if(environment == KA_ENVIRO_TYPE_HOT)
if(!virgotwo_environment_check(get_turf(src)))
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
return ..()
/obj/item/projectile/kinetic/on_range()
strike_thing()
..()
/obj/item/projectile/kinetic/on_hit(atom/target)
strike_thing(target)
. = ..()
/obj/item/projectile/kinetic/on_impact(atom/A)
. = ..()
strike_thing(A)
/obj/item/projectile/kinetic/proc/strike_thing(atom/target)
if(!pressure_decrease_active)
if(environment == KA_ENVIRO_TYPE_COLD)
if(!lavaland_environment_check(get_turf(src)))
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
else if(environment == KA_ENVIRO_TYPE_HOT)
if(!virgotwo_environment_check(get_turf(src)))
name = "weakened [name]"
damage = damage * pressure_decrease
pressure_decrease_active = TRUE
var/turf/target_turf = get_turf(target)
if(!target_turf)
target_turf = get_turf(src)
if(istype(target_turf, /turf/simulated/mineral))
if(kinetic_gun) //hopefully whoever shot this was not very, very unfortunate.
var/list/mods = kinetic_gun.get_modkits()
for(var/obj/item/borg/upgrade/modkit/M in mods)
M.projectile_strike_predamage(src, target_turf, target, kinetic_gun)
for(var/obj/item/borg/upgrade/modkit/M in mods)
M.projectile_strike(src, target_turf, target, kinetic_gun)
if(ismineralturf(target_turf))
var/turf/simulated/mineral/M = target_turf
M.GetDrilled()
M.GetDrilled(TRUE)
var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf)
K.color = color
for(var/type in hit_overlays)
new type(target_turf)
if(turf_aoe)
for(var/T in RANGE_TURFS(1, target_turf) - target_turf)
if(istype(T, /turf/simulated/mineral))
var/turf/simulated/mineral/M = T
M.GetDrilled()
if(mob_aoe)
for(var/mob/living/L in range(1, target_turf) - firer - target)
var/armor = L.run_armor_check(def_zone, check_armour)
L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor)
to_chat(L, "<span class='userdanger'>You're struck by a [name]!</span>")
//Modkits
/obj/item/borg/upgrade/modkit
name = "modification kit"
name = "kinetic accelerator modification kit"
desc = "An upgrade for kinetic accelerators."
icon = 'icons/obj/objects_vr.dmi'
icon_state = "modkit"
origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 4)
w_class = ITEMSIZE_SMALL
require_module = 1
// var/module_type = /obj/item/robot_module/miner
usesound = 'sound/items/Screwdriver.ogg'
// module_type = list(/obj/item/robot_module/miner)
var/denied_type = null
var/maximum_of_type = 1
var/cost = 30
var/modifier = 1 //For use in any mod kit that has numerical modifiers
var/minebot_upgrade = TRUE
var/minebot_exclusive = FALSE
/obj/item/borg/upgrade/modkit/examine(mob/user)
. = ..()
if(Adjacent(user))
. += "<span class='notice'>Occupies <b>[cost]%</b> of mod capacity.</span>"
. += "<span class='notice'>Occupies <b>[cost]%</b> of mod capacity.</span>"
/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user))
if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator))
install(A, user)
else
..()
/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R)
if(..())
return
/*
/obj/item/borg/upgrade/modkit/afterInstall(mob/living/silicon/robot/R)
for(var/obj/item/weapon/gun/energy/kinetic_accelerator/H in R.module.modules)
return install(H, usr)
if(install(H, R)) //It worked
return
to_chat(R, "<span class='alert'>Upgrade error - Aborting Kinetic Accelerator linking.</span>") //No applicable KA found, insufficient capacity, or some other problem.
*/
/obj/item/borg/upgrade/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
. = TRUE
if(src in KA.modkits) // Sanity check to prevent installing the same modkit twice thanks to occasional click/lag delays.
return FALSE
// if(minebot_upgrade)
// if(minebot_exclusive && !istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone))
// to_chat(user, "<span class='notice'>The modkit you're trying to install is only rated for minebot use.</span>")
// return FALSE
// else if(istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone))
// to_chat(user, "<span class='notice'>The modkit you're trying to install is not rated for minebot use.</span>")
// return FALSE
if(denied_type)
var/number_of_denied = 0
for(var/obj/item/borg/upgrade/modkit/M as anything in KA.get_modkits())
for(var/A in KA.get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
if(istype(M, denied_type))
number_of_denied++
if(number_of_denied >= maximum_of_type)
@@ -190,10 +374,11 @@
break
if(KA.get_remaining_mod_capacity() >= cost)
if(.)
user.drop_from_inventory(src, KA)
// if(!user.transferItemToLoc(src, KA))
// return FALSE
to_chat(user, "<span class='notice'>You install the modkit.</span>")
playsound(src, usesound, 100, 1)
user.unEquip(src)
forceMove(KA)
playsound(loc, 'sound/items/screwdriver.ogg', 100, 1)
KA.modkits += src
else
to_chat(user, "<span class='notice'>The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.</span>")
@@ -201,19 +386,26 @@
to_chat(user, "<span class='notice'>You don't have room(<b>[KA.get_remaining_mod_capacity()]%</b> remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.</span>")
. = FALSE
/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
forceMove(get_turf(KA))
/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA, forcemove = TRUE)
KA.modkits -= src
if(forcemove)
forceMove(get_turf(KA))
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
return
//use this one for effects you want to trigger before any damage is done at all and before damage is decreased by pressure
/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
//use this one for effects you want to trigger before mods that do damage
/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
//and this one for things that don't need to trigger before other damage-dealing mods
/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
//Range
/obj/item/borg/upgrade/modkit/range
name = "range increase"
desc = "Increases the range of a kinetic accelerator when installed."
modifier = 1
cost = 24 //so you can fit four plus a tracer cosmetic
cost = 25
/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K)
K.range += modifier
@@ -229,54 +421,87 @@
K.damage += modifier
// //Cooldown
// /obj/item/borg/upgrade/modkit/cooldown
// name = "cooldown decrease"
// desc = "Decreases the cooldown of a kinetic accelerator."
// modifier = 2.5
// /obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
// . = ..()
// if(.)
// KA.overheat_time -= modifier
// /obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
// KA.overheat_time += modifier
// ..()
//Cooldown
/obj/item/borg/upgrade/modkit/efficiency
name = "energy efficiency"
desc = "Decreases the energy use of a kinetic accelerator."
modifier = 20
/obj/item/borg/upgrade/modkit/cooldown
name = "cooldown decrease"
desc = "Decreases the cooldown of a kinetic accelerator. Not rated for minebot use."
modifier = 2.5
minebot_upgrade = FALSE
var/decreased
/obj/item/borg/upgrade/modkit/efficiency/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
KA.charge_cost -= modifier
var/old = KA.overheat_time
KA.overheat_time = max(0, KA.overheat_time - modifier)
decreased = old - KA.overheat_time
/obj/item/borg/upgrade/modkit/efficiency/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
KA.charge_cost += modifier
/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
KA.overheat_time += decreased
..()
/obj/item/borg/upgrade/modkit/cooldown/minebot
name = "minebot cooldown decrease"
desc = "Decreases the cooldown of a kinetic accelerator. Only rated for minebot use."
icon_state = "door_electronics"
icon = 'icons/obj/module.dmi'
denied_type = /obj/item/borg/upgrade/modkit/cooldown/minebot
modifier = 10
cost = 0
minebot_upgrade = TRUE
minebot_exclusive = TRUE
//AoE blasts
/obj/item/borg/upgrade/modkit/aoe
modifier = 0
var/turf_aoe = FALSE
var/stats_stolen = FALSE
/obj/item/borg/upgrade/modkit/aoe/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) //make sure only one of the aoe modules has values if somebody has multiple
if(AOE.stats_stolen || AOE == src)
continue
modifier += AOE.modifier //take its modifiers
AOE.modifier = 0
turf_aoe += AOE.turf_aoe
AOE.turf_aoe = FALSE
AOE.stats_stolen = TRUE
/obj/item/borg/upgrade/modkit/aoe/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
..()
modifier = initial(modifier) //get our modifiers back
turf_aoe = initial(turf_aoe)
stats_stolen = FALSE
/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K)
K.name = "kinetic explosion"
if(!K.turf_aoe && !K.mob_aoe)
K.hit_overlays += /obj/effect/temp_visual/explosion/fast
K.mob_aoe += modifier
/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(stats_stolen)
return
new /obj/effect/temp_visual/explosion/fast(target_turf)
if(turf_aoe)
for(var/T in RANGE_TURFS(1, target_turf) - target_turf)
if(ismineralturf(T))
var/turf/simulated/mineral/M = T
M.GetDrilled(TRUE)
if(modifier)
for(var/mob/living/L in range(1, target_turf) - K.firer - target)
var/armor = L.run_armor_check(K.def_zone, K.check_armour)
// var/armor = L.run_armor_check(K.def_zone, K.flag, null, null, K.armour_penetration)
L.apply_damage(K.damage*modifier, K.damage_type, K.def_zone, armor)
// L.apply_damage(K.damage*modifier, K.damage_type, K.def_zone, armor)
to_chat(L, "<span class='userdanger'>You're struck by a [K.name]!</span>")
/obj/item/borg/upgrade/modkit/aoe/turfs
name = "mining explosion"
desc = "Causes the kinetic accelerator to destroy rock in an AoE."
denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs
/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K)
..()
K.turf_aoe = TRUE
turf_aoe = TRUE
/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs
name = "offensive mining explosion"
@@ -289,19 +514,150 @@
desc = "Causes the kinetic accelerator to damage mobs in an AoE."
modifier = 0.2
//Minebot passthrough
/obj/item/borg/upgrade/modkit/minebot_passthrough
name = "minebot passthrough"
desc = "Causes kinetic accelerator shots to pass through minebots."
cost = 0
//Tendril-unique modules
/obj/item/borg/upgrade/modkit/cooldown/repeater
name = "rapid repeater"
desc = "Quarters the kinetic accelerator's cooldown on striking a living target, but greatly increases the base cooldown."
denied_type = /obj/item/borg/upgrade/modkit/cooldown/repeater
modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
cost = 50
/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
var/valid_repeat = FALSE
if(isliving(target))
var/mob/living/L = target
if(L.stat != DEAD)
valid_repeat = TRUE
if(ismineralturf(target_turf))
valid_repeat = TRUE
if(valid_repeat)
KA.overheat = FALSE
KA.attempt_reload(KA.overheat_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
/*
/obj/item/borg/upgrade/modkit/lifesteal
name = "lifesteal crystal"
desc = "Causes kinetic accelerator shots to slightly heal the firer on striking a living target."
icon_state = "modkit_crystal"
modifier = 2.5 //Not a very effective method of healing.
cost = 20
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(isliving(target) && isliving(K.firer))
var/mob/living/L = target
if(L.stat == DEAD)
return
L = K.firer
L.heal_ordered_damage(modifier, damage_heal_order)
*/
/obj/item/borg/upgrade/modkit/resonator_blasts
name = "resonator blast"
desc = "Causes kinetic accelerator shots to leave and detonate resonator blasts."
denied_type = /obj/item/borg/upgrade/modkit/resonator_blasts
cost = 30
modifier = 0.25 //A bonus 15 damage if you burst the field on a target, 60 if you lure them into it.
/obj/item/borg/upgrade/modkit/resonator_blasts/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(target_turf && !ismineralturf(target_turf)) //Don't make fields on mineral turfs.
var/obj/effect/resonance/R = locate(/obj/effect/resonance) in target_turf
if(R)
R.resonance_damage *= modifier
R.burst()
return
new /obj/effect/resonance(target_turf, K.firer, 30)
/*
/obj/item/borg/upgrade/modkit/bounty
name = "death syphon"
desc = "Killing or assisting in killing a creature permanently increases your damage against that type of creature."
denied_type = /obj/item/borg/upgrade/modkit/bounty
modifier = 1.25
cost = 30
var/maximum_bounty = 25
var/list/bounties_reaped = list()
/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(isliving(target))
var/mob/living/L = target
var/list/existing_marks = L.has_status_effect_list(STATUS_EFFECT_SYPHONMARK)
for(var/i in existing_marks)
var/datum/status_effect/syphon_mark/SM = i
if(SM.reward_target == src) //we want to allow multiple people with bounty modkits to use them, but we need to replace our own marks so we don't multi-reward
SM.reward_target = null
qdel(SM)
L.apply_status_effect(STATUS_EFFECT_SYPHONMARK, src)
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/weapon/gun/energy/kinetic_accelerator/KA)
if(isliving(target))
var/mob/living/L = target
if(bounties_reaped[L.type])
var/kill_modifier = 1
if(K.pressure_decrease_active)
kill_modifier *= K.pressure_decrease
var/armor = L.run_armor_check(K.def_zone, K.flag, null, null, K.armour_penetration)
L.apply_damage(bounties_reaped[L.type]*kill_modifier, K.damage_type, K.def_zone, armor)
/obj/item/borg/upgrade/modkit/bounty/proc/get_kill(mob/living/L)
var/bonus_mod = 1
if(ismegafauna(L)) //megafauna reward
bonus_mod = 4
if(!bounties_reaped[L.type])
bounties_reaped[L.type] = min(modifier * bonus_mod, maximum_bounty)
else
bounties_reaped[L.type] = min(bounties_reaped[L.type] + (modifier * bonus_mod), maximum_bounty)
*/
//Indoors
/obj/item/borg/upgrade/modkit/indoors
name = "decrease pressure penalty"
desc = "Increases the damage a kinetic accelerator does in a high pressure environment."
desc = "A remarkably illegal modification kit that increases the damage a kinetic accelerator does in pressurized environments."
modifier = 2
denied_type = /obj/item/borg/upgrade/modkit/indoors
maximum_of_type = 2
cost = 40
cost = 35
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
K.pressure_decrease *= modifier
// Atmospheric
/obj/item/borg/upgrade/modkit/heater
name = "temperature modulator"
desc = "A remarkably unusual modification kit that makes kinetic accelerators more usable in hot, overpressurized environments, \
in exchange for making them weak elsewhere, like the cold or in space."
denied_type = /obj/item/borg/upgrade/modkit/indoors
maximum_of_type = 1
cost = 30
/obj/item/borg/upgrade/modkit/heater/modify_projectile(obj/item/projectile/kinetic/K)
K.environment = KA_ENVIRO_TYPE_HOT
//Trigger Guard
/*
/obj/item/borg/upgrade/modkit/trigger_guard
name = "modified trigger guard"
desc = "Allows creatures normally incapable of firing guns to operate the weapon when installed."
cost = 20
denied_type = /obj/item/borg/upgrade/modkit/trigger_guard
/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL
/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
KA.trigger_guard = TRIGGER_GUARD_NORMAL
..()
*/
//Cosmetic
/obj/item/borg/upgrade/modkit/chassis_mod
@@ -342,7 +698,7 @@
/obj/item/borg/upgrade/modkit/tracer/adjustable
name = "adjustable tracer bolts"
desc = "Causes kinetic accelerator bolts to have a adjustably-colored tracer trail and explosion. Use in-hand to change color."
desc = "Causes kinetic accelerator bolts to have an adjustable-colored tracer trail and explosion. Use in-hand to change color."
/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user)
bolt_color = input(user,"Choose Color") as color
bolt_color = input(user,"","Choose Color",bolt_color) as color|null
@@ -36,7 +36,7 @@
if(rockets.len)
var/obj/item/ammo_casing/rocket/I = rockets[1]
rockets -= I
return
return new I.projectile_type(src)
return null
/obj/item/weapon/gun/launcher/rocket/handle_post_fire(mob/user, atom/target)
@@ -185,11 +185,18 @@
required_reagents = list("gin" = 2, "tonic" = 1)
result_amount = 3
/decl/chemical_reaction/instant/drinks/rum_and_cola
name = "Rum and Cola"
id = "rumandcola"
result = "rumandcola"
required_reagents = list("rum" = 2, "cola" = 1)
result_amount = 3
/decl/chemical_reaction/instant/drinks/cuba_libre
name = "Cuba Libre"
id = "cubalibre"
result = "cubalibre"
required_reagents = list("rum" = 2, "cola" = 1)
required_reagents = list("rumcola" = 3, "limejuice" = 1)
result_amount = 3
/decl/chemical_reaction/instant/drinks/martini
@@ -329,14 +336,14 @@
name = "Long Island Iced Tea"
id = "longislandicedtea"
result = "longislandicedtea"
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 3)
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "rumcoke" = 3)
result_amount = 6
/decl/chemical_reaction/instant/drinks/icedtea
name = "Long Island Iced Tea"
id = "longislandicedtea"
result = "longislandicedtea"
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 3)
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "rumcoke" = 3)
result_amount = 6
/decl/chemical_reaction/instant/drinks/threemileisland
@@ -693,6 +700,13 @@
required_reagents = list("orangejuice" = 2, "cola" = 1)
result_amount = 3
/decl/chemical_reaction/instant/drinks/brownstar_decaf
name = "Decaf Brown Star"
id = "brownstar_decaf"
result = "brownstar_decaf"
required_reagents = list("orangejuice" = 2, "decafcola" = 1)
result_amount = 3
/decl/chemical_reaction/instant/drinks/milkshake
name = "Milkshake"
id = "milkshake"
@@ -756,6 +770,13 @@
required_reagents = list("tea" = 5, "mint" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/minttea_decaf
name = "Decaf Mint Tea"
id = "decafminttea"
result = "decafminttea"
required_reagents = list("decaftea" = 5, "mint" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/lemontea
name = "Lemon Tea"
id = "lemontea"
@@ -763,6 +784,13 @@
required_reagents = list("tea" = 5, "lemonjuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/lemontea_decaf
name = "Decaf Lemon Tea"
id = "decaflemontea"
result = "decaflemontea"
required_reagents = list("decaftea" = 5, "lemonjuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/limetea
name = "Lime Tea"
id = "limetea"
@@ -770,6 +798,13 @@
required_reagents = list("tea" = 5, "limejuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/limetea_decaf
name = "Decaf Lime Tea"
id = "decaflimetea"
result = "decaflimetea"
required_reagents = list("decaftea" = 5, "limejuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/orangetea
name = "Orange Tea"
id = "orangetea"
@@ -777,6 +812,13 @@
required_reagents = list("tea" = 5, "orangejuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/orangetea_decaf
name = "Decaf Orange Tea"
id = "decaforangetea"
result = "decaforangetea"
required_reagents = list("decaftea" = 5, "orangejuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/berrytea
name = "Berry Tea"
id = "berrytea"
@@ -784,6 +826,13 @@
required_reagents = list("tea" = 5, "berryjuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/berrytea_decaf
name = "Decaf Berry Tea"
id = "decafberrytea"
result = "decafberrytea"
required_reagents = list("decaftea" = 5, "berryjuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/sakebomb
name = "Sake Bomb"
id = "sakebomb"
+199 -43
View File
@@ -316,6 +316,13 @@
color = "#664330"
allergen_type = ALLERGEN_FISH //Murkfin is fish
/datum/reagent/nutriment/protein/bean
name = "beans"
id = "bean_protein"
taste_description = "beans"
color = "#562e0b"
allergen_type = ALLERGEN_BEANS //Made from soy beans
/datum/reagent/nutriment/honey
name = "Honey"
id = "honey"
@@ -384,7 +391,7 @@
taste_mult = 1.3
nutriment_factor = 1
color = "#482000"
allergen_type = ALLERGEN_COFFEE //Again, coffee contains coffee
allergen_type = ALLERGEN_COFFEE | ALLERGEN_STIMULANT //Again, coffee contains coffee
/datum/reagent/nutriment/tea
name = "Tea Powder"
@@ -394,6 +401,16 @@
taste_mult = 1.3
nutriment_factor = 1
color = "#101000"
allergen_type = ALLERGEN_STIMULANT //Strong enough to contain caffeine
/datum/reagent/nutriment/decaf_tea
name = "Decaf Tea Powder"
id = "decafteapowder"
description = "A dark, tart powder made from black tea leaves, treated to remove caffeine content."
taste_description = "tartness"
taste_mult = 1.3
nutriment_factor = 1
color = "#101000"
/datum/reagent/nutriment/coco
name = "Coco Powder"
@@ -636,8 +653,6 @@
color = "#365E30"
overdose = REAGENTS_OVERDOSE
//SYNNONO MEME FOODS EXPANSION - Credit to Synnono
/datum/reagent/spacespice
name = "Wurmwoad"
id = "spacespice"
@@ -1228,6 +1243,7 @@
cup_icon_state = "cup_tea"
cup_name = "cup of tea"
cup_desc = "Tasty black tea, it has antioxidants, it's good for you!"
allergen_type = ALLERGEN_STIMULANT //Black tea strong enough to have significant caffeine content
/datum/reagent/drink/tea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1235,6 +1251,23 @@
return
M.adjustToxLoss(-0.5 * removed)
/datum/reagent/drink/tea/decaf
name = "Decaf Tea"
id = "teadecaf"
description = "Tasty black tea, it has antioxidants, it's good for you, and won't keep you up at night!"
color = "#832700"
adj_dizzy = 0
adj_drowsy = 0 //Decaf won't help you here.
adj_sleepy = 0
glass_name = "cup of decaf tea"
glass_desc = "Tasty black tea, it has antioxidants, it's good for you, and won't keep you up at night!"
cup_name = "cup of decaf tea"
cup_desc = "Tasty black tea, it has antioxidants, it's good for you, and won't keep you up at night!"
allergen_type = null //Certified cat-safe!
/datum/reagent/drink/tea/icetea
name = "Iced Tea"
id = "icetea"
@@ -1269,6 +1302,16 @@
M.bodytemperature += 0.5
//M.adjustToxLoss(5 * removed) //VOREStation Removal
/datum/reagent/drink/tea/icetea/decaf
name = "Decaf Iced Tea"
glass_name = "decaf iced tea"
cup_name = "cup of decaf iced tea"
id = "iceteadecaf"
adj_dizzy = 0
adj_drowsy = 0
adj_sleepy = 0
allergen_type = null
/datum/reagent/drink/tea/minttea
name = "Mint Tea"
id = "minttea"
@@ -1282,6 +1325,16 @@
cup_name = "cup of mint tea"
cup_desc = "A tasty mixture of mint and tea. It's apparently good for you!"
/datum/reagent/drink/tea/minttea/decaf
name = "Decaf Mint Tea"
glass_name = "decaf mint tea"
cup_name = "cup of decaf mint tea"
id = "mintteadecaf"
adj_dizzy = 0
adj_drowsy = 0
adj_sleepy = 0
allergen_type = null
/datum/reagent/drink/tea/lemontea
name = "Lemon Tea"
id = "lemontea"
@@ -1294,7 +1347,17 @@
cup_name = "cup of lemon tea"
cup_desc = "A tasty mixture of lemon and tea. It's apparently good for you!"
allergen_type = ALLERGEN_FRUIT //Made with lemon juice
allergen_type = ALLERGEN_FRUIT | ALLERGEN_STIMULANT //Made with lemon juice, still tea
/datum/reagent/drink/tea/lemontea/decaf
name = "Decaf Lemon Tea"
glass_name = "decaf lemon tea"
cup_name = "cup of decaf lemon tea"
id = "lemonteadecaf"
adj_dizzy = 0
adj_drowsy = 0
adj_sleepy = 0
allergen_type = ALLERGEN_FRUIT //No caffine, still lemon.
/datum/reagent/drink/tea/limetea
name = "Lime Tea"
@@ -1308,7 +1371,17 @@
cup_name = "cup of lime tea"
cup_desc = "A tasty mixture of lime and tea. It's apparently good for you!"
allergen_type = ALLERGEN_FRUIT //Made with lime juice
allergen_type = ALLERGEN_FRUIT | ALLERGEN_STIMULANT //Made with lime juice, still tea
/datum/reagent/drink/tea/limetea/decaf
name = "Decaf Lime Tea"
glass_name = "decaf lime tea"
cup_name = "cup of decaf lime tea"
id = "limeteadecaf"
adj_dizzy = 0
adj_drowsy = 0
adj_sleepy = 0
allergen_type = ALLERGEN_FRUIT //No caffine, still lime.
/datum/reagent/drink/tea/orangetea
name = "Orange Tea"
@@ -1322,7 +1395,17 @@
cup_name = "cup of orange tea"
cup_desc = "A tasty mixture of orange and tea. It's apparently good for you!"
allergen_type = ALLERGEN_FRUIT //Made with orange juice
allergen_type = ALLERGEN_FRUIT | ALLERGEN_STIMULANT //Made with orange juice, still tea
/datum/reagent/drink/tea/orangetea/decaf
name = "Decaf orange Tea"
glass_name = "decaf orange tea"
cup_name = "cup of decaf orange tea"
id = "orangeteadecaf"
adj_dizzy = 0
adj_drowsy = 0
adj_sleepy = 0
allergen_type = ALLERGEN_FRUIT //No caffine, still orange.
/datum/reagent/drink/tea/berrytea
name = "Berry Tea"
@@ -1336,7 +1419,17 @@
cup_name = "cup of berry tea"
cup_desc = "A tasty mixture of berries and tea. It's apparently good for you!"
allergen_type = ALLERGEN_FRUIT //Made with berry juice
allergen_type = ALLERGEN_FRUIT | ALLERGEN_STIMULANT //Made with berry juice, still tea
/datum/reagent/drink/tea/berrytea/decaf
name = "Decaf Berry Tea"
glass_name = "decaf berry tea"
cup_name = "cup of decaf berry tea"
id = "berryteadecaf"
adj_dizzy = 0
adj_drowsy = 0
adj_sleepy = 0
allergen_type = ALLERGEN_FRUIT //No caffine, still berries.
/datum/reagent/drink/greentea
name = "Green Tea"
@@ -1351,18 +1444,29 @@
cup_name = "cup of green tea"
cup_desc = "A subtle blend of green tea. It's apparently good for you!"
/datum/reagent/drink/chaitea
/datum/reagent/drink/tea/chaitea
name = "Chai Tea"
id = "chaitea"
description = "A tea spiced with cinnamon and cloves."
description = "A milky tea spiced with cinnamon and cloves."
color = "#A8442C"
taste_description = "creamy cinnamon and spice"
glass_name = "chai tea"
glass_desc = "A tea spiced with cinnamon and cloves."
glass_desc = "A milky tea spiced with cinnamon and cloves."
cup_name = "cup of chai tea"
cup_desc = "A tea spiced with cinnamon and cloves."
cup_desc = "A milky tea spiced with cinnamon and cloves."
allergen_type = ALLERGEN_STIMULANT|ALLERGEN_DAIRY //Made with milk and tea.
/datum/reagent/drink/tea/chaitea/decaf
name = "Decaf Chai Tea"
glass_name = "decaf chai tea"
cup_name = "cup of decaf chai tea"
id = "chaiteadecaf"
adj_dizzy = 0
adj_drowsy = 0
adj_sleepy = 0
allergen_type = ALLERGEN_DAIRY //No caffeine, still milk.
/datum/reagent/drink/coffee
name = "Coffee"
@@ -1383,7 +1487,7 @@
glass_name = "coffee"
glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
allergen_type = ALLERGEN_COFFEE //Apparently coffee contains coffee
allergen_type = ALLERGEN_COFFEE | ALLERGEN_STIMULANT //Apparently coffee contains coffee
/datum/reagent/drink/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -1496,7 +1600,7 @@
glass_name = "decaf coffee"
glass_desc = "Basically just brown, bitter water."
allergen_type = ALLERGEN_COFFEE //Decaf coffee would still likely trigger allergy symptoms.
allergen_type = ALLERGEN_COFFEE //Decaf coffee is still coffee, just less stimulating.
/datum/reagent/drink/hot_coco
name = "Hot Chocolate"
@@ -1632,7 +1736,18 @@
glass_name = "Brown Star"
glass_desc = "It's not what it sounds like..."
allergen_type = ALLERGEN_FRUIT //Made with orangejuice and cola
allergen_type = ALLERGEN_FRUIT | ALLERGEN_STIMULANT //Made with orangejuice and cola
/datum/reagent/drink/soda/brownstar_decaf //For decaf starkist
name = "Decaf Brown Star"
id = "brownstar_decaf"
description = "It's not what it sounds like..."
taste_description = "orange and cola soda"
color = "#9F3400"
adj_temp = -2
glass_name = "Brown Star"
glass_desc = "It's not what it sounds like..."
/datum/reagent/drink/milkshake
name = "Milkshake"
@@ -1730,7 +1845,7 @@
glass_name = "Rewriter"
glass_desc = "The secret of the sanctuary of the Libarian..."
allergen_type = ALLERGEN_FRUIT|ALLERGEN_COFFEE //Made with space mountain wind (Fruit)
allergen_type = ALLERGEN_FRUIT|ALLERGEN_COFFEE|ALLERGEN_STIMULANT //Made with space mountain wind (Fruit, caffeine)
/datum/reagent/drink/rewriter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1748,6 +1863,7 @@
glass_name = "Nuka-Cola"
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
glass_special = list(DRINK_FIZZ)
allergen_type = ALLERGEN_STIMULANT
/datum/reagent/drink/soda/nuka_cola/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -1781,6 +1897,20 @@
glass_name = "Space Cola"
glass_desc = "A glass of refreshing Space Cola"
glass_special = list(DRINK_FIZZ)
allergen_type = ALLERGEN_STIMULANT //Cola is typically caffeinated.
/datum/reagent/drink/soda/decaf_cola
name = "Space Cola Free"
id = "decafcola"
description = "A refreshing beverage with none of the jitters."
taste_description = "cola"
reagent_state = LIQUID
color = "#100800"
adj_temp = -5
glass_name = "Space Cola Free"
glass_desc = "A glass of refreshing Space Cola Free"
glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/lemon_soda
name = "Lemon Soda"
@@ -1899,12 +2029,12 @@
glass_name = "Space Mountain Wind"
glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
glass_special = list(DRINK_FIZZ)
allergen_type = ALLERGEN_FRUIT //Fruit allergens because citrus is implied to come from limes/lemons
allergen_type = ALLERGEN_FRUIT|ALLERGEN_STIMULANT //Citrus, and caffeination
/datum/reagent/drink/soda/dr_gibb
name = "Dr. Gibb"
id = "dr_gibb"
description = "A delicious blend of 42 different flavors"
description = "A delicious blend of 42 different flavors."
taste_description = "cherry soda"
color = "#102000"
adj_drowsy = -6
@@ -1912,6 +2042,7 @@
glass_name = "Dr. Gibb"
glass_desc = "Dr. Gibb. Not as dangerous as the name might imply."
allergen_type = ALLERGEN_STIMULANT
/datum/reagent/drink/soda/space_up
name = "Space-Up"
@@ -1965,7 +2096,7 @@
name = "Diet Dr. Gibb"
id = "diet_dr_gibb"
color = "#102000"
taste_description = "watered down cherry soda"
taste_description = "chemically sweetened cherry soda"
glass_name = "glass of Diet Dr. Gibb"
glass_desc = "Regular Dr.Gibb is probably healthier than this cocktail of artificial flavors."
@@ -1994,7 +2125,7 @@
glass_name = "roy rogers"
glass_desc = "I'm a cowboy, on a steel horse I ride"
glass_special = list(DRINK_FIZZ)
allergen_type = ALLERGEN_FRUIT //Made with lemon lime
allergen_type = ALLERGEN_FRUIT | ALLERGEN_STIMULANT //Made with lemon lime and cola
/datum/reagent/drink/collins_mix
name = "Collins Mix"
@@ -2020,7 +2151,7 @@
glass_name = "arnold palmer"
glass_desc = "Tastes just like the old man."
glass_special = list(DRINK_FIZZ)
allergen_type = ALLERGEN_FRUIT //Made with lemonade
allergen_type = ALLERGEN_FRUIT | ALLERGEN_STIMULANT //Made with lemonade and tea
/datum/reagent/drink/doctor_delight
name = "The Doctor's Delight"
@@ -2154,7 +2285,7 @@
glass_name = "Vile Lemon"
glass_desc = "A sour, fizzy drink with lemonade and lemonlime."
glass_special = list(DRINK_FIZZ)
allergen_type = ALLERGEN_FRUIT //Made from lemonade
allergen_type = ALLERGEN_FRUIT|ALLERGEN_STIMULANT //Made from lemonade and mtn wind(caffeine)
/datum/reagent/drink/entdraught
name = "Ent's Draught"
@@ -2495,7 +2626,7 @@
//Base type for alchoholic drinks containing coffee
/datum/reagent/ethanol/coffee
overdose = 45
allergen_type = ALLERGEN_COFFEE //Contains coffee or is made from coffee
allergen_type = ALLERGEN_COFFEE|ALLERGEN_STIMULANT //Contains coffee or is made from coffee
/datum/reagent/ethanol/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -2623,6 +2754,7 @@
glass_name = "Thirteen Loko"
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
allergen_type = ALLERGEN_STIMULANT //Holy shit dude.
/datum/reagent/ethanol/thirteenloko/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -2865,7 +2997,7 @@
glass_name = "Atomic Bomb"
glass_desc = "We cannot take legal responsibility for your actions after imbibing."
allergen_type = ALLERGEN_COFFEE|ALLERGEN_DAIRY|ALLERGEN_FRUIT|ALLERGEN_GRAINS //Made from b52 which contains kahlua(coffee), cognac(fruit), and irish cream(Whiskey(grains),cream(dairy))
allergen_type = ALLERGEN_COFFEE|ALLERGEN_DAIRY|ALLERGEN_FRUIT|ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from b52 which contains kahlua(coffee/caffeine), cognac(fruit), and irish cream(Whiskey(grains),cream(dairy))
/datum/reagent/ethanol/coffee/b52
name = "B-52"
@@ -2879,7 +3011,7 @@
glass_name = "B-52"
glass_desc = "Kahlua, Irish cream, and cognac. You will get bombed."
allergen_type = ALLERGEN_COFFEE|ALLERGEN_DAIRY|ALLERGEN_FRUIT|ALLERGEN_GRAINS //Made from kahlua(coffee), cognac(fruit), and irish cream(Whiskey(grains),cream(dairy))
allergen_type = ALLERGEN_COFFEE|ALLERGEN_DAIRY|ALLERGEN_FRUIT|ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from kahlua(coffee/caffeine), cognac(fruit), and irish cream(Whiskey(grains),cream(dairy))
/datum/reagent/ethanol/bahama_mama
name = "Bahama mama"
@@ -2965,7 +3097,7 @@
glass_name = "Black Russian"
glass_desc = "For the lactose-intolerant. Still as classy as a White Russian."
allergen_type = ALLERGEN_COFFEE|ALLERGEN_GRAINS //Made from vodka(grains) and kahlua(coffee)
allergen_type = ALLERGEN_COFFEE|ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from vodka(grains) and kahlua(coffee/caffeine)
/datum/reagent/ethanol/bloody_mary
name = "Bloody Mary"
@@ -2993,7 +3125,7 @@
allergen_type = ALLERGEN_DAIRY|ALLERGEN_FRUIT //Made from cream(dairy), banana juice(fruit), and watermelon juice(fruit)
/datum/reagent/ethanol/coffee/brave_bull //Since it's under the /coffee subtype, it already has coffee allergens.
/datum/reagent/ethanol/coffee/brave_bull //Since it's under the /coffee subtype, it already has coffee and caffeine allergens.
name = "Brave Bull"
id = "bravebull"
description = "It's just as effective as Dutch-Courage!"
@@ -3034,13 +3166,37 @@
/datum/reagent/ethanol/cuba_libre
name = "Cuba Libre"
id = "cubalibre"
description = "Rum, mixed with cola. Viva la revolucion."
description = "Rum, mixed with cola and a splash of lime. Viva la revolucion."
taste_description = "cola with lime"
color = "#3E1B00"
strength = 30
glass_name = "Cuba Libre"
glass_desc = "A classic mix of rum, cola, and lime."
allergen_type = ALLERGEN_STIMULANT //Cola
/datum/reagent/ethanol/rum_and_cola
name = "Rum and Cola"
id = "rumandcola"
description = "A classic mix of sugar with more sugar."
taste_description = "cola"
color = "#3E1B00"
strength = 30
glass_name = "Cuba Libre"
glass_desc = "A classic mix of rum, cola, and lime."
/datum/reagent/ethanol/rum_and_cola
name = "Rum and Cola"
id = "rumandcola"
description = "A classic mix of sugar with more sugar."
taste_description = "cola"
color = "#3E1B00"
strength = 30
glass_name = "rum and cola"
glass_desc = "A classic mix of rum and cola."
allergen_type = ALLERGEN_STIMULANT // Cola
/datum/reagent/ethanol/demonsblood
name = "Demons Blood"
@@ -3053,7 +3209,7 @@
glass_name = "Demons' Blood"
glass_desc = "Just looking at this thing makes the hair on the back of your neck stand up."
allergen_type = ALLERGEN_FRUIT //Made from space mountain wind(fruit)
allergen_type = ALLERGEN_FRUIT|ALLERGEN_STIMULANT //Made from space mountain wind(fruit) and dr.gibb(caffeine)
/datum/reagent/ethanol/devilskiss
name = "Devils Kiss"
@@ -3065,7 +3221,7 @@
glass_name = "Devil's Kiss"
glass_desc = "Creepy time!"
allergen_type = ALLERGEN_COFFEE //Made from kahlua (Coffee)
allergen_type = ALLERGEN_COFFEE|ALLERGEN_STIMULANT //Made from kahlua (Coffee)
/datum/reagent/ethanol/driestmartini
name = "Driest Martini"
@@ -3228,7 +3384,7 @@
glass_name = "Irish coffee"
glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
allergen_type = ALLERGEN_COFFEE|ALLERGEN_DAIRY|ALLERGEN_GRAINS //Made from Coffee(coffee) and irish cream(whiskey(grains), cream(dairy))
allergen_type = ALLERGEN_COFFEE|ALLERGEN_DAIRY|ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from Coffee(coffee/caffeine) and irish cream(whiskey(grains), cream(dairy))
/datum/reagent/ethanol/irish_cream
name = "Irish Cream"
@@ -3254,7 +3410,7 @@
glass_name = "Long Island iced tea"
glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
allergen_type = ALLERGEN_GRAINS|ALLERGEN_FRUIT //Made from vodka(grains) and gin(fruit)
allergen_type = ALLERGEN_GRAINS|ALLERGEN_FRUIT|ALLERGEN_STIMULANT //Made from vodka(grains), cola(caffeine) and gin(fruit)
/datum/reagent/ethanol/manhattan
name = "Manhattan"
@@ -3441,7 +3597,7 @@
glass_name = "Snow White"
glass_desc = "A cold refreshment."
allergen_type = ALLERGEN_COFFEE|ALLERGEN_FRUIT //made from Pineapple juice(fruit), lemon_lime(fruit), and kahlua(coffee)
allergen_type = ALLERGEN_COFFEE|ALLERGEN_FRUIT|ALLERGEN_STIMULANT //made from Pineapple juice(fruit), lemon_lime(fruit), and kahlua(coffee/caffine)
/datum/reagent/ethanol/suidream
name = "Sui Dream"
@@ -3467,7 +3623,7 @@
glass_name = "Syndicate Bomb"
glass_desc = "Tastes like terrorism!"
allergen_type = ALLERGEN_GRAINS //Made from beer(grain) and whiskeycola(whiskey(grain))
allergen_type = ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from beer(grain) and whiskeycola(whiskey(grain) and cola(caffeine))
/datum/reagent/ethanol/tequilla_sunrise
name = "Tequila Sunrise"
@@ -3547,7 +3703,7 @@
glass_name = "White Russian"
glass_desc = "A very nice looking drink. But that's just, like, your opinion, man."
allergen_type = ALLERGEN_COFFEE|ALLERGEN_GRAINS|ALLERGEN_DAIRY //Made from black russian(vodka(grains), kahlua(coffee)) and cream(dairy)
allergen_type = ALLERGEN_COFFEE|ALLERGEN_GRAINS|ALLERGEN_DAIRY|ALLERGEN_STIMULANT //Made from black russian(vodka(grains), kahlua(coffee/caffeine)) and cream(dairy)
/datum/reagent/ethanol/whiskey_cola
name = "Whiskey Cola"
@@ -3560,7 +3716,7 @@
glass_name = "whiskey cola"
glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
allergen_type = ALLERGEN_GRAINS //Made from whiskey(grains)
allergen_type = ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from whiskey(grains) and cola(caffeine)
/datum/reagent/ethanol/whiskeysoda
name = "Whiskey Soda"
@@ -3689,7 +3845,7 @@
glass_name = "Elysium Facepunch"
glass_desc = "A loathesome cocktail favored by Heaven's skeleton shift workers."
allergen_type = ALLERGEN_COFFEE|ALLERGEN_FRUIT //Made from kahlua(Coffee) and lemonjuice(fruit)
allergen_type = ALLERGEN_COFFEE|ALLERGEN_FRUIT|ALLERGEN_STIMULANT //Made from kahlua(Coffee/caffeine) and lemonjuice(fruit)
/datum/reagent/ethanol/erebusmoonrise
name = "Erebus Moonrise"
@@ -3755,7 +3911,7 @@
glass_name = "Xanadu Cannon"
glass_desc = "Common in the entertainment districts of Titan."
allergen_type = ALLERGEN_GRAINS //Made from ale(grain)
allergen_type = ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from ale(grain) and dr.gibb(caffeine)
/datum/reagent/ethanol/debugger
name = "Debugger"
@@ -3780,7 +3936,7 @@
glass_name = "Spacer's Brew"
glass_desc = "Ethanol and orange soda. A common emergency drink on frontier colonies."
allergen_type = ALLERGEN_FRUIT //Made from brownstar(orange juice(fruit))
allergen_type = ALLERGEN_FRUIT|ALLERGEN_STIMULANT //Made from brownstar(orange juice(fruit) + cola(caffeine)
/datum/reagent/ethanol/binmanbliss
name = "Binman Bliss"
@@ -3860,7 +4016,7 @@
glass_name = "Morning After"
glass_desc = "The finest hair of the dog, coming up!"
allergen_type = ALLERGEN_GRAINS|ALLERGEN_COFFEE //Made from sbiten(vodka(grain)) and coffee(coffee)
allergen_type = ALLERGEN_GRAINS|ALLERGEN_COFFEE|ALLERGEN_STIMULANT //Made from sbiten(vodka(grain)) and coffee(coffee/caffine)
/datum/reagent/ethanol/vesper
name = "Vesper"
@@ -3886,7 +4042,7 @@
glass_name = "Rotgut Fever Dream"
glass_desc = "Why are you doing this to yourself?"
allergen_type = ALLERGEN_GRAINS //Made from whiskey(grains) and vodka(grains)
allergen_type = ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from whiskey(grains), cola (caffeine) and vodka(grains)
/datum/reagent/ethanol/voxdelight
name = "Vox's Delight"
@@ -4098,7 +4254,7 @@
glass_name = "Cold Front"
glass_desc = "Minty, rich, and painfully cold. It's a blizzard in a cup."
allergen_type = ALLERGEN_COFFEE //Made from iced coffee(coffee)
allergen_type = ALLERGEN_COFFEE|ALLERGEN_STIMULANT //Made from iced coffee(coffee)
/datum/reagent/ethanol/mintjulep
name = "Mint Julep"
@@ -4194,7 +4350,7 @@
glass_icon = DRINK_ICON_NOISY
glass_special = list(DRINK_FIZZ)
allergen_type = ALLERGEN_FRUIT //Made from space mountain wind(fruit), and holy wine(fruit)
allergen_type = ALLERGEN_FRUIT|ALLERGEN_STIMULANT //Made from space mountain wind(fruit), dr.gibb(caffine) and holy wine(fruit)
/datum/reagent/ethanol/angelskiss
name = "Angels Kiss"
@@ -4207,7 +4363,7 @@
glass_name = "Angel's Kiss"
glass_desc = "Miracle time!"
allergen_type = ALLERGEN_FRUIT|ALLERGEN_COFFEE //Made from holy wine(fruit), and kahlua(coffee)
allergen_type = ALLERGEN_FRUIT|ALLERGEN_COFFEE|ALLERGEN_STIMULANT //Made from holy wine(fruit), and kahlua(coffee)
/datum/reagent/ethanol/ichor_mead
name = "Ichor Mead"
@@ -155,16 +155,12 @@
if(alien == IS_SLIME || alien == IS_CHIMERA) //slimes and chimera can get nutrition from injected nutriment and protein
M.adjust_nutrition(alt_nutriment_factor * removed)
/datum/reagent/nutriment/magicdust/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
playsound(M, 'sound/items/hooh.ogg', 50, 1, -1)
if(prob(5))
to_chat(M, "<span class='warning'>You feel like you've been gnomed...</span>")
/datum/reagent/ethanol/galacticpanic
name = "Galactic Panic Attack"
id = "galacticpanic"
@@ -516,4 +512,34 @@
glass_name = "Shambler's Juice"
glass_desc = "A glass of something shambly"
glass_special = list(DRINK_FIZZ)
glass_special = list(DRINK_FIZZ)
////////////////START BrainzSnax Reagents////////////////
/datum/reagent/nutriment/protein/brainzsnax
name = "grey matter"
id = "brain_protein"
taste_description = "fatty, mushy meat and allspice"
color = "#caa3c9"
/datum/reagent/nutriment/protein/brainzsnax/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(prob(5) && !(alien == IS_CHIMERA || alien == IS_SLIME || alien == IS_PLANT || alien == IS_DIONA || alien == IS_SHADEKIN && !M.isSynthetic()))
M.adjustBrainLoss(removed) //Any other species risks prion disease.
M.Confuse(5)
M.hallucination = max(M.hallucination, 25)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling
H.feral -= removed * 3 //Should calm them down quick, provided they're actually in a state to STAY calm.
if(H.feral <=0) //Check if they're unferalled
H.feral = 0
to_chat(H, "<span class='info'>Your mind starts to clear, soothed into a state of clarity as your senses return.</span>")
log_and_message_admins("is no longer feral.", H)
/datum/reagent/nutriment/protein/brainzsnax/red
id = "red_brain_protein"
taste_description = "fatty, mushy meat and cheap tomato sauce"
color = "#a6898d"
////////////////END BrainzSnax Reagents////////////////
@@ -427,6 +427,13 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/circuitboard/skills
sort_string = "LAAAC"
/datum/design/circuit/arf_generator
name = "atmospheric field generator"
id = "arf_generator"
req_tech = list(TECH_MAGNET = 4, TECH_POWER = 4, TECH_BIO = 3)
build_path = /obj/item/weapon/circuitboard/arf_generator
sort_string = "LAAAD"
/datum/design/circuit/mecha
req_tech = list(TECH_DATA = 3)
@@ -200,8 +200,8 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.ownegg.calibrate_size()
B.ownegg.orient2hud()
B.ownegg.w_class = clamp(B.ownegg.w_class * 0.25, 1, 8) //A total w_class of 16 will result in a backpack sized egg.
B.ownegg.icon_scale_x = 0.25 * B.ownegg.w_class
B.ownegg.icon_scale_y = 0.25 * B.ownegg.w_class
B.ownegg.icon_scale_x = clamp(0.25 * B.ownegg.w_class, 0.25, 1)
B.ownegg.icon_scale_y = clamp(0.25 * B.ownegg.w_class, 0.25, 1)
B.ownegg.update_transform()
if(B.ownegg.w_class > 4)
B.ownegg.slowdown = B.ownegg.w_class - 4
+8 -9
View File
@@ -235,7 +235,9 @@
/obj/belly/proc/handle_digestion_death(mob/living/M)
var/digest_alert_owner = pick(digest_messages_owner)
var/digest_alert_prey = pick(digest_messages_prey)
var/compensation = M.getOxyLoss() //How much of the prey's damage was caused by passive crit oxyloss to compensate the lost nutrition.
var/compensation = M.maxHealth / 5 //Dead body bonus.
if(ishuman(M))
compensation += M.getOxyLoss() //How much of the prey's damage was caused by passive crit oxyloss to compensate the lost nutrition.
var/living_count = 0
for(var/mob/living/L in contents)
@@ -263,14 +265,11 @@
digestion_death(M)
if(!ishuman(owner))
owner.update_icons()
if(compensation == 0) //Slightly sloppy way at making sure certain mobs don't give ZERO nutrition (fish and so on)
compensation = 21 //This reads as 20*4.5 due to the calculations afterward, making the backup nutrition value 94.5 per mob. Not op compared to regular prey.
if(compensation > 0)
if(isrobot(owner))
var/mob/living/silicon/robot/R = owner
R.cell.charge += 25*compensation*(nutrition_percent / 100)
else
owner.adjust_nutrition((nutrition_percent / 100)*4.5*compensation)
if(isrobot(owner))
var/mob/living/silicon/robot/R = owner
R.cell.charge += (nutrition_percent / 100) * compensation * 25
else
owner.adjust_nutrition((nutrition_percent / 100) * compensation * 4.5)
/obj/belly/proc/steal_nutrition(mob/living/L)
if(L.nutrition >= 100)
+1 -1
View File
@@ -115,7 +115,7 @@
if((. = ..()))
if(isbelly(item_storage))
var/obj/belly/B = item_storage
. += 2 * (B.digest_brute + B.digest_burn + (B.digest_oxy)/2)
. *= 3
else
. += 30 //Organs give a little more
@@ -30,7 +30,8 @@
DoEffectAura()
/datum/artifact_effect/vampire/DoEffectAura()
nearby_mobs.Cut()
if (nearby_mobs.len)
nearby_mobs.Cut()
var/turf/T = get_turf(holder)