diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm index 787488e127f9..b157b96d5f8a 100644 --- a/code/__defines/machinery.dm +++ b/code/__defines/machinery.dm @@ -42,28 +42,27 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called // Camera channels // Station channels -#define CAMERA_CHANNEL_PUBLIC "Public" -#define CAMERA_CHANNEL_ENGINEERING "Engineering" -#define CAMERA_CHANNEL_MEDICAL "Medical" -#define CAMERA_CHANNEL_RESEARCH "Research" -#define CAMERA_CHANNEL_SECURITY "Security" - -#define CAMERA_CHANNEL_ROBOTS "Robots" -#define CAMERA_CHANNEL_MINE "Mining" -#define CAMERA_CHANNEL_SECRET "Secret" +#define CAMERA_CHANNEL_PUBLIC "Public" +#define CAMERA_CHANNEL_ENGINEERING "Engineering" +#define CAMERA_CHANNEL_MEDICAL "Medical" +#define CAMERA_CHANNEL_RESEARCH "Research" +#define CAMERA_CHANNEL_SECURITY "Security" +#define CAMERA_CHANNEL_ROBOTS "Robots" +#define CAMERA_CHANNEL_MINE "Mining" +#define CAMERA_CHANNEL_SECRET "Secret" // Non-station channels -#define CAMERA_CHANNEL_CRESCENT "Crescent" -#define CAMERA_CHANNEL_ERT "ZeEmergencyResponseTeam" -#define CAMERA_CHANNEL_MERCENARY "MercurialNet" -#define CAMERA_CHANNEL_TELEVISION "Television" +#define CAMERA_CHANNEL_CRESCENT "Crescent" +#define CAMERA_CHANNEL_ERT "Emergency Response Team" +#define CAMERA_CHANNEL_MERCENARY "MercurialNet" +#define CAMERA_CHANNEL_TELEVISION "Television" // Alarm networks -#define NETWORK_ALARM_ATMOS "Atmosphere Alarms" +#define NETWORK_ALARM_ATMOS "Atmosphere Alarms" #define NETWORK_ALARM_CAMERA "Camera Alarms" -#define NETWORK_ALARM_FIRE "Fire Alarms" +#define NETWORK_ALARM_FIRE "Fire Alarms" #define NETWORK_ALARM_MOTION "Motion Alarms" -#define NETWORK_ALARM_POWER "Power Alarms" +#define NETWORK_ALARM_POWER "Power Alarms" //singularity defines #define STAGE_ONE 1 diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index fa1c3f9627b9..a3ce8adfbdd5 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -270,3 +270,7 @@ /decl/outfit/dd_SortValue() return name + +// Stub for the sake of being able to make people spawn nude. +/decl/outfit/naked + name = "Naked And Afraid" \ No newline at end of file diff --git a/code/datums/storage/subtypes_box.dm b/code/datums/storage/subtypes_box.dm index 3803830d60f4..b94d406d1e6b 100644 --- a/code/datums/storage/subtypes_box.dm +++ b/code/datums/storage/subtypes_box.dm @@ -18,6 +18,9 @@ /datum/storage/box/animal_cube can_hold = list(/obj/item/food/animal_cube) +/datum/storage/box/large/metal + use_sound = 'sound/effects/closet_open.ogg' + /datum/storage/box/snappop can_hold = list(/obj/item/toy/snappop) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index de511b041ee4..789d1706c70a 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -576,4 +576,4 @@ return TRUE /obj/machinery/cryopod/proc/on_mob_spawn() - playsound(src, 'sound/machines/ding.ogg', 30, 1) \ No newline at end of file + playsound(src, 'sound/machines/ding.ogg', 30, 1) diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 3e0327cc03ad..81ea2fc50ed0 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -10,8 +10,9 @@ anchored = TRUE obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED directional_offset = @'{"NORTH":{"y":-32}, "SOUTH":{"y":32}, "EAST":{"x":32}, "WEST":{"x":-32}}' - var/lit = 0 + var/lit = FALSE var/on_icon = "sign_on" + var/sign_light_color = COLOR_CYAN_BLUE uncreated_component_parts = list( /obj/item/stock_parts/radio/receiver, @@ -33,11 +34,11 @@ /obj/machinery/holosign/on_update_icon() if (!lit || inoperable()) - icon_state = "sign_off" + icon_state = initial(icon_state) set_light(0) else icon_state = on_icon - set_light(1, 0.5, COLOR_CYAN_BLUE) + set_light(1, 0.5, sign_light_color) /decl/public_access/public_variable/holosign_on expected_type = /obj/machinery/holosign @@ -68,6 +69,13 @@ desc = "Small wall-mounted holographic projector. This one reads SERVICE." on_icon = "service" +/obj/machinery/holosign/bar + name = "bar holosign" + desc = "Small wall-mounted holographic projector. This one reads OPEN." + icon_state = "barclosed" + on_icon = "baropen" + sign_light_color = COLOR_LIGHT_CYAN + ////////////////////SWITCH/////////////////////////////////////// /obj/machinery/button/holosign name = "holosign switch" diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index 7482f522af6c..87e0136cd95f 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -280,4 +280,4 @@ if(lungs.is_bruised() && prob(30)) lungs.heal_damage(1) else - breather.suffocation_counter = max(breather.suffocation_counter - rand(1,5), 0) \ No newline at end of file + breather.suffocation_counter = max(breather.suffocation_counter - rand(1,5), 0) diff --git a/code/game/movietitles.dm b/code/game/movietitles.dm index 90f5287221f8..e129ea1972b8 100644 --- a/code/game/movietitles.dm +++ b/code/game/movietitles.dm @@ -128,7 +128,7 @@ var/global/list/end_titles titles += "
STAFF'S GOOD BOYS:
[english_list(goodboys)]

