diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 182b05ccb6a..27f46f2458d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -219,11 +219,11 @@ /obj/structure/stone_tile/surrounding_tile{ dir = 8 }, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aI" = ( /obj/structure/stone_tile/block/cracked, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aJ" = ( /obj/structure/stone_tile/surrounding_tile/cracked, @@ -234,7 +234,7 @@ /obj/structure/stone_tile/surrounding_tile{ dir = 8 }, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aK" = ( /obj/structure/stone_tile/block/cracked{ @@ -304,17 +304,17 @@ /obj/structure/stone_tile/block/cracked{ dir = 4 }, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aU" = ( /obj/structure/lavaland/ash_walker, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aV" = ( /obj/structure/stone_tile/block{ dir = 8 }, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aW" = ( /obj/structure/stone_tile/block{ @@ -383,13 +383,13 @@ /obj/structure/stone_tile/surrounding_tile{ dir = 1 }, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "be" = ( /obj/structure/stone_tile/block{ dir = 1 }, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "bf" = ( /obj/structure/stone_tile/surrounding_tile/cracked{ @@ -402,7 +402,7 @@ /obj/structure/stone_tile/surrounding_tile{ dir = 4 }, -/turf/open/lava/smooth, +/turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "bg" = ( /obj/structure/stone_tile/block{ diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm index fea17a38cc5..433eea818a3 100644 --- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm @@ -2875,7 +2875,7 @@ }, /area/ruin/space/derelict/atmospherics) "lO" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector, +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste, /turf/open/floor/engine/air{ initial_gas_mix = "o2=20000;n2=80000;TEMP=293.15" }, @@ -3667,7 +3667,8 @@ "ES" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/open/floor/plasteel/airless, +/obj/structure/grille, +/turf/open/floor/plating/airless, /area/ruin/space/derelict/atmospherics) "Gu" = ( /obj/structure/grille, @@ -3817,6 +3818,7 @@ "Qt" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/structure/grille, /turf/open/floor/plating/airless, /area/ruin/space/derelict/atmospherics) "Rd" = ( diff --git a/_maps/map_files/Donutstation/Donutstation.dmm b/_maps/map_files/Donutstation/Donutstation.dmm index 592a091dc41..8166d0b03b1 100644 --- a/_maps/map_files/Donutstation/Donutstation.dmm +++ b/_maps/map_files/Donutstation/Donutstation.dmm @@ -19263,7 +19263,7 @@ /area/security/main) "baM" = ( /obj/machinery/door/airlock/maintenance{ - req_access_txt = "12;1" + req_access_txt = "63" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -21300,7 +21300,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/maintenance{ - req_access_txt = "12;63" + req_access_txt = "63" }, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index b4145ce3dee..d1cbcd04c50 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -186,6 +186,7 @@ #define COMPONENT_ITEM_NO_ATTACK 1 #define COMSIG_MOB_APPLY_DAMGE "mob_apply_damage" //from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone) #define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) +#define COMSIG_MOB_ITEM_ATTACK_QDELETED "mob_item_attack_qdeleted" //from base of obj/item/attack_qdeleted(): (atom/target, mob/user, proxiumity_flag, click_parameters) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params) #define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target) #define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/target) @@ -250,6 +251,7 @@ #define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params) #define COMPONENT_NO_ATTACK 1 #define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params) +#define COMSIG_ITEM_ATTACK_QDELETED "item_attack_qdeleted" //from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params) #define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) #define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user) #define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 1d6d64efb2a..a9a1955ad2d 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -85,10 +85,14 @@ //randomised elements #define RANDOM_NAME "random_name" +#define RANDOM_NAME_ANTAG "random_name_antag" #define RANDOM_BODY "random_body" +#define RANDOM_BODY_ANTAG "random_body_antag" #define RANDOM_SPECIES "random_species" #define RANDOM_GENDER "random_gender" +#define RANDOM_GENDER_ANTAG "random_gender_antag" #define RANDOM_AGE "random_age" +#define RANDOM_AGE_ANTAG "random_age_antag" #define RANDOM_UNDERWEAR "random_underwear" #define RANDOM_UNDERWEAR_COLOR "random_underwear_color" #define RANDOM_UNDERSHIRT "random_undershirt" @@ -100,4 +104,4 @@ #define RANDOM_FACIAL_HAIR_COLOR "random_facial_hair_color" #define RANDOM_FACIAL_HAIRSTYLE "random_facial_hairstyle" #define RANDOM_SKIN_TONE "random_skin_tone" -#define RANDOM_EYE_COLOR "random_eye_color" \ No newline at end of file +#define RANDOM_EYE_COLOR "random_eye_color" diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 8026afae47b..5635cd7b3e7 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -18,6 +18,7 @@ GLOBAL_LIST_EMPTY(drones_list) GLOBAL_LIST_EMPTY(dead_mob_list) //all dead mobs, including clientless. Excludes /mob/dead/new_player GLOBAL_LIST_EMPTY(joined_player_list) //all clients that have joined the game at round-start or as a latejoin. GLOBAL_LIST_EMPTY(new_player_list) //all /mob/dead/new_player, in theory all should have clients and those that don't are in the process of spawning and get deleted when done. +GLOBAL_LIST_EMPTY(pre_setup_antags) //minds that have been picked as antag by the gamemode. removed as antag datums are set. GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs GLOBAL_LIST_EMPTY(mob_living_list) //all instances of /mob/living and subtypes GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subtypes, notably does not contain brains or simple animals diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 51872d06120..99194a4f52a 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -15,6 +15,7 @@ if(target.attackby(src,user, params)) return if(QDELETED(src) || QDELETED(target)) + attack_qdeleted(target, user, TRUE, params) return afterattack(target, user, TRUE, params) @@ -117,6 +118,10 @@ SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) SEND_SIGNAL(user, COMSIG_MOB_ITEM_AFTERATTACK, target, user, proximity_flag, click_parameters) +// Called if the target gets deleted by our attack +/obj/item/proc/attack_qdeleted(atom/target, mob/user, proximity_flag, click_parameters) + SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_QDELETED, target, user, proximity_flag, click_parameters) + SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK_QDELETED, target, user, proximity_flag, click_parameters) /obj/item/proc/get_clamped_volume() if(w_class) diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index 86492048baa..bbe83b18ee0 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -23,7 +23,13 @@ /datum/brain_trauma/severe/split_personality/proc/make_backseats() stranger_backseat = new(owner, src) + var/obj/effect/proc_holder/spell/targeted/personality_commune/stranger_spell = new(src) + stranger_backseat.AddSpell(stranger_spell) + owner_backseat = new(owner, src) + var/obj/effect/proc_holder/spell/targeted/personality_commune/owner_spell = new(src) + owner_backseat.AddSpell(owner_spell) + /datum/brain_trauma/severe/split_personality/proc/get_ghost() set waitfor = FALSE diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm index 93ee54ca9c2..245b7556e0d 100644 --- a/code/datums/components/slippery.dm +++ b/code/datums/components/slippery.dm @@ -21,5 +21,5 @@ /datum/component/slippery/proc/Slip_on_wearer(datum/source, atom/movable/AM, mob/living/crossed) - if(crossed.lying) + if(crossed.lying && !crossed.buckle_lying) Slip(source, AM) diff --git a/code/datums/components/soulstoned.dm b/code/datums/components/soulstoned.dm new file mode 100644 index 00000000000..6e87e7f9fe8 --- /dev/null +++ b/code/datums/components/soulstoned.dm @@ -0,0 +1,31 @@ +//adds godmode while in the container, prevents moving, and clears these effects up after leaving the stone +/datum/component/soulstoned + var/atom/movable/container + +/datum/component/soulstoned/Initialize(atom/movable/container) + if(!isanimal(parent)) + return COMPONENT_INCOMPATIBLE + var/mob/living/simple_animal/S = parent + + src.container = container + + S.forceMove(container) + + S.status_flags |= GODMODE + S.mobility_flags = NONE + S.health = S.maxHealth + S.bruteloss = 0 + + RegisterSignal(S, COMSIG_MOVABLE_MOVED, .proc/free_prisoner) + +/datum/component/soulstoned/proc/free_prisoner() + var/mob/living/simple_animal/S = parent + if(S.loc != container) + qdel(src) + +/datum/component/soulstoned/UnregisterFromParent() + var/mob/living/simple_animal/S = parent + S.status_flags &= ~GODMODE + S.mobility_flags = MOBILITY_FLAGS_DEFAULT + + diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 67a1ccb39ea..976462490c1 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -554,10 +554,11 @@ status_type = STATUS_EFFECT_REFRESH /datum/status_effect/good_music/tick() - owner.dizziness = max(0, owner.dizziness - 2) - owner.jitteriness = max(0, owner.jitteriness - 2) - owner.confused = max(0, owner.confused - 1) - SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "goodmusic", /datum/mood_event/goodmusic) + if(owner.can_hear()) + owner.dizziness = max(0, owner.dizziness - 2) + owner.jitteriness = max(0, owner.jitteriness - 2) + owner.confused = max(0, owner.confused - 1) + SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "goodmusic", /datum/mood_event/goodmusic) /obj/screen/alert/status_effect/regenerative_core name = "Regenerative Core Tendrils" diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm index e25c4f7716f..5405133e4f0 100644 --- a/code/game/gamemodes/brother/traitor_bro.dm +++ b/code/game/gamemodes/brother/traitor_bro.dm @@ -45,7 +45,12 @@ bro.restricted_roles = restricted_jobs log_game("[key_name(bro)] has been selected as a Brother") pre_brother_teams += team - return ..() + . = ..() + if(.) //To ensure the game mode is going ahead + for(var/teams in pre_brother_teams) + for(var/antag in teams) + GLOB.pre_setup_antags += antag + return /datum/game_mode/traitor/bros/post_setup() for(var/datum/team/brother_team/team in pre_brother_teams) @@ -53,6 +58,7 @@ team.forge_brother_objectives() for(var/datum/mind/M in team.members) M.add_antag_datum(/datum/antagonist/brother, team) + GLOB.pre_setup_antags -= M team.update_name() brother_teams += pre_brother_teams return ..() diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index e6524309d92..da872601855 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -51,10 +51,11 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th changelings += changeling changeling.special_role = ROLE_CHANGELING changeling.restricted_roles = restricted_jobs - return 1 + GLOB.pre_setup_antags += changeling + return TRUE else setup_error = "Not enough changeling candidates" - return 0 + return FALSE /datum/game_mode/changeling/post_setup() //Decide if it's ok for the lings to have a team objective @@ -75,6 +76,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th var/datum/antagonist/changeling/new_antag = new() new_antag.team_mode = TRUE changeling.add_antag_datum(new_antag) + GLOB.pre_setup_antags -= changeling ..() /datum/game_mode/changeling/make_antag_chance(mob/living/carbon/human/character) //Assigns changeling to latejoiners diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index ef9b710d7b0..96ed649251d 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -51,13 +51,18 @@ changeling.special_role = ROLE_CHANGELING changelings += changeling changeling.restricted_roles = restricted_jobs - return ..() + . = ..() + if(.) //To ensure the game mode is going ahead + for(var/antag in changelings) + GLOB.pre_setup_antags += antag + return else - return 0 + return FALSE /datum/game_mode/traitor/changeling/post_setup() for(var/datum/mind/changeling in changelings) changeling.add_antag_datum(/datum/antagonist/changeling) + GLOB.pre_setup_antags -= changeling return ..() /datum/game_mode/traitor/changeling/make_antag_chance(mob/living/carbon/human/character) //Assigns changeling to latejoiners diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 00e77dc0cfc..5f9d3649010 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -174,9 +174,10 @@ Credit where due: servant.assigned_role = ROLE_SERVANT_OF_RATVAR servant.special_role = ROLE_SERVANT_OF_RATVAR starter_servants-- + GLOB.pre_setup_antags += servant ark_time = 30 + round((roundstart_player_count / 5)) //In minutes, how long the Ark will wait before activation ark_time = min(ark_time, 35) //35 minute maximum for the activation timer - return 1 + return TRUE /datum/game_mode/clockwork_cult/post_setup() var/list/spread_out_spawns = GLOB.servant_spawns.Copy() @@ -191,20 +192,21 @@ Credit where due: greet_servant(L) equip_servant(L) add_servant_of_ratvar(L, TRUE) + GLOB.pre_setup_antags -= S var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar //that's a mouthful G.final_countdown(ark_time) ..() - return 1 + return TRUE /datum/game_mode/clockwork_cult/proc/greet_servant(mob/M) //Description of their role if(!M) - return 0 + return FALSE to_chat(M, "You are a servant of Ratvar, the Clockwork Justiciar!") to_chat(M, "You have approximately [ark_time] minutes until the Ark activates.") to_chat(M, "Unlock Script scripture by converting a new servant.") to_chat(M, "Application scripture will be unlocked halfway until the Ark's activation.") M.playsound_local(get_turf(M), 'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, pressure_affected = FALSE) - return 1 + return TRUE /datum/game_mode/proc/equip_servant(mob/living/M) //Grants a clockwork slab to the mob, with one of each component if(!M || !ishuman(M)) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 091f40cda08..202bc0faafe 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -83,6 +83,8 @@ log_game("[key_name(cultist)] has been selected as a cultist") if(cultists_to_cult.len>=required_enemies) + for(var/antag in cultists_to_cult) + GLOB.pre_setup_antags += antag return TRUE else setup_error = "Not enough cultist candidates" @@ -94,6 +96,7 @@ for(var/datum/mind/cult_mind in cultists_to_cult) add_cultist(cult_mind, 0, equip=TRUE, cult_team = main_cult) + GLOB.pre_setup_antags -= cult_mind main_cult.setup_objectives() //Wait until all cultists are assigned to make sure none will be chosen as sacrifice. diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm index 024fe24a63b..09b8326d5c2 100644 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ b/code/game/gamemodes/devil/devil_game_mode.dm @@ -47,15 +47,17 @@ if(devils.len < required_enemies) setup_error = "Not enough devil candidates" - return 0 - return 1 + return FALSE + for(var/antag in devils) + GLOB.pre_setup_antags += antag + return TRUE /datum/game_mode/devil/post_setup() for(var/datum/mind/devil in devils) post_setup_finalize(devil) ..() - return 1 + return TRUE /datum/game_mode/devil/generate_report() return "Infernal creatures have been seen nearby offering great boons in exchange for souls. This is considered theft against Nanotrasen, as all employment contracts contain a lien on the \ @@ -63,6 +65,7 @@ /datum/game_mode/devil/proc/post_setup_finalize(datum/mind/devil) add_devil(devil.current, ascendable = TRUE) //Devil gamemode devils are ascendable. + GLOB.pre_setup_antags -= devil add_devil_objectives(devil,2) /proc/is_devil(mob/living/M) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm index fe4aa64304c..3445d0ee1bb 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -110,6 +110,7 @@ /datum/dynamic_ruleset/proc/execute() for(var/datum/mind/M in assigned) M.add_antag_datum(antag_datum) + GLOB.pre_setup_antags -= M return TRUE /// Here you can perform any additional checks you want. (such as checking the map etc) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index cd839214057..532100547f9 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -28,6 +28,7 @@ assigned += M.mind M.mind.special_role = ROLE_TRAITOR M.mind.restricted_roles = restricted_roles + GLOB.pre_setup_antags += M.mind return TRUE /datum/dynamic_ruleset/roundstart/traitor/rule_process() @@ -77,6 +78,7 @@ team.add_member(bro.mind) bro.mind.special_role = "brother" bro.mind.restricted_roles = restricted_roles + GLOB.pre_setup_antags += bro.mind pre_brother_teams += team return TRUE @@ -86,6 +88,7 @@ team.forge_brother_objectives() for(var/datum/mind/M in team.members) M.add_antag_datum(/datum/antagonist/brother, team) + GLOB.pre_setup_antags -= M team.update_name() mode.brother_teams += pre_brother_teams return TRUE @@ -116,6 +119,7 @@ assigned += M.mind M.mind.restricted_roles = restricted_roles M.mind.special_role = ROLE_CHANGELING + GLOB.pre_setup_antags += M.mind return TRUE /datum/dynamic_ruleset/roundstart/changeling/execute() @@ -135,6 +139,7 @@ var/datum/antagonist/changeling/new_antag = new antag_datum() new_antag.team_mode = team_mode changeling.add_antag_datum(new_antag) + GLOB.pre_setup_antags -= changeling return TRUE ////////////////////////////////////////////// @@ -173,7 +178,7 @@ assigned += M.mind M.mind.assigned_role = ROLE_WIZARD M.mind.special_role = ROLE_WIZARD - + return TRUE /datum/dynamic_ruleset/roundstart/wizard/execute() @@ -218,6 +223,7 @@ assigned += M.mind M.mind.special_role = ROLE_CULTIST M.mind.restricted_roles = restricted_roles + GLOB.pre_setup_antags += M.mind return TRUE /datum/dynamic_ruleset/roundstart/bloodcult/execute() @@ -227,6 +233,7 @@ new_cultist.cult_team = main_cult new_cultist.give_equipment = TRUE M.add_antag_datum(new_cultist) + GLOB.pre_setup_antags -= M main_cult.setup_objectives() return TRUE @@ -361,6 +368,7 @@ assigned += M.mind M.mind.restricted_roles = restricted_roles M.mind.special_role = antag_flag + GLOB.pre_setup_antags += M.mind return TRUE /datum/dynamic_ruleset/roundstart/revs/execute() @@ -371,6 +379,7 @@ new_head.give_hud = TRUE new_head.remove_clumsy = TRUE M.add_antag_datum(new_head,revolution) + GLOB.pre_setup_antags -= M revolution.update_objectives() revolution.update_heads() SSshuttle.registerHostileEnvironment(src) @@ -480,6 +489,7 @@ assigned += servant.mind servant.mind.assigned_role = ROLE_SERVANT_OF_RATVAR servant.mind.special_role = ROLE_SERVANT_OF_RATVAR + GLOB.pre_setup_antags += servant.mind ark_time = 30 + round((number_players / 5)) ark_time = min(ark_time, 35) return TRUE @@ -496,6 +506,7 @@ greet_servant(S) equip_servant(S) add_servant_of_ratvar(S, TRUE) + GLOB.pre_setup_antags -= S.mind var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar //that's a mouthful G.final_countdown(ark_time) return TRUE @@ -601,6 +612,7 @@ assigned += devil.mind devil.mind.special_role = ROLE_DEVIL devil.mind.restricted_roles = restricted_roles + GLOB.pre_setup_antags += devil.mind log_game("[key_name(devil)] has been selected as a devil") return TRUE @@ -608,6 +620,7 @@ /datum/dynamic_ruleset/roundstart/devil/execute() for(var/datum/mind/devil in assigned) add_devil(devil.current, ascendable = TRUE) + GLOB.pre_setup_antags -= devil add_devil_objectives(devil,2) return TRUE diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 23924107fa9..cca64be11d8 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -55,6 +55,8 @@ setup_error = "Not enough headrev candidates" return FALSE + for(var/antag in headrev_candidates) + GLOB.pre_setup_antags += antag return TRUE /datum/game_mode/revolution/post_setup() @@ -97,6 +99,7 @@ new_head.give_hud = TRUE new_head.remove_clumsy = TRUE rev_mind.add_antag_datum(new_head,revolution) + GLOB.pre_setup_antags -= rev_mind revolution.update_objectives() revolution.update_heads() diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index fe8948ed0d6..81813188f32 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -63,6 +63,9 @@ setup_error = "Not enough traitor candidates" return FALSE else + for(var/antag in pre_traitors) + GLOB.pre_setup_antags += antag + to_chat(world, "Added [antag] to pre-antag list") return TRUE @@ -70,6 +73,7 @@ for(var/datum/mind/traitor in pre_traitors) var/datum/antagonist/traitor/new_antag = new antag_datum() addtimer(CALLBACK(traitor, /datum/mind.proc/add_antag_datum, new_antag), rand(10,100)) + GLOB.pre_setup_antags -= traitor if(!exchange_blue) exchange_blue = -1 //Block latejoiners from getting exchange objectives ..() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index b6f9e242010..03f27ff6bfb 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -303,9 +303,10 @@ var/temp = "rune" - if(is_alpha(drawing)) + var/ascii = (length(drawing) == 1) + if(ascii && is_alpha(drawing)) temp = "letter" - else if(is_digit(drawing)) + else if(ascii && is_digit(drawing)) temp = "number" else if(drawing in punctuation) temp = "punctuation mark" diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 84750a65a3e..6a86522e0bc 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -925,6 +925,33 @@ GLOBAL_LIST_EMPTY(PDAs) //AI verb and proc for sending PDA messages. +/obj/item/pda/ai/verb/cmd_toggle_pda_receiver() + set category = "AI Commands" + set name = "PDA - Toggle Sender/Receiver" + + if(usr.stat == DEAD) + return //won't work if dead + var/mob/living/silicon/S = usr + if(istype(S) && !isnull(S.aiPDA)) + S.aiPDA.toff = !S.aiPDA.toff + to_chat(usr, "PDA sender/receiver toggled [(S.aiPDA.toff ? "Off" : "On")]!") + else + to_chat(usr, "You do not have a PDA. You should make an issue report about this.") + +/obj/item/pda/ai/verb/cmd_toggle_pda_silent() + set category = "AI Commands" + set name = "PDA - Toggle Ringer" + + if(usr.stat == DEAD) + return //won't work if dead + var/mob/living/silicon/S = usr + if(istype(S) && !isnull(S.aiPDA)) + //0 + S.aiPDA.silent = !S.aiPDA.silent + to_chat(usr, "PDA ringer toggled [(S.aiPDA.silent ? "Off" : "On")]!") + else + to_chat(usr, "You do not have a PDA. You should make an issue report about this.") + /mob/living/silicon/proc/cmd_send_pdamesg(mob/user) var/list/plist = list() var/list/namecounts = list() @@ -959,30 +986,6 @@ GLOBAL_LIST_EMPTY(PDAs) aiPDA.create_message(src, selected) - -/mob/living/silicon/verb/cmd_toggle_pda_receiver() - set category = "AI Commands" - set name = "PDA - Toggle Sender/Receiver" - if(usr.stat == DEAD) - return //won't work if dead - if(!isnull(aiPDA)) - aiPDA.toff = !aiPDA.toff - to_chat(usr, "PDA sender/receiver toggled [(aiPDA.toff ? "Off" : "On")]!") - else - to_chat(usr, "You do not have a PDA! You should make an issue report about this.") - -/mob/living/silicon/verb/cmd_toggle_pda_silent() - set category = "AI Commands" - set name = "PDA - Toggle Ringer" - if(usr.stat == DEAD) - return //won't work if dead - if(!isnull(aiPDA)) - //0 - aiPDA.silent = !aiPDA.silent - to_chat(usr, "PDA ringer toggled [(aiPDA.silent ? "Off" : "On")]!") - else - to_chat(usr, "You do not have a PDA! You should make an issue report about this.") - /mob/living/silicon/proc/cmd_show_message_log(mob/user) if(incapacitated()) return @@ -992,7 +995,6 @@ GLOBAL_LIST_EMPTY(PDAs) else to_chat(user, "You do not have a PDA! You should make an issue report about this.") - // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP /obj/item/pda/emp_act(severity) . = ..() diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 93ca8884fe1..d8b2c6953bd 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1131,7 +1131,7 @@ name = "box of materials" illustration = "implant" -/obj/item/storage/box/material/PopulateContents() +/obj/item/storage/box/material/PopulateContents() //less uranium because radioactive var/static/items_inside = list( /obj/item/stack/sheet/metal/fifty=1,\ /obj/item/stack/sheet/glass/fifty=1,\ @@ -1144,8 +1144,8 @@ /obj/item/stack/sheet/mineral/titanium=50,\ /obj/item/stack/sheet/mineral/gold=50,\ /obj/item/stack/sheet/mineral/silver=50,\ - /obj/item/stack/sheet/mineral/uranium=50,\ /obj/item/stack/sheet/mineral/plasma=50,\ + /obj/item/stack/sheet/mineral/uranium=20,\ /obj/item/stack/sheet/mineral/diamond=50,\ /obj/item/stack/sheet/bluespace_crystal=50,\ /obj/item/stack/sheet/mineral/bananium=50,\ @@ -1162,6 +1162,7 @@ /obj/item/storage/box/debugtools/PopulateContents() var/static/items_inside = list( /obj/item/flashlight/emp/debug=1,\ + /obj/item/geiger_counter=1,\ /obj/item/pipe_dispenser=1,\ /obj/item/card/emag=1,\ /obj/item/card/id/syndicate/nuke_leader=1,\ diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 98a649ecedc..7b6d451c0f9 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -34,8 +34,7 @@ /obj/item/stack/medical/gauze = 1, /obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, - /obj/item/reagent_containers/hypospray/medipen = 1, - /obj/item/healthanalyzer = 1) + /obj/item/reagent_containers/hypospray/medipen = 1) generate_items_inside(items_inside,src) /obj/item/storage/firstaid/medical @@ -107,11 +106,11 @@ /obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, /obj/item/reagent_containers/hypospray/medipen = 1, - /obj/item/healthanalyzer = 1, /obj/item/surgical_drapes = 1, /obj/item/scalpel = 1, /obj/item/hemostat = 1, - /obj/item/cautery = 1) + /obj/item/cautery = 1, + /obj/item/healthanalyzer = 1) generate_items_inside(items_inside,src) /obj/item/storage/firstaid/ancient @@ -149,8 +148,7 @@ /obj/item/reagent_containers/pill/patch/aiuri = 3, /obj/item/reagent_containers/spray/rhigoxane = 1, /obj/item/reagent_containers/hypospray/medipen/oxandrolone = 1, - /obj/item/reagent_containers/hypospray/medipen = 1, - /obj/item/healthanalyzer = 1) + /obj/item/reagent_containers/hypospray/medipen = 1) generate_items_inside(items_inside,src) /obj/item/storage/firstaid/toxin @@ -175,8 +173,7 @@ /obj/item/storage/pill_bottle/multiver/less = 1, /obj/item/reagent_containers/syringe/syriniver = 3, /obj/item/storage/pill_bottle/potassiodide = 1, - /obj/item/reagent_containers/hypospray/medipen/penacid = 1, - /obj/item/healthanalyzer = 1) + /obj/item/reagent_containers/hypospray/medipen/penacid = 1) generate_items_inside(items_inside,src) /obj/item/storage/firstaid/o2 @@ -201,8 +198,7 @@ /obj/item/reagent_containers/syringe/convermol = 3, /obj/item/reagent_containers/hypospray/medipen/salbutamol = 1, /obj/item/reagent_containers/hypospray/medipen = 1, - /obj/item/storage/pill_bottle/iron = 1, - /obj/item/healthanalyzer = 1) + /obj/item/storage/pill_bottle/iron = 1) generate_items_inside(items_inside,src) /obj/item/storage/firstaid/brute @@ -227,8 +223,7 @@ /obj/item/reagent_containers/pill/patch/libital = 3, /obj/item/stack/medical/gauze = 1, /obj/item/storage/pill_bottle/trophazole = 1, - /obj/item/reagent_containers/hypospray/medipen/salacid = 1, - /obj/item/healthanalyzer = 1) + /obj/item/reagent_containers/hypospray/medipen/salacid = 1) generate_items_inside(items_inside,src) /obj/item/storage/firstaid/advanced diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 3fc45c867fb..5dbf03e7859 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -120,28 +120,38 @@ else return ..() - /obj/item/weldingtool/afterattack(atom/O, mob/user, proximity) . = ..() if(!proximity) return - if(!status && O.is_refillable()) - reagents.trans_to(O, reagents.total_volume, transfered_by = user) - to_chat(user, "You empty [src]'s fuel tank into [O].") - update_icon() + if(isOn()) - use(1) - var/turf/location = get_turf(user) - location.hotspot_expose(700, 50, 1) - if(get_fuel() <= 0) - set_light(0) - - if(isliving(O)) + handle_fuel_and_temps(1, user) + + if(!QDELETED(O) && isliving(O)) // can't ignite something that doesn't exist var/mob/living/L = O if(L.IgniteMob()) message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(L)] on fire with [src] at [AREACOORD(user)]") log_game("[key_name(user)] set [key_name(L)] on fire with [src] at [AREACOORD(user)]") + if(!status && O.is_refillable()) + reagents.trans_to(O, reagents.total_volume, transfered_by = user) + to_chat(user, "You empty [src]'s fuel tank into [O].") + update_icon() + +/obj/item/weldingtool/attack_qdeleted(atom/O, mob/user, proximity) + . = ..() + if(!proximity) + return + + if(isOn()) + handle_fuel_and_temps(1, user) + + if(!QDELETED(O) && isliving(O)) // can't ignite something that doesn't exist + var/mob/living/L = O + if(L.IgniteMob()) + message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(L)] on fire with [src] at [AREACOORD(user)]") + log_game("[key_name(user)] set [key_name(L)] on fire with [src] at [AREACOORD(user)]") /obj/item/weldingtool/attack_self(mob/user) if(src.reagents.has_reagent(/datum/reagent/toxin/plasma)) @@ -153,6 +163,11 @@ update_icon() +// Ah fuck, I can't believe you've done this +/obj/item/weldingtool/proc/handle_fuel_and_temps(used = 0, mob/living/user) + use(used) + var/turf/location = get_turf(user) + location.hotspot_expose(700, 50, 1) // Returns the amount of fuel in the welder /obj/item/weldingtool/proc/get_fuel() @@ -177,6 +192,7 @@ //Turns off the welder if there is no more fuel (does this really need to be its own proc?) /obj/item/weldingtool/proc/check_fuel(mob/user) if(get_fuel() <= 0 && welding) + set_light(0) switched_on(user) update_icon() //mob icon update diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 7eae06b4d5c..25653fa774c 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -108,8 +108,6 @@ /obj/item/soulstone/proc/release_shades(mob/user) for(var/mob/living/simple_animal/shade/A in src) - A.status_flags &= ~GODMODE - A.mobility_flags = MOBILITY_FLAGS_DEFAULT A.forceMove(get_turf(user)) A.cancel_camera() if(purified) @@ -205,10 +203,7 @@ if(contents.len) to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") else - T.forceMove(src) //put shade in stone - T.status_flags |= GODMODE - T.mobility_flags = NONE - T.health = T.maxHealth + T.AddComponent(/datum/component/soulstoned, src) if(purified) icon_state = "purified_soulstone2" if(iscultist(T)) @@ -294,8 +289,7 @@ T.invisibility = INVISIBILITY_ABSTRACT T.dust_animation() var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src) - S.status_flags |= GODMODE //So they won't die inside the stone somehow - S.mobility_flags = NONE //Can't move out of the soul stone + S.AddComponent(/datum/component/soulstoned, src) S.name = "Shade of [T.real_name]" S.real_name = "Shade of [T.real_name]" S.key = shade_controller.key diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 9b49eee1537..67ee93422b3 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -343,7 +343,7 @@ min_requirements = list( /datum/gas/oxygen = 20, /datum/gas/nitrogen = 20, - /datum/gas/nitrous_oxide = 5, + /datum/gas/pluoxium = 5, "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST*60 ) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ca4478a6b4b..feb29d1e51a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -48,6 +48,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/uses_glasses_colour = 0 //character preferences + var/slot_randomized //keeps track of round-to-round randomization of the character slot, prevents overwriting var/real_name //our character's name var/gender = MALE //gender of character (well duh) var/age = 30 //age of character @@ -137,6 +138,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return + if(slot_randomized) + load_character(default_slot) // Reloads the character slot. Prevents random features from overwriting the slot if saved. + slot_randomized = FALSE update_preview_icon() var/list/dat = list("
") @@ -182,8 +186,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(is_banned_from(user.ckey, "Appearance")) dat += "You are banned from using custom names and appearances. You can continue to adjust your characters, but you will be randomised once you join the game.
" dat += "Random Name " - dat += "Always Random Name: [(randomise[RANDOM_NAME]) ? "Yes" : "No"]
" - dat += "Name: " + dat += "Always Random Name: [(randomise[RANDOM_NAME]) ? "Yes" : "No"]" + dat += "When Antagonist: [(randomise[RANDOM_NAME_ANTAG]) ? "Yes" : "No"]" + dat += "
Name: " dat += "[real_name]
" if(!(AGENDER in pref_species.species_traits)) @@ -195,10 +200,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) else dispGender = "Other" dat += "Gender: [dispGender]" - dat += "Always Random Gender: [(randomise[RANDOM_GENDER]) ? "Yes" : "No"]" + if(randomise[RANDOM_BODY] || randomise[RANDOM_BODY_ANTAG]) //doesn't work unless random body + dat += "Always Random Gender: [(randomise[RANDOM_GENDER]) ? "Yes" : "No"]" + dat += "When Antagonist: [(randomise[RANDOM_GENDER_ANTAG]) ? "Yes" : "No"]" dat += "
Age: [age]" - dat += "Always Random Age: [(randomise[RANDOM_AGE]) ? "Yes" : "No"]" + if(randomise[RANDOM_BODY] || randomise[RANDOM_BODY_ANTAG]) //doesn't work unless random body + dat += "Always Random Age: [(randomise[RANDOM_AGE]) ? "Yes" : "No"]" + dat += "When Antagonist: [(randomise[RANDOM_AGE_ANTAG]) ? "Yes" : "No"]" dat += "

Special Names:
" var/old_group @@ -220,7 +229,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Body

" dat += "Random Body " - dat += "Always Random Body: [(randomise[RANDOM_BODY]) ? "Yes" : "No"]
" + dat += "Always Random Body: [(randomise[RANDOM_BODY]) ? "Yes" : "No"]" + dat += "When Antagonist: [(randomise[RANDOM_BODY_ANTAG]) ? "Yes" : "No"]
" dat += "
" @@ -1561,15 +1571,17 @@ GLOBAL_LIST_EMPTY(preferences_datums) ShowChoices(user) return 1 -/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = 1, roundstart_checks = TRUE, character_setup = FALSE) +/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = 1, roundstart_checks = TRUE, character_setup = FALSE, antagonist = FALSE) if(randomise[RANDOM_SPECIES] && !character_setup) random_species() - if(randomise[RANDOM_BODY] && !character_setup) - random_character(gender) + if((randomise[RANDOM_BODY] || randomise[RANDOM_BODY_ANTAG] && antagonist) && !character_setup) + slot_randomized = TRUE + random_character(gender, antagonist) - if(randomise[RANDOM_NAME] && !character_setup) + if((randomise[RANDOM_NAME] || randomise[RANDOM_NAME_ANTAG] && antagonist) && !character_setup) + slot_randomized = TRUE real_name = pref_species.random_name(gender) if(roundstart_checks) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 1c4b6262745..6d55b96c070 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -422,7 +422,7 @@ /datum/outfit/debug //Debug objs plus hardsuit name = "Debug outfit" uniform = /obj/item/clothing/under/misc/patriotsuit - suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite + suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite/debug glasses = /obj/item/clothing/glasses/meson/night ears = /obj/item/radio/headset/headset_cent/commander mask = /obj/item/clothing/mask/gas/welding/up @@ -439,5 +439,6 @@ /obj/item/melee/transforming/energy/axe=1,\ /obj/item/storage/part_replacer/bluespace/tier4=1,\ /obj/item/gun/magic/wand/resurrection/debug=1,\ + /obj/item/gun/magic/wand/death/debug=1,\ /obj/item/debug/human_spawner=1 ) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 4f9eeaf2059..55da8c28b1c 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -364,6 +364,12 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF +/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug/Initialize() + . = ..() + soundloop.volume = 0 + /obj/item/clothing/suit/space/hardsuit/syndi/elite name = "elite syndicate hardsuit" desc = "An elite version of the syndicate hardsuit, with improved armour and fireproofing. It is in travel mode." @@ -376,6 +382,9 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF +/obj/item/clothing/suit/space/hardsuit/syndi/elite/debug + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug + //The Owl Hardsuit /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl name = "owl hardsuit helmet" diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index feacd4713e4..59dd003d356 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -30,7 +30,7 @@ /datum/reagent/consumable/capsaicin = list("icon_state" = "hotsauce", "item_state" = "", "icon_empty" = "", "name" = "hotsauce bottle", "desc" = "You can almost TASTE the stomach ulcers!"), /datum/reagent/consumable/frostoil = list("icon_state" = "coldsauce", "item_state" = "", "icon_empty" = "", "name" = "coldsauce bottle", "desc" = "Leaves the tongue numb from its passage."), /datum/reagent/consumable/cornoil = list("icon_state" = "oliveoil", "item_state" = "", "icon_empty" = "", "name" = "corn oil bottle", "desc" = "A delicious oil used in cooking. Made from corn."), - + /datum/reagent/consumable/bbqsauce = list("icon_state" = "bbqsauce", "item_state" = "", "icon_empty" = "", "name" = "bbq sauce bottle", "desc" = "Hand wipes not included."), ) var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters. var/icon_empty = "" @@ -248,6 +248,7 @@ /datum/reagent/consumable/cornoil = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), /datum/reagent/consumable/sugar = list("condi_sugar", "Sugar", "Tasty spacey sugar!"), /datum/reagent/consumable/astrotame = list("condi_astrotame", "Astrotame", "The sweetness of a thousand sugars but none of the calories."), + /datum/reagent/consumable/bbqsauce = list("condi_bbq", "BBQ sauce", "Hand wipes not included."), ) /obj/item/reagent_containers/food/condiment/pack/update_icon() @@ -306,3 +307,8 @@ name = "astrotame pack" originalname = "astrotame" list_reagents = list(/datum/reagent/consumable/astrotame = 5) + +/obj/item/reagent_containers/food/condiment/pack/bbqsauce + name = "bbq sauce pack" + originalname = "bbq sauce" + list_reagents = list(/datum/reagent/consumable/bbqsauce = 10) \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 814768a2098..2169deed036 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -312,3 +312,13 @@ icon_state = "doubleratkebab" tastes = list("rat meat" = 2, "metal" = 1) bonus_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 2) + +/obj/item/reagent_containers/food/snacks/bbqribs + name = "bbq ribs" + desc = "BBQ ribs, slathered in a healthy coating of BBQ sauce. The least vegan thing to ever exist." + icon_state = "ribs" + w_class = WEIGHT_CLASS_NORMAL + list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 2, /datum/reagent/consumable/bbqsauce = 5) + bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) + tastes = list("meat" = 3, "smokey sauce" = 1) + foodtype = MEAT \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 5e510fd3e0c..1ab9ccfae97 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -184,3 +184,9 @@ results = list(/datum/reagent/consumable/nutriment/peptides = 0.5) required_reagents = list(/datum/reagent/consumable/nutriment/ = 0.5) required_catalysts = list(/datum/reagent/medicine/metafactor = 0.5) + +/datum/chemical_reaction/bbqsauce + name = "BBQ Sauce" + id = /datum/reagent/consumable/bbqsauce + results = list(/datum/reagent/consumable/bbqsauce = 5) + required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/medicine/salglu_solution = 3, /datum/reagent/consumable/blackpepper = 1) \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index 3a458fae75e..8f748201fa8 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -198,3 +198,13 @@ ) result = /obj/item/reagent_containers/food/snacks/salad/ricepork subcategory = CAT_MEAT + +/datum/crafting_recipe/food/ribs + name = "BBQ Ribs" + reqs = list( + /datum/reagent/consumable/bbqsauce = 5, + /obj/item/reagent_containers/food/snacks/meat/steak/plain = 2, + /obj/item/stack/rods = 2 + ) + result = /obj/item/reagent_containers/food/snacks/bbqribs + subcategory = CAT_MEAT \ No newline at end of file diff --git a/code/modules/mining/equipment/goliath_hide.dm b/code/modules/mining/equipment/goliath_hide.dm deleted file mode 100644 index 48f0ca0be51..00000000000 --- a/code/modules/mining/equipment/goliath_hide.dm +++ /dev/null @@ -1,12 +0,0 @@ -/**********************Goliath Hide**********************/ -/obj/item/stack/sheet/animalhide/goliath_hide - name = "goliath hide plates" - desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." - icon = 'icons/obj/mining.dmi' - icon_state = "goliath_hide" - singular_name = "hide plate" - max_amount = 6 - novariants = FALSE - item_flags = NOBLUDGEON - w_class = WEIGHT_CLASS_NORMAL - layer = MOB_LAYER diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index cc5c7d1adf1..764aac497d6 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -122,7 +122,7 @@ new_player_panel() if(href_list["late_join"]) - if(!SSticker || !SSticker.IsRoundInProgress()) + if(!SSticker?.IsRoundInProgress()) to_chat(usr, "The round is either not ready, or has already finished...") return @@ -148,6 +148,9 @@ ViewManifest() if(href_list["SelectedJob"]) + if(!SSticker?.IsRoundInProgress()) + to_chat(usr, "The round is either not ready, or has already finished...") + return if(!GLOB.enter_allowed) to_chat(usr, "There is an administrative lock on entering the game!") @@ -478,7 +481,12 @@ if(frn) client.prefs.random_character() client.prefs.real_name = client.prefs.pref_species.random_name(gender,1) - client.prefs.copy_to(H) + + var/is_antag + if(mind in GLOB.pre_setup_antags) + is_antag = TRUE + + client.prefs.copy_to(H, antagonist = is_antag) H.dna.update_dna_identity() if(mind) if(transfer_after) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 547918295d8..7dd7a596c25 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -1,15 +1,15 @@ //The mob should have a gender you want before running this proc. Will run fine without H -/datum/preferences/proc/random_character(gender_override) +/datum/preferences/proc/random_character(gender_override, antag_override = FALSE) if(randomise[RANDOM_SPECIES]) random_species() else if(randomise[RANDOM_NAME]) real_name = pref_species.random_name(gender,1) - if(gender_override && !(randomise[RANDOM_GENDER])) + if(gender_override && !(randomise[RANDOM_GENDER] || randomise[RANDOM_GENDER_ANTAG] && antag_override)) gender = gender_override else - gender = pick(MALE,FEMALE) - if(randomise[RANDOM_AGE]) + gender = pick(MALE,FEMALE,PLURAL) + if(randomise[RANDOM_AGE] || randomise[RANDOM_AGE_ANTAG] && antag_override) age = rand(AGE_MIN,AGE_MAX) if(randomise[RANDOM_UNDERWEAR]) underwear = random_underwear(gender) @@ -74,4 +74,4 @@ COMPILE_OVERLAYS(mannequin) parent.show_character_previews(new /mutable_appearance(mannequin)) - unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) \ No newline at end of file + unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 57002fc7f90..6abb63ed852 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -140,6 +140,7 @@ stop_pulling() if(HAS_TRAIT(src, TRAIT_PACIFISM)) to_chat(src, "You gently let go of [throwable_mob].") + return var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) if(start_T && end_T) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index c6aa35da193..733161dd2bf 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -344,6 +344,9 @@ /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) if(M.occupant.a_intent == INTENT_HARM) + if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM)) + to_chat(M.occupant, "You don't want to harm other living beings!") + return M.do_attack_animation(src) if(M.damtype == "brute") step_away(src,M,15) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 3d3c8f86269..8d75521f80f 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -88,6 +88,9 @@ /mob/living/mech_melee_attack(obj/mecha/M) if(M.occupant.a_intent == INTENT_HARM) + if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM)) + to_chat(M.occupant, "You don't want to harm other living beings!") + return M.do_attack_animation(src) if(M.damtype == "brute") step_away(src,M,15) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index af71f611f3b..4b05de7dacc 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -45,7 +45,7 @@ var/hack_software = FALSE //Will be able to use hacking actions var/interaction_range = 7 //wireless control range - var/obj/item/pda/aiPDA + var/obj/item/pda/ai/aiPDA /mob/living/silicon/Initialize() . = ..() @@ -68,6 +68,7 @@ QDEL_NULL(radio) QDEL_NULL(aicamera) QDEL_NULL(builtInCamera) + QDEL_NULL(aiPDA) GLOB.silicon_mobs -= src return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index dd97f4f8050..38b87eae38c 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -86,6 +86,16 @@ if(!beehome) . += "This bee is homeless!" +/mob/living/simple_animal/hostile/poison/bees/ListTargets() // Bee processing is expessive, so we override them finding targets here. + if(!search_objects) //In case we want to have purely hostile bees + return ..() + else + . = list() // The following code is only very slightly slower than just returning oview(vision_range, targets_from), but it saves us much more work down the line + var/list/searched_for = oview(vision_range, targets_from) + for(var/obj/A in searched_for) + . += A + for(var/mob/A in searched_for) + . += A /mob/living/simple_animal/hostile/poison/bees/proc/generate_bee_visuals() cut_overlays() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index ca0a96a8dee..2f1a51cd09d 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -127,7 +127,7 @@ //////////////HOSTILE MOB TARGETTING AND AGGRESSION//////////// -/mob/living/simple_animal/hostile/proc/ListTargets()//Step 1, find out what we can see +/mob/living/simple_animal/hostile/proc/ListTargets() //Step 1, find out what we can see if(!search_objects) . = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide @@ -137,11 +137,7 @@ if(can_see(targets_from, HM, vision_range)) . += HM else - . = list() // The following code is only very slightly slower than just returning oview(vision_range, targets_from), but it saves us much more work down the line, particularly when bees are involved - for (var/obj/A in oview(vision_range, targets_from)) - . += A - for (var/mob/A in oview(vision_range, targets_from)) - . += A + . = oview(vision_range, targets_from) /mob/living/simple_animal/hostile/proc/FindTarget(list/possible_targets, HasTargetsList = 0)//Step 2, filter down possible targets to things we actually care about . = list() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index c35aafaec39..e9d2c97f02d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -72,13 +72,6 @@ Difficulty: Hard /datum/action/innate/megafauna_attack/blood_warp) small_sprite_type = /datum/action/small_sprite/megafauna/bubblegum -/mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize() - . = ..() - if(true_spawn) - for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_living_list) - if(B != src) - return INITIALIZE_HINT_QDEL //There can be only one - /datum/action/innate/megafauna_attack/triple_charge name = "Triple Charge" icon_icon = 'icons/mob/actions/actions_items.dmi' diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm index 7019ba8ab98..0561641318f 100644 --- a/code/modules/mob/status_procs.dm +++ b/code/modules/mob/status_procs.dm @@ -32,7 +32,7 @@ */ /mob/proc/adjust_blindness(amount) var/old_eye_blind = eye_blind - eye_blind += amount + eye_blind = max(0, eye_blind + amount) if(!old_eye_blind || !eye_blind && !HAS_TRAIT(src, TRAIT_BLIND)) update_blindness() /** diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 617ef3bd8eb..cd10fe3c46b 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -216,7 +216,7 @@ /obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawn name = "sawn-off improvised shotgun" desc = "A single-shot shotgun. Better not miss." - icon_state = "ishotgun" //_sawn + icon_state = "ishotgun_sawn" item_state = "ishotgun_sawn" w_class = WEIGHT_CLASS_NORMAL sawn_off = TRUE diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index e6a8f7ce578..ef5e6a22ab5 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -179,47 +179,47 @@ /******TOXIN******/ /*Suffix: -iver*/ -/datum/reagent/medicine/C2/fiziver //fiz = phys ok? - name = "Fiziver" - description = "An antitoxin that temporarily weakens the user, making them susceptible to other forms of damage. Weakness and toxin healing scales with length of exposure." - overdose_threshold = 11 - metabolization_rate = 0.25 * REAGENTS_METABOLISM //so that the weakness from a 10u pill will last for around 3 minutes or so - var/weak_mod = 1 +/datum/reagent/medicine/C2/seiver //a bit of a gray joke + name = "Seiver" + description = "A medicine that shifts functionality based on temperature. Colder temperatures incurs radiation removal while hotter temperatures promote antitoxicity. Damages the heart." //CHEM HOLDER TEMPS, NOT AIR TEMPS + var/radbonustemp = (T0C - 100) //being below this number gives you 10% off rads. -/datum/reagent/medicine/C2/fiziver/on_mob_life(mob/living/carbon/human/M) - var/datum/physiology/phis = M.physiology - phis.brute_mod /= weak_mod - phis.burn_mod /= weak_mod - phis.oxy_mod /= weak_mod - phis.stamina_mod /= weak_mod - weak_mod = min(3, (1+(current_cycle*0.04))) - phis.brute_mod *= weak_mod - phis.burn_mod *= weak_mod - phis.oxy_mod *= weak_mod - phis.stamina_mod *= weak_mod - M.adjustToxLoss(-0.3*weak_mod) //Math is fun if you your PR doesn't accidentally get testmerged before you can test the effects of your equations! +/datum/reagent/medicine/C2/seiver/on_mob_metabolize(mob/living/carbon/human/M) + . = ..() + radbonustemp = rand(radbonustemp - 50, radbonustemp + 50) // Basically this means 50K and below will always give the percent heal, and upto 150K could. Calculated once. + +/datum/reagent/medicine/C2/seiver/on_mob_life(mob/living/carbon/human/M) + var/chemtemp = min(M.reagents?.chem_temp, 1000) + chemtemp = chemtemp ? chemtemp : 273 //why do you have null sweaty + var/healypoints = 0 //5 healypoints = 1 heart damage; 5 rads = 1 tox damage healed for the purpose of healypoints + + //you're hot + var/toxcalc = min(round((chemtemp-1000)/175+5,0.1),5) //max 5 tox healing a tick + if(toxcalc > 0) + M.adjustToxLoss(toxcalc*-1) + healypoints += toxcalc + + //and you're cold + var/radcalc = round((T0C-chemtemp)/6,0.1) //max ~45 rad loss unless you've hit below 0K. if so, wow. + if(radcalc > 0) + //no cost percent healing if you are SUPER cold (on top of cost healing) + if(chemtemp < radbonustemp*0.1) //if you're super chilly, it takes off 25% of your current rads + M.radiation = round(M.radiation * 0.75) + else if(chemtemp < radbonustemp)//else if you're under the chill-zone, it takes off 10% of your current rads + M.radiation = round(M.radiation * 0.25) + M.radiation -= radcalc + healypoints += (radcalc/5) + + + //you're yes and... oh no! + healypoints = round(healypoints,0.1) + M.adjustOrganLoss(ORGAN_SLOT_HEART, healypoints/5) ..() return TRUE -/datum/reagent/medicine/C2/fiziver/on_mob_delete(mob/living/carbon/human/M) //I was considering adding an on_mob_add counterpart to this, but it shouldn't ever be needed... right? - var/datum/physiology/phis = M.physiology - phis.brute_mod /= weak_mod //apparently, physiology stats are independent of species stats, so nothing bad should happen if someone changes race or something while this chem is in their system... hopefully - phis.burn_mod /= weak_mod - phis.oxy_mod /= weak_mod - phis.stamina_mod /= weak_mod - return ..() - -/datum/reagent/medicine/C2/fiziver/overdose_process(mob/living/carbon/human/M) - if(prob(50)) - M.adjustBruteLoss(0.2) //the damage from these will, of course, be increased by the brute_mod and burn_mod adjustments - M.adjustFireLoss(0.2) - ..() - return TRUE - - -/datum/reagent/medicine/C2/multiver //amplified with MULTIple medicines +/datum/reagent/medicine/C2/multiver //enhanced with MULTIple medicines name = "Multiver" - description = "An antitoxin that scales with the more unique medicines in the body as well as purges chems (including itself). Causes lung damage." + description = "A chem-purger that becomes more effective the more unique medicines present. Slightly heals toxicity but causes lung damage (mitigatable by unique medicines)." /datum/reagent/medicine/C2/multiver/on_mob_life(mob/living/carbon/human/M) var/medibonus = 0 //it will always have itself which makes it REALLY start @ 1 @@ -227,13 +227,22 @@ var/datum/reagent/the_reagent = r if(istype(the_reagent, /datum/reagent/medicine)) medibonus += 1 - M.adjustToxLoss(-0.5 * medibonus) - M.adjustOrganLoss(ORGAN_SLOT_LUNGS, medibonus) - for(var/datum/reagent/R in M.reagents.reagent_list) - M.reagents.remove_reagent(R.type, medibonus*0.5) + M.adjustToxLoss(-0.2 * medibonus) + M.adjustOrganLoss(ORGAN_SLOT_LUNGS, medibonus ? 2.5/medibonus : 1) + for(var/datum/reagent/the_reagent2 in M.reagents.reagent_list) + if(the_reagent2 == src) + continue + var/amount2purge = medibonus*0.1 + if(istype(the_reagent2,/datum/reagent/toxin)) + amount2purge *= 5 //very good antitox (well just removing them) for roundstart availability + else if(medibonus >= 5 && istype(the_reagent2, /datum/reagent/medicine)) //5 unique meds (4+multiver) will make it not purge medicines + continue + M.reagents.remove_reagent(the_reagent2.type, amount2purge) ..() return TRUE +#define issyrinormusc(A) (istype(A,/datum/reagent/medicine/C2/syriniver) || istype(A,/datum/reagent/medicine/C2/musiver)) //musc is metab of syrin so let's make sure we're not purging either + /datum/reagent/medicine/C2/syriniver //Inject >> SYRINge name = "Syriniver" description = "A potent antidote for intravenous use with a narrow therapeutic index, it is considered an active prodrug of musiver." @@ -260,8 +269,10 @@ /datum/reagent/medicine/C2/syriniver/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.8) M.adjustToxLoss(-1*REM, 0) - for(var/datum/reagent/toxin/R in M.reagents.reagent_list) - M.reagents.remove_reagent(R.type,1) + for(var/datum/reagent/R in M.reagents.reagent_list) + if(issyrinormusc(R)) + continue + M.reagents.remove_reagent(R.type,0.4) ..() . = 1 @@ -285,8 +296,10 @@ /datum/reagent/medicine/C2/musiver/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.1) M.adjustToxLoss(-1*REM, 0) - for(var/datum/reagent/toxin/R in M.reagents.reagent_list) - M.reagents.remove_reagent(R.type,1) + for(var/datum/reagent/R in M.reagents.reagent_list) + if(issyrinormusc(R)) + continue + M.reagents.remove_reagent(R.type,0.2) ..() . = 1 @@ -306,6 +319,7 @@ ..() . = 1 +#undef issyrinormusc /******COMBOS******/ /*Suffix: Combo of healing, prob gonna get wack REAL fast*/ /datum/reagent/medicine/C2/instabitaluri diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 5df92e3f573..d519ce255c5 100755 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -748,4 +748,13 @@ /datum/reagent/consumable/char/overdose_process(mob/living/carbon/M) if(prob(10)) M.say(pick("I hate my wife.", "I just want to grill for God's sake.", "I wish I could just go on my lawnmower and cut the grass.", "Yep, Quake. That was a good game...", "Yeah, my PDA has wi-fi. A wife I hate."), forced = /datum/reagent/consumable/char) - ..() \ No newline at end of file + ..() + + +/datum/reagent/consumable/bbqsauce + name = "BBQ Sauce" + description = "Sweet, Smokey, Savory, and gets everywhere. Perfect for Grilling." + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#78280A" // rgb: 120 40, 10 + taste_mult = 2.5 //sugar's 1.5, capsacin's 1.5, so a good middle ground. + taste_description = "smokey sweetness" diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm index f8a88ee5799..be3f08b6d86 100644 --- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm +++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm @@ -48,10 +48,10 @@ /*****TOX*****/ -/datum/chemical_reaction/fiziver +/datum/chemical_reaction/seiver name = "Fiziver" - id = /datum/reagent/medicine/C2/fiziver - results = list(/datum/reagent/medicine/C2/fiziver = 3) + id = /datum/reagent/medicine/C2/seiver + results = list(/datum/reagent/medicine/C2/seiver = 3) required_reagents = list(/datum/reagent/nitrogen = 1, /datum/reagent/potassium = 1, /datum/reagent/aluminium = 1) /datum/chemical_reaction/multiver diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 763261d2d02..d2f03cb8ea1 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -57,6 +57,11 @@ desc = "A small bottle of multiver, which removes toxins and other chemicals from the bloodstream but causes shortness of breath. All effects scale with the amount of reagents in the patient." list_reagents = list(/datum/reagent/medicine/C2/multiver = 30) +/obj/item/reagent_containers/glass/bottle/syriniver + name = "syriniver bottle" + desc = "A small bottle of syriniver." + list_reagents = list(/datum/reagent/medicine/C2/syriniver = 30) + /obj/item/reagent_containers/glass/bottle/mutagen name = "unstable mutagen bottle" desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact." diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 58731c49994..6deece3441a 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -488,15 +488,6 @@ category = list("initial", "Medical", "Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SERVICE -/datum/design/healthanalyzer - name = "Health Analyzer" - id = "healthanalyzer" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 50) - build_path = /obj/item/healthanalyzer - category = list("initial", "Medical", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - /datum/design/pillbottle name = "Pill Bottle" id = "pillbottle" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 1b45d34d47a..ad41674f246 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -2,6 +2,15 @@ ////////////Medical Tools//////////////// ///////////////////////////////////////// +/datum/design/healthanalyzer + name = "Health Analyzer" + id = "healthanalyzer" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 500, /datum/material/glass = 50) + build_path = /obj/item/healthanalyzer + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/mmi name = "Man-Machine Interface" desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." diff --git a/code/modules/spells/spell_types/personality_commune.dm b/code/modules/spells/spell_types/personality_commune.dm new file mode 100644 index 00000000000..d7005b65107 --- /dev/null +++ b/code/modules/spells/spell_types/personality_commune.dm @@ -0,0 +1,32 @@ +/obj/effect/proc_holder/spell/targeted/personality_commune + name = "Personality Commune" + desc = "Sends thoughts to your alternate consciousness." + charge_max = 0 + clothes_req = FALSE + range = -1 + include_user = TRUE + action_icon_state = "telepathy" + action_background_icon_state = "bg_spell" + var/datum/brain_trauma/severe/split_personality/trauma + var/flufftext = "You hear an echoing voice in the back of your head..." + +/obj/effect/proc_holder/spell/targeted/personality_commune/New(datum/brain_trauma/severe/split_personality/T) + . = ..() + trauma = T + +// Pillaged and adapted from telepathy code +/obj/effect/proc_holder/spell/targeted/personality_commune/cast(list/targets, mob/user) + if(!istype(trauma)) + to_chat(user, "Something is wrong; Either due a bug or admemes, you are trying to cast this spell without a split personality!") + return + var/msg = stripped_input(usr, "What would you like to tell your other self?", null , "") + if(!msg) + charge_counter = charge_max + return + to_chat(user, "You concentrate and send thoughts to your other self: [msg]") + to_chat(trauma.owner, "[flufftext] [msg]") + log_directed_talk(user, trauma.owner, msg, LOG_SAY ,"[name]") + for(var/ded in GLOB.dead_mob_list) + if(!isobserver(ded)) + continue + to_chat(ded, "[FOLLOW_LINK(ded, user)] [user] [name]: \"[msg]\" to[trauma]") diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index 63e71bdd5d7..29dd3193fca 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -259,7 +259,9 @@ /obj/effect/proc_holder/spell/targeted/genetic/blind mutations = list(BLINDMUT) duration = 300 + charge_max = 400 // needs to be higher than the duration or it'll be permanent sound = 'sound/magic/blind.ogg' + /obj/effect/proc_holder/spell/aoe_turf/repulse name = "Repulse" desc = "This spell throws everything around the user away." diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 042290f9997..e1401e01222 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -271,6 +271,7 @@ icon_state = "scalpel_a" /obj/item/scalpel/advanced/examine() + . = ..() . += " It's set to [tool_behaviour == TOOL_SCALPEL ? "scalpel" : "saw"] mode." /obj/item/retractor/advanced @@ -292,7 +293,8 @@ icon_state = "retractor_a" /obj/item/retractor/advanced/examine() - . += " It resembles a retractor[tool_behaviour == TOOL_RETRACTOR ? "retractor" : "hemostat"]." + . = ..() + . += " It resembles a [tool_behaviour == TOOL_RETRACTOR ? "retractor" : "hemostat"]." /obj/item/surgicaldrill/advanced name = "searing tool" @@ -319,4 +321,5 @@ icon_state = "surgicaldrill_a" /obj/item/surgicaldrill/advanced/examine() + . = ..() . += " It's set to [tool_behaviour == TOOL_DRILL ? "drilling" : "mending"] mode." diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index 56b5aaf83c2..8b28899bc98 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -13,7 +13,8 @@ /obj/item/reagent_containers/pill/patch/aiuri = 5, /obj/item/reagent_containers/syringe/convermol = 2, /obj/item/reagent_containers/pill/insulin = 5, - /obj/item/reagent_containers/glass/bottle/multiver = 4, + /obj/item/reagent_containers/glass/bottle/multiver = 2, + /obj/item/reagent_containers/glass/bottle/syriniver = 2, /obj/item/reagent_containers/glass/bottle/epinephrine = 3, /obj/item/reagent_containers/glass/bottle/morphine = 4, /obj/item/reagent_containers/glass/bottle/potass_iodide = 1, diff --git a/html/changelog.html b/html/changelog.html index 722ba7db5c3..1e58bd1af17 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -51,7 +51,125 @@ -->
-

09 October 2019

+

13 October 2019

+

4dplanner updated:

+
    +
  • shades now heal properly upon re-entering a soulstone (previously they would temporarily heal, then take back all the damage next time they were hit)
  • +
  • shades summoned from a soulstone are no longer invincible
  • +
+

ArcaneMusic updated:

+
    +
  • Added a new condiment, BBQ sauce.
  • +
  • Added a new recipe to make BBQ Ribs.
  • +
+

Arkatos updated:

+
    +
  • Only silicons with a valid PDA will now get PDA-related verbs.
  • +
  • You will now only receive positive effects of hearing good music if you can actually hear the music.
  • +
+

Bald People updated:

+
    +
  • Witch hunter outfits are slightly different. You may notice the difference. Maybe.
  • +
  • The centcom armor and old captain armor sprites no longer look like they were poorly recolored. Admins can finally have more options for Centcom now!
  • +
+

Couls updated:

+
    +
  • blindness spell now only blinds you temporarily
  • +
  • drinking carrot juice no longer permanently blinds you
  • +
+

Fox McCloud updated:

+
    +
  • Fixes AI swarmers just sitting in their base doing nothing
  • +
  • Fixes being able to mech-punch other mobs, as a pacifist
  • +
  • Fixes being able to hurt people, as a pacifist, by throwing them into a wall or other mob
  • +
+

Ghommie updated:

+
    +
  • non-alphanumeric graffiti decals will no longer display as "letter".
  • +
+

MCterra10 updated:

+
    +
  • Welders now consume fuel when they destroy an object
  • +
  • Split personalities can now communicate with an action button
  • +
  • The nitryl gas reaction now uses pluoxium as a catalyst
  • +
+

Skoglol updated:

+
    +
  • Random name/body/age/gender when roundstart antagonist preference added.
  • +
  • Random gender will now have a chance of picking "Other".
  • +
  • KS13 air tank injector now on and maxed.
  • +
+

Toxicby updated:

+
    +
  • Seiver, a chem favoring radpurging (cold temps) or antitoxin (hot temps) based on temperature (NOTE: NOT ATMOS TEMP)
  • +
  • Fiziver is now removed in favore of Seiver. Seiver uses old Fiziver recipe.
  • +
  • Multiver is now geared towards chem-purging, and the unique-med mechanic is more rewarding than just amplifying the effects. Lowered toxin damage.
  • +
  • Syriniver is now geared towards tox-healing. Lowered chem-purging and make it nondiscriminatory barring itself. Musiver has even lower chem-purging and is completely nondiscriminatory.
  • +
  • 2 multiver bottles in the Medivend were replaced with syriniver since they now have more distinct functionalities.
  • +
+

bobbahbrown updated:

+
    +
  • The maintenance doors to the brig on DonutStation can now be accessed by the security door remote.
  • +
+

carlarctg updated:

+
    +
  • atmos and captain gas masks no longer have floating pixel
  • +
  • sawn off shotgun has inhand
  • +
+

nemvar updated:

+
    +
  • Removed health analyzers from medkits. Removed the ability to print health analyzers from autolathes.
  • +
+

willox updated:

+
    +
  • removed duplicate goliath_hide definition
  • +
+ +

12 October 2019

+

Anonmare updated:

+
    +
  • fixes a missing space, allowing Tend wounds (Burn, Exp) to actually unlock properly
  • +
+

Fikou updated:

+
    +
  • advanced retractor/hemostat description now doesnt mention a hemostat and another hemostat or a retractor
  • +
+

SynnGraffkin updated:

+
    +
  • CentCom has deemed use of the holodeck's emergency medical module unsafe, as it allows for procedures to be carried out by untrained crew members. If emergency medical procedures are needed, do not tamper with the machines and have your station's AI or cyborgs unlock the safeties.
  • +
+

YPOQ updated:

+
    +
  • Bubblegum will spawn at the proper rate again
  • +
+

YoYoBatty updated:

+
    +
  • Frozen water vapour should freeze turfs and contents properly
  • +
+

imsxz updated:

+
    +
  • turrets are now able to drop guns on deconstruction properly
  • +
+

kingofkosmos updated:

+
    +
  • The health analyzer's body part damage list is now a bit easier to read.
  • +
+

loserXD updated:

+
    +
  • being shoved now shows you the correct shover
  • +
+

nemvar updated:

+
    +
  • You can now crush soda cans on other people.
  • +
+

willox updated:

+
    +
  • frozen food crafting category is now visible
  • +
  • space freezies, sundaes, honkdaes, and icecream sandwiches moved to frozen food crafting category
  • +
  • chili and ice chili bounties can now occur
  • +
  • removed many duplicate member variables
  • +
+

10 October 2019

ArcaneMusic updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index d2d408a1e12..83a28898a26 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -27481,3 +27481,91 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. levels. - tweak: Players can now multitool the kiosk to change the cost to get scanned, up to ludicrous levels. +2019-10-12: + Anonmare: + - bugfix: fixes a missing space, allowing Tend wounds (Burn, Exp) to actually unlock + properly + Fikou: + - spellcheck: advanced retractor/hemostat description now doesnt mention a hemostat + and another hemostat or a retractor + SynnGraffkin: + - balance: CentCom has deemed use of the holodeck's emergency medical module unsafe, + as it allows for procedures to be carried out by untrained crew members. If + emergency medical procedures are needed, do not tamper with the machines and + have your station's AI or cyborgs unlock the safeties. + YPOQ: + - bugfix: Bubblegum will spawn at the proper rate again + YoYoBatty: + - bugfix: Frozen water vapour should freeze turfs and contents properly + imsxz: + - bugfix: turrets are now able to drop guns on deconstruction properly + kingofkosmos: + - spellcheck: The health analyzer's body part damage list is now a bit easier to + read. + loserXD: + - bugfix: being shoved now shows you the correct shover + nemvar: + - rscadd: You can now crush soda cans on other people. + willox: + - bugfix: frozen food crafting category is now visible + - tweak: space freezies, sundaes, honkdaes, and icecream sandwiches moved to frozen + food crafting category + - bugfix: chili and ice chili bounties can now occur + - code_imp: removed many duplicate member variables +2019-10-13: + 4dplanner: + - bugfix: shades now heal properly upon re-entering a soulstone (previously they + would temporarily heal, then take back all the damage next time they were hit) + - bugfix: shades summoned from a soulstone are no longer invincible + ArcaneMusic: + - rscadd: Added a new condiment, BBQ sauce. + - rscadd: Added a new recipe to make BBQ Ribs. + Arkatos: + - bugfix: Only silicons with a valid PDA will now get PDA-related verbs. + - bugfix: You will now only receive positive effects of hearing good music if you + can actually hear the music. + Bald People: + - tweak: Witch hunter outfits are slightly different. You may notice the difference. + Maybe. + - bugfix: The centcom armor and old captain armor sprites no longer look like they + were poorly recolored. Admins can finally have more options for Centcom now! + Couls: + - bugfix: blindness spell now only blinds you temporarily + - bugfix: drinking carrot juice no longer permanently blinds you + Fox McCloud: + - bugfix: Fixes AI swarmers just sitting in their base doing nothing + - bugfix: Fixes being able to mech-punch other mobs, as a pacifist + - bugfix: Fixes being able to hurt people, as a pacifist, by throwing them into + a wall or other mob + Ghommie: + - bugfix: non-alphanumeric graffiti decals will no longer display as "letter". + MCterra10: + - bugfix: Welders now consume fuel when they destroy an object + - rscadd: Split personalities can now communicate with an action button + - tweak: The nitryl gas reaction now uses pluoxium as a catalyst + Skoglol: + - rscadd: Random name/body/age/gender when roundstart antagonist preference added. + - rscadd: Random gender will now have a chance of picking "Other". + - bugfix: KS13 air tank injector now on and maxed. + Toxicby: + - rscadd: 'Seiver, a chem favoring radpurging (cold temps) or antitoxin (hot temps) + based on temperature (NOTE: NOT ATMOS TEMP)' + - rscdel: Fiziver is now removed in favore of Seiver. Seiver uses old Fiziver recipe. + - balance: Multiver is now geared towards chem-purging, and the unique-med mechanic + is more rewarding than just amplifying the effects. Lowered toxin damage. + - balance: Syriniver is now geared towards tox-healing. Lowered chem-purging and + make it nondiscriminatory barring itself. Musiver has even lower chem-purging + and is completely nondiscriminatory. + - balance: 2 multiver bottles in the Medivend were replaced with syriniver since + they now have more distinct functionalities. + bobbahbrown: + - bugfix: The maintenance doors to the brig on DonutStation can now be accessed + by the security door remote. + carlarctg: + - bugfix: atmos and captain gas masks no longer have floating pixel + - bugfix: sawn off shotgun has inhand + nemvar: + - balance: Removed health analyzers from medkits. Removed the ability to print health + analyzers from autolathes. + willox: + - code_imp: removed duplicate goliath_hide definition diff --git a/html/changelogs/AutoChangeLog-pr-46793.yml b/html/changelogs/AutoChangeLog-pr-46793.yml deleted file mode 100644 index f3df6b5d336..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46793.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "kingofkosmos" -delete-after: True -changes: - - spellcheck: "The health analyzer's body part damage list is now a bit easier to read." diff --git a/html/changelogs/AutoChangeLog-pr-46908.yml b/html/changelogs/AutoChangeLog-pr-46908.yml deleted file mode 100644 index bba45c1dece..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46908.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "YoYoBatty" -delete-after: True -changes: - - bugfix: "Frozen water vapour should freeze turfs and contents properly" diff --git a/html/changelogs/AutoChangeLog-pr-46942.yml b/html/changelogs/AutoChangeLog-pr-46942.yml deleted file mode 100644 index f3db6d6f01a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46942.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "nemvar" -delete-after: True -changes: - - rscadd: "You can now crush soda cans on other people." diff --git a/html/changelogs/AutoChangeLog-pr-46950.yml b/html/changelogs/AutoChangeLog-pr-46950.yml deleted file mode 100644 index cfd73a01230..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46950.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "YPOQ" -delete-after: True -changes: - - bugfix: "Bubblegum will spawn at the proper rate again" diff --git a/html/changelogs/AutoChangeLog-pr-46970.yml b/html/changelogs/AutoChangeLog-pr-46970.yml deleted file mode 100644 index adee436ce3a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46970.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "willox" -delete-after: True -changes: - - bugfix: "frozen food crafting category is now visible" - - tweak: "space freezies, sundaes, honkdaes, and icecream sandwiches moved to frozen food crafting category" diff --git a/html/changelogs/AutoChangeLog-pr-46972.yml b/html/changelogs/AutoChangeLog-pr-46972.yml deleted file mode 100644 index a5b2b6fd940..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46972.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "willox" -delete-after: True -changes: - - bugfix: "chili and ice chili bounties can now occur" diff --git a/html/changelogs/AutoChangeLog-pr-46976.yml b/html/changelogs/AutoChangeLog-pr-46976.yml deleted file mode 100644 index 5d1f12a6ec4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46976.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Anonmare" -delete-after: True -changes: - - bugfix: "fixes a missing space, allowing Tend wounds (Burn, Exp) to actually unlock properly" diff --git a/html/changelogs/AutoChangeLog-pr-46978.yml b/html/changelogs/AutoChangeLog-pr-46978.yml deleted file mode 100644 index d22909e5b9d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46978.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "willox" -delete-after: True -changes: - - code_imp: "removed many duplicate member variables" diff --git a/html/changelogs/AutoChangeLog-pr-46985.yml b/html/changelogs/AutoChangeLog-pr-46985.yml deleted file mode 100644 index 06b831e55f9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46985.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SynnGraffkin" -delete-after: True -changes: - - balance: "CentCom has deemed use of the holodeck's emergency medical module unsafe, as it allows for procedures to be carried out by untrained crew members. If emergency medical procedures are needed, do not tamper with the machines and have your station's AI or cyborgs unlock the safeties." diff --git a/html/changelogs/AutoChangeLog-pr-46995.yml b/html/changelogs/AutoChangeLog-pr-46995.yml deleted file mode 100644 index 0317a3901d9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46995.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "imsxz" -delete-after: True -changes: - - bugfix: "turrets are now able to drop guns on deconstruction properly" diff --git a/html/changelogs/AutoChangeLog-pr-46997.yml b/html/changelogs/AutoChangeLog-pr-46997.yml deleted file mode 100644 index 6f595cd6382..00000000000 --- a/html/changelogs/AutoChangeLog-pr-46997.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "loserXD" -delete-after: True -changes: - - bugfix: "being shoved now shows you the correct shover" diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index bb483f5295d..f9882a55b17 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index d8193711314..a8e2e739f1f 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index d3d95d72879..3afd71cf80f 100644 Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 8f2b0fb0ab5..895692feab2 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 4a9977ec8ba..d7d500eafcd 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index ad3073a1401..b6e546266e5 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 47325b90169..325af66a6ad 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 1a567b5791b..9394a28857b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -398,6 +398,7 @@ #include "code\datums\components\shrink.dm" #include "code\datums\components\sizzle.dm" #include "code\datums\components\slippery.dm" +#include "code\datums\components\soulstoned.dm" #include "code\datums\components\spawner.dm" #include "code\datums\components\spill.dm" #include "code\datums\components\spooky.dm" @@ -1998,7 +1999,6 @@ #include "code\modules\mining\satchel_ore_boxdm.dm" #include "code\modules\mining\shelters.dm" #include "code\modules\mining\equipment\explorer_gear.dm" -#include "code\modules\mining\equipment\goliath_hide.dm" #include "code\modules\mining\equipment\kinetic_crusher.dm" #include "code\modules\mining\equipment\lazarus_injector.dm" #include "code\modules\mining\equipment\marker_beacons.dm" @@ -2793,6 +2793,7 @@ #include "code\modules\spells\spell_types\lightning.dm" #include "code\modules\spells\spell_types\mime.dm" #include "code\modules\spells\spell_types\mind_transfer.dm" +#include "code\modules\spells\spell_types\personality_commune.dm" #include "code\modules\spells\spell_types\projectile.dm" #include "code\modules\spells\spell_types\rightandwrong.dm" #include "code\modules\spells\spell_types\rod_form.dm"