diff --git a/.github/workflows/autochangelog.yml b/.github/workflows/autochangelog.yml index 7732426718..7953929ce5 100644 --- a/.github/workflows/autochangelog.yml +++ b/.github/workflows/autochangelog.yml @@ -1,6 +1,6 @@ name: Autochangelog on: - pull_request: + pull_request_target: types: closed branches: - master @@ -15,6 +15,10 @@ jobs: if: github.event.pull_request.merged == true steps: - uses: /actions/checkout@v2 + with: + ref: master + - name: Update repository to master + run: git pull "origin" master - name: Ensure +x on CI directory run: | chmod -R +x ./tools/ci diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm index c87b9942df..db1a71c77a 100644 --- a/code/__defines/damage_organs.dm +++ b/code/__defines/damage_organs.dm @@ -61,4 +61,8 @@ #define INFECTION_LEVEL_ONE 100 #define INFECTION_LEVEL_TWO 500 #define INFECTION_LEVEL_THREE 1000 -#define INFECTION_LEVEL_MAX 1500 \ No newline at end of file +#define INFECTION_LEVEL_MAX 1500 + +#define MODULAR_BODYPART_INVALID 0 // Cannot be detached or reattached. +#define MODULAR_BODYPART_PROSTHETIC 1 // Can be detached or reattached freely. +#define MODULAR_BODYPART_CYBERNETIC 2 // Can be detached or reattached to compatible parent organs. diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index f6ca0ea565..9b9c83d256 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -24,6 +24,19 @@ #define EMP_TOX_DMG 0x80 // EMPs inflict toxin damage #define EMP_OXY_DMG 0x100 // EMPs inflict oxy damage +// Species allergens +#define MEAT 0x1 // Skrell won't like this. +#define FISH 0x2 // Seperate for completion's sake. Still bad for skrell. +#define FRUIT 0x4 // An apple a day only keeps the doctor away if they're allergic. +#define VEGETABLE 0x8 // Taters 'n' carrots. Potato allergy is a thing, apparently. +#define GRAINS 0x10 // Wheat, oats, etc. +#define BEANS 0x20 // The musical fruit! Includes soy. +#define SEEDS 0x40 // Hope you don't have a nut allergy. +#define DAIRY 0x80 // Lactose intolerance, ho! Also bad for skrell. +#define FUNGI 0x100 // Delicious shrooms. +#define COFFEE 0x200 // Mostly here for tajara. +#define GENERIC 0x400 // Catchall for stuff that doesn't fall into the groups above. You shouldn't be allergic to this type, ever. + // Species spawn flags #define SPECIES_IS_WHITELISTED 0x1 // Must be whitelisted to play. #define SPECIES_IS_RESTRICTED 0x2 // Is not a core/normally playable species. (castes, mutantraces) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 855decff39..0d10e33b49 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -94,13 +94,13 @@ var/global/list/string_slot_flags = list( "holster" = SLOT_HOLSTER ) -/proc/get_mannequin(var/ckey) - if(!mannequins_) - mannequins_ = new() - . = mannequins_[ckey] - if(!.) - . = new/mob/living/carbon/human/dummy/mannequin() - mannequins_[ckey] = . +GLOBAL_LIST_EMPTY(mannequins) +/proc/get_mannequin(var/ckey = "NULL") + var/mob/living/carbon/human/dummy/mannequin/M = GLOB.mannequins[ckey] + if(!istype(M)) + GLOB.mannequins[ckey] = new /mob/living/carbon/human/dummy/mannequin(null) + M = GLOB.mannequins[ckey] + return M ////////////////////////// /////Initial Building///// diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index f0787cec29..d45406225c 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -537,4 +537,22 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, for(var/species_name in whitelisted_icons) custom_species_bases += species_name + // Weaver recipe stuff + paths = typesof(/datum/weaver_recipe/structure) - /datum/weaver_recipe/structure + for(var/path in paths) + var/datum/weaver_recipe/instance = new path() + if(!instance.title) + continue //A prototype or something + weavable_structures[instance.title] = instance + + paths = typesof(/datum/weaver_recipe/item) - /datum/weaver_recipe/item + for(var/path in paths) + var/datum/weaver_recipe/instance = new path() + if(!instance.title) + continue //A prototype or something + weavable_items[instance.title] = instance + return 1 // Hooks must return 1 + +var/global/list/weavable_structures = list() +var/global/list/weavable_items = list() \ No newline at end of file diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index d63d49e8d7..213fe57b90 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -60,6 +60,8 @@ // Cyborgs have no range-checking unless there is item use if(!W) + if(bolt && !bolt.malfunction && A.loc != module) + return A.add_hiddenprint(src) A.attack_robot(src) return @@ -120,35 +122,56 @@ /atom/proc/BorgCtrlShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden CtrlShiftClick(user) -/obj/machinery/door/airlock/BorgCtrlShiftClick(mob/user) +/obj/machinery/door/airlock/BorgCtrlShiftClick(var/mob/living/silicon/robot/user) + if(user.bolt && !user.bolt.malfunction) + return + AICtrlShiftClick(user) /atom/proc/BorgShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden ShiftClick(user) -/obj/machinery/door/airlock/BorgShiftClick(mob/user) // Opens and closes doors! Forwards to AI code. +/obj/machinery/door/airlock/BorgShiftClick(var/mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code. + if(user.bolt && !user.bolt.malfunction) + return + AIShiftClick(user) /atom/proc/BorgCtrlClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden CtrlClick(user) -/obj/machinery/door/airlock/BorgCtrlClick(mob/user) // Bolts doors. Forwards to AI code. +/obj/machinery/door/airlock/BorgCtrlClick(var/mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code. + if(user.bolt && !user.bolt.malfunction) + return + AICtrlClick(user) -/obj/machinery/power/apc/BorgCtrlClick(mob/user) // turns off/on APCs. Forwards to AI code. +/obj/machinery/power/apc/BorgCtrlClick(var/mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code. + if(user.bolt && !user.bolt.malfunction) + return + AICtrlClick(user) -/obj/machinery/turretid/BorgCtrlClick(mob/user) //turret control on/off. Forwards to AI code. +/obj/machinery/turretid/BorgCtrlClick(var/mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code. + if(user.bolt && !user.bolt.malfunction) + return + AICtrlClick(user) /atom/proc/BorgAltClick(var/mob/living/silicon/robot/user) AltClick(user) return -/obj/machinery/door/airlock/BorgAltClick(mob/user) // Eletrifies doors. Forwards to AI code. +/obj/machinery/door/airlock/BorgAltClick(var/mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. + if(user.bolt && !user.bolt.malfunction) + return + AIAltClick(user) -/obj/machinery/turretid/BorgAltClick(mob/user) //turret lethal on/off. Forwards to AI code. +/obj/machinery/turretid/BorgAltClick(var/mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. + if(user.bolt && !user.bolt.malfunction) + return + AIAltClick(user) /* diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm index 60b08c71d2..77c9d3ab94 100644 --- a/code/controllers/subsystems/overlays.dm +++ b/code/controllers/subsystems/overlays.dm @@ -5,7 +5,6 @@ SUBSYSTEM_DEF(overlays) priority = FIRE_PRIORITY_OVERLAYS init_order = INIT_ORDER_OVERLAY - var/initialized = FALSE var/list/queue // Queue of atoms needing overlay compiling (TODO-VERIFY!) var/list/stats var/list/overlay_icon_state_caches // Cache thing @@ -22,7 +21,6 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B stats = list() /datum/controller/subsystem/overlays/Initialize() - initialized = TRUE fire(mc_check = FALSE) ..() diff --git a/code/controllers/subsystems/processing/chemistry.dm b/code/controllers/subsystems/processing/chemistry.dm index 7f4fd9c42b..b4641ba7e0 100644 --- a/code/controllers/subsystems/processing/chemistry.dm +++ b/code/controllers/subsystems/processing/chemistry.dm @@ -22,6 +22,7 @@ PROCESSING_SUBSYSTEM_DEF(chemistry) /datum/controller/subsystem/processing/chemistry/Initialize() initialize_chemical_reactions() initialize_chemical_reagents() + ..() //Chemical Reactions - Initialises all /datum/chemical_reaction into a list // It is filtered into multiple lists within a list. diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index f43a83ef91..15b676f029 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -183,11 +183,6 @@ var/global/datum/controller/subsystem/ticker/ticker if(adm["total"] == 0) send2adminirc("A round has started with no admins online.") -/* supply_controller.process() //Start the supply shuttle regenerating points -- TLE // handled in scheduler - master_controller.process() //Start master_controller.process() - lighting_controller.process() //Start processing DynamicAreaLighting updates - */ - current_state = GAME_STATE_PLAYING Master.SetRunLevel(RUNLEVEL_GAME) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 157a3f113f..82e5f1f78b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -513,8 +513,9 @@ //HUMAN /mob/living/carbon/human/mind_initialize() - ..() - if(!mind.assigned_role) mind.assigned_role = USELESS_JOB //defualt //VOREStation Edit - Visitor not Assistant + . = ..() + if(!mind.assigned_role) + mind.assigned_role = USELESS_JOB //defualt //VOREStation Edit - Visitor not Assistant //slime /mob/living/simple_mob/slime/mind_initialize() diff --git a/code/datums/roundstats/departmentgoal.dm b/code/datums/roundstats/departmentgoal.dm index b0aa69784c..333e6c0396 100644 --- a/code/datums/roundstats/departmentgoal.dm +++ b/code/datums/roundstats/departmentgoal.dm @@ -35,6 +35,7 @@ GLOBAL_LIST(active_department_goals) cat_goals -= G GLOB.active_department_goals[category] |= G + return 1 /hook/roundend/proc/checkDepartmentGoals() for(var/category in GLOB.active_department_goals) @@ -50,6 +51,7 @@ GLOBAL_LIST(active_department_goals) var/success = G.check_completion() to_world("[success ? "[G.name]" : "[G.name]"]") to_world("[G.goal_text]") + return 1 /datum/goal var/name = "goal" diff --git a/code/datums/roundstats/roundstats.dm b/code/datums/roundstats/roundstats.dm index c5ceb686a7..c1453b18af 100644 --- a/code/datums/roundstats/roundstats.dm +++ b/code/datums/roundstats/roundstats.dm @@ -32,7 +32,7 @@ GLOBAL_VAR_INIT(mech_destroyed_roundstat, 0) else if(GLOB.mech_destroyed_roundstat > 1) valid_stats_list.Add("[GLOB.mech_destroyed_roundstat] mechs were destroyed this shift. What did you do?") else if(GLOB.seed_planted_shift_roundstat > 20) - valid_stats_list.Add("[GLOB.seed_planted_shift_roundstat] were planted according to our sensors this shift.") + valid_stats_list.Add("[GLOB.seed_planted_shift_roundstat] seeds were planted according to our sensors this shift.") if(GLOB.rocks_drilled_roundstat > 80) valid_stats_list.Add("Our strong miners pulverized a whole [GLOB.rocks_drilled_roundstat] piles of pathetic rubble.") diff --git a/code/datums/supplypacks/robotics.dm b/code/datums/supplypacks/robotics.dm index 5f8cf6337c..1928ee7db6 100644 --- a/code/datums/supplypacks/robotics.dm +++ b/code/datums/supplypacks/robotics.dm @@ -189,6 +189,17 @@ containername = "Jumper kit crate" access = access_robotics +/datum/supply_pack/robotics/restrainingbolt + name = "Restraining bolt crate" + contains = list( + /obj/item/weapon/implanter = 1, + /obj/item/weapon/implantcase/restrainingbolt = 2 + ) + cost = 40 + containertype = /obj/structure/closet/crate/secure/cybersolutions + containername = "Restraining bolt crate" + access = access_robotics + /datum/supply_pack/robotics/bike name = "Spacebike Crate" contains = list() diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index 7da82fa580..6b2cc3d10f 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -186,4 +186,14 @@ /datum/category_item/underwear/undershirt/pinkblack_tshirt name = "Pink and Black T-Shirt" - icon_state = "pinkblack_tshirt" \ No newline at end of file + icon_state = "pinkblack_tshirt" + +/datum/category_item/underwear/undershirt/turtle + name = "Turtleneck" + icon_state = "turtleneck" + has_color = TRUE + +/datum/category_item/underwear/undershirt/sleevelessturtle + name = "Turtleneck, Sleeveless" + icon_state = "sleevelessturtle" + has_color = TRUE \ No newline at end of file diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index b5f9ac3a2f..9c8bbccc79 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -54,10 +54,8 @@ /area/Initialize() . = ..() - luminosity = !(dynamic_lighting) icon_state = "" - return INITIALIZE_HINT_LATELOAD // Areas tradiationally are initialized AFTER other atoms. /area/LateInitialize() @@ -68,7 +66,6 @@ power_change() // all machines set to current power level, also updates lighting icon if(no_spoilers) set_spoiler_obfuscation(TRUE) - return INITIALIZE_HINT_LATELOAD // Changes the area of T to A. Do not do this manually. // Area is expected to be a non-null instance. diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index bf5fc0ab18..510b8bf762 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -134,7 +134,7 @@ for(var/i in loc) var/atom/movable/thing = i // We don't call parent so we are calling this for byond - thing.Crossed(src) + thing.Crossed(src, oldloc) // We're a multi-tile object (multiple locs) else if(. && newloc) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index bbf4bfb343..241d613275 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -34,7 +34,7 @@ var/last_activation = 0 /obj/structure/cult/pylon/Initialize() - ..() + . = ..() START_PROCESSING(SSobj, src) /obj/structure/cult/pylon/attack_hand(mob/M as mob) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index a97fbf986f..e0ff3a6086 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -529,5 +529,5 @@ stasis_level = 100 //Just one setting /obj/machinery/sleeper/survival_pod/Initialize() - ..() + . = ..() RefreshParts(1) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 7ff97c83e8..25299dcda8 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,4 +1,4 @@ -/obj/machinery/computer/arcade/ +/obj/machinery/computer/arcade name = "random arcade" desc = "random arcade machine" icon_state = "arcade" @@ -25,15 +25,15 @@ /obj/item/toy/stickhorse = 2 ) -/obj/machinery/computer/arcade/New() - ..() +/obj/machinery/computer/arcade/Initialize() + . = ..() // If it's a generic arcade machine, pick a random arcade // circuit board for it and make the new machine if(!circuit) var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade/clawmachine) var/obj/item/weapon/circuitboard/CB = new choice() new CB.build_path(loc, CB) - qdel(src) + return INITIALIZE_HINT_QDEL /obj/machinery/computer/arcade/proc/prizevend() if(!(contents-circuit).len) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index cc05d63217..8d4202d421 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -26,7 +26,7 @@ light_color = "#315ab4" /obj/machinery/computer/cloning/Initialize() - ..() + . = ..() pods = list() records = list() set_scan_temp("Scanner ready.", "good") diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index adf53c80a8..680ce44345 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -29,7 +29,7 @@ /obj/machinery/computer/med_data/Initialize() - ..() + . = ..() field_edit_questions = list( // General "sex" = "Please select new sex:", diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 1caa7b61a4..430b42591c 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -335,7 +335,7 @@ name = "Monitor Decryption Key" /obj/item/weapon/paper/monitorkey/Initialize() - ..() //Late init + ..() return INITIALIZE_HINT_LATELOAD /obj/item/weapon/paper/monitorkey/LateInitialize() diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index dbd5ba8383..5eae5e82d0 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -13,7 +13,7 @@ var/title = "Mass Driver Controls" /obj/machinery/computer/pod/Initialize() - ..() //Not returning parent because lateload + ..() return INITIALIZE_HINT_LATELOAD /obj/machinery/computer/pod/LateInitialize() diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 1fbd897113..40a4d594cb 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -25,7 +25,7 @@ var/static/list/field_edit_choices /obj/machinery/computer/secure_data/Initialize() - ..() + . = ..() field_edit_questions = list( // General "name" = "Please enter new name:", diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 47b9e8ce25..e11f404b16 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -30,7 +30,7 @@ var/static/list/field_edit_choices /obj/machinery/computer/skills/Initialize() - ..() + . = ..() field_edit_questions = list( // General "name" = "Please input new name:", diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 7f2ca2cb2c..8fe324d7f7 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -862,14 +862,14 @@ About the new airlock wires panel: /obj/machinery/door/airlock/tgui_data(mob/user) var/list/data = list() - + var/list/power = list() power["main"] = main_power_lost_until > 0 ? 0 : 2 power["main_timeleft"] = round(main_power_lost_until > 0 ? max(main_power_lost_until - world.time, 0) / 10 : main_power_lost_until, 1) power["backup"] = backup_power_lost_until > 0 ? 0 : 2 power["backup_timeleft"] = round(backup_power_lost_until > 0 ? max(backup_power_lost_until - world.time, 0) / 10 : backup_power_lost_until, 1) data["power"] = power - + data["shock"] = (electrified_until == 0) ? 2 : 0 data["shock_timeleft"] = round(electrified_until > 0 ? max(electrified_until - world.time, 0) / 10 : electrified_until, 1) data["id_scanner"] = !aiDisabledIdScanner diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index c9262675cf..b9c0d68119 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -40,7 +40,6 @@ /obj/machinery/door_timer/Initialize() ..() - //Doors need to go first, and can't rely on init order, so come back to me. return INITIALIZE_HINT_LATELOAD /obj/machinery/door_timer/LateInitialize() diff --git a/code/game/machinery/transportpod.dm b/code/game/machinery/transportpod.dm index 0b499096fe..4a43cb1890 100644 --- a/code/game/machinery/transportpod.dm +++ b/code/game/machinery/transportpod.dm @@ -32,7 +32,7 @@ sleep(2) go_out() sleep(2) - del(src) + qdel(src) /obj/machinery/transportpod/relaymove(mob/user as mob) if(user.stat) diff --git a/code/game/mecha/combat/gorilla.dm b/code/game/mecha/combat/gorilla.dm index 4aa9f9c03a..f37600acd5 100644 --- a/code/game/mecha/combat/gorilla.dm +++ b/code/game/mecha/combat/gorilla.dm @@ -31,7 +31,7 @@ thrusters_possible = 1 /obj/mecha/combat/gorilla/Initialize() - ..() + . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) // This thing basically cannot function without an external power supply. ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/cannon(src) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 3ae3e41e13..a1ea2ab451 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -40,7 +40,7 @@ switch_dmg_type_possible = TRUE /obj/mecha/combat/phazon/equipped/Initialize() - ..() + . = ..() starting_equipment = list( /obj/item/mecha_parts/mecha_equipment/tool/rcd, /obj/item/mecha_parts/mecha_equipment/gravcatapult diff --git a/code/game/mecha/components/_component.dm b/code/game/mecha/components/_component.dm index aadf390c61..3d770e0dce 100644 --- a/code/game/mecha/components/_component.dm +++ b/code/game/mecha/components/_component.dm @@ -43,7 +43,7 @@ . += "It is completely destroyed." /obj/item/mecha_parts/component/Initialize() - ..() + . = ..() integrity = max_integrity if(start_damaged) diff --git a/code/game/mecha/equipment/tools/inflatables.dm b/code/game/mecha/equipment/tools/inflatables.dm index b18ba2eae1..ff766577de 100644 --- a/code/game/mecha/equipment/tools/inflatables.dm +++ b/code/game/mecha/equipment/tools/inflatables.dm @@ -14,7 +14,7 @@ var/obj/item/weapon/inflatable_dispenser/my_deployer = null /obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Initialize() - ..() + . = ..() my_deployer = my_tool /obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Topic(href, href_list) diff --git a/code/game/mecha/equipment/tools/syringe_gun.dm b/code/game/mecha/equipment/tools/syringe_gun.dm index 1658a01df6..fd73d74fc2 100644 --- a/code/game/mecha/equipment/tools/syringe_gun.dm +++ b/code/game/mecha/equipment/tools/syringe_gun.dm @@ -318,7 +318,7 @@ equip_type = EQUIP_HULL /obj/item/mecha_parts/mecha_equipment/crisis_drone/Initialize() - ..() + . = ..() drone_overlay = new(src.icon, icon_state = droid_state) /obj/item/mecha_parts/mecha_equipment/crisis_drone/Destroy() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index bd2cf8460f..60bb48c5f6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -198,7 +198,7 @@ var/weapons_only_cycle = FALSE //So combat mechs don't switch to their equipment at times. /obj/mecha/Initialize() - ..() + . = ..() for(var/path in starting_components) var/obj/item/mecha_parts/component/C = new path(src) diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 4db6332cb1..316d39bace 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -127,7 +127,7 @@ C.images += holder */ /obj/mecha/medical/odysseus/loaded/Initialize() - ..() + . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/tool/sleeper diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index def044c9bb..4e92f757d2 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -70,7 +70,7 @@ max_special_equip = 1 /obj/mecha/working/ripley/deathripley/Initialize() - ..() + . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/safety ME.attach(src) return @@ -80,7 +80,7 @@ name = "APLU \"Miner\"" /obj/mecha/working/ripley/mining/Initialize() - ..() + . = ..() //Attach drill if(prob(25)) //Possible diamond drill... Feeling lucky? var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill diff --git a/code/game/objects/effects/chem/coating.dm b/code/game/objects/effects/chem/coating.dm index a777bbe5e0..2e9ad26049 100644 --- a/code/game/objects/effects/chem/coating.dm +++ b/code/game/objects/effects/chem/coating.dm @@ -11,7 +11,7 @@ create_reagents(100) /obj/effect/decal/cleanable/chemcoating/Initialize() - ..() + . = ..() var/turf/T = get_turf(src) if(T) for(var/obj/O in get_turf(src)) diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm index db7c4bf74f..0e3d12897d 100644 --- a/code/game/objects/effects/decals/warning_stripes.dm +++ b/code/game/objects/effects/decals/warning_stripes.dm @@ -1,10 +1,10 @@ /obj/effect/decal/warning_stripes icon = 'icons/effects/warning_stripes.dmi' -/obj/effect/decal/warning_stripes/New() +/obj/effect/decal/warning_stripes/Initialize() . = ..() var/turf/T=get_turf(src) var/image/I=image(icon, icon_state = icon_state, dir = dir) I.color=color T.overlays += I - qdel(src) + return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index c5e1f26c61..c49a4e0666 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -10,32 +10,37 @@ var/obj/item/weapon/mine/mineitemtype = /obj/item/weapon/mine var/panel_open = 0 var/datum/wires/mines/wires = null - register_as_dangerous_object = TRUE - var/camo_net = FALSE // Will the mine 'cloak' on deployment? // The trap item will be triggered in some manner when detonating. Default only checks for grenades. var/obj/item/trap = null -/obj/effect/mine/New() +/obj/effect/mine/Initialize() icon_state = "uglyminearmed" wires = new(src) - + . = ..() if(ispath(trap)) trap = new trap(src) - -/obj/effect/mine/Initialize() - ..() - + register_dangerous_to_step() if(camo_net) alpha = 50 /obj/effect/mine/Destroy() + unregister_dangerous_to_step() if(trap) QDEL_NULL(trap) qdel_null(wires) return ..() +/obj/effect/mine/Moved(atom/oldloc) + . = ..() + if(.) + var/turf/old_turf = get_turf(oldloc) + var/turf/new_turf = get_turf(src) + if(old_turf != new_turf) + old_turf.unregister_dangerous_object(src) + new_turf.register_dangerous_object(src) + /obj/effect/mine/proc/explode(var/mob/living/M) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread() triggered = 1 diff --git a/code/game/objects/effects/prop/columnblast.dm b/code/game/objects/effects/prop/columnblast.dm index fc604235c8..ce0e4b2aad 100644 --- a/code/game/objects/effects/prop/columnblast.dm +++ b/code/game/objects/effects/prop/columnblast.dm @@ -17,7 +17,7 @@ ..() /obj/effect/temporary_effect/eruption/Initialize() - ..() + . = ..() flick("[icon_state]_create",src) /obj/effect/temporary_effect/eruption/Destroy() diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index c848a2f1df..eb025f9ba4 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -159,7 +159,6 @@ /obj/effect/spawner/newbomb/Initialize(newloc) ..(newloc) - var/obj/item/device/transfer_valve/V = new(src.loc) var/obj/item/weapon/tank/phoron/PT = new(V) var/obj/item/weapon/tank/oxygen/OT = new(V) @@ -183,19 +182,14 @@ OT.air_contents.temperature = PHORON_MINIMUM_BURN_TEMPERATURE+1 OT.air_contents.update_values() - var/obj/item/device/assembly/S = new assembly_type(V) - - V.attached_device = S S.holder = V S.toggle_secure() V.update_icon() - - qdel(src) - + return INITIALIZE_HINT_QDEL /////////////////////// diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 2247674f60..facc87ae64 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -33,7 +33,7 @@ var/cell_type = /obj/item/weapon/cell/device /obj/item/device/flash/Initialize() - ..() + . = ..() power_supply = new cell_type(src) /obj/item/device/flash/attackby(var/obj/item/W, var/mob/user) diff --git a/code/game/objects/items/stacks/fifty_spawner.dm b/code/game/objects/items/stacks/fifty_spawner.dm index 81dfce9691..e3ba667703 100644 --- a/code/game/objects/items/stacks/fifty_spawner.dm +++ b/code/game/objects/items/stacks/fifty_spawner.dm @@ -7,15 +7,12 @@ var/obj/item/stack/type_to_spawn = null /obj/fiftyspawner/Initialize() - ..() //We're not returning . because we're going to ask to be deleted. - + ..() var/turf/T = get_turf(src) - var/obj/item/stack/M = new type_to_spawn(T) + var/obj/structure/closet/C = locate() in T + var/obj/item/stack/M = new type_to_spawn(C || T) M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty M.update_icon() // Some stacks have different sprites depending on how full they are. - var/obj/structure/closet/C = locate() in T - if(C) - C.contents += M return INITIALIZE_HINT_QDEL //Bye! /obj/fiftyspawner/rods diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 6ffa7100ca..c88527608f 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -24,8 +24,8 @@ stacktype = /obj/item/stack/rods no_variants = TRUE -/obj/item/stack/rods/New() - ..() +/obj/item/stack/rods/Initialize() + . = ..() recipes = rods_recipes update_icon() diff --git a/code/game/objects/items/stacks/sandbags.dm b/code/game/objects/items/stacks/sandbags.dm index c4e755c485..6eff93bfc5 100644 --- a/code/game/objects/items/stacks/sandbags.dm +++ b/code/game/objects/items/stacks/sandbags.dm @@ -32,19 +32,15 @@ bag_material = MAT_SYNCLOTH -/obj/item/stack/sandbags/New(var/newloc, var/amt, var/bag_mat) - ..() +/obj/item/stack/sandbags/Initialize(var/ml, var/amt, var/bag_mat) + . = ..(ml, amt) recipes = sandbag_recipes update_icon() - if(bag_mat) bag_material = bag_mat - var/datum/material/M = get_material_by_name("[bag_material]") if(!M) - qdel(src) - return - + return INITIALIZE_HINT_QDEL color = M.icon_colour /obj/item/stack/sandbags/update_icon() @@ -136,17 +132,13 @@ var/global/list/datum/stack_recipe/sandbag_recipes = list( \ var/bag_material = "cloth" -/obj/item/stack/emptysandbag/New(var/newloc, var/amt, var/bag_mat) - ..(newloc, amt) - +/obj/item/stack/emptysandbag/Initialize(var/ml, var/amt, var/bag_mat) + . = ..(ml, amt) if(bag_mat) bag_material = bag_mat - var/datum/material/M = get_material_by_name("[bag_material]") if(!M) - qdel(src) - return - + return INITIALIZE_HINT_QDEL color = M.icon_colour /obj/item/stack/emptysandbag/attack_self(var/mob/user) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index d42d6c0e56..7d9783df68 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -29,14 +29,13 @@ var/pass_color = FALSE // Will the item pass its own color var to the created item? Dyed cloth, wood, etc. var/strict_color_stacking = FALSE // Will the stack merge with other stacks that are different colors? (Dyed cloth, wood, etc) -/obj/item/stack/New(var/loc, var/amount=null) - ..() - if (!stacktype) +/obj/item/stack/Initialize(var/ml, var/amount) + . = ..() + if(!stacktype) stacktype = type - if (amount) + if(amount) src.amount = amount update_icon() - return /obj/item/stack/Destroy() if(uses_charge) diff --git a/code/game/objects/items/stacks/tickets.dm b/code/game/objects/items/stacks/tickets.dm index 1d9cbf047e..6681934f7c 100644 --- a/code/game/objects/items/stacks/tickets.dm +++ b/code/game/objects/items/stacks/tickets.dm @@ -7,7 +7,7 @@ w_class = ITEMSIZE_TINY max_amount = 30 -/obj/item/stack/arcadeticket/New(loc, amount = null) +/obj/item/stack/arcadeticket/Initialize() . = ..() update_icon() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index d5b4f2ebcd..d89397b92d 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -20,8 +20,8 @@ drop_sound = 'sound/items/drop/axe.ogg' pickup_sound = 'sound/items/pickup/axe.ogg' -/obj/item/stack/tile/New() - ..() +/obj/item/stack/tile/Initialize() + . = ..() randpixel_xy() /* diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index c404089028..9162be15eb 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -299,3 +299,13 @@ src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/blade( src ) ..() return + +/obj/item/weapon/implantcase/restrainingbolt + name = "glass case - 'Restraining Bolt'" + desc = "A case containing a restraining bolt." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/restrainingbolt/New() + src.imp = new /obj/item/weapon/implant/restrainingbolt( src ) + ..() + return diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index c1b0d5db8d..adb79364dc 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -150,3 +150,12 @@ S.remove_from_storage(A) A.loc.contents.Remove(A) update() + +/obj/item/weapon/implanter/restrainingbolt + name = "implanter (bolt)" + +/obj/item/weapon/implanter/restrainingbolt/New() + src.imp = new /obj/item/weapon/implant/restrainingbolt( src ) + ..() + update() + return diff --git a/code/game/objects/items/weapons/implants/implantrestrainingbolt.dm b/code/game/objects/items/weapons/implants/implantrestrainingbolt.dm new file mode 100644 index 0000000000..7f4a562297 --- /dev/null +++ b/code/game/objects/items/weapons/implants/implantrestrainingbolt.dm @@ -0,0 +1,5 @@ + +/obj/item/weapon/implant/restrainingbolt + name = "\improper restraining bolt" + icon = 'icons/obj/device.dmi' + icon_state = "implant" diff --git a/code/game/objects/items/weapons/manuals_vr.dm b/code/game/objects/items/weapons/manuals_vr.dm index a7753211d8..9eaaa56265 100644 --- a/code/game/objects/items/weapons/manuals_vr.dm +++ b/code/game/objects/items/weapons/manuals_vr.dm @@ -75,61 +75,61 @@
Hello Newbie, congratz on deciding to make food! This guide assumes you know absolutely nothing, so fret not, the information here will help you prepare food for your hungry crewmates!
-Now that you know the fundamentals of how to make the base ingredients, here are some fairly easy recipes to put them together into something enjoyable for the crew.
-These recipes only scratch the surface, but it's all things that can be done with what is pre-provided. If you have a partner in Botany, feel free to request more meat or any other supplies to try new recipes!
+These recipes only scratch the surface, but it's all things that can be done with what is pre-provided. If you have a partner in Botany, feel free to request more meat or any other supplies to try new recipes!
The Fryer, CondiMaster3000, and other nearby devices have been deliberately left out of this guide; as you get more advanced feel free to experiment with them, though be careful with the Fryer especially as it's the #1 source of fires for learning chefs, myself included. The one other machine that is worth understanding is the Gibber in the freezer room. If you are delivered fish or such they can be gibbed for extra Meat, though you may need to butcher the parts with a Knife afterwards to get usable Meat! Though if the meat is purple or comes from Koi or Spacecarp do not directly serve it to crew! It contains toxins that are better taken care of by other departments.
Some wonderful websites share recipes and tips for learning chefs on the Extranet! Look on your PDA or preferred device at https://wiki.vore-station.net/Guide_to_Food_and_Drink and https://vore-station.net/infodump/recipes_food.html for further tips, though do note the latter is more accurate in regard to recipes. Happy cooking!