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}}