Merge remote-tracking branch 'upstream/master'

This commit is contained in:
DeltaFire
2020-09-12 23:28:30 +02:00
37 changed files with 1331 additions and 1255 deletions
File diff suppressed because it is too large Load Diff
+4
View File
@@ -290,6 +290,10 @@
#define COMPONENT_INTERRUPT_LIFE_BIOLOGICAL 1 // interrupt biological processes
#define COMPONENT_INTERRUPT_LIFE_PHYSICAL 2 // interrupt physical handling
#define COMSIG_LIVING_BIOLOGICAL_LIFE "biological_life" //from base of mob/living/BiologicalLife() (seconds, times_fired)
#define COMSIG_LIVING_PHYSICAL_LIFE "physical_life" //from base of mob/living/PhysicalLife() (seconds, times_fired)
// /mob/living/carbon physiology signals
#define COMSIG_CARBON_GAIN_WOUND "carbon_gain_wound" //from /datum/wound/proc/apply_wound() (/mob/living/carbon/C, /datum/wound/W, /obj/item/bodypart/L)
#define COMSIG_CARBON_LOSE_WOUND "carbon_lose_wound" //from /datum/wound/proc/remove_wound() (/mob/living/carbon/C, /datum/wound/W, /obj/item/bodypart/L)
+1
View File
@@ -12,6 +12,7 @@
#define TOXIC (1<<11)
#define PINEAPPLE (1<<12)
#define BREAKFAST (1<<13)
#define ANTITOXIC (1<<14)
#define DRINK_NICE 1
#define DRINK_GOOD 2
+10 -1
View File
@@ -61,7 +61,7 @@
A.AddElement(/datum/element/update_icon_updates_onmob)
RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays)
if(suits_with_helmet_typecache[A.type])
RegisterSignal(A, COMSIG_SUIT_MADE_HELMET, .proc/register_helmet)
RegisterSignal(A, COMSIG_SUIT_MADE_HELMET, .proc/register_helmet) //you better work now you slut
else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //in the event mob update icon procs are ever standarized.
var/datum/action/polychromic/P = new(A)
RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action)
@@ -166,6 +166,15 @@
examine_list += "<span class='notice'>Alt-click to recolor it.</span>"
/datum/element/polychromic/proc/register_helmet(atom/source, obj/item/clothing/head/H)
if(!isitem(H)) //backup in case if it messes up somehow
if(istype(source,/obj/item/clothing/suit/hooded)) //so how come it be like this, where toggleable headslots are named separately (helmet/hood) anyways?
var/obj/item/clothing/suit/hooded/sourcesuit = source
H = sourcesuit.hood
else if(istype(source,/obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/sourcesuit = source
H = sourcesuit.helmet
else
return
suit_by_helmet[H] = source
helmet_by_suit[source] = H
colors_by_atom[H] = colors_by_atom[source]
+11
View File
@@ -285,6 +285,17 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = -0.15
texture_layer_icon_state = "runed"
/datum/material/brass
name = "brass"
desc = "Tybel gb-Ratvar"
color = "#917010"
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
strength_modifier = 1.3 // Replicant Alloy is very good for skull beatings..
sheet_type = /obj/item/stack/tile/brass
value_per_unit = 0.75
armor_modifiers = list("melee" = 1.4, "bullet" = 1.4, "laser" = 0, "energy" = 0, "bomb" = 1.4, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) //But it has.. a few problems that can't easily be compensated for.
beauty_modifier = 0.3 //It really beats the cold plain plating of the station, doesn't it?
/datum/material/bronze
name = "bronze"
desc = "Clock Cult? Never heard of it."
@@ -178,9 +178,12 @@
table[y1][x1] += 10
if(href_list["same_board"]) //Reset the board... kinda
if(game_status != MINESWEEPER_GAME_PLAYING)
mine_sound = TRUE
game_status = MINESWEEPER_GAME_PLAYING
if(table[y1][x1] >= 10) //If revealed, become unrevealed!
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
if(mine_sound)
playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10)
mine_sound = FALSE
table[y1][x1] -= 10
if(table[y1][x1] > 10 && !reset_board)
safe_squares_revealed += 1
+11
View File
@@ -38,3 +38,14 @@
if(stat & (BROKEN|NOPOWER))
return
drive()
/obj/machinery/mass_driver/pressure_plate
name = "pressure plated mass driver"
var/drive_delay = 10
/obj/machinery/mass_driver/pressure_plate/Crossed(atom/movable/O)
. = ..()
if(isliving(O))
var/mob/living/L = O
to_chat(L, "<span class='warning'>You feel something click beneath you!</span>")
addtimer(CALLBACK(src, .proc/drive), drive_delay)
@@ -636,7 +636,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
null, \
new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/bottle/holyoil/empty), \
new/datum/stack_recipe("brass smith's hammer", /obj/item/melee/smith/hammer/ratvar, 6), \
new/datum/stack_recipe("brass ingot", /obj/item/ingot/bronze/ratvar, 6, time = 100), \
new/datum/stack_recipe("brass ingot", /obj/item/ingot/ratvar, 6, time = 100), \
))
/obj/item/stack/tile/brass
@@ -138,7 +138,7 @@
if(owner.current.gender == MALE)
if(prob(10)) // Gender override
bloodsucker_reputation = pick("King of the Damned", "Blood King", "Emperor of Blades", "Sinlord", "God-King")
else
else if(owner.current.gender == FEMALE)
if(prob(10)) // Gender override
bloodsucker_reputation = pick("Queen of the Damned", "Blood Queen", "Empress of Blades", "Sinlady", "God-Queen")
@@ -341,10 +341,12 @@
//This handles the application of antag huds/special abilities
/datum/antagonist/bloodsucker/apply_innate_effects(mob/living/mob_override)
RegisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE,.proc/LifeTick)
return
//This handles the removal of antag huds/special abilities
/datum/antagonist/bloodsucker/remove_innate_effects(mob/living/mob_override)
UnregisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE)
return
//Assign default team and creates one for one of a kind team antagonists
@@ -94,6 +94,7 @@
B.decoy_override = FALSE
remove_changeling_powers()
owner.special_role = null
owner.current.hud_used?.lingchemdisplay?.invisibility = INVISIBILITY_ABSTRACT
. = ..()
/datum/antagonist/changeling/proc/remove_clownmut()
@@ -225,6 +226,8 @@
else //not dead? no chem/geneticdamage caps.
chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage)
geneticdamage = max(0, geneticdamage-1)
owner.current.hud_used?.lingchemdisplay?.invisibility = 0
owner.current.hud_used?.lingchemdisplay?.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[round(chem_charges)]</font></div>"
/datum/antagonist/changeling/proc/get_dna(dna_owner)
@@ -357,10 +360,12 @@
B.organ_flags &= ~ORGAN_VITAL
B.decoy_override = TRUE
update_changeling_icons_added()
RegisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE,.proc/regenerate)
return
/datum/antagonist/changeling/remove_innate_effects()
update_changeling_icons_removed()
UnregisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE)
return
@@ -13,7 +13,9 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
/obj/machinery/syndicatebomb/badmin/clown,
/obj/machinery/syndicatebomb/empty,
/obj/machinery/syndicatebomb/self_destruct,
/obj/machinery/syndicatebomb/training
/obj/machinery/syndicatebomb/training,
/obj/machinery/gravity_generator,
/obj/machinery/gravity_generator/main
)))
//The malf AI action subtype. All malf actions are subtypes of this.
@@ -331,6 +331,7 @@
var/heat = thermal_conductivity*delta_temperature* \
(heat_capacity*HEAT_CAPACITY_VACUUM/(heat_capacity+HEAT_CAPACITY_VACUUM))
temperature -= heat/heat_capacity
temperature = max(temperature,T0C) //otherwise we just sorta get stuck at super cold temps forever
/turf/open/proc/temperature_share_open_to_solid(turf/sharer)
sharer.temperature = air.temperature_share(null, sharer.thermal_conductivity, sharer.temperature, sharer.heat_capacity)
@@ -344,3 +345,5 @@
temperature -= heat/heat_capacity
sharer.temperature += heat/sharer.heat_capacity
temperature = max(temperature,T0C)
sharer.temperature = max(sharer.temperature,T0C)
@@ -40,6 +40,9 @@
/datum/gas_reaction/proc/react(datum/gas_mixture/air, atom/location)
return NO_REACTION
/datum/gas_reaction/proc/test()
return list("success" = TRUE)
/datum/gas_reaction/nobliumsupression
priority = INFINITY
name = "Hyper-Noblium Reaction Suppression"
@@ -70,6 +73,8 @@
air.adjust_moles(/datum/gas/water_vapor,-MOLES_GAS_VISIBLE)
. = REACTING
// no test cause it's entirely based on location
//tritium combustion: combustion of oxygen and tritium (treated as hydrocarbons). creates hotspots. exothermic
/datum/gas_reaction/tritfire
priority = -1 //fire should ALWAYS be last, but tritium fires happen before plasma fires
@@ -126,6 +131,18 @@
return cached_results["fire"] ? REACTING : NO_REACTION
/datum/gas_reaction/tritfire/test()
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/tritium,50)
G.set_moles(/datum/gas/oxygen,50)
G.set_temperature(500)
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
if(!G.reaction_results["fire"])
return list("success" = FALSE, "message" = "Trit fires aren't setting fire results correctly!")
return ..()
//plasma combustion: combustion of oxygen and plasma (treated as hydrocarbons). creates hotspots. exothermic
/datum/gas_reaction/plasmafire
priority = -2 //fire should ALWAYS be last, but plasma fires happen after tritium fires
@@ -198,6 +215,28 @@
return cached_results["fire"] ? REACTING : NO_REACTION
/datum/gas_reaction/plasmafire/test()
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/plasma,50)
G.set_moles(/datum/gas/oxygen,50)
G.set_volume(1000)
G.set_temperature(500)
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
if(!G.reaction_results["fire"])
return list("success" = FALSE, "message" = "Plasma fires aren't setting fire results correctly!")
if(!G.get_moles(/datum/gas/carbon_dioxide))
return list("success" = FALSE, "message" = "Plasma fires aren't making CO2!")
G.clear()
G.set_moles(/datum/gas/plasma,10)
G.set_moles(/datum/gas/oxygen,1000)
G.set_temperature(500)
result = G.react()
if(!G.get_moles(/datum/gas/tritium))
return list("success" = FALSE, "message" = "Plasma fires aren't making trit!")
return ..()
//fusion: a terrible idea that was fun but broken. Now reworked to be less broken and more interesting. Again (and again, and again). Again!
//Fusion Rework Counter: Please increment this if you make a major overhaul to this system again.
//6 reworks
@@ -282,6 +321,31 @@
air.set_temperature(clamp(((air.return_temperature()*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY))
return REACTING
/datum/gas_reaction/fusion/test()
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/carbon_dioxide,300)
G.set_moles(/datum/gas/plasma,1000)
G.set_moles(/datum/gas/tritium,100.61)
G.set_moles(/datum/gas/nitryl,1)
G.set_temperature(15000)
G.set_volume(1000)
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
if(abs(G.analyzer_results["fusion"] - 3) > 0.0000001)
var/instability = G.analyzer_results["fusion"]
return list("success" = FALSE, "message" = "Fusion is not calculating analyzer results correctly, should be 3.000000045, is instead [instability]")
if(abs(G.get_moles(/datum/gas/plasma) - 850.616) > 0.5)
var/plas = G.get_moles(/datum/gas/plasma)
return list("success" = FALSE, "message" = "Fusion is not calculating plasma correctly, should be 850.616, is instead [plas]")
if(abs(G.get_moles(/datum/gas/carbon_dioxide) - 1699.384) > 0.5)
var/co2 = G.get_moles(/datum/gas/carbon_dioxide)
return list("success" = FALSE, "message" = "Fusion is not calculating co2 correctly, should be 1699.384, is instead [co2]")
if(abs(G.return_temperature() - 27600) > 200) // calculating this manually sucks dude
var/temp = G.return_temperature()
return list("success" = FALSE, "message" = "Fusion is not calculating temperature correctly, should be around 27600, is instead [temp]")
return ..()
/datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires N2O as a catalyst.
priority = 3
name = "Nitryl formation"
@@ -313,6 +377,20 @@
air.set_temperature(max(((temperature*old_heat_capacity - energy_used)/new_heat_capacity),TCMB))
return REACTING
/datum/gas_reaction/nitrylformation/test()
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/oxygen,30)
G.set_moles(/datum/gas/nitrogen,30)
G.set_moles(/datum/gas/nitrous_oxide,10)
G.set_volume(1000)
G.set_temperature(150000)
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
if(!G.get_moles(/datum/gas/nitryl) < 0.8)
return list("success" = FALSE, "message" = "Nitryl isn't being generated correctly!")
return ..()
/datum/gas_reaction/bzformation //Formation of BZ by combining plasma and tritium at low pressures. Exothermic.
priority = 4
name = "BZ Gas formation"
@@ -348,6 +426,19 @@
air.set_temperature(max(((temperature*old_heat_capacity + energy_released)/new_heat_capacity),TCMB))
return REACTING
/datum/gas_reaction/bzformation/test()
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/plasma,15)
G.set_moles(/datum/gas/nitrous_oxide,15)
G.set_volume(1000)
G.set_temperature(10)
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
if(!G.get_moles(/datum/gas/bz) < 4) // efficiency is 4.0643 and bz generation == efficiency
return list("success" = FALSE, "message" = "Nitryl isn't being generated correctly!")
return ..()
/datum/gas_reaction/stimformation //Stimulum formation follows a strange pattern of how effective it will be at a given temperature, having some multiple peaks and some large dropoffs. Exo and endo thermic.
priority = 5
name = "Stimulum formation"
@@ -380,6 +471,23 @@
air.set_temperature(max(((air.return_temperature()*old_heat_capacity + stim_energy_change)/new_heat_capacity),TCMB))
return REACTING
/datum/gas_reaction/stimformation/test()
//above mentioned "strange pattern" is a basic quintic polynomial, it's fine, can calculate it manually
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/bz,30)
G.set_moles(/datum/gas/plasma,1000)
G.set_moles(/datum/gas/tritium,1000)
G.set_moles(/datum/gas/nitryl,1000)
G.set_volume(1000)
G.set_temperature(12998000) // yeah, really
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
if(!G.get_moles(/datum/gas/stimulum) < 900)
return list("success" = FALSE, "message" = "Stimulum isn't being generated correctly!")
return ..()
/datum/gas_reaction/nobliumformation //Hyper-Noblium formation is extrememly endothermic, but requires high temperatures to start. Due to its high mass, hyper-nobelium uses large amounts of nitrogen and tritium. BZ can be used as a catalyst to make it less endothermic.
priority = 6
name = "Hyper-Noblium condensation"
@@ -408,6 +516,19 @@
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
air.set_temperature(max(((air.return_temperature()*old_heat_capacity - energy_taken)/new_heat_capacity),TCMB))
/datum/gas_reaction/nobliumformation/test()
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/nitrogen,100)
G.set_moles(/datum/gas/tritium,500)
G.set_volume(1000)
G.set_temperature(5000000) // yeah, really
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
if(abs(G.thermal_energy() - 23000000000) > 1000000) // god i hate floating points
return list("success" = FALSE, "message" = "Hyper-nob formation isn't removing the right amount of heat! Should be 23,000,000,000, is instead [G.thermal_energy()]")
return ..()
/datum/gas_reaction/miaster //dry heat sterilization: clears out pathogens in the air
priority = -10 //after all the heating from fires etc. is done
@@ -433,3 +554,20 @@
//Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable
air.set_temperature(air.return_temperature() + cleaned_air * 0.002)
SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, cleaned_air*MIASMA_RESEARCH_AMOUNT)//Turns out the burning of miasma is kinda interesting to scientists
/datum/gas_reaction/miaster/test()
var/datum/gas_mixture/G = new
G.set_moles(/datum/gas/miasma,1)
G.set_volume(1000)
G.set_temperature(450)
var/result = G.react()
if(result != REACTING)
return list("success" = FALSE, "message" = "Reaction didn't go at all!")
G.clear()
G.set_moles(/datum/gas/miasma,1)
G.set_temperature(450)
G.set_moles(/datum/gas/water_vapor,0.5)
result = G.react()
if(result != NO_REACTION)
return list("success" = FALSE, "message" = "Miasma sterilization not stopping due to water vapor correctly!")
return ..()
+4 -4
View File
@@ -5,9 +5,9 @@
var/obj/item/clothing/head/hooded/hood
var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this
/obj/item/clothing/suit/hooded/New()
/obj/item/clothing/suit/hooded/Initialize()
. = ..()
hood = MakeHelmet()
..()
/obj/item/clothing/suit/hooded/Destroy()
. = ..()
@@ -48,7 +48,7 @@
/obj/item/clothing/suit/hooded/update_icon_state()
icon_state = "[initial(icon_state)]"
if(ishuman(hood.loc))
if(ishuman(hood?.loc))
var/mob/living/carbon/human/H = hood.loc
if(H.head == hood)
icon_state += "_t"
@@ -131,8 +131,8 @@
//Hardsuit toggle code
/obj/item/clothing/suit/space/hardsuit/Initialize()
helmet = MakeHelmet()
. = ..()
helmet = MakeHelmet()
/obj/item/clothing/suit/space/hardsuit/Destroy()
if(helmet)
@@ -133,7 +133,7 @@
slices_num = 5
bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10)
tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
foodtype = GRAIN | DAIRY | FRUIT | SUGAR | ANTITOXIC
/obj/item/reagent_containers/food/snacks/cakeslice/lime
name = "lime cake slice"
@@ -141,7 +141,7 @@
icon_state = "limecake_slice"
filling_color = "#00FF00"
tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
foodtype = GRAIN | DAIRY | FRUIT | SUGAR | ANTITOXIC
/obj/item/reagent_containers/food/snacks/store/cake/lemon
name = "lemon cake"
@@ -103,7 +103,7 @@
icon_state = "lime_sc"
list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/limejuice = 5)
tastes = list("ice" = 1, "water" = 1, "limes" = 5)
foodtype = FRUIT
foodtype = FRUIT | ANTITOXIC
/obj/item/reagent_containers/food/snacks/snowcones/lemon
name = "lemon snowcone"
@@ -191,7 +191,7 @@
icon_state = "fruitsalad_sc"
list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/lemonjuice = 5, /datum/reagent/consumable/limejuice = 5, /datum/reagent/consumable/orangejuice = 5)
tastes = list("ice" = 1, "water" = 1, "oranges" = 5, "limes" = 5, "lemons" = 5, "citrus" = 5, "salad" = 5)
foodtype = FRUIT
foodtype = FRUIT | ANTITOXIC
/obj/item/reagent_containers/food/snacks/snowcones/pineapple
name = "pineapple snowcone"
@@ -232,7 +232,7 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/toxin = 1, /datum/reagent/iron = 10, /datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/omnizine = 2) //lollipop, but vitamins = toxins
filling_color = "#00800"
tastes = list("cobwebs" = 1, "sugar" = 2)
foodtype = JUNKFOOD | SUGAR
foodtype = JUNKFOOD | SUGAR | ANTITOXIC
/obj/item/reagent_containers/food/snacks/tobiko
name = "tobiko"
@@ -451,7 +451,7 @@
var/mutable_appearance/head
var/headcolor = rgb(0, 0, 0)
tastes = list("candy" = 1)
foodtype = JUNKFOOD | SUGAR
foodtype = JUNKFOOD | SUGAR | ANTITOXIC
/obj/item/reagent_containers/food/snacks/lollipop/Initialize()
. = ..()
@@ -756,4 +756,4 @@
bitesize = 2
name = "hot-cross bun"
desc = "The Cross represents the Assistants that died for your sins."
icon_state = "hotcrossbun"
icon_state = "hotcrossbun"
@@ -509,7 +509,7 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/omnizine = 3)
cooked_type = null
tastes = list("meat" = 2, "dough" = 2, "laziness" = 1)
foodtype = GRAIN
foodtype = GRAIN | ANTITOXIC
/obj/item/reagent_containers/food/snacks/dankpocket
name = "\improper Dank-pocket"
@@ -556,9 +556,11 @@
name = "exceptional plump helmet biscuit"
desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
bonus_reagents = list(/datum/reagent/medicine/omnizine = 5, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
foodtype += ANTITOXIC
. = ..()
if(fey)
reagents.add_reagent(/datum/reagent/medicine/omnizine, 5)
foodtype += ANTITOXIC
/obj/item/reagent_containers/food/snacks/cracker
name = "cracker"
@@ -171,8 +171,10 @@
name = "exceptional plump pie"
desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!"
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/medicine/omnizine = 5, /datum/reagent/consumable/nutriment/vitamin = 4)
foodtype += ANTITOXIC
if(fey)
reagents.add_reagent(/datum/reagent/medicine/omnizine, 5)
foodtype += ANTITOXIC
/obj/item/reagent_containers/food/snacks/pie/xemeatpie
@@ -109,7 +109,7 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 5)
list_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/tomatojuice = 6, /datum/reagent/medicine/omnizine = 10, /datum/reagent/consumable/nutriment/vitamin = 5)
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1, "laziness" = 1)
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD | ANTITOXIC
/obj/item/reagent_containers/food/snacks/pizzaslice/donkpocket
name = "donkpocket pizza slice"
@@ -117,7 +117,7 @@
icon_state = "donkpocketpizzaslice"
filling_color = "#FFA500"
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1, "laziness" = 1)
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD | ANTITOXIC
/obj/item/reagent_containers/food/snacks/pizza/dank
name = "dank pizza"
@@ -127,7 +127,7 @@
bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 6)
list_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/doctor_delight = 5, /datum/reagent/consumable/tomatojuice = 6, /datum/reagent/consumable/nutriment/vitamin = 5)
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1)
foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY
foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY | ANTITOXIC
/obj/item/reagent_containers/food/snacks/pizzaslice/dank
name = "dank pizza slice"
@@ -135,7 +135,7 @@
icon_state = "dankpizzaslice"
filling_color = "#2E8B57"
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1)
foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY
foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY | ANTITOXIC
/obj/item/reagent_containers/food/snacks/pizza/sassysage
name = "sassysage pizza"
@@ -187,6 +187,7 @@
slice_path = /obj/item/reagent_containers/food/snacks/pizzaslice/arnold
bonus_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/iron = 10, /datum/reagent/medicine/omnizine = 30)
tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2, "9 millimeter bullets" = 2)
/obj/item/reagent_containers/food/snacks/proc/try_break_off(mob/living/M, mob/living/user) //maybe i give you a pizza maybe i break off your arm
var/obj/item/bodypart/l_arm = user.get_bodypart(BODY_ZONE_L_ARM)
@@ -244,4 +245,4 @@
icon_state = "meatpizzaslice"
filling_color = "#A52A2A"
tastes = list("cardboard" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2)
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT
foodtype = GRAIN | VEGETABLES | DAIRY | MEAT
@@ -20,7 +20,7 @@
bonus_reagents = list(/datum/reagent/medicine/omnizine = 2, /datum/reagent/consumable/nutriment/vitamin = 6)
list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/medicine/omnizine = 8, /datum/reagent/consumable/nutriment/vitamin = 6)
tastes = list("leaves" = 1)
foodtype = VEGETABLES
foodtype = VEGETABLES | ANTITOXIC
/obj/item/reagent_containers/food/snacks/salad/herbsalad
name = "herb salad"
@@ -38,7 +38,7 @@
bonus_reagents = list(/datum/reagent/consumable/doctor_delight = 5, /datum/reagent/consumable/nutriment/vitamin = 4)
list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/doctor_delight = 5, /datum/reagent/consumable/nutriment/vitamin = 2)
tastes = list("leaves" = 1, "potato" = 1, "meat" = 1, "valids" = 1)
foodtype = VEGETABLES | MEAT | FRIED | JUNKFOOD | FRUIT
foodtype = VEGETABLES | MEAT | FRIED | JUNKFOOD | FRUIT | ANTITOXIC
/obj/item/reagent_containers/food/snacks/salad/oatmeal
name = "oatmeal"
@@ -133,7 +133,7 @@
trash = /obj/item/reagent_containers/glass/bowl
list_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/medicine/earthsblood = 3, /datum/reagent/medicine/omnizine = 5, /datum/reagent/drug/happiness = 2)
tastes = list("hope" = 1)
foodtype = VEGETABLES
foodtype = VEGETABLES | ANTITOXIC
/obj/item/reagent_containers/food/snacks/salad/gumbo
name = "black eyed gumbo"
@@ -89,7 +89,7 @@
icon_state = "nettlesoup"
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/medicine/omnizine = 5, /datum/reagent/consumable/nutriment/vitamin = 5)
tastes = list("nettles" = 1)
foodtype = VEGETABLES
foodtype = VEGETABLES | ANTITOXIC
/obj/item/reagent_containers/food/snacks/soup/mystery
name = "mystery soup"
@@ -89,7 +89,7 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/doctor_delight = 5)
filling_color = "#F5F5DC"
tastes = list("sweetness" = 3, "cake" = 1)
foodtype = GRAIN | FRUIT | VEGETABLES
foodtype = GRAIN | FRUIT | VEGETABLES | ANTITOXIC
custom_price = PRICE_CHEAP
/obj/item/reagent_containers/food/snacks/energybar
@@ -49,6 +49,7 @@
seed = /obj/item/seeds/ambrosia/deus
name = "ambrosia deus branch"
desc = "Eating this makes you feel immortal!"
foodtype = VEGETABLES | ANTITOXIC
icon_state = "ambrosiadeus"
filling_color = "#008B8B"
wine_power = 50
@@ -104,6 +104,7 @@
seed = /obj/item/seeds/cannabis/death
name = "death cannabis leaf"
desc = "Looks a bit dark. Oh well."
foodtype = VEGETABLES | TOXIC
icon_state = "blackcannabis"
wine_power = 40
@@ -111,6 +112,7 @@
seed = /obj/item/seeds/cannabis/white
name = "white cannabis leaf"
desc = "It feels smooth and nice to the touch."
foodtype = VEGETABLES | ANTITOXIC
icon_state = "whitecannabis"
wine_power = 10
+1
View File
@@ -29,6 +29,7 @@
seed = /obj/item/seeds/lime
name = "lime"
desc = "It's so sour, your face will twist."
foodtype = FRUIT | ANTITOXIC
icon_state = "lime"
filling_color = "#00FF00"
juice_results = list(/datum/reagent/consumable/limejuice = 0)
@@ -40,9 +40,6 @@
if(move_delay_add > 0)
move_delay_add = max(0, move_delay_add - rand(1, 2))
/mob/living/carbon/alien/handle_changeling()
return
/mob/living/carbon/alien/handle_fire()//Aliens on fire code
if(..())
return
@@ -18,7 +18,8 @@
var/datum/action/innate/regenerate_limbs/regenerate_limbs
var/datum/action/innate/slime_change/slime_change //CIT CHANGE
liked_food = TOXIC | MEAT
toxic_food = null
disliked_food = null
toxic_food = ANTITOXIC
coldmod = 6 // = 3x cold damage
heatmod = 0.5 // = 1/4x heat damage
burnmod = 0.5 // = 1/2x generic burn damage
+1 -23
View File
@@ -1,8 +1,4 @@
/mob/living/carbon/BiologicalLife(seconds, times_fired)
//Updates the number of stored chemicals for powers
handle_changeling()
//Handles the unique mentabolism of bloodsuckers, look at /datum/antagonist/bloodsucker/proc/LifeTick()
handle_bloodsucker()
//Reagent processing needs to come before breathing, to prevent edge cases.
handle_organs()
. = ..() // if . is false, we are dead.
@@ -410,25 +406,7 @@
for(var/thing in all_wounds)
var/datum/wound/W = thing
if(W.processes) // meh
W.handle_process()
//todo generalize this and move hud out
/mob/living/carbon/proc/handle_changeling()
if(mind && hud_used && hud_used.lingchemdisplay)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
changeling.regenerate()
hud_used.lingchemdisplay.invisibility = 0
hud_used.lingchemdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[round(changeling.chem_charges)]</font></div>"
else
hud_used.lingchemdisplay.invisibility = INVISIBILITY_ABSTRACT
/mob/living/carbon/proc/handle_bloodsucker()
if(mind && AmBloodsucker(src))
var/datum/antagonist/bloodsucker/B = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
B.LifeTick()
W.handle_process()
/mob/living/carbon/handle_mutations_and_radiation()
if(dna && dna.temporary_mutations.len)
+2
View File
@@ -43,6 +43,7 @@
* Returns TRUE or FALSE based on if we were interrupted. This is used by overridden variants to check if they should stop.
*/
/mob/living/proc/BiologicalLife(seconds, times_fired)
SEND_SIGNAL(src,COMSIG_LIVING_BIOLOGICAL_LIFE, seconds, times_fired)
handle_diseases()// DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not.
handle_wounds()
@@ -78,6 +79,7 @@
* Returns TRUE or FALSE based on if we were interrupted. This is used by overridden variants to check if they should stop.
*/
/mob/living/proc/PhysicalLife(seconds, times_fired)
SEND_SIGNAL(src,COMSIG_LIVING_PHYSICAL_LIFE, seconds, times_fired)
if(digitalinvis)
handle_diginvis() //AI becomes unable to see mob
+1 -1
View File
@@ -42,7 +42,7 @@
for (var/x in 1 to PILL_STYLE_COUNT)
var/list/SL = list()
SL["id"] = x
SL["htmltag"] = assets.icon_tag("pill[x]")
SL["class_name"] = assets.icon_class_name("pill[x]")
pill_styles += list(SL)
@@ -2280,6 +2280,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
quality = RACE_DRINK
else
C.adjust_disgust(disgust)
return ..()
/datum/reagent/consumable/ethanol/species_drink/coldscales
name = "Coldscales"
@@ -2289,7 +2290,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "coldscales"
glass_name = "glass of Coldscales"
glass_desc = "A soft green drink that looks inviting!"
species_required = "lizard"
/datum/reagent/consumable/ethanol/species_drink/oil_drum
@@ -2301,7 +2301,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "oil_drum"
glass_name = "Drum of oil"
glass_desc = "A gray can of booze and oil..."
species_required = "robot"
/datum/reagent/consumable/ethanol/species_drink/nord_king
@@ -2312,7 +2311,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "nord_king"
glass_name = "Keg of Nord King"
glass_desc = "A dripping keg of red mead."
species_required = "basic"
/datum/reagent/consumable/ethanol/species_drink/velvet_kiss
@@ -2324,7 +2322,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "velvet_kiss"
glass_name = "glass of Velvet Kiss"
glass_desc = "Red and white drink for the upper classes or undead."
species_required = "undead"
/datum/reagent/consumable/ethanol/species_drink/abduction_fruit
@@ -2336,7 +2333,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "abduction_fruit"
glass_name = "glass of Abduction Fruit"
glass_desc = "Mixed fruits that were never meant to be mixed..."
species_required = "alien"
/datum/reagent/consumable/ethanol/species_drink/bug_zapper
@@ -2348,7 +2344,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "bug_zapper"
glass_name = "glass of Bug Zapper"
glass_desc = "An odd mix of copper, lemon juice and power meant for non-human consumption."
species_required = "bug"
/datum/reagent/consumable/ethanol/species_drink/mush_crush
@@ -2360,7 +2355,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "mush_crush"
glass_name = "glass of Mush Crush"
glass_desc = "Popular among people that want to grow their own food rather than drink the soil."
species_required = "plant"
/datum/reagent/consumable/ethanol/species_drink/darkbrew
@@ -2372,7 +2366,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "darkbrew"
glass_name = "glass of Darkbrew"
glass_desc = "A pitch black drink that's commonly confused with a type of coffee."
species_required = "shadow"
/datum/reagent/consumable/ethanol/species_drink/hollow_bone
@@ -2384,7 +2377,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "hollow_bone"
glass_name = "skull of Hollow Bone"
glass_desc = "Mixing of milk and bone hurting juice for the enjoyment of rather skinny people."
species_required = "skeleton"
/datum/reagent/consumable/ethanol/species_drink/frisky_kitty
@@ -2396,7 +2388,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "frisky_kitty"
glass_name = "cup of Drisky Kitty"
glass_desc = "Warm milk and some catnip."
species_required = "furry"
/datum/reagent/consumable/ethanol/species_drink/jell_wyrm
@@ -2408,7 +2399,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "jell_wyrm"
glass_name = "glass of Jell Wyrm"
glass_desc = "A bubbly drink that is rather inviting to those that don't know who it's meant for."
species_required = "jelly"
/datum/reagent/consumable/ethanol/species_drink/laval_spit //Yes Laval
@@ -2420,7 +2410,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "laval_spit"
glass_name = "glass of Laval Spit"
glass_desc = "Piping hot drink for those who can stomach the heat of lava."
species_required = "golem"
///////////////
+4 -5
View File
@@ -79,10 +79,9 @@
/obj/item/ingot/bronze
custom_materials = list(/datum/material/bronze=12000)
/obj/item/ingot/bronze/ratvar
material_flags = MATERIAL_COLOR
name = "brass ingnot"
desc = "On closer inspection, what appears to be wholly-unsuitable-for-smithing brass is actually more structurally stable bronze. Ratvar must have transformed the brass into bronze. Somehow."
/obj/item/ingot/ratvar
custom_materials = list(/datum/material/brass=12000)
desc = "On closer inspection, what appears to be wholly-unsuitable-for-smithing brass is actually primarily replicant alloy. Nezbere must have switched it while you weren't looking."
/obj/item/smithing/attackby(obj/item/I, mob/user)
@@ -382,7 +381,7 @@
finalitem = /obj/item/melee/smith/twohand/glaive
icon_state = "glaive"
/obj/item/smithing/glaive/startfinish()
/obj/item/smithing/glaivehead/startfinish()
var/obj/item/melee/smith/twohand/glaive/finalforreal = new /obj/item/melee/smith/twohand/glaive(src)
finalforreal.force += quality
finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult
+6
View File
@@ -0,0 +1,6 @@
/datum/unit_test/reactions/Run()
for(var/datum/gas_reaction/G in SSair.gas_reactions)
var/test_info = G.test()
if(!test_info["success"])
var/message = test_info["message"]
Fail("Gas reaction [G.name] is failing its unit test with the following message: [message]")
@@ -20,6 +20,7 @@
desc = "A sleek box containing a brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers, and an extra speedloader."
item = /obj/item/storage/box/syndie_kit/revolver
cost = 13
player_minimum = 15
surplus = 50
exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
+57
View File
@@ -50,6 +50,63 @@
-->
<div class="commit sansserif">
<h2 class="date">12 September 2020</h2>
<h3 class="author">BlueWildrose updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">The Polychromic winter coat's hoodie will now polychrome, alongside any other new polychromic items with toggleable headwear.</li>
<li class="bugfix">Minesweeper will no longer blow up the player's ears when they select "Play on the same board"</li>
<li class="rscadd">Slimepeople will find warm donk pockets among other toxin healing items even more repulsive, as they are anti-toxic.</li>
<li class="tweak">Slimepeople are now neutral to gross foods.</li>
</ul>
<h3 class="author">DeltaFire15 updated:</h3>
<ul class="changes bgimages16">
<li class="balance">AIs can no longer qdel() the gravity generator</li>
</ul>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
<li class="code_imp">Added some unit tests for reactions.</li>
<li class="refactor">replaced handle_changeling and handle_bloodsucker with signal registration</li>
</ul>
<h3 class="author">Sonic121x updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixed pill button on chemical press</li>
</ul>
<h3 class="author">TheObserver-sys updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Brass now has a proper datum. Aspiring Forgetenders rejoice!</li>
</ul>
<h3 class="author">Trilbyspaceclone updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Race based drinks will no longer stay inside your blood for ever.</li>
</ul>
<h3 class="author">Tupinambis updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Redid Cogstation atmos pipes to make it less cluttered.</li>
<li class="tweak">Removed a few doors from the main hallway to mitigate chokepoint issues</li>
<li class="bugfix">All belt hell conveyers are now on by default, so that belt hell actually works.</li>
<li class="bugfix">IDs for poddoors and belts and the like. Everything is now properly hooked and should work as expected (except for the pressure triggered mass drivers)</li>
<li class="bugfix">addresses most if not all roundstart active turfs.</li>
<li class="bugfix">Issue where wires were connected to the SMES improperly, and SMES were not properly precharged, resulting in power failure earlier than intended.</li>
<li class="bugfix">various rogue turfs and wirings.</li>
<li class="bugfix">security office APC being hooked to maintenance for some reason.</li>
<li class="bugfix">TEG is now directly wired to the SMES.</li>
<li class="code_imp">adds a subtype of mass drivers that is triggered by things being on it. TODO: Make these mass drivers trigger poddoors, to make belt hell fully functional.</li>
</ul>
<h3 class="author">lolman360 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">glaives now work again</li>
</ul>
<h3 class="author">zeroisthebiggay updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Revolver is now poplocked down to fifteen people.</li>
</ul>
<h2 class="date">11 September 2020</h2>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Superconducting turfs now can't go below 0 celsius.</li>
</ul>
<h2 class="date">09 September 2020</h2>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
+43
View File
@@ -27275,3 +27275,46 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- bugfix: Made superconductivity work for the first time literally ever.
timothyteakettle:
- bugfix: accents work better
2020-09-11:
Putnam3145:
- balance: Superconducting turfs now can't go below 0 celsius.
2020-09-12:
BlueWildrose:
- bugfix: The Polychromic winter coat's hoodie will now polychrome, alongside any
other new polychromic items with toggleable headwear.
- bugfix: Minesweeper will no longer blow up the player's ears when they select
"Play on the same board"
- rscadd: Slimepeople will find warm donk pockets among other toxin healing items
even more repulsive, as they are anti-toxic.
- tweak: Slimepeople are now neutral to gross foods.
DeltaFire15:
- balance: AIs can no longer qdel() the gravity generator
Putnam3145:
- code_imp: Added some unit tests for reactions.
- refactor: replaced handle_changeling and handle_bloodsucker with signal registration
Sonic121x:
- bugfix: Fixed pill button on chemical press
TheObserver-sys:
- rscadd: Brass now has a proper datum. Aspiring Forgetenders rejoice!
Trilbyspaceclone:
- bugfix: Race based drinks will no longer stay inside your blood for ever.
Tupinambis:
- tweak: Redid Cogstation atmos pipes to make it less cluttered.
- tweak: Removed a few doors from the main hallway to mitigate chokepoint issues
- bugfix: All belt hell conveyers are now on by default, so that belt hell actually
works.
- bugfix: IDs for poddoors and belts and the like. Everything is now properly hooked
and should work as expected (except for the pressure triggered mass drivers)
- bugfix: addresses most if not all roundstart active turfs.
- bugfix: Issue where wires were connected to the SMES improperly, and SMES were
not properly precharged, resulting in power failure earlier than intended.
- bugfix: various rogue turfs and wirings.
- bugfix: security office APC being hooked to maintenance for some reason.
- bugfix: TEG is now directly wired to the SMES.
- code_imp: 'adds a subtype of mass drivers that is triggered by things being on
it. TODO: Make these mass drivers trigger poddoors, to make belt hell fully
functional.'
lolman360:
- bugfix: glaives now work again
zeroisthebiggay:
- balance: Revolver is now poplocked down to fifteen people.