Merge branch 'master' of https://github.com/tgstation/tgstation into misc_span_fixes1

# Conflicts:
#	code/game/objects/items/devices/PDA/PDA.dm
#	code/modules/mob/dead/new_player/new_player.dm
This commit is contained in:
kingofkosmos
2019-10-13 15:21:17 +03:00
78 changed files with 634 additions and 246 deletions
@@ -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{
+4 -2
View File
@@ -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" = (
@@ -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,
+2
View File
@@ -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)
+5 -1
View File
@@ -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"
#define RANDOM_EYE_COLOR "random_eye_color"
+1
View File
@@ -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
+5
View File
@@ -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)
@@ -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
+1 -1
View File
@@ -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)
+31
View File
@@ -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
+5 -4
View File
@@ -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"
+7 -1
View File
@@ -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 ..()
+4 -2
View File
@@ -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
@@ -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
+6 -4
View File
@@ -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, "<span class='bold large_brass'>You are a servant of Ratvar, the Clockwork Justiciar!</span>")
to_chat(M, "<span class='brass'>You have approximately <b>[ark_time]</b> minutes until the Ark activates.</span>")
to_chat(M, "<span class='brass'>Unlock <b>Script</b> scripture by converting a new servant.</span>")
to_chat(M, "<span class='brass'><b>Application</b> scripture will be unlocked halfway until the Ark's activation.</span>")
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))
+3
View File
@@ -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.
+6 -3
View File
@@ -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)
@@ -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)
@@ -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
@@ -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()
+4
View File
@@ -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
..()
+3 -2
View File
@@ -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"
+27 -25
View File
@@ -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, "<span class='notice'>PDA sender/receiver toggled [(S.aiPDA.toff ? "Off" : "On")]!</span>")
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, "<span class='notice'>PDA ringer toggled [(S.aiPDA.silent ? "Off" : "On")]!</span>")
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, "<span class='notice'>PDA sender/receiver toggled [(aiPDA.toff ? "Off" : "On")]!</span>")
else
to_chat(usr, "<span class='warning'>You do not have a PDA! You should make an issue report about this.</span>")
/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, "<span class='notice'>PDA ringer toggled [(aiPDA.silent ? "Off" : "On")]!</span>")
else
to_chat(usr, "<span class='warning'>You do not have a PDA! You should make an issue report about this.</span>")
/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, "<span class='warning'>You do not have a PDA! You should make an issue report about this.</span>")
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
/obj/item/pda/emp_act(severity)
. = ..()
+3 -2
View File
@@ -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,\
+7 -12
View File
@@ -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
+28 -12
View File
@@ -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, "<span class='notice'>You empty [src]'s fuel tank into [O].</span>")
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, "<span class='notice'>You empty [src]'s fuel tank into [O].</span>")
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
@@ -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, "<span class='userdanger'>Capture failed!</span>: 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
@@ -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
)
+21 -9
View File
@@ -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("<center>")
@@ -182,8 +186,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(is_banned_from(user.ckey, "Appearance"))
dat += "<b>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.</b><br>"
dat += "<a href='?_src_=prefs;preference=name;task=random'>Random Name</A> "
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_NAME]'>Always Random Name: [(randomise[RANDOM_NAME]) ? "Yes" : "No"]</a><BR>"
dat += "<b>Name:</b> "
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_NAME]'>Always Random Name: [(randomise[RANDOM_NAME]) ? "Yes" : "No"]</a>"
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_NAME_ANTAG]'>When Antagonist: [(randomise[RANDOM_NAME_ANTAG]) ? "Yes" : "No"]</a>"
dat += "<br><b>Name:</b> "
dat += "<a href='?_src_=prefs;preference=name;task=input'>[real_name]</a><BR>"
if(!(AGENDER in pref_species.species_traits))
@@ -195,10 +200,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else
dispGender = "Other"
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[dispGender]</a>"
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_GENDER]'>Always Random Gender: [(randomise[RANDOM_GENDER]) ? "Yes" : "No"]</A>"
if(randomise[RANDOM_BODY] || randomise[RANDOM_BODY_ANTAG]) //doesn't work unless random body
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_GENDER]'>Always Random Gender: [(randomise[RANDOM_GENDER]) ? "Yes" : "No"]</A>"
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_GENDER_ANTAG]'>When Antagonist: [(randomise[RANDOM_GENDER_ANTAG]) ? "Yes" : "No"]</A>"
dat += "<br><b>Age:</b> <a href='?_src_=prefs;preference=age;task=input'>[age]</a>"
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_AGE]'>Always Random Age: [(randomise[RANDOM_AGE]) ? "Yes" : "No"]</A>"
if(randomise[RANDOM_BODY] || randomise[RANDOM_BODY_ANTAG]) //doesn't work unless random body
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_AGE]'>Always Random Age: [(randomise[RANDOM_AGE]) ? "Yes" : "No"]</A>"
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_AGE_ANTAG]'>When Antagonist: [(randomise[RANDOM_AGE_ANTAG]) ? "Yes" : "No"]</A>"
dat += "<br><br><b>Special Names:</b><BR>"
var/old_group
@@ -220,7 +229,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<h2>Body</h2>"
dat += "<a href='?_src_=prefs;preference=all;task=random'>Random Body</A> "
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_BODY]'>Always Random Body: [(randomise[RANDOM_BODY]) ? "Yes" : "No"]</A><br>"
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_BODY]'>Always Random Body: [(randomise[RANDOM_BODY]) ? "Yes" : "No"]</A>"
dat += "<a href='?_src_=prefs;preference=toggle_random;random_type=[RANDOM_BODY_ANTAG]'>When Antagonist: [(randomise[RANDOM_BODY_ANTAG]) ? "Yes" : "No"]</A><br>"
dat += "<table width='100%'><tr><td width='24%' valign='top'>"
@@ -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)
+2 -1
View File
@@ -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
)
@@ -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"
@@ -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)
@@ -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
@@ -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)
@@ -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
@@ -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
+10 -2
View File
@@ -122,7 +122,7 @@
new_player_panel()
if(href_list["late_join"])
if(!SSticker || !SSticker.IsRoundInProgress())
if(!SSticker?.IsRoundInProgress())
to_chat(usr, "<span class='boldwarning'>The round is either not ready, or has already finished...</span>")
return
@@ -148,6 +148,9 @@
ViewManifest()
if(href_list["SelectedJob"])
if(!SSticker?.IsRoundInProgress())
to_chat(usr, "<span class='danger'>The round is either not ready, or has already finished...</span>")
return
if(!GLOB.enter_allowed)
to_chat(usr, "<span class='notice'>There is an administrative lock on entering the game!</span>")
@@ -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)
@@ -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)
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
+1
View File
@@ -140,6 +140,7 @@
stop_pulling()
if(HAS_TRAIT(src, TRAIT_PACIFISM))
to_chat(src, "<span class='notice'>You gently let go of [throwable_mob].</span>")
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)
@@ -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, "<span class='warning'>You don't want to harm other living beings!</span>")
return
M.do_attack_animation(src)
if(M.damtype == "brute")
step_away(src,M,15)
@@ -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, "<span class='warning'>You don't want to harm other living beings!</span>")
return
M.do_attack_animation(src)
if(M.damtype == "brute")
step_away(src,M,15)
+2 -1
View File
@@ -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 ..()
@@ -86,6 +86,16 @@
if(!beehome)
. += "<span class='warning'>This bee is homeless!</span>"
/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()
@@ -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()
@@ -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'
+1 -1
View File
@@ -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()
/**
@@ -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
@@ -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
@@ -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)
..()
..()
/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"
@@ -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
@@ -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."
@@ -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"
@@ -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."
@@ -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, "<span class='warning'>Something is wrong; Either due a bug or admemes, you are trying to cast this spell without a split personality!</span>")
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, "<span class='boldnotice'>You concentrate and send thoughts to your other self:</span> <span class='notice'>[msg]</span>")
to_chat(trauma.owner, "<span class='boldnotice'>[flufftext]</span> <span class='notice'>[msg]</span>")
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)] <span class='boldnotice'>[user] [name]:</span> <span class='notice'>\"[msg]\" to</span><span class='name'>[trauma]</span>")
@@ -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."
+4 -1
View File
@@ -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."
+2 -1
View File
@@ -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,
+119 -1
View File
@@ -51,7 +51,125 @@
-->
<div class="commit sansserif">
<h2 class="date">09 October 2019</h2>
<h2 class="date">13 October 2019</h2>
<h3 class="author">4dplanner updated:</h3>
<ul class="changes bgimages16">
<li class="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)</li>
<li class="bugfix">shades summoned from a soulstone are no longer invincible</li>
</ul>
<h3 class="author">ArcaneMusic updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Added a new condiment, BBQ sauce.</li>
<li class="rscadd">Added a new recipe to make BBQ Ribs.</li>
</ul>
<h3 class="author">Arkatos updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Only silicons with a valid PDA will now get PDA-related verbs.</li>
<li class="bugfix">You will now only receive positive effects of hearing good music if you can actually hear the music.</li>
</ul>
<h3 class="author">Bald People updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Witch hunter outfits are slightly different. You may notice the difference. Maybe.</li>
<li class="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!</li>
</ul>
<h3 class="author">Couls updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">blindness spell now only blinds you temporarily</li>
<li class="bugfix">drinking carrot juice no longer permanently blinds you</li>
</ul>
<h3 class="author">Fox McCloud updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixes AI swarmers just sitting in their base doing nothing</li>
<li class="bugfix">Fixes being able to mech-punch other mobs, as a pacifist</li>
<li class="bugfix">Fixes being able to hurt people, as a pacifist, by throwing them into a wall or other mob</li>
</ul>
<h3 class="author">Ghommie updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">non-alphanumeric graffiti decals will no longer display as "letter".</li>
</ul>
<h3 class="author">MCterra10 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Welders now consume fuel when they destroy an object</li>
<li class="rscadd">Split personalities can now communicate with an action button</li>
<li class="tweak">The nitryl gas reaction now uses pluoxium as a catalyst</li>
</ul>
<h3 class="author">Skoglol updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Random name/body/age/gender when roundstart antagonist preference added.</li>
<li class="rscadd">Random gender will now have a chance of picking "Other".</li>
<li class="bugfix">KS13 air tank injector now on and maxed.</li>
</ul>
<h3 class="author">Toxicby updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Seiver, a chem favoring radpurging (cold temps) or antitoxin (hot temps) based on temperature (NOTE: NOT ATMOS TEMP)</li>
<li class="rscdel">Fiziver is now removed in favore of Seiver. Seiver uses old Fiziver recipe.</li>
<li class="balance">Multiver is now geared towards chem-purging, and the unique-med mechanic is more rewarding than just amplifying the effects. Lowered toxin damage.</li>
<li class="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.</li>
<li class="balance">2 multiver bottles in the Medivend were replaced with syriniver since they now have more distinct functionalities.</li>
</ul>
<h3 class="author">bobbahbrown updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">The maintenance doors to the brig on DonutStation can now be accessed by the security door remote.</li>
</ul>
<h3 class="author">carlarctg updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">atmos and captain gas masks no longer have floating pixel</li>
<li class="bugfix">sawn off shotgun has inhand</li>
</ul>
<h3 class="author">nemvar updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Removed health analyzers from medkits. Removed the ability to print health analyzers from autolathes.</li>
</ul>
<h3 class="author">willox updated:</h3>
<ul class="changes bgimages16">
<li class="code_imp">removed duplicate goliath_hide definition</li>
</ul>
<h2 class="date">12 October 2019</h2>
<h3 class="author">Anonmare updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">fixes a missing space, allowing Tend wounds (Burn, Exp) to actually unlock properly</li>
</ul>
<h3 class="author">Fikou updated:</h3>
<ul class="changes bgimages16">
<li class="spellcheck">advanced retractor/hemostat description now doesnt mention a hemostat and another hemostat or a retractor</li>
</ul>
<h3 class="author">SynnGraffkin updated:</h3>
<ul class="changes bgimages16">
<li class="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.</li>
</ul>
<h3 class="author">YPOQ updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Bubblegum will spawn at the proper rate again</li>
</ul>
<h3 class="author">YoYoBatty updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Frozen water vapour should freeze turfs and contents properly</li>
</ul>
<h3 class="author">imsxz updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">turrets are now able to drop guns on deconstruction properly</li>
</ul>
<h3 class="author">kingofkosmos updated:</h3>
<ul class="changes bgimages16">
<li class="spellcheck">The health analyzer's body part damage list is now a bit easier to read.</li>
</ul>
<h3 class="author">loserXD updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">being shoved now shows you the correct shover</li>
</ul>
<h3 class="author">nemvar updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">You can now crush soda cans on other people.</li>
</ul>
<h3 class="author">willox updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">frozen food crafting category is now visible</li>
<li class="tweak">space freezies, sundaes, honkdaes, and icecream sandwiches moved to frozen food crafting category</li>
<li class="bugfix">chili and ice chili bounties can now occur</li>
<li class="code_imp">removed many duplicate member variables</li>
</ul>
<h2 class="date">10 October 2019</h2>
<h3 class="author">ArcaneMusic updated:</h3>
<ul class="changes bgimages16">
+88
View File
@@ -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
@@ -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."
@@ -1,4 +0,0 @@
author: "YoYoBatty"
delete-after: True
changes:
- bugfix: "Frozen water vapour should freeze turfs and contents properly"
@@ -1,4 +0,0 @@
author: "nemvar"
delete-after: True
changes:
- rscadd: "You can now crush soda cans on other people."
@@ -1,4 +0,0 @@
author: "YPOQ"
delete-after: True
changes:
- bugfix: "Bubblegum will spawn at the proper rate again"
@@ -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"
@@ -1,4 +0,0 @@
author: "willox"
delete-after: True
changes:
- bugfix: "chili and ice chili bounties can now occur"
@@ -1,4 +0,0 @@
author: "Anonmare"
delete-after: True
changes:
- bugfix: "fixes a missing space, allowing Tend wounds (Burn, Exp) to actually unlock properly"
@@ -1,4 +0,0 @@
author: "willox"
delete-after: True
changes:
- code_imp: "removed many duplicate member variables"
@@ -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."
@@ -1,4 +0,0 @@
author: "imsxz"
delete-after: True
changes:
- bugfix: "turrets are now able to drop guns on deconstruction properly"
@@ -1,4 +0,0 @@
author: "loserXD"
delete-after: True
changes:
- bugfix: "being shoved now shows you the correct shover"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 KiB

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 69 KiB

+2 -1
View File
@@ -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"