diff --git a/code/controllers/subsystems/market.dm b/code/controllers/subsystems/market.dm
index d6aaa32e1e..19971e65f2 100644
--- a/code/controllers/subsystems/market.dm
+++ b/code/controllers/subsystems/market.dm
@@ -46,7 +46,7 @@ SUBSYSTEM_DEF(market)
if((faction.weekly_assigned + 7 DAY) < world.realtime)
faction.assign_weekly_objective()
else
- if((faction.daily_assigned + 7 DAYS) < world.realtime)
+ if((faction.weekly_assigned + 7 DAYS) < world.realtime)
faction.assign_weekly_objective()
@@ -149,7 +149,7 @@ SUBSYSTEM_DEF(market)
if(R)
payee_account = R.linked_account
if(payee_account)
- if(payee_account.money >= pay_amount)
+ if(payer_account.money >= pay_amount)
var/datum/transaction/T = new("[payee] (via recurring contract)", "Contract Payment", -pay_amount, "Recurring Contract")
payer_account.do_transaction(T)
//transfer the money
diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm
index f2b9bf78f4..5fb501eb65 100644
--- a/code/game/machinery/seed_extractor.dm
+++ b/code/game/machinery/seed_extractor.dm
@@ -30,11 +30,8 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
if(new_seed_type)
to_chat(user, "You extract some seeds from [O].")
- if(prob(35))
- var/produce =(1)
- else
- to_chat (user, "You fail to extract any seeds from [O].")
- for(var/i = 0;i<=produce;i++)
+ var/produce = pick(1, 2)
+ for(var/i = 0; i <= produce; i++)
var/obj/item/seeds/seeds = new(get_turf(src))
seeds.seed_type = new_seed_type.name
seeds.update_seed()
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index 6409239a82..763f634cad 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -257,7 +257,7 @@
/decl/flooring/wood
name = "wooden floor"
- desc = "Polished redwood planks."
+ desc = "Polished oak planks."
icon = 'icons/turf/flooring/wood.dmi'
icon_base = "wood"
has_damage_range = 6
@@ -271,26 +271,32 @@
color = WOOD_COLOR_GENERIC
/decl/flooring/wood/mahogany
+ desc = "Polished mahogany planks."
color = WOOD_COLOR_RICH
build_type = /obj/item/stack/tile/mahogany
/decl/flooring/wood/maple
+ desc = "Polished maple planks."
color = WOOD_COLOR_PALE
build_type = /obj/item/stack/tile/maple
/decl/flooring/wood/ebony
+ desc = "Polished ebony planks."
color = WOOD_COLOR_BLACK
build_type = /obj/item/stack/tile/ebony
/decl/flooring/wood/walnut
+ desc = "Polished walnut planks."
color = WOOD_COLOR_CHOCOLATE
build_type = /obj/item/stack/tile/walnut
/decl/flooring/wood/bamboo
+ desc = "Polished bamboo planks."
color = WOOD_COLOR_PALE2
build_type = /obj/item/stack/tile/bamboo
/decl/flooring/wood/yew
+ desc = "Polished yew planks."
color = WOOD_COLOR_YELLOW
build_type = /obj/item/stack/tile/yew
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index a5ce742a06..7f5b3ae985 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -511,13 +511,13 @@ var/list/admin_verbs_mentor = list(
/client/proc/unban_panel()
set name = "Unban Panel"
set category = "Admin"
- // if(holder)
- // if(config.ban_legacy_system)
- // holder.unbanpanel()
- // else
- // holder.DB_ban_panel()
- // SSstatistics.add_field_details("admin_verb","UBP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- // return
+ if(holder)
+ if(config.ban_legacy_system)
+ holder.unbanpanel()
+ else
+ holder.DB_ban_panel()
+ SSstatistics.add_field_details("admin_verb","UBP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ return
/client/proc/game_panel()
set name = "Game Panel"
diff --git a/code/modules/designer/canvas.dm b/code/modules/designer/canvas.dm
index da0aedfe58..6f4506617c 100644
--- a/code/modules/designer/canvas.dm
+++ b/code/modules/designer/canvas.dm
@@ -1,5 +1,5 @@
/obj/item/frame/canvas
- name = "Canvas (30x30)"
+ name = "Canvas"
desc = "Such avant-garde, much art."
gender = NEUTER
icon = 'icons/obj/bureaucracy.dmi'
@@ -104,6 +104,7 @@
canvas_item = frame.type
designer_associate(frame.designer_unit)
designer_update_icon()
+ anchored = 1
/obj/structure/canvas/Destroy()
designer_disassociate()
diff --git a/code/modules/designer/canvas/size_M.dm b/code/modules/designer/canvas/size_M.dm
index b8b1b6b0d0..886f499b6f 100644
--- a/code/modules/designer/canvas/size_M.dm
+++ b/code/modules/designer/canvas/size_M.dm
@@ -4,17 +4,18 @@
icon_offset_y = 5
icon_width = 22
icon_height = 22
-
+ name = "canvas (22x22)"
/obj/item/frame/canvas/size_m/portrait
icon_state = "canvas_m_p"
icon_offset_x = 8
icon_offset_y = 5
icon_width = 16
icon_height = 22
-
+ name = "canvas (16x22)"
/obj/item/frame/canvas/size_m/landscape
icon_state = "canvas_m_l"
icon_offset_x = 5
icon_offset_y = 8
icon_width = 22
icon_height = 16
+ name = "canvas (22x16)"
\ No newline at end of file
diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm
index 475f6619a0..96398d5d13 100644
--- a/code/modules/economy/Accounts.dm
+++ b/code/modules/economy/Accounts.dm
@@ -22,22 +22,11 @@
/datum/money_account/New()
ADD_SAVED_VAR(dupe_fixed)
..()
+
/datum/money_account/after_load()
- var/datum/money_account/M = get_account_loadless(account_number)
- if(M && M.money >= money)
- message_admins("duplicate account loaded owner: [owner_name] account_number: [M.account_number]")
- return M
- else if(M && M.money < money)
- all_money_accounts.Remove(M)
- all_money_accounts.Add(src)
- return src
- else
- all_money_accounts.Add(src)
+ all_money_accounts.Add(src)
if(money < 0)
money = 0
- if(!dupe_fixed && money > 3000)
- money = 3000
- dupe_fixed = 1
..()
return src
diff --git a/code/modules/factions/faction.dm b/code/modules/factions/faction.dm
index c2008b6197..775fd0815f 100644
--- a/code/modules/factions/faction.dm
+++ b/code/modules/factions/faction.dm
@@ -3438,7 +3438,7 @@ var/PriorityQueue/all_feeds
/datum/business_spec/mining/monsterhunter
name = "Monster Hunter"
desc = "This specialization gives the business capacity for a medical fabricator and tech that can produce machines and equipment to keep employees alive while fighting the top tier of monsters. Travel to the outer reaches and dig for riches, let the monsters come to you."
- limits = /datum/machine_limits/retail/spec/bigstore
+ limits = /datum/machine_limits/mining/spec/monsterhunter
hourly_objectives = list(/datum/module_objective/hourly/monsters)
daily_objectives = list(/datum/module_objective/daily/monsters)
weekly_objectives = list(/datum/module_objective/weekly/monsters)
diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm
index 139dd9b1ac..ca35157739 100644
--- a/code/modules/hydroponics/beekeeping/beehive.dm
+++ b/code/modules/hydroponics/beekeeping/beehive.dm
@@ -243,7 +243,7 @@
user.visible_message("\The [user] loads \the [H] into \the [src] and turns it on.", "You load \the [H] into \the [src] and turn it on.")
processing = H.honey
qdel(H)
- time_end_processing = world.time + 300 SECONDS
+ time_end_processing = world.time + 60 SECONDS
update_icon()
update_use_power(POWER_USE_ACTIVE)
return 1
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 81c3082387..e86ed2bc37 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -24,17 +24,16 @@
fill_reagents()
/obj/item/weapon/reagent_containers/food/snacks/grown/Initialize()
- . = ..()
if(!map_storage_loaded)
//Only get plant type from SSPlant if we're newly created. Otherwise keep our stored properties
if(!SSplants)
log_error("Plant controller does not exist and [src] requires it. Aborting.")
return INITIALIZE_HINT_QDEL
seed = SSplants.seeds[plantname]
- SetupReagents()
if(!seed)
+ log_error("[src]\ref[src] at loc [loc]([x], [y], [z]) didn't have a seed when initialized!")
return INITIALIZE_HINT_QDEL
-
+ . = ..() //SetupReagents is called in the base class, and it calls fill_reagents, which needs the seed to be setup!
SetName("[seed.seed_name]")
trash = seed.get_trash_type()
if(!dried_type)
@@ -45,6 +44,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/proc/fill_reagents()
if(!seed)
+ log_error("[src]\ref[src] had no seed when reagents were intialized!")
return
if(!seed.chems)
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 9029e64a8b..0b4db1884e 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -132,7 +132,33 @@
/obj/machinery/portable_atmospherics/hydroponics/New()
. = ..()
-
+ ADD_SAVED_VAR(waterlevel)
+ ADD_SAVED_VAR(nutrilevel)
+ ADD_SAVED_VAR(pestlevel)
+ ADD_SAVED_VAR(weedlevel)
+ ADD_SAVED_VAR(dead)
+ ADD_SAVED_VAR(harvest)
+ ADD_SAVED_VAR(age)
+ ADD_SAVED_VAR(sampled)
+ ADD_SAVED_VAR(yield_mod)
+ ADD_SAVED_VAR(mutation_mod)
+ ADD_SAVED_VAR(toxins)
+ ADD_SAVED_VAR(mutation_level)
+ ADD_SAVED_VAR(tray_light)
+ ADD_SAVED_VAR(plant_health)
+
+ ADD_SAVED_VAR(closed_system)
+
+ ADD_SAVED_VAR(temp_chem_holder)
+ ADD_SAVED_VAR(labelled)
+ ADD_SAVED_VAR(seed)
+ ADD_SAVED_VAR(req_access_faction)
+
+/obj/machinery/portable_atmospherics/hydroponics/before_save()
+ . = ..()
+ if(connected_faction)
+ req_access_faction = connected_faction.uid
+
/obj/machinery/portable_atmospherics/hydroponics/after_load()
..()
if(req_access_faction)
diff --git a/code/modules/materials/definitions/materials_metal.dm b/code/modules/materials/definitions/materials_metal.dm
index 8b94482d81..8e395f549a 100644
--- a/code/modules/materials/definitions/materials_metal.dm
+++ b/code/modules/materials/definitions/materials_metal.dm
@@ -395,7 +395,7 @@
weight = 23
stack_origin_tech = list(TECH_MATERIAL = 2)
hitsound = 'sound/weapons/smash.ogg'
- alloy_materials = list(MATERIAL_IRON = 1250, MATERIAL_PLATINUM = 1250, MATERIAL_GRAPHITE = 1250)
+ alloy_materials = list(MATERIAL_STEEL = 1875, MATERIAL_PLATINUM = 1875)
alloy_product = TRUE
ore_smelts_to = MATERIAL_PLASTEEL
diff --git a/code/modules/mining/machinery/mineral_processor.dm b/code/modules/mining/machinery/mineral_processor.dm
index e37c9ecd84..4f7d5df118 100644
--- a/code/modules/mining/machinery/mineral_processor.dm
+++ b/code/modules/mining/machinery/mineral_processor.dm
@@ -47,7 +47,7 @@
if(input_turf)
for(var/obj/item/stack/S in input_turf)
// If we are deleted or are neither dust or ore, continue
- if(QDELETED(S) || (!istype(S, /obj/item/stack/material_dust) && !istype(S, /obj/item/stack/ore)) || !LAZYLEN(S.matter))
+ if(QDELETED(S) || (!istype(S, /obj/item/stack/material_dust) && !istype(S, /obj/item/stack/ore) && !istype(S, /obj/item/stack/material)) || !LAZYLEN(S.matter))
continue
// Otherwise add the matter in the stack to our stores.
@@ -58,7 +58,7 @@
LAZYASSOC(materials_processing, M.name)
qdel(S)
-
+
if(output_turf)
var/list/attempt_to_alloy = list()
var/max_sheets = sheets_per_tick
@@ -122,7 +122,7 @@
var/result = Clamp(Floor(materials_stored[M.name] / M.units_per_sheet), 0, max_result)
if(!result)
return 0
-
+
materials_stored[M.name] -= result * M.units_per_sheet
use_power_oneoff(active_power_usage)
@@ -132,7 +132,7 @@
N.place_sheet(output_turf, result)
else
M.place_sheet(output_turf, result)
-
+
return result
/obj/machinery/mineral/processing_unit/proc/attempt_compression(var/material/M, var/max_result)
@@ -203,4 +203,4 @@
#undef ORE_DISABLED
#undef ORE_SMELT
#undef ORE_COMPRESS
-#undef ORE_ALLOY
\ No newline at end of file
+#undef ORE_ALLOY
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 90ca3202b1..e32b870502 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -479,7 +479,9 @@
to_chat(src, "Your character is not loading correctly. Contact Brawler.")
spawning = FALSE
return
- Retrieve_Record(character.real_name)
+ if (!Retrieve_Record(character.real_name))
+ var/datum/computer_file/report/crew_record/new_record = CreateModularRecord(character)
+ GLOB.all_crew_records |= new_record
var/turf/spawnTurf = locate(0,0,0) //Instead of null start with 0,0,0 because the unsafe spawn check will kick in and warn the user if there's something wrong
if(character.spawn_type == CHARACTER_SPAWN_TYPE_CRYONET)
diff --git a/code/modules/modular_computers/file_system/programs/generic/email_client.dm b/code/modules/modular_computers/file_system/programs/generic/email_client.dm
index f5d2ec9c68..75d5e72857 100644
--- a/code/modules/modular_computers/file_system/programs/generic/email_client.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/email_client.dm
@@ -252,7 +252,7 @@
"body" = pencode2html(message.stored_data),
"source" = message.source,
"timestamp" = message.timestamp,
- "ref" = "\ref[message.uid]"
+ "ref" = "\ref[message]"
)))
data["messages"] = all_messages
data["messagecount"] = all_messages.len
diff --git a/code/modules/modular_computers/file_system/reports/crew_record.dm b/code/modules/modular_computers/file_system/reports/crew_record.dm
index 1f37d35c04..c75207cf6b 100644
--- a/code/modules/modular_computers/file_system/reports/crew_record.dm
+++ b/code/modules/modular_computers/file_system/reports/crew_record.dm
@@ -110,8 +110,8 @@ FIELD_LONG("Exploitable Information", antagRecord, access_syndicate, access_synd
if(linked_account.money < cost)
to_chat(user, "Insufficent funds.")
return
- var/datum/transaction/T = new("Nexus Account Upgrade", "Nexus Account Upgrade", cost, "Nexus Account Upgrade")
- linked_account.do_transaction(T)
+ var/datum/transaction/Te = new("Nexus Account Upgrade", "Nexus Account Upgrade", -cost, "Nexus Account Upgrade")
+ linked_account.do_transaction(Te)
network_level++
/datum/computer_file/report/crew_record/proc/get_stock_limit()
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index 4abef55903..49667e4fd8 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -157,7 +157,6 @@ Some standard magazines, speedloaders and clips
matter = list(MATERIAL_STEEL = 1440)
max_ammo = 4
multiple_sprites = 1
- w_class = ITEM_SIZE_NORMAL
mass = 80 GRAMS
var/marking_color
@@ -245,7 +244,6 @@ Some standard magazines, speedloaders and clips
ammo_type = /obj/item/ammo_casing/c9mm
max_ammo = 20
multiple_sprites = 1
- w_class = ITEM_SIZE_NORMAL
mass = 150 GRAMS
/obj/item/ammo_magazine/box/c9mm/_20/empty
initial_ammo = 0
@@ -332,7 +330,6 @@ Some standard magazines, speedloaders and clips
ammo_type = /obj/item/ammo_casing/c45
max_ammo = 20
multiple_sprites = 1
- w_class = ITEM_SIZE_NORMAL
mass = 150 GRAMS
/obj/item/ammo_magazine/box/c45/_20/empty
initial_ammo = 0
@@ -410,7 +407,6 @@ Some standard magazines, speedloaders and clips
ammo_type = /obj/item/ammo_casing/c762
max_ammo = 15 //if we lived in a world where normal mags had 30 rounds, this would be a 20 round mag
multiple_sprites = 1
- w_class = ITEM_SIZE_NORMAL
mass = 180 GRAMS
/obj/item/ammo_magazine/box/c762/empty
initial_ammo = 0
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index 50a769432e..3372989683 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -117,6 +117,44 @@
parent_substance = /datum/reagent/ethanol
addiction_display_name = "Alcohol"
+ var/global/list/drink_tipsy_messages = list(
+ "You feel pleasantly warm.",
+ "You feel nice and toasty.",
+ "You're feeling pretty good.",
+ "You're ready for a party.",
+ "You wouldn't mind another drink.",
+ )
+
+ var/global/list/drink_buzzed_messages = list(
+ "You feel nice and toasty.",
+ "Your face feels warm.",
+ "You're full of energy.",
+ "You're feeling very chatty.",
+ "You wouldn't mind another drink.",
+ "You're in a good mood."
+ )
+
+ var/global/list/drink_drunk_messages = list(
+ "You're having trouble keeping your balance.",
+ "The world spins around you.",
+ "You feel nice and toasty.",
+ "You're full of energy.",
+ "Your face is burning.",
+ "You're feeling very chatty."
+ )
+
+ var/global/list/drink_hammered_messages = list(
+ "You feel like trash.",
+ "The world spins around you.",
+ "You're having trouble keeping your balance.",
+ "You can't remember the last few minutes.",
+ "You're absolutely hammered.",
+ "You're completely trashed.",
+ "You feel angry.",
+ "You feel sad.",
+ "You catch yourself staggering."
+ )
+
glass_name = "ethanol"
glass_desc = "A well-known alcohol with a variety of applications."
gas_flags = XGM_GAS_CONTAMINANT | XGM_GAS_FUEL | XGM_GAS_REAGENT_GAS
@@ -139,29 +177,44 @@
if(alien == IS_DIONA)
strength_mod = 0
+ var/drink_message = FALSE
+
M.add_chemical_effect(CE_ALCOHOL, 1)
var/effective_dose = M.chem_doses[type] * strength_mod * (1 + volume/60) //drinking a LOT will make you go down faster
- if(effective_dose >= strength) // Early warning
+ if(effective_dose >= strength) // Just give a nice message
+ drink_message = pick(drink_tipsy_messages)
+ if(effective_dose >= strength * 2) // Early warning
M.make_dizzy(6) // It is decreased at the speed of 3 per tick
- if(effective_dose >= strength * 2) // Slurring
+ drink_message = pick(drink_buzzed_messages)
+ if(effective_dose >= strength * 3) // Slurring
M.add_chemical_effect(CE_PAINKILLER, 150/strength)
M.slurring = max(M.slurring, 30)
- if(effective_dose >= strength * 3) // Confusion - walking in random directions
- M.add_chemical_effect(CE_PAINKILLER, 150/strength)
- M.confused = max(M.confused, 20)
+ drink_message = pick(drink_buzzed_messages)
if(effective_dose >= strength * 4) // Blurry vision
M.add_chemical_effect(CE_PAINKILLER, 150/strength)
M.eye_blurry = max(M.eye_blurry, 10)
- if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep
+ drink_message = pick(drink_drunk_messages)
+ if(effective_dose >= strength * 5) // Confusion - walking in random directions
+ M.add_chemical_effect(CE_PAINKILLER, 150/strength)
+ M.confused = max(M.confused, 20)
+ drink_message = pick(drink_drunk_messages)
+ if(effective_dose >= strength * 6) // Drowsyness - periodically falling asleep
M.add_chemical_effect(CE_PAINKILLER, 150/strength)
M.drowsyness = max(M.drowsyness, 20)
- if(effective_dose >= strength * 6) // Toxic dose
+ drink_message = SPAN_WARNING(pick(drink_hammered_messages))
+ if(effective_dose >= strength * 7) // Toxic dose
M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity)
- if(effective_dose >= strength * 7) // Pass out
+ drink_message = SPAN_WARNING(pick(drink_hammered_messages))
+ if(effective_dose >= strength * 8) // Pass out
+ drink_message = SPAN_DANGER("You black out...")
M.Paralyse(20)
M.Sleeping(30)
+ if(drink_message)
+ if(prob(10))
+ to_chat(M, "[drink_message]")
+
if(druggy != 0)
M.druggy = max(M.druggy, druggy)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index c01e7fb39c..d79b57aba8 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -566,7 +566,31 @@
overdose = REAGENTS_OVERDOSE
metabolism = REM * 0.5
gas_flags = XGM_GAS_CONTAMINANT | XGM_GAS_REAGENT_GAS
-
+
+ addictiveness = 2
+ addiction_median_dose = 5
+
+ var/global/list/shroom_dose_messages = list(
+ "The world spins pleasantly around you.",
+ "You look down, and your hands aren't yours.",
+ "The walls flow slowly, over and over again.",
+ "You're not sure you've ever seen that color before.",
+ "The floor is fascinating.",
+ "Your arm feels very soft.",
+ "There's a brief fluttering in your chest.",
+ "You smile contentedly, for no reason.",
+ "Breathing feels nice.",
+ "You feel like you're in a dream.",
+ "You forgot you could be as happy as this.",
+ "Everything around you is crisp and clear.",
+ "All things love you, and you love them.",
+ "You feel a strong connection to the place around you.",
+ "The door into yourself opens.",
+ "Every emotion feels magnified.",
+ "You dream of being yourself.",
+ "You dream of being no one."
+ )
+
/datum/reagent/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
@@ -582,6 +606,8 @@
M.make_dizzy(5)
if(prob(5))
M.emote(pick("twitch", "giggle"))
+ if(prob(5))
+ to_chat(M, "[pick(shroom_dose_messages)]")
else if(M.chem_doses[type] < 2 * threshold)
M.apply_effect(3, STUTTER)
M.make_jittery(5)
@@ -589,6 +615,8 @@
M.druggy = max(M.druggy, 35)
if(prob(10))
M.emote(pick("twitch", "giggle"))
+ if(prob(10))
+ to_chat(M, "[pick(shroom_dose_messages)]")
else
M.add_chemical_effect(CE_MIND, -1)
M.apply_effect(3, STUTTER)
@@ -597,7 +625,76 @@
M.druggy = max(M.druggy, 40)
if(prob(15))
M.emote(pick("twitch", "giggle"))
+ if(prob(15))
+ to_chat(M, "[pick(shroom_dose_messages)]")
+
+/datum/reagent/phorostimulant
+ name = "Phorostim"
+ description = "A recreational stimulant derived from phoron."
+ taste_description = "sharpness"
+ reagent_state = LIQUID
+ color = "#ff3300"
+ metabolism = REM * 0.15
+ overdose = REAGENTS_OVERDOSE * 0.5
+ addictiveness = 3
+ addiction_median_dose = 30
+
+ var/global/list/stim_dose_messages = list(
+ "The world races, but not as fast as you.",
+ "You feel on top of the world.",
+ "You're in control.",
+ "You can do anything.",
+ "You've accomplished so much.",
+ "Euphoria floods your mind.",
+ "You need to talk to someone else.",
+ "It's hard to stay calm!",
+ "You need to do something with your hands.",
+ "You have to stay busy.",
+ "You feel like cleaning something.",
+ "Your heart races like the wind.",
+ "You find yourself blinking a lot.",
+ "You can barely feel your face.",
+ "The world flashes a pleasant orange.",
+ "You think about space.",
+ "You think about stone.",
+ "Something alive flashes in the corner of your eye.",
+ "The floor rumbles beneath you.",
+ "You feel the urge to go on an adventure.",
+ "You feel the urge to mine."
+ )
+
+ var/global/list/stim_overdose_messages = list(
+ "The world is spinning, far too fast.",
+ "You stumble, your hands shaking.",
+ "You're not in control.",
+ "You need to move, but your body doesn't respond.",
+ "Your heart beats out of your chest.",
+ "You look down, and see endless slugs.",
+ "Teeth gnash at you, from every direction.",
+ "The ground shakes violently",
+ "Everything is orange.",
+ "You feel like you're going to die.",
+ "This is too much engagement."
+ )
+
+/datum/reagent/phorostimulant/overdose(var/mob/living/carbon/M, var/alien)
+ ..()
+ M.adjustBrainLoss(1)
+ if(ishuman(M) && prob(10))
+ var/mob/living/carbon/human/H = M
+ H.seizure()
+ if(prob(10))
+ to_chat(M, SPAN_DANGER("[pick(stim_overdose_messages)]"))
+
+/datum/reagent/phorostimulant/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ if(prob(5))
+ M.emote(pick("twitch", "blink_r", "shiver"))
+ to_chat(M, "[pick(stim_dose_messages)]")
+ M.add_chemical_effect(CE_SPEEDBOOST, 0.2)
+ M.add_chemical_effect(CE_PULSE, 3)
/datum/reagent/three_eye
name = "Three Eye"
@@ -615,7 +712,7 @@
overdose = 25
// M A X I M U M C H E E S E
- var/global/list/dose_messages = list(
+ var/global/list/three_eye_dose_messages = list(
"Your name is called. It is your time.",
"You are dissolving. Your hands are wax...",
"It all runs together. It all mixes.",
@@ -636,7 +733,7 @@
"Come back from there. Please."
)
- var/global/list/overdose_messages = list(
+ var/global/list/three_eye_overdose_messages = list(
"THE SIGNAL THE SIGNAL THE SIGNAL THE SIGNAL",
"IT CRIES IT CRIES IT WAITS IT CRIES",
"NOT YOURS NOT YOURS NOT YOURS NOT YOURS",
@@ -659,7 +756,7 @@
H.seizure()
H.adjustBrainLoss(rand(8, 12))
if(prob(5))
- to_chat(M, SPAN_WARNING("[pick(dose_messages)]"))
+ to_chat(M, SPAN_WARNING("[pick(three_eye_dose_messages)]"))
/datum/reagent/three_eye/on_leaving_metabolism(var/mob/parent, var/metabolism_class)
parent.remove_client_color(/datum/client_color/thirdeye)
@@ -671,7 +768,7 @@
var/mob/living/carbon/human/H = M
H.seizure()
if(prob(10))
- to_chat(M, SPAN_DANGER("[pick(overdose_messages)]"))
+ to_chat(M, SPAN_DANGER("[pick(three_eye_overdose_messages)]"))
if(M.psi)
M.psi.check_latency_trigger(30, "a Three Eye overdose")
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 420e49f1a5..cb5e12444b 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -258,6 +258,12 @@
required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/phosphorus = 1, /datum/reagent/sulfur = 1)
result_amount = 3
+/datum/chemical_reaction/phorostimulant
+ name = "Phorostimulant"
+ result = /datum/reagent/phorostimulant
+ required_reagents = list(/datum/reagent/sugar = 1, /datum/reagent/toxin/phoron = 1)
+ result_amount = 6
+
/datum/chemical_reaction/ryetalyn
name = "Ryetalyn"
result = /datum/reagent/ryetalyn
@@ -1939,6 +1945,13 @@
catalysts = list(/datum/reagent/enzyme = 5)
result_amount = 2
+/datum/chemical_reaction/honey_crystallization
+ name = "Honey Crystallization"
+ result = /datum/reagent/sugar
+ required_reagents = list(/datum/reagent/nutriment/honey = 2)
+ minimum_temperature = 100 CELSIUS
+ result_amount = 1
+
/datum/chemical_reaction/iced_beer
name = "Iced Beer"
result = /datum/reagent/ethanol/iced_beer
diff --git a/code/modules/research/fabricators/circuit_fabricator.dm b/code/modules/research/fabricators/circuit_fabricator.dm
index 405c4ebb7a..b406baeb12 100644
--- a/code/modules/research/fabricators/circuit_fabricator.dm
+++ b/code/modules/research/fabricators/circuit_fabricator.dm
@@ -117,7 +117,7 @@
req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_BIO = 2)
build_path = /obj/item/weapon/circuitboard/crew
build_type = MEDICALFAB
-
+/*
/datum/design/circuit/reagent_heater
name = "reagent heater"
id = "rheater"
@@ -132,7 +132,7 @@
build_path = /obj/item/weapon/circuitboard/reagent_heater/cooler
build_type = MEDICALFAB
-/*
+
/datum/design/circuit/bioprinter
name = "bioprinter"
id = "bioprinter"
diff --git a/code/modules/research/fabricators/consumer_fabricator.dm b/code/modules/research/fabricators/consumer_fabricator.dm
index 30907de08c..1e040316ab 100644
--- a/code/modules/research/fabricators/consumer_fabricator.dm
+++ b/code/modules/research/fabricators/consumer_fabricator.dm
@@ -90,6 +90,15 @@
build_path = /obj/item/instrument/guitar
materials = list(MATERIAL_WOOD = 1.5 SHEETS, MATERIAL_STEEL = 1 SHEET)
+/datum/design/item/consumerfab/consumer/canvas
+ build_path = /obj/item/frame/canvas/size_m
+ materials = list(MATERIAL_WOOD = 3 SHEETS)
+ build_type = list(CONSUMERFAB, SERVICEFAB)
+/datum/design/item/consumerfab/consumer/canvas/portrait
+ build_path = /obj/item/frame/canvas/size_m/portrait
+
+/datum/design/item/consumerfab/consumer/canvas/landscape
+ build_path = /obj/item/frame/canvas/size_m/landscape
/datum/design/item/consumerfab/consumer/basketball
build_path = /obj/item/weapon/basketball
@@ -584,3 +593,16 @@
name = "spaceball booster pack"
build_path = /obj/item/weapon/pack/spaceball
materials = list(MATERIAL_PLASTIC = 0.25 SHEETS)
+////////////////////////////////////////////////////
+//////////////////////VEHICLES//////////////////////
+////////////////////////////////////////////////////
+
+/datum/design/item/consumerfab/vehicles
+ category = "Vehicles"
+ time = 50
+
+/datum/design/item/consumerfab/vehicles/bike
+ name = "Motor bike"
+ id = "m_bike"
+ materials = list(MATERIAL_STEEL = 40000, MATERIAL_TUNGSTEN = 20000, MATERIAL_GLASS = 20000, MATERIAL_GOLD = 20000)
+ build_path = /obj/vehicle/bike
diff --git a/code/modules/research/fabricators/mech_fabricator.dm b/code/modules/research/fabricators/mech_fabricator.dm
index a0a756d5e0..518200ca25 100644
--- a/code/modules/research/fabricators/mech_fabricator.dm
+++ b/code/modules/research/fabricators/mech_fabricator.dm
@@ -919,16 +919,3 @@
materials = list(MATERIAL_STEEL = 750, MATERIAL_GLASS = 750)
build_path = /obj/item/device/flash/synthetic
category = "Misc"
-
-////////////////////////////////////////////////////
-//////////////////////VEHICLES//////////////////////
-////////////////////////////////////////////////////
-
-/datum/design/item/mechfab/bike
- name = "Motor bike"
- id = "m_bike"
- req_tech = list(TECH_POWER = 1, TECH_ENGINEERING = 1, TECH_MATERIAL = 1)
- materials = list(MATERIAL_STEEL = 40000, MATERIAL_TUNGSTEN = 20000, MATERIAL_GLASS = 20000, MATERIAL_GOLD = 20000)
- build_path = /obj/vehicle/bike
- category = "Vehicles"
- time = 50
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index 64549f2df5..6f91a8dd00 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -44,8 +44,8 @@
shuttle_area = list(shuttle_area)
for(var/T in shuttle_area)
var/area/A = locate(T)
- if(!istype(A))
- CRASH("Shuttle \"[name]\" couldn't locate area [T].")
+ // if(!istype(A))
+ // CRASH("Shuttle \"[name]\" couldn't locate area [T].")
areas += A
shuttle_area = areas
@@ -53,11 +53,11 @@
current_location = initial_location
else
current_location = SSshuttle.get_landmark(current_location)
- if(!istype(current_location))
- CRASH("Shuttle \"[name]\" could not find its starting location.")
+// if(!istype(current_location))
+// CRASH("Shuttle \"[name]\" could not find its starting location.")
- if(src.name in SSshuttle.shuttles)
- CRASH("A shuttle with the name '[name]' is already defined.")
+// if(src.name in SSshuttle.shuttles)
+// CRASH("A shuttle with the name '[name]' is already defined.")
SSshuttle.shuttles[src.name] = src
if(logging_home_tag)
new /datum/shuttle_log(src)
diff --git a/code/modules/world_save/map_storage.dm b/code/modules/world_save/map_storage.dm
index 3fdc7c6639..80958336d6 100644
--- a/code/modules/world_save/map_storage.dm
+++ b/code/modules/world_save/map_storage.dm
@@ -319,13 +319,13 @@ var/global/list/debug_data = list()
L.linked_account = L.linked_account.after_load()
L.linked_account.money = 1000
to_file(f, L.linked_account)
- if(L.linked_account)
- var/key2 = L.linked_account.account_number
+ // if(L.linked_account)
+ // var/key2 = L.linked_account.account_number
- fdel("record_saves/[key2].sav")
- var/savefile/fa = new("record_saves/[key2].sav")
- to_file(fa, L)
- to_file(fa, L.linked_account)
+ // fdel("record_saves/[key2].sav")
+ // var/savefile/fa = new("record_saves/[key2].sav")
+ // to_file(fa, L)
+ // to_file(fa, L.linked_account)
var/key3 = L.get_fingerprint()
fdel("record_saves/[key3].sav")
var/savefile/fe = new("record_saves/[key3].sav")
@@ -452,7 +452,7 @@ var/global/list/debug_data = list()
v.linked_account = account
if(v.linked_account)
v.linked_account = v.linked_account.after_load()
-
+ v.linked_account.owner_name = get_name()
for(var/datum/computer_file/report/crew_record/record2 in GLOB.all_crew_records)
if(record2.get_name() == v.get_name())
if(v.linked_account && !record2.linked_account || (record2.linked_account && v.linked_account && record2.linked_account.money < v.linked_account))
diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm
index 1636e64c39..368b04f98a 100644
--- a/code/unit_tests/mob_tests.dm
+++ b/code/unit_tests/mob_tests.dm
@@ -699,7 +699,7 @@ datum/unit_test/species_base_skin/start_test()
return 1 // return 1 to show we're done and don't want to recheck the result.
-
+/*
/datum/unit_test/mob_nullspace
name = "MOB: Mob in nullspace shall not cause runtimes"
var/list/test_subjects = list()
@@ -723,7 +723,7 @@ datum/unit_test/species_base_skin/start_test()
// No failure state, we just rely on the general runtime check to fail the entire build for us
pass("Mob nullspace test concluded.")
return TRUE
-
+*/
/datum/unit_test/mob_organ_size
name = "MOB: Internal organs fit inside external organs."
diff --git a/icons/turf/flooring/wood.dmi b/icons/turf/flooring/wood.dmi
index 31a559bb73..5d660de5e4 100644
Binary files a/icons/turf/flooring/wood.dmi and b/icons/turf/flooring/wood.dmi differ
diff --git a/nano/templates/email_client.tmpl b/nano/templates/email_client.tmpl
index 61eb659504..5cfba28795 100644
--- a/nano/templates/email_client.tmpl
+++ b/nano/templates/email_client.tmpl
@@ -159,7 +159,6 @@
{{:helper.link('', 'trash', {'delete' : value.uid})}}
{{:helper.link('', 'arrowreturnthick-1-w', {'reply' : value.uid})}}
{{:helper.link('', 'search', {'view' : value.ref})}}
- {{:helper.link('', 'search', {'view' : value.ref})}}
{{/for}}