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
@@ -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{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
..()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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,\
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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"
|
||||
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 193 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 351 KiB After Width: | Height: | Size: 350 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 69 KiB |
@@ -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"
|
||||
|
||||