diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 60c0dc25dc0..c472e55eb21 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -27,6 +27,7 @@ CREATE TABLE `characters` ( `real_name` varchar(55) COLLATE utf8mb4_unicode_ci NOT NULL, `name_is_always_random` tinyint(1) NOT NULL, `gender` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL, + `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL, `age` smallint(4) NOT NULL, `species` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL, `language` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL, diff --git a/SQL/updates/54-55.sql b/SQL/updates/54-55.sql new file mode 100644 index 00000000000..8b388b65f0c --- /dev/null +++ b/SQL/updates/54-55.sql @@ -0,0 +1,9 @@ +# Updating DB from 54-55 - lewc +# Adds a new `body_type` (gender sprite) column to the `characters` table + +# Add the new column next to the existing `gender` one +ALTER TABLE `characters` + ADD COLUMN `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL AFTER `gender`; + +# Set the `body_type` column to whatever's already in `gender`, so that it doesn't change existing characters +UPDATE `characters` SET `body_type` = `gender` WHERE `gender` IS NOT NULL diff --git a/code/__DEFINES/dna.dm b/code/__DEFINES/dna.dm index c3cdf346f92..6f6b03b29ad 100644 --- a/code/__DEFINES/dna.dm +++ b/code/__DEFINES/dna.dm @@ -50,17 +50,18 @@ #define DNA_UI_EYES_G 35 #define DNA_UI_EYES_B 36 #define DNA_UI_GENDER 37 -#define DNA_UI_BEARD_STYLE 38 -#define DNA_UI_HAIR_STYLE 39 -#define DNA_UI_HACC_STYLE 40 -#define DNA_UI_BACC_STYLE 41 -#define DNA_UI_HAIR_GRADIENT_STYLE 42 -#define DNA_UI_HEAD_MARK_STYLE 43 -#define DNA_UI_BODY_MARK_STYLE 44 -#define DNA_UI_TAIL_MARK_STYLE 45 -#define DNA_UI_PHYSIQUE 46 -#define DNA_UI_HEIGHT 47 -#define DNA_UI_LENGTH 48 // Update this when you add something, or you WILL break shit. +#define DNA_UI_BODY_TYPE 38 +#define DNA_UI_BEARD_STYLE 39 +#define DNA_UI_HAIR_STYLE 40 +#define DNA_UI_HACC_STYLE 41 +#define DNA_UI_BACC_STYLE 42 +#define DNA_UI_HAIR_GRADIENT_STYLE 43 +#define DNA_UI_HEAD_MARK_STYLE 44 +#define DNA_UI_BODY_MARK_STYLE 45 +#define DNA_UI_TAIL_MARK_STYLE 46 +#define DNA_UI_PHYSIQUE 47 +#define DNA_UI_HEIGHT 48 +#define DNA_UI_LENGTH 49 // Update this when you add something, or you WILL break shit. #define DNA_SE_LENGTH 55 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow. diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index c1ab48c1f79..17beb518b37 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -398,7 +398,7 @@ #define INVESTIGATE_BOMB "bombs" // The SQL version required by this version of the code -#define SQL_VERSION 54 +#define SQL_VERSION 55 // Vending machine stuff #define CAT_NORMAL (1<<0) diff --git a/code/__HELPERS/mob_helpers.dm b/code/__HELPERS/mob_helpers.dm index bebb8213919..42a2c024560 100644 --- a/code/__HELPERS/mob_helpers.dm +++ b/code/__HELPERS/mob_helpers.dm @@ -43,8 +43,6 @@ if(hairstyle == "Bald") //Just in case. valid_hairstyles += hairstyle continue - if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE)) - continue if(species == "Machine") //If the user is a species who can have a robotic head... if(!robohead) robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"] @@ -72,8 +70,6 @@ if(facialhairstyle == "Shaved") //Just in case. valid_facial_hairstyles += facialhairstyle continue - if((gender == MALE && S.gender == FEMALE) || (gender == FEMALE && S.gender == MALE)) - continue if(species == "Machine") //If the user is a species who can have a robotic head... if(!robohead) robohead = GLOB.all_robolimbs["Morpheus Cyberkinetics"] @@ -171,10 +167,13 @@ current_species = GLOB.all_species[species] if(!current_species || current_species.name == "Human") - if(gender==FEMALE) - return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) + switch(gender) + if(FEMALE) + return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) + if(MALE) + return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) + else + return capitalize(pick(GLOB.first_names_male + GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) else return current_species.get_random_name(gender) diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 2ba09743571..8c7f9714d4b 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -23,15 +23,15 @@ //more specialised stuff -/proc/sanitize_gender(gender,neuter=0,plural=0, default="male") +/proc/sanitize_gender(gender, neuter = FALSE, default = "male") switch(gender) - if(MALE, FEMALE)return gender + if(MALE, FEMALE, PLURAL) + return gender if(NEUTER) - if(neuter) return gender - else return default - if(PLURAL) - if(plural) return gender - else return default + if(neuter) + return gender + else + return default return default /proc/sanitize_hexcolor(color, default="#000000") diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm index 770be127199..97935e23bc2 100644 --- a/code/game/area/asteroid_areas.dm +++ b/code/game/area/asteroid_areas.dm @@ -22,12 +22,3 @@ /area/asteroid/artifactroom name = "\improper Asteroid - Artifact" icon_state = "cave" - -//Labor camp -/area/mine/laborcamp - name = "Labor Camp" - icon_state = "brig" - -/area/mine/laborcamp/security - name = "Labor Camp Security" - icon_state = "security" diff --git a/code/game/area/away_content_areas.dm b/code/game/area/away_content_areas.dm index efbb66edb5c..dcaccc16073 100644 --- a/code/game/area/away_content_areas.dm +++ b/code/game/area/away_content_areas.dm @@ -66,14 +66,11 @@ /area/awaycontent/a11 icon_state = "awaycontent11" -/area/awaycontent/a11 +/area/awaycontent/a12 icon_state = "awaycontent12" -/area/awaycontent/a12 - icon_state = "awaycontent13" - /area/awaycontent/a13 - icon_state = "awaycontent14" + icon_state = "awaycontent13" /area/awaycontent/a14 icon_state = "awaycontent14" diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 86d0448bbac..cb5cd14435c 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -136,6 +136,12 @@ GLOBAL_LIST_EMPTY(bad_blocks) var/list/bodyacc = GLOB.body_accessory_by_name.Find(character.body_accessory?.name || "None") SetUIValueRange(DNA_UI_BACC_STYLE, bodyacc, length(GLOB.body_accessory_by_name), 1) + switch(character.body_type) + if(FEMALE) + SetUIState(DNA_UI_BODY_TYPE, DNA_GENDER_FEMALE, TRUE) + if(MALE) + SetUIState(DNA_UI_BODY_TYPE, DNA_GENDER_MALE, TRUE) + //Set the Gender switch(character.gender) if(FEMALE) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index b3de3a92f38..c387b34e5c3 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -154,6 +154,12 @@ H.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. + switch(dna.GetUIState(DNA_UI_BODY_TYPE)) + if(DNA_GENDER_FEMALE) + H.change_body_type(FEMALE, FALSE) + if(DNA_GENDER_MALE) + H.change_body_type(MALE, FALSE) + switch(dna.GetUITriState(DNA_UI_GENDER)) if(DNA_GENDER_FEMALE) H.change_gender(FEMALE, FALSE) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 85f7d63b971..54d29950951 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,11 +1,7 @@ - // This list is basically a copy of GLOB.greek_letters, but it also removes letters when a changeling spawns in with that ID GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) -/datum/game_mode - var/list/datum/mind/changelings = list() - /datum/game_mode/changeling name = "changeling" config_tag = "changeling" diff --git a/code/game/gamemodes/cult/cult_mode.dm b/code/game/gamemodes/cult/cult_mode.dm index 3e5c5145c37..44bb458dc1d 100644 --- a/code/game/gamemodes/cult/cult_mode.dm +++ b/code/game/gamemodes/cult/cult_mode.dm @@ -1,6 +1,3 @@ -/datum/game_mode - var/datum/team/cult/cult_team - /datum/game_mode/proc/get_cult_team() if(!cult_team) new /datum/team/cult() // assignment happens in create_team() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 67eb21a8aae..e2a0d9a18a1 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -45,6 +45,51 @@ /// Each item in this list can only be rolled once on average. var/list/single_antag_positions = list("Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster") + /// A list of all minds which have the traitor antag datum. + var/list/datum/mind/traitors = list() + /// An associative list with mindslave minds as keys and their master's minds as values. + var/list/datum/mind/implanted = list() + /// A list of all minds which have the changeling antag datum + var/list/datum/mind/changelings = list() + /// A list of all minds which have the vampire antag datum + var/list/datum/mind/vampires = list() + /// A list of all minds which are thralled by a vampire + var/list/datum/mind/vampire_enthralled = list() + /// A list of all minds which have the wizard special role + var/list/datum/mind/wizards = list() + /// A list of all minds that are wizard apprentices + var/list/datum/mind/apprentices = list() + + /// The cult team datum + var/datum/team/cult/cult_team + + /// How many abductor teams do we have + var/abductor_teams = 0 + /// A list which contains the minds of all abductors + var/list/datum/mind/abductors = list() + /// A list which contains the minds of all abductees + var/list/datum/mind/abductees = list() + + /// A list of all the nuclear operatives' minds + var/list/datum/mind/syndicates = list() + + /// A list of all the minds of head revolutionaries + var/list/datum/mind/head_revolutionaries = list() + /// A list of all the minds of revolutionaries + var/list/datum/mind/revolutionaries = list() + /// The revololution team datum + var/datum/team/revolution/rev_team + + /// A list of all the minds with the superhero special role + var/list/datum/mind/superheroes = list() + /// A list of all the minds with the supervillain special role + var/list/datum/mind/supervillains = list() + /// A list of all the greyshirt minds + var/list/datum/mind/greyshirts = list() + + /// A list of all the minds that have the ERT special role + var/list/datum/mind/ert = list() + /datum/game_mode/proc/announce() //to be calles when round starts to_chat(world, "Notice: [src] did not define announce()") diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm index 2502eb3e08d..4cbef8c77b9 100644 --- a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm +++ b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm @@ -131,7 +131,7 @@ /datum/objective/abductee/party explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" -/datum/objective/abductee/pets +/datum/objective/abductee/cooler_pets explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" /datum/objective/abductee/conspiracy diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index f5a56423451..70cdf2edc9f 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -1,8 +1,3 @@ -/datum/game_mode - var/abductor_teams = 0 - var/list/datum/mind/abductors = list() - var/list/datum/mind/abductees = list() - /datum/game_mode/abduction name = "abduction" config_tag = "abduction" diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 791be28f86c..79f2f7bcbf4 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -1,8 +1,5 @@ #define NUKESCALINGMODIFIER 6 -/datum/game_mode - var/list/datum/mind/syndicates = list() - /proc/issyndicate(mob/living/M as mob) return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.syndicates) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 9583e0e849f..1f0f048cc64 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -4,11 +4,6 @@ #define REV_VICTORY 1 #define STATION_VICTORY 2 -/datum/game_mode - var/list/datum/mind/head_revolutionaries = list() - var/list/datum/mind/revolutionaries = list() - var/datum/team/revolution/rev_team - /datum/game_mode/revolution name = "revolution" config_tag = "revolution" diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index fe0fb08a784..e8c2249efdd 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -1,9 +1,3 @@ -/datum/game_mode - /// A list of all minds which have the traitor antag datum. - var/list/datum/mind/traitors = list() - /// An associative list with mindslave minds as keys and their master's minds as values. - var/list/datum/mind/implanted = list() - /datum/game_mode/traitor name = "traitor" config_tag = "traitor" diff --git a/code/game/gamemodes/vampire/vampire_gamemode.dm b/code/game/gamemodes/vampire/vampire_gamemode.dm index 306ef74cb9a..6e274c5b3a8 100644 --- a/code/game/gamemodes/vampire/vampire_gamemode.dm +++ b/code/game/gamemodes/vampire/vampire_gamemode.dm @@ -1,7 +1,3 @@ -/datum/game_mode - var/list/datum/mind/vampires = list() - var/list/datum/mind/vampire_enthralled = list() //those controlled by a vampire - /datum/game_mode/vampire name = "vampire" config_tag = "vampire" diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 30c7e40b300..960be8e8375 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -1,7 +1,3 @@ -/datum/game_mode - var/list/datum/mind/wizards = list() - var/list/datum/mind/apprentices = list() - /datum/game_mode/wizard name = "wizard" config_tag = "wizard" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index b6af0a44e95..071cf52415f 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -36,6 +36,10 @@ var/toggle_sound = 'sound/items/wirecutter.ogg' blocks_emissive = EMISSIVE_BLOCK_GENERIC + var/list/localMotionTargets = list() + var/detectTime = 0 + var/area/station/ai_monitored/area_motion = null + var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm() /obj/machinery/camera/Initialize(mapload, should_add_to_cameranet = TRUE) . = ..() diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 99f24d9a4ee..68010c1fb3c 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -1,9 +1,3 @@ -/obj/machinery/camera - var/list/localMotionTargets = list() - var/detectTime = 0 - var/area/station/ai_monitored/area_motion = null - var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm() - /obj/machinery/camera/process() // motion camera event loop if(!isMotion()) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 2fd5d6c4e80..dc453742bd2 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -134,11 +134,6 @@ to_chat(user, "The electronic systems in this door are far too advanced for your primitive hacking peripherals.") return -/obj/machinery/door/poddoor/multi_tile/impassable/two_tile_hor - icon = 'icons/obj/doors/1x2blast_hor.dmi' - width = 2 - dir = EAST - /obj/machinery/door/poddoor/multi_tile/impassable/four_tile_ver icon = 'icons/obj/doors/1x4blast_vert.dmi' width = 4 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index bf92a27d2fb..be6f53bc5fa 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -103,6 +103,20 @@ hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD) + //Action datums + var/datum/action/innate/mecha/mech_eject/eject_action = new + var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new + var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new + var/datum/action/innate/mecha/mech_view_stats/stats_action = new + var/datum/action/innate/mecha/mech_defence_mode/defense_action = new + var/datum/action/innate/mecha/mech_overload_mode/overload_action = new + var/datum/action/innate/mecha/mech_toggle_thrusters/thrusters_action = new + var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one + var/datum/action/innate/mecha/mech_smoke/smoke_action = new + var/datum/action/innate/mecha/mech_zoom/zoom_action = new + var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new + var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new + /obj/mecha/Initialize() . = ..() icon_state += "-open" diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index dcafd77e1dc..f508739cb1b 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -1,18 +1,3 @@ -/obj/mecha - //Action datums - var/datum/action/innate/mecha/mech_eject/eject_action = new - var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new - var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new - var/datum/action/innate/mecha/mech_view_stats/stats_action = new - var/datum/action/innate/mecha/mech_defence_mode/defense_action = new - var/datum/action/innate/mecha/mech_overload_mode/overload_action = new - var/datum/action/innate/mecha/mech_toggle_thrusters/thrusters_action = new - var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one - var/datum/action/innate/mecha/mech_smoke/smoke_action = new - var/datum/action/innate/mecha/mech_zoom/zoom_action = new - var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new - var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new - /obj/mecha/proc/GrantActions(mob/living/user, human_occupant = 0) if(human_occupant) eject_action.Grant(user, src) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index ec2b512f79f..683f6462f3d 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -13,6 +13,7 @@ var/looking_for_personality = 0 var/mob/living/silicon/pai/pai var/list/faction = list("neutral") // The factions the pAI will inherit from the card + var/current_emotion = 1 resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE /obj/item/paicard/syndicate @@ -302,8 +303,6 @@ overlays.Cut() overlays += "pai-off" -/obj/item/paicard - var/current_emotion = 1 /obj/item/paicard/proc/setEmotion(emotion) if(pai) overlays.Cut() diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 490ee42151d..84e2a15ba1a 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -148,17 +148,6 @@ icon_state = "com_cypherkey" channels = list("Command" = 1, "Security" = 1) -/* -/obj/item/encryptionkey/headset_mine - name = "Mining Radio Encryption Key" - icon_state = "mine_cypherkey" - channels = list("Mining" = 1) - -/obj/item/encryptionkey/heads/qm - name = "Quartermaster's Encryption Key" - icon_state = "qm_cypherkey" - channels = list("Cargo" = 1, "Mining" = 1) -*/ /obj/item/encryptionkey/headset_cargo name = "Supply Radio Encryption Key" icon_state = "cargo_cypherkey" diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 188c79da631..f15eb6d4e9d 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -3,6 +3,7 @@ ***********************************************************************/ /obj/item/borg icon = 'icons/mob/robot_items.dmi' + var/powerneeded // Percentage of power remaining required to run item /obj/item/borg/stun name = "electrically-charged arm" diff --git a/code/game/objects/items/weapons/disks.dm b/code/game/objects/items/weapons/disks.dm index b982a0d44e5..8f113c53993 100644 --- a/code/game/objects/items/weapons/disks.dm +++ b/code/game/objects/items/weapons/disks.dm @@ -67,7 +67,7 @@ /obj/item/storage/box/disks name = "Diskette Box" - icon_state = "disk_kit" + icon_state = "disk_box" /obj/item/storage/box/disks/populate_contents() for(var/i in 1 to 7) diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index e335cb175f9..b2e1014bbb2 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -209,7 +209,6 @@ name = "DNA injector" desc = "Good. Let the hate flow through you." - /obj/item/dnainjector/antitele name = "DNA-Injector (Anti-Tele.)" desc = "Will make you not able to control your mind." @@ -553,28 +552,6 @@ block = GLOB.blindblock ..() -/obj/item/dnainjector/telemut - name = "DNA-Injector (Tele.)" - desc = "Super brain man!" - datatype = DNA2_BUF_SE - value = 0xFFF - forcedmutation = TRUE - -/obj/item/dnainjector/telemut/Initialize() - block = GLOB.teleblock - ..() - -/obj/item/dnainjector/antitele - name = "DNA-Injector (Anti-Tele.)" - desc = "Will make you not able to control your mind." - datatype = DNA2_BUF_SE - value = 0x001 - forcedmutation = TRUE - -/obj/item/dnainjector/antitele/Initialize() - block = GLOB.teleblock - ..() - /obj/item/dnainjector/deafmut name = "DNA-Injector (Deaf)" desc = "Sorry, what did you say?" diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index 46aebed6b25..f08704aa25d 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -169,16 +169,16 @@ desc = "No matter what, do not EVER use this." payload = /obj/singularity -/obj/item/grenade/clusterbuster/tools - name = "\improper Quick Repair Grenade" - desc = "An assistant's every dream." - payload = /obj/random/tool - /obj/item/grenade/clusterbuster/tools name = "\improper Engineering Deployment Platfom" desc = "For the that time when gearing up was just too hard." payload = /obj/random/tech_supply +/obj/item/grenade/clusterbuster/tide + name = "\improper Quick Repair Grenade" + desc = "An assistant's every dream." + payload = /obj/random/tool + /obj/item/grenade/clusterbuster/toys name = "\improper Toy Delivery System" desc = "Who needs skill at arcades anyway?" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index e33ecd54bd1..57598089247 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -126,156 +126,6 @@ ////////////////// /* Common Boxes */ ////////////////// -/obj/item/storage/box/gloves - name = "box of latex gloves" - desc = "Contains white gloves." - icon_state = "latex" - -/obj/item/storage/box/gloves/populate_contents() - for(var/I in 1 to 7) - new /obj/item/clothing/gloves/color/latex(src) - -/obj/item/storage/box/masks - name = "sterile masks" - desc = "This box contains masks of sterility." - icon_state = "sterile" - -/obj/item/storage/box/masks/populate_contents() - for(var/I in 1 to 7) - new /obj/item/clothing/mask/surgical(src) - -/obj/item/storage/box/syringes - name = "syringes" - desc = "A box full of syringes." - desc = "A biohazard alert warning is printed on the box" - icon_state = "syringe" - -/obj/item/storage/box/syringes/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/syringe(src) - -/obj/item/storage/box/beakers - name = "beaker box" - icon_state = "beaker" - -/obj/item/storage/box/beakers/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/glass/beaker(src) - -/obj/item/storage/box/beakers/bluespace - name = "box of bluespace beakers" - icon_state = "beaker" - -/obj/item/storage/box/beakers/bluespace/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/glass/beaker/bluespace(src) - -/obj/item/storage/box/iv_bags - name = "IV Bags" - desc = "A box full of empty IV bags." - icon_state = "beaker" - -/obj/item/storage/box/iv_bags/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/iv_bag(src) - -/obj/item/storage/box/injectors - name = "\improper DNA injectors" - desc = "This box contains injectors it seems." - -/obj/item/storage/box/injectors/populate_contents() - for(var/I in 1 to 6) - new /obj/item/dnainjector/h2m(src) - -/obj/item/storage/box/slug - name = "ammunition box (Slug)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "slugbox" - -/obj/item/storage/box/slug/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun(src) - -/obj/item/storage/box/buck - name = "ammunition box (Buckshot)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "buckshotbox" - -/obj/item/storage/box/buck/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/buckshot(src) - -/obj/item/storage/box/dragonsbreath - name = "ammunition box (Dragonsbreath)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "dragonsbreathbox" - -/obj/item/storage/box/dragonsbreath/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src) - -/obj/item/storage/box/stun - name = "ammunition box (Stun shells)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "stunbox" - -/obj/item/storage/box/stun/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/stunslug(src) - -/obj/item/storage/box/beanbag - name = "ammunition box (Beanbag shells)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "beanbagbox" - -/obj/item/storage/box/beanbag/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/beanbag(src) - -/obj/item/storage/box/rubbershot - name = "ammunition box (Rubbershot shells)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "rubbershotbox" - -/obj/item/storage/box/rubbershot/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - -/obj/item/storage/box/tranquilizer - name = "ammunition box (Tranquilizer darts)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "tranqbox" - -/obj/item/storage/box/tranquilizer/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/tranquilizer(src) - -/obj/item/storage/box/flashes - name = "box of flashbulbs" - desc = "WARNING: Flashes can cause serious eye damage, protective eyewear is required." - icon_state = "flashbang" - -/obj/item/storage/box/flashes/populate_contents() - for(var/I in 1 to 6) - new /obj/item/flash(src) - -/obj/item/storage/box/teargas - name = "box of tear gas grenades (WARNING)" - desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation." - icon_state = "flashbang" - -/obj/item/storage/box/teargas/populate_contents() - for(var/I in 1 to 7) - new /obj/item/grenade/chem_grenade/teargas(src) - -/obj/item/storage/box/emps - name = "emp grenades" - desc = "A box with 5 emp grenades." - icon_state = "flashbang" - -/obj/item/storage/box/emps/populate_contents() - for(var/I in 1 to 5) - new /obj/item/grenade/empgrenade(src) /obj/item/storage/box/tapes name = "Tape Box" @@ -368,14 +218,6 @@ for(var/i in 1 to 7) new /obj/item/disk/plantgene(src) -/obj/item/storage/box/disks - name = "genetics diskette box" - icon_state = "disk_box" - -/obj/item/storage/box/disks/populate_contents() - for(var/i in 1 to 7) - new /obj/item/disk/data(src) - /obj/item/storage/box/PDAs name = "spare PDAs" desc = "A box of spare PDA microcomputers." diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index fe099a83823..460a227057d 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -401,13 +401,6 @@ mounted_head = null qdel(src) -/obj/item/spear/kidan - name = "\improper Kidan spear" - desc = "A spear brought over from the Kidan homeworld." - base_icon_state = "kindanspear" - icon_state = "kidanspear0" - - // DIY CHAINSAW /obj/item/chainsaw name = "chainsaw" diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 9cbb8575579..cfdbe60c94d 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -1,6 +1,8 @@ /turf/space/transit var/pushdirection // push things that get caught in the transit tile this direction plane = PLANE_SPACE + icon_state = "black" + dir = SOUTH //Overwrite because we dont want people building rods in space. /turf/space/transit/attackby(obj/O as obj, mob/user as mob, params) @@ -107,10 +109,6 @@ icon_state = "speedspace_ew_15" //-tg- stuff -/turf/space/transit - icon_state = "black" - dir = SOUTH - /turf/space/transit/horizontal dir = WEST diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 533b510719e..5eb5fbb3b9c 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -16,6 +16,7 @@ GLOBAL_PROTECT(href_token) var/rights = 0 var/fakekey var/big_brother = FALSE + var/current_tab = 0 /// Unique-to-session randomly generated token given to each admin to help add detail to logs on admin interactions with hrefs var/href_token diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 5e550c8586c..90a979611ba 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -1,6 +1,3 @@ -/datum/admins - var/current_tab =0 - /datum/admins/proc/Secrets() diff --git a/code/modules/client/login_processing/20-load_characters.dm b/code/modules/client/login_processing/20-load_characters.dm index 40be0ffc0cd..22d72472264 100644 --- a/code/modules/client/login_processing/20-load_characters.dm +++ b/code/modules/client/login_processing/20-load_characters.dm @@ -61,7 +61,8 @@ custom_emotes, physique, height, - cyborg_brain_type + cyborg_brain_type, + body_type FROM characters WHERE ckey=:ckey"}, list( "ckey" = C.ckey )) diff --git a/code/modules/client/preference/character.dm b/code/modules/client/preference/character.dm index 1179c524ea1..9bfd23e7846 100644 --- a/code/modules/client/preference/character.dm +++ b/code/modules/client/preference/character.dm @@ -6,6 +6,7 @@ var/real_name //our character's name var/be_random_name = FALSE //whether we are a random name every round var/gender = MALE //gender of character (well duh) + var/body_type = MALE //body sprite variant var/age = 30 //age of character var/b_type = "A+" //blood type (not-chooseable) var/underwear = "Nude" //underwear type @@ -118,13 +119,13 @@ var/markingcolourslist = list2params(m_colours) var/markingstyleslist = list2params(m_styles) - if(!isemptylist(organ_data)) + if(length(organ_data)) organ_list = list2params(organ_data) - if(!isemptylist(rlimb_data)) + if(length(rlimb_data)) rlimb_list = list2params(rlimb_data) - if(!isemptylist(player_alt_titles)) + if(length(player_alt_titles)) playertitlelist = list2params(player_alt_titles) - if(!isemptylist(loadout_gear)) + if(length(loadout_gear)) gearlist = json_encode(loadout_gear) var/datum/db_query/firstquery = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list( @@ -141,6 +142,7 @@ real_name=:real_name, name_is_always_random=:be_random_name, gender=:gender, + body_type=:body_type, age=:age, species=:species, language=:language, @@ -193,7 +195,8 @@ hair_gradient_colour=:h_grad_colour, hair_gradient_alpha=:h_grad_alpha, custom_emotes=:custom_emotes, - cyborg_brain_type=:cyborg_brain_type + cyborg_brain_type=:cyborg_brain_type, + body_type=:body_type WHERE ckey=:ckey AND slot=:slot"}, list( // OH GOD SO MANY PARAMETERS @@ -201,6 +204,7 @@ "real_name" = real_name, "be_random_name" = be_random_name, "gender" = gender, + "body_type" = body_type, "age" = age, "species" = species, "language" = language, @@ -294,7 +298,7 @@ player_alt_titles, disabilities, organ_data, rlimb_data, nanotrasen_relation, physique, height, speciesprefs, socks, body_accessory, gear, autohiss, - hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, custom_emotes, cyborg_brain_type) + hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, custom_emotes, cyborg_brain_type, body_type) VALUES (:ckey, :slot, :metadata, :name, :be_random_name, :gender, :age, :species, :language, @@ -321,7 +325,7 @@ :playertitlelist, :disabilities, :organ_list, :rlimb_list, :nanotrasen_relation, :physique, :height, :speciesprefs, :socks, :body_accessory, :gearlist, :autohiss_mode, - :h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :custom_emotes, :cyborg_brain_type) + :h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :custom_emotes, :cyborg_brain_type, :body_type) "}, list( // This has too many params for anyone to look at this without going insae "ckey" = C.ckey, @@ -330,6 +334,7 @@ "name" = real_name, "be_random_name" = be_random_name, "gender" = gender, + "body_type" = body_type, "age" = age, "species" = species, "language" = language, @@ -394,6 +399,10 @@ return 1 +/** + * Load in and process the database's information on the player's character save. + * The order of indices here is the relative order from get_query() in 20-load-characters.dm. + */ /datum/character_save/proc/load(datum/db_query/query) //Character metadata = query.item[1] @@ -471,6 +480,7 @@ physique = query.item[56] height = query.item[57] cyborg_brain_type = query.item[58] + body_type = query.item[59] //Sanitize var/datum/species/SP = GLOB.all_species[species] @@ -504,7 +514,7 @@ real_name = random_name(gender, species) be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) - gender = sanitize_gender(gender, FALSE, !SP.has_gender) + gender = sanitize_gender(gender, FALSE) age = sanitize_integer(age, SP.min_age, SP.max_age, initial(age)) h_colour = sanitize_hexcolor(h_colour) h_sec_colour = sanitize_hexcolor(h_sec_colour) @@ -590,9 +600,10 @@ gender = gender_override else gender = pick(MALE, FEMALE) - underwear = random_underwear(gender, species) - undershirt = random_undershirt(gender, species) - socks = random_socks(gender, species) + body_type = pick(MALE, FEMALE) + underwear = random_underwear(body_type, species) + undershirt = random_undershirt(body_type, species) + socks = random_socks(body_type, species) if(length(GLOB.body_accessory_by_species[species])) body_accessory = random_body_accessory(species, S.optional_body_accessory) if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) @@ -794,7 +805,8 @@ qdel(preview_icon) var/g = "m" - if(gender == FEMALE) g = "f" + if(body_type == FEMALE) + g = "f" var/icon/icobase var/datum/species/current_species = GLOB.all_species[species] @@ -1808,6 +1820,7 @@ character.gen_record = gen_record character.change_gender(gender) + character.body_type = body_type // TODO does this update the character properly or do we need a setter here character.age = age //Head-specific @@ -1885,10 +1898,10 @@ character.backbag = backbag //Debugging report to track down a bug, which randomly assigned the plural gender to people. - if(character.dna.species.has_gender && (character.gender in list(PLURAL, NEUTER))) + if(character.gender == NEUTER) if(isliving(src)) //Ghosts get neuter by default - message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") - character.change_gender(MALE) + message_admins("[key_name_admin(character)] has spawned with their gender as neuter. Please notify coders.") + character.change_gender(PLURAL) character.change_eye_color(e_colour, skip_icons = TRUE) character.original_eye_color = e_colour diff --git a/code/modules/client/preference/link_processing.dm b/code/modules/client/preference/link_processing.dm index b7c832a9952..76c8ac966f1 100644 --- a/code/modules/client/preference/link_processing.dm +++ b/code/modules/client/preference/link_processing.dm @@ -168,13 +168,13 @@ if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. active_character.m_colours["tail"] = rand_hex_color() if("underwear") - active_character.underwear = random_underwear(active_character.gender, active_character.species) + active_character.underwear = random_underwear(active_character.body_type, active_character.species) ShowChoices(user) if("undershirt") - active_character.undershirt = random_undershirt(active_character.gender, active_character.species) + active_character.undershirt = random_undershirt(active_character.body_type, active_character.species) ShowChoices(user) if("socks") - active_character.socks = random_socks(active_character.gender, active_character.species) + active_character.socks = random_socks(active_character.body_type, active_character.species) ShowChoices(user) if("eyes") active_character.e_colour = rand_hex_color() @@ -226,8 +226,6 @@ return if(prev_species != active_character.species) active_character.age = clamp(active_character.age, NS.min_age, NS.max_age) - if(NS.has_gender && active_character.gender == PLURAL) - active_character.gender = pick(MALE,FEMALE) var/datum/robolimb/robohead if(NS.bodyflags & ALL_RPARTS) var/head_model = "[!active_character.rlimb_data["head"] ? "Morpheus Cyberkinetics" : active_character.rlimb_data["head"]]" @@ -265,15 +263,15 @@ // Don't wear another species' underwear! var/datum/sprite_accessory/SA = GLOB.underwear_list[active_character.underwear] if(!SA || !(active_character.species in SA.species_allowed)) - active_character.underwear = random_underwear(active_character.gender, active_character.species) + active_character.underwear = random_underwear(active_character.body_type, active_character.species) SA = GLOB.undershirt_list[active_character.undershirt] if(!SA || !(active_character.species in SA.species_allowed)) - active_character.undershirt = random_undershirt(active_character.gender, active_character.species) + active_character.undershirt = random_undershirt(active_character.body_type, active_character.species) SA = GLOB.socks_list[active_character.socks] if(!SA || !(active_character.species in SA.species_allowed)) - active_character.socks = random_socks(active_character.gender, active_character.species) + active_character.socks = random_socks(active_character.body_type, active_character.species) //reset skin tone and colour if(NS.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) @@ -579,10 +577,6 @@ if(facialhairstyle == "Shaved") //Just in case. valid_facial_hairstyles += facialhairstyle continue - if(active_character.gender == MALE && SA.gender == FEMALE) - continue - if(active_character.gender == FEMALE && SA.gender == MALE) - continue if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. var/head_model if(!active_character.rlimb_data["head"]) //Handle situations where the head is default. @@ -608,9 +602,10 @@ var/list/valid_underwear = list() for(var/underwear in GLOB.underwear_list) var/datum/sprite_accessory/SA = GLOB.underwear_list[underwear] - if(active_character.gender == MALE && SA.gender == FEMALE) + // soon... + if(active_character.body_type == MALE && SA.body_type == FEMALE) continue - if(active_character.gender == FEMALE && SA.gender == MALE) + if(active_character.body_type == FEMALE && SA.body_type == MALE) continue if(!(active_character.species in SA.species_allowed)) continue @@ -624,12 +619,12 @@ var/list/valid_undershirts = list() for(var/undershirt in GLOB.undershirt_list) var/datum/sprite_accessory/SA = GLOB.undershirt_list[undershirt] - if(active_character.gender == MALE && SA.gender == FEMALE) - continue - if(active_character.gender == FEMALE && SA.gender == MALE) - continue if(!(active_character.species in SA.species_allowed)) continue + if(active_character.body_type == MALE && SA.body_type == FEMALE) + continue + if(active_character.body_type == FEMALE && SA.body_type == MALE) + continue valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt] sortTim(valid_undershirts, GLOBAL_PROC_REF(cmp_text_asc)) var/new_undershirt = tgui_input_list(user, "Choose your character's undershirt", "Character Preference", valid_undershirts) @@ -641,12 +636,12 @@ var/list/valid_sockstyles = list() for(var/sockstyle in GLOB.socks_list) var/datum/sprite_accessory/SA = GLOB.socks_list[sockstyle] - if(active_character.gender == MALE && SA.gender == FEMALE) - continue - if(active_character.gender == FEMALE && SA.gender == MALE) - continue if(!(active_character.species in SA.species_allowed)) continue + if(active_character.body_type == MALE && SA.body_type == FEMALE) + continue + if(active_character.body_type == FEMALE && SA.body_type == MALE) + continue valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle] sortTim(valid_sockstyles, GLOBAL_PROC_REF(cmp_text_asc)) var/new_socks = tgui_input_list(user, "Choose your character's socks", "Character Preference", valid_sockstyles) @@ -896,23 +891,25 @@ toggles ^= PREFTOGGLE_DONATOR_PUBLIC if("gender") - if(!S.has_gender) - var/newgender = tgui_input_list(user, "Who are you?", "Choose Gender", list("Male", "Female", "Genderless")) - if(!newgender) - return - switch(newgender) - if("Male") - active_character.gender = MALE - if("Female") - active_character.gender = FEMALE - if("Genderless") - active_character.gender = PLURAL - else - if(active_character.gender == MALE) - active_character.gender = FEMALE - else + var/newgender = tgui_input_list(user, "Who are you?", "Choose Gender", list("Male", "Female", "Genderless")) + if(!newgender) + return + switch(newgender) + if("Male") + active_character.gender = MALE - active_character.underwear = random_underwear(active_character.gender) + if("Female") + active_character.gender = FEMALE + if("Genderless") + active_character.gender = PLURAL + + if("body_type") + if(active_character.body_type == MALE) + active_character.body_type = FEMALE + else + active_character.body_type = MALE + + active_character.underwear = random_underwear(active_character.body_type) if("hear_adminhelps") sound ^= SOUND_ADMINHELP diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index eb36655a4f0..ad75383205c 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -195,11 +195,12 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "" dat += "
" dat += "

Identity

" - dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]" - dat += "
" dat += "Age: [active_character.age]
" dat += "Body: (®)
" dat += "Species: [active_character.species]
" + dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]
" + dat += "Body Type: [active_character.body_type == MALE ? "Masculine" : "Feminine"]" + dat += "
" if(active_character.species == "Vox") // Purge these bastards dat += "N2 Tank: [active_character.speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
" if(active_character.species == "Plasmaman") diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 5f230c1a48e..852149ec771 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -262,6 +262,7 @@ var/safe_from_poison = FALSE strip_delay = 20 put_on_delay = 40 + var/transfer_blood = FALSE sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/gloves.dmi', diff --git a/code/modules/clothing/gloves/boxing_gloves.dm b/code/modules/clothing/gloves/boxing_gloves.dm index 701984de055..b7b38b1c698 100644 --- a/code/modules/clothing/gloves/boxing_gloves.dm +++ b/code/modules/clothing/gloves/boxing_gloves.dm @@ -5,6 +5,26 @@ item_state = "boxing" put_on_delay = 60 species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion + var/datum/martial_art/boxing/style + +/obj/item/clothing/gloves/boxing/Initialize() + . = ..() + style = new() + +/obj/item/clothing/gloves/boxing/equipped(mob/user, slot) + if(!ishuman(user)) + return + if(slot == SLOT_HUD_GLOVES) + var/mob/living/carbon/human/H = user + style.teach(H, TRUE) + +/obj/item/clothing/gloves/boxing/dropped(mob/user) + ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src) + style.remove(H) /obj/item/clothing/gloves/boxing/green icon_state = "boxinggreen" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 76450a01cac..0eaff68032e 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -13,7 +13,8 @@ /obj/item/clothing/head/collectable/slime name = "collectable slime cap!" desc = "It just latches right in place!" - icon_state = "slime" + icon_state = "headslime" + item_state = "headslime" /obj/item/clothing/head/collectable/xenom name = "collectable xenomorph helmet!" @@ -79,12 +80,6 @@ "Grey" = 'icons/mob/clothing/species/grey/helmet.dmi' ) -/obj/item/clothing/head/collectable/slime - name = "collectable slime hat" - desc = "Just like a real Brain Slug!" - icon_state = "headslime" - item_state = "headslime" - /obj/item/clothing/head/collectable/flatcap name = "collectable flat cap" desc = "A Collectable farmer's Flat Cap!" diff --git a/code/modules/clothing/head/misc_hats.dm b/code/modules/clothing/head/misc_hats.dm index f5f066b74db..c6c0352173e 100644 --- a/code/modules/clothing/head/misc_hats.dm +++ b/code/modules/clothing/head/misc_hats.dm @@ -126,14 +126,6 @@ "Grey" = 'icons/mob/clothing/species/grey/head.dmi' ) -/obj/item/clothing/head/that - name = "sturdy top-hat" - desc = "It's an amish looking armored top hat." - icon_state = "tophat" - item_state = "that" - flags_inv = 0 - - /obj/item/clothing/head/greenbandana name = "green bandana" desc = "It's a green bandana with some fine nanotech lining." diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index f3c486f2355..6f0c5aa3515 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -20,6 +20,7 @@ name = "brown shoes" desc = "A pair of brown shoes." icon_state = "brown" + item_color = "brown" /obj/item/clothing/shoes/brown/captain item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way. @@ -59,11 +60,6 @@ icon_state = "purple" item_color = "purple" -/obj/item/clothing/shoes/brown - name = "brown shoes" - icon_state = "brown" - item_color = "brown" - /obj/item/clothing/shoes/red name = "red shoes" desc = "Stylish red shoes." diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 64e4fd9c6ad..e5a6769e308 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -146,11 +146,6 @@ icon_state = "lightgreen" item_color = "lightgreen" -/obj/item/clothing/under/color/lightblue - name = "light blue jumpsuit" - icon_state = "lightblue" - item_color = "lightblue" - /obj/item/clothing/under/color/lightbrown name = "light brown jumpsuit" icon_state = "lightbrown" diff --git a/code/modules/detective_work/footprints_and_rag.dm b/code/modules/detective_work/footprints_and_rag.dm index 282efb696d9..468eb94e322 100644 --- a/code/modules/detective_work/footprints_and_rag.dm +++ b/code/modules/detective_work/footprints_and_rag.dm @@ -1,6 +1,3 @@ -/obj/item/clothing/gloves - var/transfer_blood = 0 - /obj/item/reagent_containers/glass/rag name = "damp rag" desc = "For cleaning up messes, you suppose." diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 783cbdd7f41..dd4e92d8796 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -562,6 +562,10 @@ bitesize = 3 list_reagents = list("protein" = 4, "vitamin" = 4) +/obj/item/food/snacks/organ/Initialize(mapload) + . = ..() + reagents.add_reagent("nutriment", 5) + /obj/item/food/snacks/appendix //yes, this is the same as meat. I might do something different in future name = "appendix" diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index ccbb8df2ea3..c052751f399 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -387,13 +387,6 @@ ) result = /obj/item/food/snacks/soup/coldchili -/datum/recipe/microwave/spellburger - items = list( - /obj/item/food/snacks/bun, - /obj/item/clothing/head/wizard/fake - ) - result = /obj/item/food/snacks/burger/spell - /datum/recipe/microwave/spellburger items = list( /obj/item/food/snacks/bun, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm index 5aaf7023d7f..c1894fb5fbe 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm @@ -1,13 +1,3 @@ -/* Example for reference when defining recipes -/datum/crafting_recipe/food - name = "" //in-game display name - reqs[] = list() //type paths of items/reagents consumed associated with how many are needed (equivalent to var/list/items and var/list/reagents combined) - result //type path of item resulting from this craft - tools[] = list() //type paths of items needed but not consumed - time = 30 //time in deciseconds - parts[] = list() //type paths of items that will be placed in the result -*/ - /datum/crafting_recipe/sandwich name = "Sandwich" reqs = list( diff --git a/code/modules/mapping/access_helpers.dm b/code/modules/mapping/access_helpers.dm index 6eb44eccfa2..819125630bc 100644 --- a/code/modules/mapping/access_helpers.dm +++ b/code/modules/mapping/access_helpers.dm @@ -411,8 +411,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office access = ACCESS_CHAPEL_OFFICE -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium - access = ACCESS_CREMATORIUM /obj/effect/mapping_helpers/airlock/access/all/service/crematorium access = ACCESS_CREMATORIUM diff --git a/code/modules/mapping/windoor_access_helpers.dm b/code/modules/mapping/windoor_access_helpers.dm index fcc341441e5..015eebf685e 100644 --- a/code/modules/mapping/windoor_access_helpers.dm +++ b/code/modules/mapping/windoor_access_helpers.dm @@ -414,9 +414,6 @@ /obj/effect/mapping_helpers/airlock/windoor/access/all/service/crematorium access = ACCESS_CREMATORIUM -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/crematorium - access = ACCESS_CREMATORIUM - /obj/effect/mapping_helpers/airlock/windoor/access/all/service/library access = ACCESS_LIBRARY diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 05f88ee2834..36e99c67e57 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -256,31 +256,6 @@ else to_chat(H, "Your hands are full.") -//ITEMS - -/obj/item/clothing/gloves/boxing - var/datum/martial_art/boxing/style - -/obj/item/clothing/gloves/boxing/Initialize() - . = ..() - style = new() - -/obj/item/clothing/gloves/boxing/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_HUD_GLOVES) - var/mob/living/carbon/human/H = user - style.teach(H, TRUE) - return - -/obj/item/clothing/gloves/boxing/dropped(mob/user) - ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src) - style.remove(H) - /obj/item/storage/belt/champion/wrestling name = "Wrestling Belt" var/datum/martial_art/wrestling/style diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index 7879d0d6c32..260a7fa9ada 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -23,47 +23,6 @@ prefs.active_character.autohiss_mode = AUTOHISS_OFF to_chat(src, "Auto-hiss is now OFF.") -/datum/species/unathi - autohiss_basic_map = list( - "s" = list("ss", "sss", "ssss") - ) - autohiss_extra_map = list( - "x" = list("ks", "kss", "ksss") - ) - autohiss_exempt = list("Sinta'unathi") - -/datum/species/tajaran - autohiss_basic_map = list( - "r" = list("rr", "rrr", "rrrr") - ) - autohiss_exempt = list("Siik'tajr") - -/datum/species/plasmaman - autohiss_basic_map = list( - "s" = list("ss", "sss", "ssss") - ) - -/datum/species/kidan - autohiss_basic_map = list( - "z" = list("zz", "zzz", "zzzz"), - "v" = list("vv", "vvv", "vvvv") - ) - autohiss_extra_map = list( - "s" = list("z", "zs", "zzz", "zzsz") - ) - autohiss_exempt = list("Chittin") - -/datum/species/drask - autohiss_basic_map = list( - "o" = list ("oo", "ooo"), - "u" = list ("uu", "uuu") - ) - autohiss_extra_map = list( - "m" = list ("mm", "mmm") - ) - autohiss_exempt = list("Orluum") - - /datum/species/proc/handle_autohiss(message, datum/language/lang, mode) if(!autohiss_basic_map) return message diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 1fdfa0c9d00..fa09251977f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -1,3 +1,4 @@ +#define XENO_TOTAL_LAYERS 6 /mob/living/carbon/alien/humanoid name = "alien" icon_state = "alien_s" @@ -11,6 +12,7 @@ var/alien_slash_damage = 20 //Aliens deal a good amount of damage on harm intent var/alien_movement_delay = 0 //This can be + or -, how fast an alien moves var/temperature_resistance = T0C+75 + var/list/overlays_standing[XENO_TOTAL_LAYERS] pass_flags = PASSTABLE hud_type = /datum/hud/alien @@ -96,3 +98,5 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( /mob/living/carbon/alien/humanoid/get_permeability_protection() return 0.8 + +#undef XENO_TOTAL_LAYERS diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm index 6a4c5a2f216..5732c200ee6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm @@ -5,12 +5,8 @@ #define X_R_HAND_LAYER 4 #define X_TARGETED_LAYER 5 #define X_FIRE_LAYER 6 -#define X_TOTAL_LAYERS 6 ///////////////////////////////// -/mob/living/carbon/alien/humanoid - var/list/overlays_standing[X_TOTAL_LAYERS] - /mob/living/carbon/alien/humanoid/update_icons() overlays.Cut() for(var/image/I in overlays_standing) @@ -144,4 +140,3 @@ #undef X_R_HAND_LAYER #undef X_TARGETED_LAYER #undef X_FIRE_LAYER -#undef X_TOTAL_LAYERS diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index e9e304b4a4b..0d27033de48 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -4,27 +4,28 @@ AC.ui_interact(user) /mob/living/carbon/human/proc/change_gender(new_gender, update_dna = TRUE) - var/obj/item/organ/external/head/H = bodyparts_by_name["head"] - if(gender == new_gender || (gender == PLURAL && !dna.species.has_gender)) + if(gender == new_gender) return gender = new_gender - if(istype(H)) - var/datum/sprite_accessory/hair/current_hair = GLOB.hair_styles_full_list[H.h_style] - if(current_hair.gender != NEUTER && current_hair.gender != gender) - reset_head_hair() - - var/datum/sprite_accessory/hair/current_fhair = GLOB.facial_hair_styles_list[H.f_style] - if(current_fhair.gender != NEUTER && current_fhair.gender != gender) - reset_facial_hair() - if(update_dna) update_dna() sync_organ_dna(assimilate = FALSE) update_body() return TRUE +/mob/living/carbon/human/proc/change_body_type(new_body, update_dna = TRUE) + if(!new_body || new_body == body_type) + return + + body_type = new_body + + if(update_dna) + update_dna() + sync_organ_dna(FALSE) + update_body(TRUE) + /mob/living/carbon/human/proc/change_hair(hair_style, fluff) var/obj/item/organ/external/head/H = get_organ("head") @@ -373,8 +374,6 @@ if(hairstyle == "Bald") //Just in case. valid_hairstyles += hairstyle continue - if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) - continue if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model] if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. @@ -401,8 +400,6 @@ if(facialhairstyle == "Shaved") //Just in case. valid_facial_hairstyles += facialhairstyle continue - if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) - continue if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model] if(H.dna.species.name in S.species_allowed) //If this is a facial hair style native to the user's species... diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 56c1af2531b..5cf1b5218fc 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -32,6 +32,8 @@ var/height = "average height" /// Players physique (even MORE fluff) var/physique = "average" + /// The body type associated with the body + var/body_type = MALE var/underwear = "Nude" //Which underwear the player wants var/undershirt = "Nude" //Which undershirt the player wants diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm index 7296e27c278..6938a3e3451 100644 --- a/code/modules/mob/living/carbon/human/human_mob.dm +++ b/code/modules/mob/living/carbon/human/human_mob.dm @@ -1087,9 +1087,6 @@ if(oldspecies.default_language) remove_language(oldspecies.default_language) - if(gender == PLURAL && oldspecies.has_gender) - change_gender(pick(MALE, FEMALE)) - oldspecies.handle_dna(src, TRUE) // Remove any mutations that belong to the old species oldspecies.on_species_loss(src) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 483c58b8ae8..4a9fcf2b651 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -118,7 +118,6 @@ var/forced_heartattack = FALSE //Some species have blood, but we still want them to have heart attacks var/dies_at_threshold = FALSE // Do they die or get knocked out at specific thresholds, or do they go through complex crit? var/can_revive_by_healing // Determines whether or not this species can be revived by simply healing them - var/has_gender = TRUE var/blacklisted = FALSE var/dangerous_existence = FALSE diff --git a/code/modules/mob/living/carbon/human/species/diona_species.dm b/code/modules/mob/living/carbon/human/species/diona_species.dm index 65ad87eadda..8fd6d96e22d 100644 --- a/code/modules/mob/living/carbon/human/species/diona_species.dm +++ b/code/modules/mob/living/carbon/human/species/diona_species.dm @@ -22,7 +22,6 @@ inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT clothing_flags = HAS_SOCKS default_hair_colour = "#000000" - has_gender = FALSE bodyflags = SHAVED dietflags = DIET_HERB //Diona regenerate nutrition in light and water, no diet necessary, but if they must, they eat other plants *scream taste_sensitivity = TASTE_SENSITIVITY_DULL diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm index a5586270a6a..fba0d6f97e8 100644 --- a/code/modules/mob/living/carbon/human/species/drask.dm +++ b/code/modules/mob/living/carbon/human/species/drask.dm @@ -32,7 +32,6 @@ species_traits = list(LIPS, NO_HAIR) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS | BALD | SHAVED - has_gender = FALSE dietflags = DIET_OMNI cold_level_1 = -1 //Default 260 - Lower is better @@ -58,6 +57,14 @@ "eyes" = /obj/item/organ/internal/eyes/drask, //5 darksight. "brain" = /obj/item/organ/internal/brain/drask ) + autohiss_basic_map = list( + "o" = list ("oo", "ooo"), + "u" = list ("uu", "uuu") + ) + autohiss_extra_map = list( + "m" = list ("mm", "mmm") + ) + autohiss_exempt = list("Orluum") /datum/species/drask/get_species_runechat_color(mob/living/carbon/human/H) var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 747eec39daa..416a9f2b73d 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -143,21 +143,21 @@ /datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) - var/datum/action/innate/ignite/ignite = new() - ignite.Grant(C) + var/datum/action/innate/golem_ignite/golem_ignite = new() + golem_ignite.Grant(C) /datum/species/golem/plasma/on_species_loss(mob/living/carbon/C) - for(var/datum/action/innate/ignite/ignite in C.actions) - ignite.Remove(C) + for(var/datum/action/innate/golem_ignite/golem_ignite in C.actions) + golem_ignite.Remove(C) ..() -/datum/action/innate/ignite +/datum/action/innate/golem_ignite name = "Ignite" desc = "Set yourself aflame, bringing yourself closer to exploding!" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "sacredflame" -/datum/action/innate/ignite/Activate() +/datum/action/innate/golem_ignite/Activate() if(ishuman(owner)) var/mob/living/carbon/human/H = owner if(H.fire_stacks) diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index 21de51a0324..498b739e631 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -26,7 +26,6 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_BODY_MARKINGS | HAS_BODYACC_COLOR | SHAVED | BALD dietflags = DIET_HERB - has_gender = FALSE reagent_tag = PROCESS_ORG flesh_color = "#a598ad" blood_color = "#A200FF" diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm index 6ae58289f77..e0d95de20e5 100644 --- a/code/modules/mob/living/carbon/human/species/kidan.dm +++ b/code/modules/mob/living/carbon/human/species/kidan.dm @@ -47,6 +47,14 @@ "is cracking their exoskeleton!", "is stabbing themselves with their mandibles!", "is holding their breath!") + autohiss_basic_map = list( + "z" = list("zz", "zzz", "zzzz"), + "v" = list("vv", "vvv", "vvvv") + ) + autohiss_extra_map = list( + "s" = list("z", "zs", "zzz", "zzsz") + ) + autohiss_exempt = list("Chittin") /datum/species/kidan/get_species_runechat_color(mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm index 924ca49d876..fadcdf582df 100644 --- a/code/modules/mob/living/carbon/human/species/machine.dm +++ b/code/modules/mob/living/carbon/human/species/machine.dm @@ -34,7 +34,6 @@ default_hair = "Blue IPC Screen" dies_at_threshold = TRUE can_revive_by_healing = 1 - has_gender = FALSE reagent_tag = PROCESS_SYN male_scream_sound = 'sound/goonstation/voice/robot_scream.ogg' female_scream_sound = 'sound/goonstation/voice/robot_scream.ogg' diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 2e1a6c0e66e..bbbeff0d8b4 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -47,6 +47,9 @@ speciesbox = /obj/item/storage/box/survival_plasmaman flesh_color = "#8b3fba" + autohiss_basic_map = list( + "s" = list("ss", "sss", "ssss") + ) /datum/species/plasmaman/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE) var/current_job = J.title diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm index 2ec13166f02..6a71141a991 100644 --- a/code/modules/mob/living/carbon/human/species/tajaran.dm +++ b/code/modules/mob/living/carbon/human/species/tajaran.dm @@ -51,6 +51,10 @@ "is jamming their claws into their eye sockets!", "is twisting their own neck!", "is holding their breath!") + autohiss_basic_map = list( + "r" = list("rr", "rrr", "rrrr") + ) + autohiss_exempt = list("Siik'tajr") /datum/species/tajaran/handle_death(gibbed, mob/living/carbon/human/H) H.stop_tail_wagging() diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index 9faf4ae4c51..146d4b606b6 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -54,18 +54,25 @@ "is jamming their claws into their eye sockets!", "is twisting their own neck!", "is holding their breath!") + autohiss_basic_map = list( + "s" = list("ss", "sss", "ssss") + ) + autohiss_extra_map = list( + "x" = list("ks", "kss", "ksss") + ) + autohiss_exempt = list("Sinta'unathi") /datum/species/unathi/on_species_gain(mob/living/carbon/human/H) ..() - var/datum/action/innate/ignite/fire = new() + var/datum/action/innate/unathi_ignite/fire = new() fire.Grant(H) /datum/species/unathi/on_species_loss(mob/living/carbon/human/H) ..() - for(var/datum/action/innate/ignite/fire in H.actions) + for(var/datum/action/innate/unathi_ignite/fire in H.actions) fire.Remove(H) -/datum/action/innate/ignite +/datum/action/innate/unathi_ignite name = "Ignite" desc = "A fire forms in your mouth, fierce enough to... light a cigarette. Requires you to drink welding fuel beforehand." icon_icon = 'icons/obj/cigarettes.dmi' @@ -75,7 +82,7 @@ var/welding_fuel_used = 3 //one sip, with less strict timing check_flags = AB_CHECK_HANDS_BLOCKED -/datum/action/innate/ignite/Activate() +/datum/action/innate/unathi_ignite/Activate() var/mob/living/carbon/human/user = owner if(world.time <= cooldown) to_chat(user, "Your throat hurts too much to do it right now. Wait [round((cooldown - world.time) / 10)] seconds and try again.") @@ -95,7 +102,6 @@ else to_chat(user, "You need to drink welding fuel first.") - /datum/species/unathi/handle_death(gibbed, mob/living/carbon/human/H) H.stop_tail_wagging() @@ -127,14 +133,14 @@ /datum/species/unathi/ashwalker/on_species_gain(mob/living/carbon/human/H) ..() - for(var/datum/action/innate/ignite/fire in H.actions) + for(var/datum/action/innate/unathi_ignite/fire in H.actions) fire.Remove(H) - var/datum/action/innate/ignite/ash_walker/fire = new() + var/datum/action/innate/unathi_ignite/ash_walker/fire = new() fire.Grant(H) /datum/species/unathi/ashwalker/on_species_loss(mob/living/carbon/human/H) ..() - for(var/datum/action/innate/ignite/ash_walker/fire in H.actions) + for(var/datum/action/innate/unathi_ignite/ash_walker/fire in H.actions) fire.Remove(H) /datum/species/unathi/ashwalker/movement_delay(mob/living/carbon/human/H) @@ -143,7 +149,7 @@ if(!is_mining_level(our_turf.z)) . -= speed_mod -/datum/action/innate/ignite/ash_walker +/datum/action/innate/unathi_ignite/ash_walker desc = "You form a fire in your mouth, fierce enough to... light a cigarette." cooldown_duration = 3 MINUTES welding_fuel_used = 0 // Ash walkers dont need welding fuel to use ignite diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index 853819c6bcd..c300570b0dd 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -30,7 +30,6 @@ flesh_color = "#808D11" //Default styles for created mobs. default_hair = "Short Vox Quills" - has_gender = FALSE default_hair_colour = "#614f19" //R: 97, G: 79, B: 25 butt_sprite = "vox" diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index b5f2f797b38..3c317c8688e 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -1,8 +1,3 @@ -/datum/game_mode - var/list/datum/mind/superheroes = list() - var/list/datum/mind/supervillains = list() - var/list/datum/mind/greyshirts = list() - /datum/superheroes var/name var/desc diff --git a/code/modules/mob/living/silicon/robot/misc_robot_items.dm b/code/modules/mob/living/silicon/robot/misc_robot_items.dm index 05174cd247e..22b21a4104c 100644 --- a/code/modules/mob/living/silicon/robot/misc_robot_items.dm +++ b/code/modules/mob/living/silicon/robot/misc_robot_items.dm @@ -65,8 +65,6 @@ //Personal shielding for the combat module. -/obj/item/borg - var/powerneeded // Percentage of power remaining required to run item /obj/item/borg/destroyer/mobility name = "mobility module" diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index f27ae44d728..704cda468e2 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -475,10 +475,6 @@ else if(prob(30) && ishuman(movement_target.loc)) // mean hooman has stolen it custom_emote(EMOTE_VISIBLE, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face.") -/obj/item/food/snacks/meat/corgi - name = "Corgi meat" - desc = "Tastes like... well you know..." - /mob/living/simple_animal/pet/dog/corgi/Ian/narsie_act() playsound(src, 'sound/misc/demon_dies.ogg', 75, TRUE) var/mob/living/simple_animal/pet/dog/corgi/narsie/N = new(loc) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index cd74386bdd7..666f0c49309 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -719,7 +719,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ set category = "IC" msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = sanitize(msg, list("\n" = "
")) + msg = sanitize_simple(html_encode(msg), list("\n" = "
")) var/combined = length(memory + msg) if(mind && (combined < MAX_PAPER_MESSAGE_LEN)) diff --git a/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm index f70bf5d5b42..2d4aea1d857 100644 --- a/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm @@ -10,7 +10,6 @@ icon = 'icons/mob/human_face.dmi' // Special case, use the bald icon in human face name = "Shaved" icon_state = "bald" - gender = NEUTER species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Vulpkanin", "Slime People") /datum/sprite_accessory/facial_hair/watson diff --git a/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm b/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm index 9cdfb017e9b..c9d0087bd0b 100644 --- a/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm @@ -563,7 +563,6 @@ /datum/sprite_accessory/hair/joestar name = "Joestar" icon_state = "joestar" - gender = MALE species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin") /datum/sprite_accessory/hair/nitori @@ -757,11 +756,6 @@ icon_state = "longovereye" species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin") -/datum/sprite_accessory/hair/father - name = "Father" - icon_state = "father" - species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin") - /// Due to a vulp hairstyle called bun /datum/sprite_accessory/hair/bun4 name = "Bun 4" diff --git a/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm b/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm index aa938926eb9..7c229d068c6 100644 --- a/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm @@ -16,10 +16,6 @@ name = "Curious Antennae" icon_state = "curious" -/datum/sprite_accessory/head_accessory/kidan/mopey_antennae - name = "Mopey Antennae" - icon_state = "mopey" - /datum/sprite_accessory/head_accessory/kidan/crescent_antennae name = "Crescent Antennae" icon_state = "crescent" diff --git a/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm b/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm index 76cbbc7284c..cdb4c487806 100644 --- a/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm +++ b/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm @@ -5,12 +5,10 @@ /datum/sprite_accessory/hair/skrell/skr_tentacle_m name = "Skrell Male Tentacles" icon_state = "male" - gender = MALE /datum/sprite_accessory/hair/skrell/skr_tentacle_f name = "Skrell Female Tentacles" icon_state = "female" - gender = FEMALE /datum/sprite_accessory/hair/skrell/skr_tentacleslong name = "Long Skrell Tentacles" @@ -23,39 +21,33 @@ /datum/sprite_accessory/hair/skrell/skr_gold_m name = "Gold plated Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "gold" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_gold_f name = "Gold chained Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "gold" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_clothtentacle_m name = "Cloth draped Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "cloth" /datum/sprite_accessory/hair/skrell/skr_clothtentacle_f name = "Cloth draped Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "cloth" /datum/sprite_accessory/hair/skrell/skr_gclothtentacle_m name = "Ombre Dye, Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "gradient" /datum/sprite_accessory/hair/skrell/skr_gclothtentacle_f name = "Ombre Dye, Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "gradient" /datum/sprite_accessory/hair/skrell/skr_gclothtentacleslong @@ -71,14 +63,12 @@ /datum/sprite_accessory/hair/skrell/skr_diablacktentacle_m name = "Black headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "blackdia" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_diablacktentacle_f name = "Black headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "blackdia" no_sec_colour = 1 @@ -92,14 +82,12 @@ /datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_m name = "Gold headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "golddia" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_f name = "Gold headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "golddia" no_sec_colour = 1 @@ -112,14 +100,12 @@ /datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_m name = "Silver headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "silvdia" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_f name = "Silver headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "silvdia" no_sec_colour = 1 @@ -132,14 +118,12 @@ /datum/sprite_accessory/hair/skrell/skr_festivetentacle_m name = "Festive headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "fest" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_festivetentacle_f name = "Festive headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "fest" no_sec_colour = 1 diff --git a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm index 2610cd828c5..d17931f9577 100644 --- a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm @@ -18,10 +18,14 @@ */ /proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, list/full_list) - if(!istype(L)) L = list() - if(!istype(male)) male = list() - if(!istype(female)) female = list() - if(!istype(full_list)) full_list = list() + if(!istype(L)) + L = list() + if(!istype(male)) + male = list() + if(!istype(female)) + female = list() + if(!istype(full_list)) + full_list = list() for(var/path in subtypesof(prototype)) var/datum/sprite_accessory/D = new path() @@ -33,9 +37,11 @@ L[D.name] = D full_list[D.name] = D - switch(D.gender) - if(MALE) male[D.name] = D - if(FEMALE) female[D.name] = D + switch(D.body_type) + if(MALE) + male[D.name] = D + if(FEMALE) + female[D.name] = D else male[D.name] = D female[D.name] = D @@ -45,7 +51,7 @@ var/icon //the icon file the accessory is located in var/icon_state //the icon_state of the accessory var/name //the preview name of the accessory - var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations + var/body_type = NEUTER //Determines if the accessory will be skipped or included in random hair generations // Restrict some styles to specific species var/list/species_allowed = list("Human", "Slime People") @@ -74,7 +80,6 @@ glasses_over = 1 /datum/sprite_accessory/facial_hair - gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P) icon = 'icons/mob/sprite_accessories/human/human_facial_hair.dmi' var/over_hair @@ -174,7 +179,6 @@ "Grey" = 'icons/mob/clothing/species/grey/underwear.dmi', "Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi' ) - gender = NEUTER /datum/sprite_accessory/underwear/nude name = "Nude" @@ -182,7 +186,7 @@ species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian") /datum/sprite_accessory/underwear/male - gender = MALE + body_type = MALE /datum/sprite_accessory/underwear/male/male_white name = "Mens White" @@ -192,7 +196,7 @@ name = "Mens Grey" icon_state = "male_grey" -/datum/sprite_accessory/underwear/male/male_grey +/datum/sprite_accessory/underwear/male/male_grey_alt name = "Mens Grey Alt" icon_state = "male_greyalt" @@ -233,7 +237,7 @@ icon_state = "male_mankini" /datum/sprite_accessory/underwear/female - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/underwear/female/female_red name = "Ladies Red" @@ -305,7 +309,6 @@ "Grey" = 'icons/mob/clothing/species/grey/underwear.dmi', "Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi' ) - gender = NEUTER /datum/sprite_accessory/undershirt/nude name = "Nude" @@ -494,17 +497,17 @@ /datum/sprite_accessory/undershirt/tank_redtop name = "Red Crop-Top" icon_state = "tank_redtop" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/undershirt/tank_whitetop name = "White Crop-Top" icon_state = "tank_whitetop" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/undershirt/tank_midriff name = "White Mid Tank-Top" icon_state = "tank_midriff" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/undershirt/tank_white name = "White Tank-Top" @@ -547,7 +550,6 @@ "Nian" = 'icons/mob/clothing/species/nian/underwear.dmi' ) - gender = NEUTER /datum/sprite_accessory/socks/nude name = "Nude" @@ -581,7 +583,7 @@ /datum/sprite_accessory/socks/thin_knee name = "Knee-high Thin" icon_state = "thin_knee" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/socks/striped_norm name = "Normal Striped" @@ -606,7 +608,7 @@ /datum/sprite_accessory/socks/thin_thigh name = "Thigh-high Thin" icon_state = "thin_thigh" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/socks/striped_thigh name = "Thigh-high Striped" @@ -619,7 +621,7 @@ /datum/sprite_accessory/socks/pantyhose name = "Pantyhose" icon_state = "pantyhose" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/socks/black_fishnet name = "Black Fishnet" diff --git a/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm index 5fcf93aa770..c43ea89f204 100644 --- a/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm @@ -1,7 +1,6 @@ /datum/sprite_accessory/facial_hair/unathi icon = 'icons/mob/sprite_accessories/unathi/unathi_facial_hair.dmi' species_allowed = list("Unathi") - gender = NEUTER over_hair = 1 /datum/sprite_accessory/facial_hair/unathi/una_spines_long diff --git a/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm index 2f292e443e3..56381bbbf6c 100644 --- a/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm @@ -1,7 +1,6 @@ /datum/sprite_accessory/facial_hair/vox icon = 'icons/mob/sprite_accessories/vox/vox_facial_hair.dmi' species_allowed = list("Vox") - gender = NEUTER /datum/sprite_accessory/facial_hair/vox/vox_colonel name = "Vox Colonel Beard" diff --git a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm index fca910b401a..419aa7c2e76 100644 --- a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm @@ -1,7 +1,6 @@ /datum/sprite_accessory/facial_hair/vulpkanin icon = 'icons/mob/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dmi' species_allowed = list("Vulpkanin") - gender = NEUTER /datum/sprite_accessory/facial_hair/vulpkanin/vulp_earfluff name = "Vulpkanin Earfluff" diff --git a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm index b32f2b4153a..27ca4286943 100644 --- a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm @@ -84,7 +84,6 @@ /datum/sprite_accessory/hair/vulpkanin/vulp_hair_raine name = "Raine" icon_state = "raine" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/vulp_hair_jeremy name = "Jeremy" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index dec1ff962b1..ec07906e81c 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -534,14 +534,6 @@ name = "A Crash Course in Legal SOP on SS13" info = "Roles:
\nThe Detective is basically the investigator and prosecutor.
\nThe Staff Assistant can perform these functions with written authority from the Detective.
\nThe Captain/HoP/Warden is ct as the judicial authority.
\nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
\n
\nInvestigative Phase:
\nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
\n
\nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
\n
\nPre-Pre-Trial Phase:
\nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
\nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
\nPossible Motions:
\n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
\n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
\n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
\n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
\n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
\n
\nALL SIDES MOVE TO A COURTROOM
\nPre-Trial Hearings:
\nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
\n
\nThe Trial:
\nThe trial has three phases.
\n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
\n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
\nFINALLY once both sides are done calling witnesses we move onto the next phase.
\n3. Closing Arguments- Same as opening.
\nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
\n
\nSentencing Phase:
\nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
\nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
\nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
\n
\nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
\n" -/obj/item/paper/hydroponics - name = "Greetings from Billy Bob" - info = "Hey fellow botanist!
\n
\nI didn't trust the station folk so I left
\na couple of weeks ago. But here's some
\ninstructions on how to operate things here.
\nYou can grow plants and each iteration they become
\nstronger, more potent and have better yield, if you
\nknow which ones to pick. Use your botanist's analyzer
\nfor that. You can turn harvested plants into seeds
\nat the seed extractor, and replant them for better stuff!
\nSometimes if the weed level gets high in the tray
\nmutations into different mushroom or weed species have
\nbeen witnessed. On the rare occassion even weeds mutate!
\n
\nEither way, have fun!
\n
\nBest regards,
\nBilly Bob Johnson.
\n
\nPS.
\nHere's a few tips:
\nIn nettles, potency = damage
\nIn amanitas, potency = deadliness + side effect
\nIn Liberty caps, potency = drug power + effect
\nIn chilis, potency = heat
\nNutrients keep mushrooms alive!
\nWater keeps weeds such as nettles alive!
\nAll other plants need both." - -/obj/item/paper/djstation - name = "DJ Listening Outpost" - info = "Welcome new owner!