" var/disclaimer = "
Sponsored by [global.using_map.company_name].
All rights reserved.
\ - This motion picture is protected under the copyright laws of the Sol Central Government
and other nations throughout the galaxy.
\ + This motion picture is protected under the copyright laws of the system government
and other nations throughout the galaxy.
\ Colony of First Publication: [pick("Mars", "Luna", "Earth", "Venus", "Phobos", "Ceres", "Tiamat", "Ceti Epsilon", "Eos", "Pluto", "Ouere",\ "Lordania", "Kingston", "Cinu", "Yuklid V", "Lorriman", "Tersten", "Gaia")].
" disclaimer += pick("Use for parody prohibited. PROHIBITED.", @@ -146,4 +146,4 @@ var/global/list/end_titles titles += "
" titles += "
[JOINTEXT(disclaimer)]
" - return titles \ No newline at end of file + return titles diff --git a/code/game/objects/items/circuitboards/computer/computer.dm b/code/game/objects/items/circuitboards/computer/computer.dm index c013c88bdf5c..ff117e3375b3 100644 --- a/code/game/objects/items/circuitboards/computer/computer.dm +++ b/code/game/objects/items/circuitboards/computer/computer.dm @@ -120,4 +120,4 @@ /obj/item/stock_parts/circuitboard/guestpass name = "circuitboard (guest pass terminal)" - build_path = /obj/machinery/computer/guestpass \ No newline at end of file + build_path = /obj/machinery/computer/guestpass diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 40265fab29a1..fa29f4316653 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -453,3 +453,16 @@ var/global/list/all_gps_units = list() "stripe-outside" = "#ffae00", "stripe-inside" = "#9e7900" ) + +/obj/item/gps/security + color = "#5c0000" + decals = list( + "stripe-outside" = "#ff0000", + "stripe-inside" = "#800000" + ) + +/obj/item/gps/security/hos + decals = list( + "stripe-outside" = "#ffae00", + "stripe-inside" = "#9e7900" + ) diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm index 305f721f1730..34a48cec61b4 100644 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ b/code/game/objects/items/weapons/material/ashtray.dm @@ -58,3 +58,6 @@ /obj/item/ashtray/glass material = /decl/material/solid/glass + +/obj/item/ashtray/bronze + material = /decl/material/solid/metal/bronze diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index fa38daee6000..3ae0932a7075 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -166,6 +166,14 @@ /obj/item/box/ammo/blanks/WillContain() return list(/obj/item/ammo_casing/shotgun/blank = 8) +/obj/item/box/ammo/blanks/large + icon_state = "largebox" + w_class = ITEM_SIZE_LARGE + storage = /datum/storage/box/large/metal + +/obj/item/box/ammo/blanks/large/WillContain() + return list(/obj/item/ammo_casing/shotgun/blank = 16) + /obj/item/box/ammo/practiceshells name = "box of practice shells" /obj/item/box/ammo/practiceshells/WillContain() diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 13c9162b87f9..2995bcc82700 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -1,7 +1,6 @@ /* Types of tanks! * Contains: * Oxygen - * Anesthetic * Air * Hydrogen * Emergency Oxygen @@ -55,6 +54,9 @@ /obj/item/tank/hydrogen/empty starting_pressure = list() +/obj/item/tank/hydrogen/collector + starting_pressure = list(/decl/material/gas/hydrogen = 70) + /* * Emergency Oxygen */ @@ -105,4 +107,4 @@ icon = 'icons/obj/items/tanks/tank_red.dmi' distribute_pressure = ONE_ATMOSPHERE*O2STANDARD starting_pressure = list(/decl/material/gas/nitrogen = 10 ATM) - gas_volume = 180 \ No newline at end of file + gas_volume = 180 diff --git a/code/game/objects/random/subtypes/food.dm b/code/game/objects/random/subtypes/food.dm index 36aa8a4a37e6..49c3a3dd0dce 100644 --- a/code/game/objects/random/subtypes/food.dm +++ b/code/game/objects/random/subtypes/food.dm @@ -194,3 +194,13 @@ /obj/item/food/plumphelmetbiscuit ) return spawnable_choices + +/obj/random/mug + name = "random coffee cup" + desc = "A random coffee cup/mug." + icon = 'icons/obj/drink_glasses/coffecup.dmi' + icon_state = "coffeecup" + +/obj/random/mug/spawn_choices() + var/static/list/spawnable_choices = typesof(/obj/item/chems/drinks/glass2/coffeecup) - /obj/item/chems/drinks/glass2/coffeecup/custom + return spawnable_choices diff --git a/code/game/objects/random/subtypes/tech.dm b/code/game/objects/random/subtypes/tech.dm index a1b1ab86e65d..d04447d55c56 100644 --- a/code/game/objects/random/subtypes/tech.dm +++ b/code/game/objects/random/subtypes/tech.dm @@ -120,3 +120,20 @@ /obj/item/oxycandle ) return spawnable_choices + +/obj/random/hardsuit + name = "random hardsuit" + desc = "This is a random hardsuit." + icon = 'icons/clothing/rigs/rig.dmi' + icon_state = ICON_STATE_WORLD + +/obj/random/hardsuit/spawn_choices() + var/static/list/spawnable_choices = list( + /obj/item/rig/light/hacker/unlocked = 4, + /obj/item/rig/industrial/unlocked = 5, + /obj/item/rig/eva/unlocked = 5, + /obj/item/rig/light/stealth/unlocked = 4, + /obj/item/rig/hazard/unlocked = 3, + /obj/item/rig/merc/empty/unlocked = 1 + ) + return spawnable_choices diff --git a/code/game/turfs/floors/subtypes/floor_circuit.dm b/code/game/turfs/floors/subtypes/floor_circuit.dm index 7684009c32a4..651ac3167adc 100644 --- a/code/game/turfs/floors/subtypes/floor_circuit.dm +++ b/code/game/turfs/floors/subtypes/floor_circuit.dm @@ -13,6 +13,10 @@ name = "mainframe base" // TODO: force name overriding flooring? temperature = 263 +/turf/floor/bluegrid/cryo + initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD) + temperature = 73 + /turf/floor/greengrid name = "mainframe floor" icon = 'icons/turf/flooring/circuit.dmi' diff --git a/code/game/turfs/floors/subtypes/floor_tiled.dm b/code/game/turfs/floors/subtypes/floor_tiled.dm index 33dc224c1966..76bdcef431df 100644 --- a/code/game/turfs/floors/subtypes/floor_tiled.dm +++ b/code/game/turfs/floors/subtypes/floor_tiled.dm @@ -10,6 +10,10 @@ icon_state = "dark" _flooring = /decl/flooring/tiling/dark +/turf/floor/tiled/dark/cryo + initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD) + temperature = 73 + /turf/floor/tiled/dark/monotile name = "floor" icon_state = "monotiledark" @@ -68,6 +72,10 @@ icon_state = "techfloor_gray" _flooring = /decl/flooring/tiling/tech +/turf/floor/tiled/techfloor/cryo + initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD) + temperature = 73 + /turf/floor/tiled/monotile name = "floor" icon_state = "steel_monotile" @@ -108,6 +116,10 @@ icon_state = "techfloor_grid" _flooring = /decl/flooring/tiling/tech/grid +/turf/floor/tiled/techfloor/grid/cryo + initial_gas = list(/decl/material/gas/nitrogen = MOLES_CELLSTANDARD) + temperature = 73 + /turf/floor/tiled/airless name = "airless floor" initial_gas = null diff --git a/code/game/turfs/walls/wall_natural.dm b/code/game/turfs/walls/wall_natural.dm index 8b8fdab59083..b8ba4f36922b 100644 --- a/code/game/turfs/walls/wall_natural.dm +++ b/code/game/turfs/walls/wall_natural.dm @@ -236,4 +236,4 @@ var/global/_wall_chisel_skill = SKILL_CONSTRUCTION if(length(S.base_materials)) return pick(S.base_materials) //Otherwise, just use level strata - return ..() \ No newline at end of file + return ..() diff --git a/code/game/verbs/ignore.dm b/code/game/verbs/ignore.dm index ee69faddf8a2..9b7435413868 100644 --- a/code/game/verbs/ignore.dm +++ b/code/game/verbs/ignore.dm @@ -41,4 +41,4 @@ if(check_rights(R_MOD|R_ADMIN, 0)) // Admins and moderators are not ignorable return 0 return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 8ff55c421dea..e39ed6b84fa2 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -313,8 +313,7 @@ for(var/obj/machinery/rad_collector/Rad in SSmachines.machinery) if(Rad.anchored) if(!Rad.loaded_tank) - Rad.loaded_tank = new /obj/item/tank/hydrogen(Rad) - Rad.loaded_tank.air_contents.gas[/decl/material/gas/hydrogen] = 70 + Rad.loaded_tank = new /obj/item/tank/hydrogen/collector(Rad) Rad.drainratio = 0 if(!Rad.active) Rad.toggle_power() diff --git a/code/modules/atmospherics/atmos_primitives.dm b/code/modules/atmospherics/atmos_primitives.dm index 6a09490b3251..89cf0ef6832b 100644 --- a/code/modules/atmospherics/atmos_primitives.dm +++ b/code/modules/atmospherics/atmos_primitives.dm @@ -500,9 +500,9 @@ status.Add("Chlorine contamination.") if(nitrousoxide > 0.1) // Probably slightly less dangerous but still. status.Add("N2O contamination.") - if(hydrogen > 2.5) // Not too dangerous, but flammable. + if(hydrogen > 2.5) // Not too dangerous, but flammable. status.Add("Hydrogen contamination.") - if(carbondioxide > 5) // Not as dangerous until very large amount is present. + if(carbondioxide > 5) // Not as dangerous until a very large amount is present. status.Add("CO2 concentration high.") diff --git a/code/modules/backgrounds/citizenship/_citizenship.dm b/code/modules/backgrounds/citizenship/_citizenship.dm index d6c349aa1edd..e16cc9455ac7 100644 --- a/code/modules/backgrounds/citizenship/_citizenship.dm +++ b/code/modules/backgrounds/citizenship/_citizenship.dm @@ -1,6 +1,7 @@ /decl/background_detail/citizenship abstract_type = /decl/background_detail/citizenship category = /decl/background_category/citizenship + var/ruling_body = "Other Faction" var/capital var/size_heading = "Systems" var/size_value diff --git a/code/modules/backgrounds/citizenship/citizenship_other.dm b/code/modules/backgrounds/citizenship/citizenship_other.dm index d121a81af01a..cfeed30a29cf 100644 --- a/code/modules/backgrounds/citizenship/citizenship_other.dm +++ b/code/modules/backgrounds/citizenship/citizenship_other.dm @@ -14,3 +14,16 @@ description = "You do not possess any kind of official citizenship." economic_power = 0 capital = "None" + +/decl/background_detail/citizenship/synthetic + name = "Stateless Drone" + uid = "stateless_drone" + description = "Drones are considered property in most systems. Thus, statelessness is ubiqtuous for them." + secondary_langs = list( + /decl/language/machine, + /decl/language/human/common, + /decl/language/sign + ) + +/decl/background_detail/citizenship/synthetic/sanitize_background_name(new_name) + return sanitize_name(new_name, allow_numbers = TRUE) diff --git a/code/modules/bodytype/_bodytype.dm b/code/modules/bodytype/_bodytype.dm index fd6206eefa45..a11d1a1dd957 100644 --- a/code/modules/bodytype/_bodytype.dm +++ b/code/modules/bodytype/_bodytype.dm @@ -89,6 +89,8 @@ var/global/list/bodytypes_by_category = list() var/z_flags = 0 /// Amount to shift overlays when lying. TODO: check if this is still needed with KEEP_TOGETHER var/list/prone_overlay_offset + /// Set to TRUE to skip unit testing as a primary bodytype in a human. Generally for partial prosthetic models. + var/skip_organ_validation = FALSE /// Per-bodytype per-zone message strings, see /mob/proc/get_hug_zone_messages var/list/default_hug_message @@ -552,7 +554,7 @@ var/global/list/bodytypes_by_category = list() . += "non-list default metadata for [acc_decl.type]: [accessories[accessory] || "NULL"]" var/list/tail_data = has_limbs[BP_TAIL] - if(tail_data) + if(tail_data && !TYPE_IS_ABSTRACT(src)) var/obj/item/organ/external/tail/tail_organ = LAZYACCESS(tail_data, "path") if(ispath(tail_organ, /obj/item/organ/external/tail)) var/decl/species/use_species = get_user_species_for_validation() @@ -675,7 +677,7 @@ var/global/list/bodytypes_by_category = list() var/organ_type = has_organ[organ_tag] var/obj/item/organ/O = new organ_type(H, null, supplied_data) if(organ_tag != O.organ_tag) - warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the species' organ tag \"[organ_tag]\". Updating organ_tag to match.") + warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the bodytype organ tag \"[organ_tag]\". Updating organ_tag to match.") O.organ_tag = organ_tag H.add_organ(O, GET_EXTERNAL_ORGAN(H, O.parent_organ), FALSE, FALSE, skip_health_update = TRUE) H.update_health() diff --git a/code/modules/client/movement.dm b/code/modules/client/movement.dm index 47b5ff8c256f..1e84cb1a5d5f 100644 --- a/code/modules/client/movement.dm +++ b/code/modules/client/movement.dm @@ -1,4 +1,3 @@ - /client/New() ..() dir = NORTH diff --git a/code/modules/clothing/costumes/misc.dm b/code/modules/clothing/costumes/misc.dm index 09b0b04ae8e7..cba9790788ad 100644 --- a/code/modules/clothing/costumes/misc.dm +++ b/code/modules/clothing/costumes/misc.dm @@ -127,3 +127,9 @@ desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm." icon = 'icons/clothing/jumpsuits/jumpsuit_psionic.dmi' body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS + +/obj/item/clothing/costume/caretaker + name = "caretaker's jumpsuit" + desc = "A holy jumpsuit. Treat it well." + icon = 'icons/clothing/jumpsuits/caretaker.dmi' + bodytype_equip_flags = BODY_EQUIP_FLAG_HUMANOID diff --git a/code/modules/clothing/costumes/rank.dm b/code/modules/clothing/costumes/rank.dm index b2bc5a1fc940..f08fdefeb3bd 100644 --- a/code/modules/clothing/costumes/rank.dm +++ b/code/modules/clothing/costumes/rank.dm @@ -15,7 +15,7 @@ name = "head of personnel's suit" icon = 'icons/clothing/uniform_hop_whimsy.dmi' -/obj/item/clothing/costume/hosformalmale +/obj/item/clothing/costume/hosformal name = "head of security's formal uniform" desc = "A male head of security's formal-wear, for special occasions." icon = 'icons/clothing/uniform_hos_formal.dmi' diff --git a/code/modules/clothing/jumpsuits/_jumpsuit.dm b/code/modules/clothing/jumpsuits/_jumpsuit.dm index 205a8af7997a..21be4c2e731a 100644 --- a/code/modules/clothing/jumpsuits/_jumpsuit.dm +++ b/code/modules/clothing/jumpsuits/_jumpsuit.dm @@ -1,6 +1,6 @@ /obj/item/clothing/jumpsuit name = "jumpsuit" - desc = "The latest in space fashion." + desc = "The latest in utilitarian fashion." icon = 'icons/clothing/jumpsuits/jumpsuit.dmi' body_parts_covered = SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_ARMS permeability_coefficient = 0.90 diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm index afdbbdd64194..46d60d8112c7 100644 --- a/code/modules/clothing/masks/monitor.dm +++ b/code/modules/clothing/masks/monitor.dm @@ -1,6 +1,6 @@ //IPC-face object for FPB. /obj/item/clothing/mask/monitor - name = "display monitor" + name = "unbranded display monitor" desc = "A rather clunky old CRT-style display screen, fit for mounting on an optical output." flags_inv = HIDEEYES body_parts_covered = SLOT_EYES diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm index 01cd25482a79..a9f621df4036 100644 --- a/code/modules/clothing/masks/smokable.dm +++ b/code/modules/clothing/masks/smokable.dm @@ -135,9 +135,10 @@ return lit = TRUE atom_damage_type = BURN - if(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel)) // the fuel explodes + var/explosive_power = round(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) / 5, 1) + if(explosive_power > 0) var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) / 5, 1), get_turf(src), 0, 0) + e.set_up(explosive_power, get_turf(src), 0, 0) e.start() qdel(src) return diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index d36aa54c14dc..3812b8c92068 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -64,6 +64,9 @@ /obj/item/rig_module/cooling_unit ) +/obj/item/rig/light/hacker/unlocked + req_access = null + //The cybersuit is not space-proof. It does however, have good siemens_coefficient values /obj/item/clothing/head/lightrig/hacker name = "HUD" @@ -90,3 +93,6 @@ /obj/item/rig_module/stealth_field, /obj/item/rig_module/vision ) + +/obj/item/rig/light/stealth/unlocked + req_access = null diff --git a/code/modules/clothing/spacesuits/rig/suits/merc.dm b/code/modules/clothing/spacesuits/rig/suits/merc.dm index 06c837cbe4a0..adab8b2e8d64 100644 --- a/code/modules/clothing/spacesuits/rig/suits/merc.dm +++ b/code/modules/clothing/spacesuits/rig/suits/merc.dm @@ -51,6 +51,9 @@ /obj/item/rig_module/electrowarfare_suite, ) +/obj/item/rig/merc/empty/unlocked + req_access = null + /obj/item/rig/merc/heavy name = "crimson EOD hardsuit control module" desc = "A blood-red hardsuit with heavy armoured plates. Judging by the abnormally thick plates, this one is for working with explosives." diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index fe48b0e24b0d..97456e50ecee 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -92,6 +92,9 @@ /obj/item/rig_module/cooling_unit ) +/obj/item/rig/industrial/unlocked + req_access = null + /obj/item/rig/eva name = "EVA hardsuit control module" suit_type = "EVA hardsuit" @@ -137,6 +140,9 @@ /obj/item/rig_module/cooling_unit ) +/obj/item/rig/eva/unlocked + req_access = null + /obj/item/rig/ce name = "advanced engineering hardsuit control module" suit_type = "engineering hardsuit" @@ -357,6 +363,9 @@ /obj/item/rig_module/cooling_unit ) +/obj/item/rig/hazard/unlocked + req_access = null + /obj/item/rig/zero name = "null suit control module" suit_type = "null hardsuit" diff --git a/code/modules/codex/categories/_materials.dm b/code/modules/codex/categories/_materials.dm index 6509270555d4..cc138ce2dd81 100644 --- a/code/modules/codex/categories/_materials.dm +++ b/code/modules/codex/categories/_materials.dm @@ -22,6 +22,9 @@ var/list/reactant_values = list() for(var/reactant_id in reaction.required_reagents) var/decl/material/reactant = GET_DECL(reactant_id) + if(!istype(reactant)) + log_error("Could not find /decl for [reactant_id], reaction type [reactiontype].") + continue var/reactant_name = "[reactant.name]" reactant_values += "[reaction.required_reagents[reactant_id]]u [reactant_name]" mechanics_text += " [jointext(reactant_values, " + ")]" diff --git a/code/modules/codex/categories/category_cultures.dm b/code/modules/codex/categories/category_cultures.dm index 0aef22c0c0cd..84ccc0d6b841 100644 --- a/code/modules/codex/categories/category_cultures.dm +++ b/code/modules/codex/categories/category_cultures.dm @@ -1,5 +1,5 @@ /decl/codex_category/cultures - name = "Places, Factions and Culture" + name = "Places, Factions, and Culture" desc = "Prominent planets, cultures, factions and religions of known space." /decl/codex_category/cultures/Populate() diff --git a/code/modules/codex/categories/category_fusion_reaction.dm b/code/modules/codex/categories/category_fusion_reaction.dm index ff61c4c392fc..715aee90cc2b 100644 --- a/code/modules/codex/categories/category_fusion_reaction.dm +++ b/code/modules/codex/categories/category_fusion_reaction.dm @@ -10,7 +10,15 @@ continue var/decl/material/p_mat = GET_DECL(reaction.p_react) + if(!istype(p_mat)) + log_error("Could not find /decl instance for [rtype]'s primary reactant [reaction.p_react || "NULL"].") + continue + var/decl/material/s_mat = GET_DECL(reaction.s_react) + if(!istype(s_mat)) + log_error("Could not find /decl instance for [rtype]'s secondary reactant [reaction.s_react || "NULL"].") + continue + var/list/reaction_info = list() reaction_info += "Fusion between [p_mat.name] and [s_mat.name] can be achieved with a plasma temperature of [T0C + reaction.minimum_reaction_temperature] Kelvin or higher." reaction_info += "This reaction consumes [initial(reaction.energy_consumption)] heat unit\s and produces [reaction.energy_production] heat unit\s." diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 96d91b2e784d..4342ebf60d99 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -194,6 +194,14 @@ return if(!can_ignite()) return + //also copied from matches + var/explosive_power = round(REAGENT_VOLUME(reagents, /decl/material/liquid/fuel) / 5, 1) + if(explosive_power > 0) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(explosive_power, get_turf(src), 0, 0) + e.start() + qdel(src) + return START_PROCESSING(SSobj, src) set_light(2, 1, "#e38f46") _on_fire = TRUE diff --git a/code/modules/economy/cael/EFTPOS.dm b/code/modules/economy/cael/EFTPOS.dm index 519938245c6d..d88132261a96 100644 --- a/code/modules/economy/cael/EFTPOS.dm +++ b/code/modules/economy/cael/EFTPOS.dm @@ -41,7 +41,16 @@ //by default, connect to the station account //the user of the EFTPOS device can change the target account though, and no-one will be the wiser (except whoever's being charged) - linked_account = station_account + linked_account = get_default_account() + +/obj/item/eftpos/proc/get_default_account() + return global.station_account + +/obj/item/eftpos/departmental + var/decl/department/default_department + +/obj/item/eftpos/departmental/get_default_account() + return (default_department && global.department_accounts[default_department]) || ..() /obj/item/eftpos/proc/print_reference() var/obj/item/paper/R = new(src.loc, null, diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index 3cf18471cd43..6edfb41672b6 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -7,7 +7,7 @@ . = replacetext(., "$TARGET_THEM$", target_gender.him) . = replacetext(., "$TARGET_THEIR$", target_gender.his) . = replacetext(., "$TARGET_SELF$", target_gender.self) - . = replacetext(., "$TARGET$", "\the [target]") + . = replacetext(., "$TARGET$", "[target]") /proc/emote_replace_user_tokens(var/msg, var/atom/user) . = msg @@ -18,7 +18,7 @@ . = replacetext(., "$USER_THEM$", user_gender.him) . = replacetext(., "$USER_THEIR$", user_gender.his) . = replacetext(., "$USER_SELF$", user_gender.self) - . = replacetext(., "$USER$", "\the [user]") + . = replacetext(., "$USER$", "[user]") // Note about emote messages: // - $USER$ / $TARGET$ will be replaced with the relevant name, in bold. diff --git a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm index 221ee935055c..869920b3417f 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_themes/ruined_city.dm @@ -123,6 +123,9 @@ floor_type = null material = /decl/material/solid/stone/concrete +/turf/wall/concrete/reinforced + reinf_material = /decl/material/solid/metal/steel + //Generic ruin /datum/random_map/maze/concrete wall_type = /turf/wall/concrete diff --git a/code/modules/materials/definitions/solids/materials_solid_stone.dm b/code/modules/materials/definitions/solids/materials_solid_stone.dm index 3bb5692d7769..d9a0ad5866d2 100644 --- a/code/modules/materials/definitions/solids/materials_solid_stone.dm +++ b/code/modules/materials/definitions/solids/materials_solid_stone.dm @@ -44,6 +44,15 @@ melting_point = T0C + 600 hardness = MAT_VALUE_RIGID + 5 +/decl/material/solid/stone/limestone + name = "limestone" + uid = "solid_limestone" + lore_text = "A pale sedimentary rock, often containing fossils. The cost of boosting it to orbit is almost universally much higher than the actual value of the material." + color = COLOR_OFF_WHITE + value = 1.5 + melting_point = T0C + 600 + hardness = MAT_VALUE_RIGID + 5 + /decl/material/solid/stone/flint name = "flint" uid = "solid_flint" diff --git a/code/modules/materials/stack_types/material_stack_misc.dm b/code/modules/materials/stack_types/material_stack_misc.dm index afd7fbfe51ab..64017b9fdd6e 100644 --- a/code/modules/materials/stack_types/material_stack_misc.dm +++ b/code/modules/materials/stack_types/material_stack_misc.dm @@ -82,6 +82,16 @@ crafting_stack_type = /obj/item/stack/material/puck can_be_pulverized = TRUE +/obj/item/stack/material/crystal + name = "crystal" + singular_name = "crystal" + plural_name = "crystals" + icon_state = "sheet-phoron" + plural_icon_state = "sheet-phoron-mult" + max_icon_state = "sheet-phoron-max" + stack_merge_type = /obj/item/stack/material/crystal + can_be_pulverized = TRUE + /obj/item/stack/material/segment name = "segments" singular_name = "segment" diff --git a/mods/species/ascent/datum/descriptors.dm b/code/modules/mob/living/human/descriptors/descriptors_body_length.dm similarity index 100% rename from mods/species/ascent/datum/descriptors.dm rename to code/modules/mob/living/human/descriptors/descriptors_body_length.dm diff --git a/code/modules/mob/living/human/human.dm b/code/modules/mob/living/human/human.dm index 0fe3d1bc19cc..ee819f1252e6 100644 --- a/code/modules/mob/living/human/human.dm +++ b/code/modules/mob/living/human/human.dm @@ -611,7 +611,7 @@ for(var/obj/item/organ/external/E in get_external_organs()) E.sanitize_sprite_accessories() - for(var/acc_cat in root_bodytype.default_sprite_accessories) + for(var/acc_cat in root_bodytype?.default_sprite_accessories) var/decl/sprite_accessory_category/acc_cat_decl = GET_DECL(acc_cat) if(!acc_cat_decl.always_apply_defaults) continue diff --git a/code/modules/multiz/level_data.dm b/code/modules/multiz/level_data.dm index d291f1194227..5d6dbe0d957c 100644 --- a/code/modules/multiz/level_data.dm +++ b/code/modules/multiz/level_data.dm @@ -678,6 +678,8 @@ ///Returns the instance of the base area for this level /datum/level_data/proc/get_base_area_instance() + if(!base_area) + return null var/area/found = locate(base_area) if(found) return found diff --git a/code/modules/overmap/ftl_shunt/core.dm b/code/modules/overmap/ftl_shunt/core.dm index 93592ecdb29c..5ad561f38a01 100644 --- a/code/modules/overmap/ftl_shunt/core.dm +++ b/code/modules/overmap/ftl_shunt/core.dm @@ -554,7 +554,7 @@ /decl/material/gas/hydrogen/deuterium = 25000, /decl/material/gas/hydrogen = 25000, /decl/material/solid/exotic_matter = 50000 - ) + ) var/obj/item/fuel_assembly/fuel var/obj/machinery/ftl_shunt/core/master var/max_fuel = 0 @@ -654,4 +654,7 @@ icon = 'icons/obj/items/stock_parts/stock_parts.dmi' icon_state = "smes_coil" color = COLOR_YELLOW - matter = list(/decl/material/solid/exotic_matter = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/metal/plasteel = MATTER_AMOUNT_PRIMARY) + matter = list( + /decl/material/solid/exotic_matter = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/metal/plasteel = MATTER_AMOUNT_PRIMARY + ) diff --git a/code/modules/power/admin_setup_engine.dm b/code/modules/power/admin_setup_engine.dm index e5aae9005847..4297a4ec897b 100644 --- a/code/modules/power/admin_setup_engine.dm +++ b/code/modules/power/admin_setup_engine.dm @@ -159,4 +159,4 @@ var/global/list/engine_setup_markers = list() return ENGINE_SETUP_WARNING found.activate() found.update_icon() - return ENGINE_SETUP_OK \ No newline at end of file + return ENGINE_SETUP_OK diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index dc9234516221..d9e93ff2da18 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -330,6 +330,9 @@ maxcharge = 500 w_class = ITEM_SIZE_SMALL //Perhaps unwise. +/obj/item/cell/gun/empty + charge = 0 + /obj/item/cell/gun/on_update_icon() . = ..() //Color the battery charging overlay against the percentage of the battery capacity. However the index of gradient() is set to 1, instead of 100, so we divide it by 100. Colors were chosen by the sprite artist. diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index f85c32b16eb0..cd70fdbc44a5 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -4,14 +4,14 @@ var/global/list/rad_collectors = list() /obj/machinery/rad_collector name = "radiation collector array" - desc = "A device which uses radiation and hydrogen to produce power." + desc = "A device which uses radiation and a reactant to produce power." icon = 'icons/obj/machines/rad_collector.dmi' icon_state = "ca" anchored = FALSE density = TRUE initial_access = list(access_engine_equip) max_health = 100 - var/obj/item/tank/hydrogen/loaded_tank = null + var/obj/item/tank/loaded_tank = null var/max_safe_temp = 1000 + T0C var/melted @@ -80,22 +80,22 @@ var/global/list/rad_collectors = list() return FALSE . = TRUE if((stat & BROKEN) || melted) - to_chat(user, "\The [src] is completely destroyed!") + to_chat(user, SPAN_WARNING("\The [src] is completely destroyed!")) if(!src.locked) toggle_power() user.visible_message("[user.name] turns \the [src] [active? "on":"off"].", \ "You turn \the [src] [active? "on":"off"].") investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(loaded_tank.air_contents.gas[/decl/material/gas/hydrogen]/0.29)]%":"It is empty"].","singulo") else - to_chat(user, "The controls are locked!") + to_chat(user, SPAN_WARNING("The controls are locked!")) /obj/machinery/rad_collector/attackby(obj/item/used_item, mob/user) - if(istype(used_item, /obj/item/tank/hydrogen)) + if(istype(used_item, /obj/item/tank)) if(!src.anchored) - to_chat(user, "\The [src] needs to be secured to the floor first.") + to_chat(user, SPAN_WARNING("\The [src] needs to be secured to the floor first.")) return TRUE if(src.loaded_tank) - to_chat(user, "There's already a tank loaded.") + to_chat(user, SPAN_WARNING("There's already a tank loaded.")) return TRUE if(!user.try_unequip(used_item, src)) return TRUE @@ -108,11 +108,11 @@ var/global/list/rad_collectors = list() return TRUE else if(IS_WRENCH(used_item)) if(loaded_tank) - to_chat(user, "Remove the tank first.") + to_chat(user, SPAN_NOTICE("Remove the tank first.")) return TRUE for(var/obj/machinery/rad_collector/R in get_turf(src)) if(R != src) - to_chat(user, "You cannot install more than one collector on the same spot.") + to_chat(user, SPAN_WARNING("You cannot install more than one collector on the same spot.")) return TRUE playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) src.anchored = !src.anchored @@ -129,7 +129,7 @@ var/global/list/rad_collectors = list() src.locked = 0 //just in case it somehow gets locked to_chat(user, SPAN_WARNING("The controls can only be locked when \the [src] is active.")) else - to_chat(user, "Access denied!") + to_chat(user, SPAN_WARNING("Access denied!")) return TRUE return ..() @@ -164,12 +164,11 @@ var/global/list/rad_collectors = list() /obj/machinery/rad_collector/proc/eject() locked = 0 - var/obj/item/tank/hydrogen/Z = src.loaded_tank - if (!Z) + if (!loaded_tank) return - Z.dropInto(loc) - Z.reset_plane_and_layer() - src.loaded_tank = null + loaded_tank.dropInto(loc) + loaded_tank.reset_plane_and_layer() + loaded_tank = null if(active) toggle_power() else diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 97a0d08fa836..26a7eb80a5fb 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -284,6 +284,11 @@ var/global/list/singularities = list() if(last_pixel_x != default_pixel_x || last_pixel_y != default_pixel_y) reset_offsets(0) +/obj/effect/singularity/proc/pulse() + for(var/obj/machinery/rad_collector/R in global.rad_collectors) + if (get_dist(R, src) <= 15) //Better than using orange() every process. + R.receive_pulse(energy) + /obj/effect/singularity/singularity_act(S, size) if(current_stage.stage_size <= size) var/gain = (energy/2) diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm index 15f6277f693a..91667bc86faf 100644 --- a/code/modules/random_map/noise/noise.dm +++ b/code/modules/random_map/noise/noise.dm @@ -152,6 +152,7 @@ if(has_neighbor_with_path(x, y, get_appropriate_path(map[mapcell]), TRUE)) continue map[mapcell] = map[pick(get_neighbors(x, y, TRUE))] + CHECK_TICK #define CHECK_NEIGHBOR_FOR_PATH(X, Y) \ TRANSLATE_AND_VERIFY_COORD(X,Y);\ diff --git a/code/modules/reagents/chems/chems_medicines.dm b/code/modules/reagents/chems/chems_medicines.dm index 6578646b9e28..b771084ef239 100644 --- a/code/modules/reagents/chems/chems_medicines.dm +++ b/code/modules/reagents/chems/chems_medicines.dm @@ -30,10 +30,11 @@ value = 1.5 exoplanet_rarity_gas = MAT_RARITY_EXOTIC uid = "chem_antirads" + var/antirad_power = 30 /decl/material/liquid/antirads/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) . = ..() - M.radiation = max(M.radiation - 30 * removed, 0) + M.radiation = max(M.radiation - antirad_power * removed, 0) /decl/material/liquid/brute_meds name = "styptic powder" diff --git a/code/modules/reagents/cocktails.dm b/code/modules/reagents/cocktails.dm index fd688adbcd92..6a04df74b4e3 100644 --- a/code/modules/reagents/cocktails.dm +++ b/code/modules/reagents/cocktails.dm @@ -226,7 +226,7 @@ ) /decl/cocktail/toxins_special - name = "H2 Special" + name = "Toxins Special" description = "Raise a glass to the bomb technicians of yesteryear, wherever their ashes now reside." ratios = list( /decl/material/liquid/alcohol/rum = 1, diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm index d4d7e5a425be..dd072542c416 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm @@ -65,6 +65,12 @@ /obj/item/box/glasses/mug/WillContain() return list(/obj/item/chems/drinks/glass2/mug = max(1, storage?.storage_slots)) +/obj/item/box/glasses/coffeecup/WillContain() + return list(/obj/item/chems/drinks/glass2/coffeecup = max(1, storage?.storage_slots)) + +/obj/item/box/glasses/teacup/WillContain() + return list(/obj/item/chems/drinks/glass2/coffeecup/teacup = max(1, storage?.storage_slots)) + /obj/item/box/glasses/wine/WillContain() return list(/obj/item/chems/drinks/glass2/wine = max(1, storage?.storage_slots)) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index bca089ca6fdd..fd4593aee2bd 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -383,6 +383,14 @@ add_to_reagents(/decl/material/liquid/amphetamines, 2 * vol_third) return ..() +/obj/item/chems/syringe/brute_meds + desc = "Contains drugs for treating brute trauma." + mode = SYRINGE_INJECT + +/obj/item/chems/syringe/brute_meds/populate_reagents() + add_to_reagents(/decl/material/liquid/brute_meds, REAGENT_MAXIMUM_VOLUME(reagents)) + return ..() + // TG ports /obj/item/chems/syringe/advanced diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index c040fe8c780c..394c6abd75b3 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -118,7 +118,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/breath_type = /decl/material/gas/oxygen // Non-oxygen gas breathed, if any. /// Material types considered noticeably poisonous when inhaled (ie. updates the toxins indicator on the HUD). /// This is an associative list for speed. - var/poison_types = list(/decl/material/gas/chlorine = TRUE) + var/poison_types = list( + /decl/material/gas/chlorine = TRUE + ) var/exhale_type = /decl/material/gas/carbon_dioxide // Exhaled gas type. var/blood_reagent = /decl/material/liquid/blood diff --git a/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm b/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm index c56e354022c8..c2d373859706 100644 --- a/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm +++ b/code/modules/xenoarcheaology/artifacts/standalone/gigadrill.dm @@ -12,6 +12,10 @@ var/active = 0 var/drill_time = 10 var/turf/drilling_turf + matter = list( + /decl/material/solid/metal/plasteel/ocp = MATTER_AMOUNT_PRIMARY, + /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_REINFORCEMENT, + ) /obj/machinery/giga_drill/physical_attack_hand(mob/user) if(active) diff --git a/code/modules/xenoarcheaology/finds/find_types/_find.dm b/code/modules/xenoarcheaology/finds/find_types/_find.dm index 4b04f9a04d71..5d855be5c4ba 100644 --- a/code/modules/xenoarcheaology/finds/find_types/_find.dm +++ b/code/modules/xenoarcheaology/finds/find_types/_find.dm @@ -2,7 +2,7 @@ var/global/list/responsive_carriers = list( /decl/material/solid/carbon = "Trace organic cells", /decl/material/solid/potassium = "Long exposure particles", /decl/material/liquid/fuel/hydrazine = "Trace water particles", - /decl/material/gas/ammonia = "Crystalline structures", + /decl/material/gas/ammonia = "Crystalline structures", /decl/material/liquid/mercury = "Metallic derivative", /decl/material/solid/metal/iron = "Metallic composite", /decl/material/gas/chlorine = "Metamorphic/igneous rock composite", diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm index 2a0cc80fdbb1..9e334a8d1477 100644 --- a/code/unit_tests/mob_tests.dm +++ b/code/unit_tests/mob_tests.dm @@ -24,6 +24,8 @@ T = locate(/turf/space) var/datum/mob_snapshot/dummy_appearance = new for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype)) + if(bodytype.skip_organ_validation) + continue var/decl/species/species = bodytype.get_user_species_for_validation() if(!species) continue @@ -208,6 +210,7 @@ var/msg = "Damage taken: [ending_damage] out of [damage_amount] || expected: [expected_msg] \[Overall Health:[ending_health] (Initial: [initial_health]\]" if(failure) + msg += " || species: [H.get_species()?.type || "NULL"] || bodytype: [H.get_bodytype()?.type || "NULL"]" fail(msg) else pass(msg) @@ -305,6 +308,8 @@ var/failed = FALSE var/datum/mob_snapshot/dummy_appearance = new for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype)) + if(bodytype.skip_organ_validation) + continue var/decl/species/species = bodytype.get_user_species_for_validation() if(!species) continue diff --git a/code/unit_tests/organ_tests.dm b/code/unit_tests/organ_tests.dm index 72d20645b58b..69f4266c6b49 100644 --- a/code/unit_tests/organ_tests.dm +++ b/code/unit_tests/organ_tests.dm @@ -118,6 +118,8 @@ var/failcount = 0 var/datum/mob_snapshot/dummy_appearance = new for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype)) + if(bodytype.skip_organ_validation) + continue var/decl/species/species = bodytype.get_user_species_for_validation() if(!species) continue @@ -255,6 +257,8 @@ var/failcount = 0 var/datum/mob_snapshot/dummy_appearance = new for(var/decl/bodytype/bodytype in decls_repository.get_decls_of_subtype_unassociated(/decl/bodytype)) + if(bodytype.skip_organ_validation) + continue var/decl/species/species = bodytype.get_user_species_for_validation() if(!species) continue diff --git a/code/unit_tests/unique_tests.dm b/code/unit_tests/unique_tests.dm index cef4aba20aab..c0c100bcd7c2 100644 --- a/code/unit_tests/unique_tests.dm +++ b/code/unit_tests/unique_tests.dm @@ -181,9 +181,9 @@ continue group_by(decls_by_uid, decl_instance.uid, decl_type) - var/number_of_issues = number_of_issues(decls_by_uid, "Language UIDs") + var/number_of_issues = number_of_issues(decls_by_uid, "/decl UIDs") if(number_of_issues) - fail("[number_of_issues] issue\s with decl UIDs found.") + fail("[number_of_issues] issue\s with /decl UIDs found.") else pass("All decl UIDs are unique.") return TRUE diff --git a/icons/obj/holosign.dmi b/icons/obj/holosign.dmi index cf1781d4235b..a4493a5ee3e6 100644 Binary files a/icons/obj/holosign.dmi and b/icons/obj/holosign.dmi differ diff --git a/mods/content/xenobiology/species/golem.dm b/mods/content/xenobiology/species/golem.dm index 51b9a2046e88..afb79c1f4cad 100644 --- a/mods/content/xenobiology/species/golem.dm +++ b/mods/content/xenobiology/species/golem.dm @@ -36,7 +36,7 @@ force_background_info = list( /decl/background_category/heritage = /decl/background_detail/heritage/hidden/cultist, /decl/background_category/homeworld = /decl/background_detail/location/stateless, - /decl/background_category/citizenship = /decl/background_detail/citizenship/other, + /decl/background_category/citizenship = /decl/background_detail/citizenship/synthetic, /decl/background_category/faction = /decl/background_detail/faction/other ) diff --git a/mods/species/adherent/datum/species.dm b/mods/species/adherent/datum/species.dm index 89913e40651c..a9130f4fe2f4 100644 --- a/mods/species/adherent/datum/species.dm +++ b/mods/species/adherent/datum/species.dm @@ -56,7 +56,7 @@ available_background_info = list( /decl/background_category/citizenship = list( - /decl/background_detail/citizenship/other + /decl/background_detail/citizenship/synthetic ), /decl/background_category/heritage = list( /decl/background_detail/heritage/adherent diff --git a/mods/species/ascent/_ascent.dme b/mods/species/ascent/_ascent.dme index acb7c9b9a93e..63f077b54d9e 100644 --- a/mods/species/ascent/_ascent.dme +++ b/mods/species/ascent/_ascent.dme @@ -7,7 +7,6 @@ #include "datum\antagonist.dm" #include "datum\codex.dm" #include "datum\culture.dm" -#include "datum\descriptors.dm" #include "datum\emotes.dm" #include "datum\languages.dm" #include "datum\species.dm" diff --git a/mods/species/utility_frames/species.dm b/mods/species/utility_frames/species.dm index 367ddeccad7f..5de54ba13040 100644 --- a/mods/species/utility_frames/species.dm +++ b/mods/species/utility_frames/species.dm @@ -36,7 +36,8 @@ /decl/pronouns/neuter ) available_background_info = list( - /decl/background_category/heritage = list(/decl/background_detail/heritage/synthetic) + /decl/background_category/citizenship = list(/decl/background_detail/citizenship/synthetic), + /decl/background_category/heritage = list(/decl/background_detail/heritage/synthetic) ) exertion_effect_chance = 10 diff --git a/nebula.dme b/nebula.dme index ce318ce3d015..2a3e1f2d4153 100644 --- a/nebula.dme +++ b/nebula.dme @@ -2921,6 +2921,7 @@ #include "code\modules\mob\living\human\whisper.dm" #include "code\modules\mob\living\human\descriptors\_descriptors.dm" #include "code\modules\mob\living\human\descriptors\descriptors_age.dm" +#include "code\modules\mob\living\human\descriptors\descriptors_body_length.dm" #include "code\modules\mob\living\human\descriptors\descriptors_generic.dm" #include "code\modules\mob\living\maneuvers\_maneuver.dm" #include "code\modules\mob\living\maneuvers\maneuver_leap.dm" diff --git a/tools/map_migrations/4912_unused_clothes_removal.txt b/tools/map_migrations/4912_unused_clothes_removal.txt index 553a95bd086a..0d7f70e7ceed 100644 --- a/tools/map_migrations/4912_unused_clothes_removal.txt +++ b/tools/map_migrations/4912_unused_clothes_removal.txt @@ -1,3 +1,2 @@ /obj/item/clothing/jumpsuit/vice/@SUBTYPES : @DELETE /obj/item/clothing/jumpsuit/johnny/@SUBTYPES : @DELETE -/obj/item/clothing/jumpsuit/caretaker/@SUBTYPES : @DELETE \ No newline at end of file