You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
  1. Equip yourself with a multi-tool
  2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
  3. Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
  • 145.7 - Common Channel
  • 144.7 - Private AI Channel
  • 135.9 - Security Channel
  • 135.7 - Engineering Channel
  • 135.5 - Medical Channel
  • 135.3 - Command Channel
  • 135.1 - Science Channel
  • 134.9 - Mining Channel
  • 134.7 - Cargo Channel
  • " - /obj/item/paper/flag icon_state = "flag_neutral" item_state = "paper" @@ -605,17 +597,6 @@ /* * Premade paper */ -/obj/item/paper/Court - name = "Judgement" - info = "For crimes against the station, the offender is sentenced to:
    \n
    \n" - -/obj/item/paper/Toxin - name = "Chemical Information" - info = "Known Onboard Toxins:
    \n\tGrade A Semi-Liquid Plasma:
    \n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
    \n\t\tA gas mask fails to filter plasma after 50 units.
    \n\t\tWill attempt to diffuse like a gas.
    \n\t\tFiltered by scrubbers.
    \n\t\tThere is a bottled version which is very different
    \n\t\t\tfrom the version found in canisters!
    \n
    \n\t\tWARNING: Highly Flammable. Keep away from heat sources
    \n\t\texcept in a enclosed fire area!
    \n\t\tWARNING: It is a crime to use this without authorization.
    \nKnown Onboard Anti-Toxin:
    \n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
    \n\t\tBest if injected directly into bloodstream.
    \n\t\tA full injection is in every regular Med-Kit.
    \n\t\tSpecial toxin Kits hold around 7.
    \n
    \nKnown Onboard Chemicals (other):
    \n\tRejuvenation T#001:
    \n\t\tEven 1 unit injected directly into the bloodstream
    \n\t\t\twill cure paralysis and sleep plasma.
    \n\t\tIf administered to a dying patient it will prevent
    \n\t\t\tfurther damage for about units*3 seconds.
    \n\t\t\tit will not cure them or allow them to be cured.
    \n\t\tIt can be administeredd to a non-dying patient
    \n\t\t\tbut the chemicals disappear just as fast.
    \n\tSoporific T#054:
    \n\t\t5 units wilkl induce precisely 1 minute of sleep.
    \n\t\t\tThe effect are cumulative.
    \n\t\tWARNING: It is a crime to use this without authorization" - -/obj/item/paper/courtroom - name = "A Crash Course in Legal SOP on SS13" - info = "Roles:
    \nThe Detective is basically the investigator and prosecutor.
    \nThe Staff Assistant can perform these functions with written authority from the Detective.
    \nThe Captain/HoP/Warden is ct as the judicial authority.
    \nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
    \n
    \nInvestigative Phase:
    \nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
    \n
    \nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
    \n
    \nPre-Pre-Trial Phase:
    \nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
    \nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
    \nPossible Motions:
    \n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
    \n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
    \n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
    \n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
    \n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
    \n
    \nALL SIDES MOVE TO A COURTROOM
    \nPre-Trial Hearings:
    \nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
    \n
    \nThe Trial:
    \nThe trial has three phases.
    \n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
    \n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
    \nFINALLY once both sides are done calling witnesses we move onto the next phase.
    \n3. Closing Arguments- Same as opening.
    \nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
    \n
    \nSentencing Phase:
    \nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
    \nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
    \nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
    \n
    \nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
    \n" /obj/item/paper/hydroponics name = "Greetings from Billy Bob" @@ -629,24 +610,6 @@ name = "DJ Listening Outpost" info = "Welcome new owner!

    You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
    1. Equip yourself with a multi-tool
    2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
    3. Turn all the machines on, it has already been configured for you to listen on.
    Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
    • 145.7 - Common Channel
    • 144.7 - Private AI Channel
    • 135.9 - Security Channel
    • 135.7 - Engineering Channel
    • 135.5 - Medical Channel
    • 135.3 - Command Channel
    • 135.1 - Science Channel
    • 134.9 - Mining Channel
    • 134.7 - Cargo Channel
    • " -/obj/item/paper/flag - icon_state = "flag_neutral" - item_state = "paper" - anchored = TRUE - -/obj/item/paper/jobs - name = "Job Information" - info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
      \nThe data will be in the following form.
      \nGenerally lower ranking positions come first in this list.
      \n
      \nJob Name general access>lab access-engine access-systems access (atmosphere control)
      \n\tJob Description
      \nJob Duties (in no particular order)
      \nTips (where applicable)
      \n
      \nResearch Assistant 1>1-0-0
      \n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
      \n1. Assist the researchers.
      \n2. Clean up the labs.
      \n3. Prepare materials.
      \n
      \nStaff Assistant 2>0-0-0
      \n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
      \n1. Patrol ship/Guard key areas
      \n2. Assist security officer
      \n3. Perform other security duties.
      \n
      \nTechnical Assistant 1>0-0-1
      \n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
      \n1. Assist Station technician and Engineers.
      \n2. Perform general maintenance of station.
      \n3. Prepare materials.
      \n
      \nMedical Assistant 1>1-0-0
      \n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
      \n1. Assist the medical personnel.
      \n2. Update medical files.
      \n3. Prepare materials for medical operations.
      \n
      \nResearch Technician 2>3-0-0
      \n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
      \n1. Inform superiors of research.
      \n2. Perform research alongside of official researchers.
      \n
      \nDetective 3>2-0-0
      \n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
      \n1. Perform crime-scene investigations/draw conclusions.
      \n2. Store and catalogue evidence properly.
      \n3. Testify to superiors/inquieries on findings.
      \n
      \nStation Technician 2>0-2-3
      \n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
      \n1. Maintain SS13 systems.
      \n2. Repair equipment.
      \n
      \nAtmospheric Technician 3>0-0-4
      \n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
      \n1. Maintain atmosphere on SS13
      \n2. Research atmospheres on the space station. (safely please!)
      \n
      \nEngineer 2>1-3-0
      \n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
      \n1. Upkeep the engine.
      \n2. Prevent fires in the engine.
      \n3. Maintain a safe orbit.
      \n
      \nMedical Researcher 2>5-0-0
      \n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
      \n1. Make sure the station is kept safe.
      \n2. Research medical properties of materials studied of Space Station 13.
      \n
      \nScientist 2>5-0-0
      \n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
      \n1. Research plasma
      \n2. Make sure all plasma is properly handled.
      \n
      \nMedical Doctor (Officer) 2>0-0-0
      \n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
      \n1. Heal wounded people.
      \n2. Perform examinations of all personnel.
      \n3. Moniter usage of medical equipment.
      \n
      \nSecurity Officer 3>0-0-0
      \n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
      \n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
      \n1. Maintain order.
      \n2. Assist others.
      \n3. Repair structural problems.
      \n
      \nHead of Security 4>5-2-2
      \n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
      \n1. Oversee security.
      \n2. Assign patrol duties.
      \n3. Protect the station and staff.
      \n
      \nHead of Personnel 4>4-2-2
      \n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
      \n1. Assign duties.
      \n2. Moderate personnel.
      \n3. Moderate research.
      \n
      \nCaptain 5>5-5-5 (unrestricted station wide access)
      \n\tThis is the highest position you can acquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
      \n1. Assign all positions on SS13
      \n2. Inspect the station for any problems.
      \n3. Perform administrative duties.
      \n" - -/obj/item/paper/photograph - name = "photo" - icon_state = "photo" - item_state = "paper" - -/obj/item/paper/sop - name = "paper- 'Standard Operating Procedure'" - info = "Alert Levels:
      \nBlue- Emergency
      \n\t1. Caused by fire
      \n\t2. Caused by manual interaction
      \n\tAction:
      \n\t\tClose all fire doors. These can only be opened by reseting the alarm
      \nRed- Ejection/Self Destruct
      \n\t1. Caused by module operating computer.
      \n\tAction:
      \n\t\tAfter the specified time the module will eject completely.
      \n
      \nEngine Maintenance Instructions:
      \n\tShut off ignition systems:
      \n\tActivate internal power
      \n\tActivate orbital balance matrix
      \n\tRemove volatile liquids from area
      \n\tWear a fire suit
      \n
      \n\tAfter
      \n\t\tDecontaminate
      \n\t\tVisit medical examiner
      \n
      \nToxin Laboratory Procedure:
      \n\tWear a gas mask regardless
      \n\tGet an oxygen tank.
      \n\tActivate internal atmosphere
      \n
      \n\tAfter
      \n\t\tDecontaminate
      \n\t\tVisit medical examiner
      \n
      \nDisaster Procedure:
      \n\tFire:
      \n\t\tActivate sector fire alarm.
      \n\t\tMove to a safe area.
      \n\t\tGet a fire suit
      \n\t\tAfter:
      \n\t\t\tAssess Damage
      \n\t\t\tRepair damages
      \n\t\t\tIf needed, Evacuate
      \n\tMeteor Shower:
      \n\t\tActivate fire alarm
      \n\t\tMove to the back of ship
      \n\t\tAfter
      \n\t\t\tRepair damage
      \n\t\t\tIf needed, Evacuate
      \n\tAccidental Reentry:
      \n\t\tActivate fire alarms in front of ship.
      \n\t\tMove volatile matter to a fire proof area!
      \n\t\tGet a fire suit.
      \n\t\tStay secure until an emergency ship arrives.
      \n
      \n\t\tIf ship does not arrive-
      \n\t\t\tEvacuate to a nearby safe area!" - /obj/item/paper/blueshield name = "paper- 'Blueshield Mission Briefing'" info = "Blueshield Mission Briefing
      You are charged with the defence of any persons of importance within the station. This includes, but is not limited to, The Captain, The Heads of Staff and Central Command staff. You answer directly to the Nanotrasen Representative who will assist you in achieving your mission.
      When required to achieve your primary responsibility, you should liaise with security and share resources; however, the day to day security operations of the station are outside of your jurisdiction.
      Monitor the health and safety of your principals, identify any potential risks and threats, then alert the proper departments to resolve the situation. You are authorized to act as bodyguard to any of the station heads that you determine are most in need of protection; however, additional access to their departments shall be granted solely at their discretion.
      Observe the station alert system and carry your armaments only as required by the situation, or when authorized by the Head of Security or Captain in exceptional cases.
      Remember, as an agent of Nanotrasen it is your responsibility to conduct yourself appropriately and you will be held to the highest standard. You will be held accountable for your actions. Security is authorized to search, interrogate or detain you as required by their own procedures. Internal affairs will also monitor and observe your conduct, and their mandate applies equally to security and Blueshield operations." diff --git a/code/modules/power/engines/tesla/generator.dm b/code/modules/power/engines/tesla/generator.dm deleted file mode 100644 index 260f4128bcf..00000000000 --- a/code/modules/power/engines/tesla/generator.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/machinery/the_singularitygen/tesla - name = "energy ball generator" - desc = "Makes the wardenclyffe look like a child's plaything when shot with a particle accelerator." - icon = 'icons/obj/tesla_engine/tesla_generator.dmi' - icon_state = "TheSingGen" - creation_type = /obj/singularity/energy_ball - -/obj/machinery/the_singularitygen/tesla/zap_act(power, zap_flags) - if(zap_flags & ZAP_MACHINE_EXPLOSIVE) - energy += power diff --git a/code/modules/projectiles/ammunition/energy_lens.dm b/code/modules/projectiles/ammunition/energy_lens.dm index 93f8c9b3d66..17964d6c365 100644 --- a/code/modules/projectiles/ammunition/energy_lens.dm +++ b/code/modules/projectiles/ammunition/energy_lens.dm @@ -187,7 +187,7 @@ projectile_type = /obj/item/projectile/plasma muzzle_flash_color = LIGHT_COLOR_PURPLE select_name = "plasma burst" - fire_sound = 'sound/weapons/plasma_cutter.ogg' + fire_sound = 'sound/weapons/pulse.ogg' delay = 15 e_cost = 75 @@ -241,15 +241,6 @@ projectile_type = /obj/item/projectile/beam/instakill/red muzzle_flash_color = LIGHT_COLOR_DARKRED -/obj/item/ammo_casing/energy/plasma - projectile_type = /obj/item/projectile/plasma - muzzle_flash_color = LIGHT_COLOR_PURPLE - select_name = "plasma burst" - fire_sound = 'sound/weapons/pulse.ogg' - -/obj/item/ammo_casing/energy/plasma/adv - projectile_type = /obj/item/projectile/plasma/adv - /obj/item/ammo_casing/energy/tesla_bolt fire_sound = 'sound/magic/lightningbolt.ogg' e_cost = 200 diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 749a1523821..c01c219ac55 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -190,7 +190,7 @@ build_path = /obj/item/ammo_box/wt550/wttx category = list("Weapons") -/datum/design/mag_laser +/datum/design/laser_rifle_magazine name = "Laser Rifle Projector Magazine" desc = "A 20 round encased projector magazine for the IK Laser Rifle series" id = "mag_laser" @@ -200,10 +200,10 @@ build_path = /obj/item/ammo_box/magazine/laser category = list("Weapons") -/datum/design/mag_laser +/datum/design/laser_rifle_ammo_box name = "Laser Rifle Projector Ammunition" desc = "A 20 round encased projector box for the IK Laser Rifle series." - id = "mag_laser" + id = "box_laser" build_type = PROTOLATHE req_tech = list("combat" = 4, "powerstorage" = 4) materials = list(MAT_METAL = 4000, MAT_PLASMA = 600) diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm index 65893025fc1..5830ff8631f 100644 --- a/code/modules/response_team/ert.dm +++ b/code/modules/response_team/ert.dm @@ -4,9 +4,6 @@ #define ERT_TYPE_RED 2 #define ERT_TYPE_GAMMA 3 -/datum/game_mode - var/list/datum/mind/ert = list() - GLOBAL_LIST_EMPTY(response_team_members) GLOBAL_VAR_INIT(responseteam_age, 21) // Minimum account age to play as an ERT member GLOBAL_DATUM(active_team, /datum/response_team) diff --git a/code/modules/ruins/ruin_areas.dm b/code/modules/ruins/ruin_areas.dm index 1ebe950b123..66e036eae4c 100644 --- a/code/modules/ruins/ruin_areas.dm +++ b/code/modules/ruins/ruin_areas.dm @@ -18,13 +18,3 @@ /area/ruin/powered requires_power = FALSE -//Areas - -/area/ruin/powered/snow_biodome - -/area/ruin/powered/golem_ship - name = "Free Golem Ship" - - - - diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index 6d4c69f1fec..58a50911591 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -151,7 +151,7 @@ return mob_icon //Don't need to blend the above into this as it's handled in human/update_icons(). The overlays are for rendering stuff on disembodied heads. /obj/item/organ/external/proc/get_icon_state(skeletal) - var/gender + var/body var/icon_file var/new_icon_state if(!dna) @@ -159,18 +159,17 @@ new_icon_state = "[icon_name][gendered_icon ? "_f" : ""]" else if(gendered_icon) - switch(dna.GetUITriState(DNA_UI_GENDER)) + switch(dna.GetUITriState(DNA_UI_BODY_TYPE)) if(DNA_GENDER_FEMALE) - gender = "f" - if(DNA_GENDER_MALE) - gender = "m" + body = "f" else - gender = "f" //Default to "f" (per line 162). Using a pick("m", "f") will make different body parts different genders for the same character. + body = "m" + if(limb_name == "head") var/obj/item/organ/external/head/head_organ = src head_organ.handle_alt_icon() - new_icon_state = "[icon_name][gender ? "_[gender]" : ""]" + new_icon_state = "[icon_name][body ? "_[body]" : ""]" if(skeletal) icon_file = 'icons/mob/human_races/r_skeleton.dmi' diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 988fb825dfa..81d4b13f9c2 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -188,15 +188,6 @@ /obj/item/organ/internal/proc/render() return -/obj/item/food/snacks/organ - name = "appendix" - icon_state = "appendix" - icon = 'icons/obj/surgery.dmi' - -/obj/item/food/snacks/organ/Initialize(mapload) - . = ..() - reagents.add_reagent("nutriment", 5) - /obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) if(M == user && ishuman(user)) var/mob/living/carbon/human/H = user diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index 49791db04e8..afc7edd4396 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -214,7 +214,6 @@ data["specimen"] = owner.dna.species.name data["gender"] = owner.gender - data["has_gender"] = owner.dna.species.has_gender data["change_race"] = can_change(APPEARANCE_RACE) if(data["change_race"]) var/list/species = list() diff --git a/config/example/config.toml b/config/example/config.toml index 0502825cb37..fedba7ae4a3 100644 --- a/config/example/config.toml +++ b/config/example/config.toml @@ -145,7 +145,7 @@ ipc_screens = [ # Enable/disable the database on a whole sql_enabled = false # SQL version. If this is a mismatch, round start will be delayed -sql_version = 54 +sql_version = 55 # SQL server address. Can be an IP or DNS name sql_address = "127.0.0.1" # SQL server port diff --git a/icons/_nanomaps/CereStation_nanomap_z1.png b/icons/_nanomaps/CereStation_nanomap_z1.png index 61e992f4ba5..a727666c4a4 100644 Binary files a/icons/_nanomaps/CereStation_nanomap_z1.png and b/icons/_nanomaps/CereStation_nanomap_z1.png differ diff --git a/paradise.dme b/paradise.dme index 922db58d828..8c00ed88b9e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2523,7 +2523,6 @@ #include "code\modules\power\engines\supermatter\supermatter_event.dm" #include "code\modules\power\engines\tesla\coil.dm" #include "code\modules\power\engines\tesla\energy_ball.dm" -#include "code\modules\power\engines\tesla\generator.dm" #include "code\modules\power\engines\tesla\teslagen.dm" #include "code\modules\power\generators\solar.dm" #include "code\modules\power\generators\thermo_electric_generator.dm" diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger.js b/tgui/packages/tgui/interfaces/AppearanceChanger.js index fedcce5f540..3d1805ce543 100644 --- a/tgui/packages/tgui/interfaces/AppearanceChanger.js +++ b/tgui/packages/tgui/interfaces/AppearanceChanger.js @@ -10,7 +10,6 @@ export const AppearanceChanger = (props, context) => { specimen, change_gender, gender, - has_gender, change_eye_color, change_skin_tone, change_skin_color, @@ -95,13 +94,13 @@ export const AppearanceChanger = (props, context) => { selected={gender === 'female'} onClick={() => act('gender', { gender: 'female' })} /> - {!has_gender && ( + {