Merge remote-tracking branch 'upstream/master'

This commit is contained in:
keronshb
2021-03-02 13:52:06 -05:00
33 changed files with 212 additions and 47 deletions
+2
View File
@@ -22,3 +22,5 @@
#define POLICYCONFIG_ON_DEFIB_LATE "ON_DEFIB_LATE"
/// Displayed to pyroclastic slimes on spawn
#define POLICYCONFIG_ON_PYROCLASTIC_SENTIENT "PYROCLASTIC_SLIME"
/// Displayed to pAIs on spawn
#define POLICYCONFIG_PAI "PAI_SPAWN"
+2 -1
View File
@@ -44,7 +44,8 @@
icon_state = "colormate"
/obj/machinery/gear_painter/Destroy()
inserted.forceMove(drop_location())
if(inserted) //please i beg you do not drop nulls
inserted.forceMove(drop_location())
return ..()
/obj/machinery/gear_painter/attackby(obj/item/I, mob/living/user)
+4 -1
View File
@@ -122,7 +122,10 @@
/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
src.pai = personality
src.add_overlay("pai-null")
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
var/policy = policies[POLICYCONFIG_PAI]
if(policy)
to_chat(personality, policy)
playsound(loc, 'sound/effects/pai_boot.ogg', 50, 1, -1)
audible_message("\The [src] plays a cheerful startup noise!")
@@ -256,6 +256,8 @@
/datum/gas_reaction/fusion/react(datum/gas_mixture/air, datum/holder)
var/turf/open/location
if (isopenturf(holder))
return
if (istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet.
var/datum/pipeline/fusion_pipenet = holder
location = get_turf(pick(fusion_pipenet.members))
+1 -1
View File
@@ -13,7 +13,7 @@ GLOBAL_VAR_INIT(normal_aooc_colour, "#ce254f")
if(!mob)
return
if(!(prefs.toggles & CHAT_OOC))
if(!(prefs.chat_toggles & CHAT_OOC))
to_chat(src, "<span class='danger'> You have OOC muted.</span>")
return
if(jobban_isbanned(mob, "OOC"))
+24
View File
@@ -138,3 +138,27 @@
icon_state = "greyturtle"
item_state = "greyturtle"
can_adjust = FALSE
/obj/item/clothing/under/suit/turtle/purple
name = "purple turtleneck"
icon_state = "turtle_sci"
item_state = "turtle_sci"
can_adjust = FALSE
/obj/item/clothing/under/suit/turtle/orange
name = "orange turtleneck"
icon_state = "turtle_eng"
item_state = "turtle_eng"
can_adjust = FALSE
/obj/item/clothing/under/suit/turtle/red
name = "red turtleneck"
icon_state = "turtle_sec"
item_state = "turtle_sec"
can_adjust = FALSE
/obj/item/clothing/under/suit/turtle/blue
name = "blue turtleneck"
icon_state = "turtle_med"
item_state = "turtle_med"
can_adjust = FALSE
-21
View File
@@ -21,27 +21,6 @@
new /obj/item/reagent_containers/food/snacks/candyheart(B)
new /obj/item/storage/fancy/heart_box(B)
var/list/valentines = list()
for(var/mob/living/M in GLOB.player_list)
if(!M.stat && M.client && M.mind && !HAS_TRAIT(M, TRAIT_NO_MIDROUND_ANTAG))
valentines |= M
while(valentines.len)
var/mob/living/L = pick_n_take(valentines)
if(valentines.len)
var/mob/living/date = pick_n_take(valentines)
forge_valentines_objective(L, date)
forge_valentines_objective(date, L)
if(valentines.len && prob(4))
var/mob/living/notgoodenough = pick_n_take(valentines)
forge_valentines_objective(notgoodenough, date)
else
L.mind.add_antag_datum(/datum/antagonist/heartbreaker)
/proc/forge_valentines_objective(mob/living/lover,mob/living/date,var/chemLove = FALSE)
lover.mind.special_role = "valentine"
if (chemLove == TRUE)
+23
View File
@@ -0,0 +1,23 @@
/datum/round_event_control/supermatter_surge
name = "Supermatter Surge"
typepath = /datum/round_event/supermatter_surge
weight = 20
max_occurrences = 4
earliest_start = 10 MINUTES
/datum/round_event_control/supermatter_surge/canSpawnEvent()
if(GLOB.main_supermatter_engine?.has_been_powered)
return ..()
/datum/round_event/supermatter_surge
var/power = 2000
/datum/round_event/supermatter_surge/setup()
power = rand(200,4000)
/datum/round_event/supermatter_surge/announce()
if(power > 800 || prob(round(power/8)))
priority_announce("Class [round(power/500) + 1] supermatter surge detected. Intervention may be required.", "Anomaly Alert")
/datum/round_event/supermatter_surge/start()
GLOB.main_supermatter_engine.matter_power += power
+1
View File
@@ -97,6 +97,7 @@
if(myseed.mutatelist.len > 0)
myseed.instability = (myseed.instability/2)
mutatespecie()
return BULLET_ACT_HIT
else
return ..()
@@ -80,6 +80,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/list/inherent_traits = list()
var/inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
var/list/blacklisted_quirks = list() // Quirks that will be removed upon gaining this species, to be defined by species
var/list/removed_quirks = list() // Quirks that got removed due to being blacklisted, and will be restored when on_species_loss() is called
var/attack_verb = "punch" // punch-specific attack verb
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
@@ -342,6 +345,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/X in inherent_traits)
ADD_TRAIT(C, X, SPECIES_TRAIT)
//lets remove those conflicting quirks
remove_blacklisted_quirks(C)
if(TRAIT_VIRUSIMMUNE in inherent_traits)
for(var/datum/disease/A in C.diseases)
A.cure(FALSE)
@@ -395,6 +401,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/X in inherent_traits)
REMOVE_TRAIT(C, X, SPECIES_TRAIT)
// lets restore the quirks that got removed when gaining this species
restore_quirks(C)
C.remove_movespeed_modifier(/datum/movespeed_modifier/species)
if(mutant_bodyparts["meat_type"])
@@ -424,6 +433,26 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src)
// shamelessly inspired by antag_datum.remove_blacklisted_quirks()
/datum/species/proc/remove_blacklisted_quirks(mob/living/carbon/C)
var/mob/living/L = C.mind?.current
if(istype(L))
var/list/my_quirks = L.client?.prefs.all_quirks.Copy()
SSquirks.filter_quirks(my_quirks, blacklisted_quirks)
for(var/q in L.roundstart_quirks)
var/datum/quirk/Q = q
if(!(SSquirks.quirk_name_by_path(Q.type) in my_quirks))
L.remove_quirk(Q.type)
removed_quirks += Q.type
// restore any quirks that we removed
/datum/species/proc/restore_quirks(mob/living/carbon/C)
var/mob/living/L = C.mind?.current
if(istype(L))
for(var/q in removed_quirks)
L.add_quirk(q)
/datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour)
H.remove_overlay(HAIR_LAYER)
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
@@ -37,6 +37,7 @@
armor = 20 // 120 damage to KO a zombie, which kills it
speedmod = 1.6 // they're very slow
mutanteyes = /obj/item/organ/eyes/night_vision/zombie
blacklisted_quirks = list(/datum/quirk/nonviolent)
var/heal_rate = 1
var/regen_cooldown = 0
@@ -424,7 +424,7 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/honk //Strips and equips you as a clown. I apologize for nothing
observer_desc = "This crystal strips and equips its targets as clowns."
possible_methods = list(ACTIVATE_MOB_BUMP, ACTIVATE_SPEECH)
possible_methods = list(ACTIVATE_TOUCH) //Because We love AOE transformations!
activation_sound = 'sound/items/bikehorn.ogg'
/obj/machinery/anomalous_crystal/honk/ActivationReaction(mob/user)
@@ -398,6 +398,14 @@ Difficulty: Medium
crusher_loot = list()
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30)
/mob/living/simple_animal/hostile/megafauna/dragon/lesser/transformed //ash drake balanced around player control
name = "transformed ash drake"
desc = "A sentient being transformed into an ash drake"
mob_size = MOB_SIZE_HUMAN //prevents crusher vulnerability
move_force = MOVE_FORCE_NORMAL //stops them from destroying and unanchoring shit by walking into it
environment_smash = ENVIRONMENT_SMASH_STRUCTURES //no we dont want sentient megafauna be able to delete the entire station in a minute flat
damage_coeff = list(BRUTE = 0.7, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) //200 health but not locked to standard movespeed, needs armor befitting of a dragon
/mob/living/simple_animal/hostile/megafauna/dragon/lesser/grant_achievement(medaltype,scoretype)
return
@@ -413,7 +421,8 @@ Difficulty: Medium
if(L in hit_list || L == source)
continue
hit_list += L
L.adjustFireLoss(20)
L.adjustFireLoss(5)
L.adjust_fire_stacks(6)
to_chat(L, "<span class='userdanger'>You're hit by [source]'s fire breath!</span>")
// deals damage to mechs
@@ -42,6 +42,8 @@
A.GiveTarget(target)
A.friends = friends
A.faction = faction.Copy()
if(!A == /mob/living/simple_animal/hostile/poison/bees/toxin)
A.my_creator = type
ranged_cooldown = world.time + ranged_cooldown_time
/mob/living/simple_animal/hostile/asteroid/hivelord/AttackingTarget()
@@ -88,6 +90,7 @@
density = FALSE
del_on_death = 1
var/swarming = FALSE
var/my_creator = null
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize()
. = ..()
@@ -205,11 +208,7 @@
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H)
visible_message("<span class='warning'>[name] burrows into the flesh of [H]!</span>")
var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L
if(HAS_TRAIT(H, TRAIT_DWARF)) //dwarf legions aren't just fluff!
L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc)
else
L = new(H.loc)
var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L = check_infest_type(H)
visible_message("<span class='warning'>[L] staggers to [L.p_their()] feet!</span>")
H.death()
H.adjustBruteLoss(1000)
@@ -217,6 +216,20 @@
H.forceMove(L)
qdel(src)
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/check_infest_type(mob/living/carbon/human/human)
var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L
var/list/blacklisted_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf)
if(HAS_TRAIT(human, TRAIT_DWARF)) //dwarf legions aren't just fluff!
L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(human.loc)
else if(my_creator)
if(my_creator in blacklisted_types)
L = new(human.loc)
else
L = new my_creator(human.loc)
else
L = new(human.loc)
return L
//Advanced Legion is slightly tougher to kill and can raise corpses (revive other legions)
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/advanced
stat_attack = DEAD
+1 -4
View File
@@ -178,10 +178,7 @@
new /obj/effect/temp_visual/monkeyify/humanify(loc)
transformation_timer = addtimer(CALLBACK(src, .proc/finish_humanize, tr_flags), TRANSFORMATION_DURATION, TIMER_UNIQUE)
/mob/living/carbon/proc/finish_humanize(tr_flags)
transformation_timer = null
sleep(TRANSFORMATION_DURATION) //This entire proc CANNOT be split into two
var/list/stored_implants = list()
var/list/int_organs = list()
@@ -78,7 +78,7 @@
desc = "Take on the shape a lesser ash drake."
invocation = "RAAAAAAAAWR!"
shapeshift_type = /mob/living/simple_animal/hostile/megafauna/dragon/lesser
shapeshift_type = /mob/living/simple_animal/hostile/megafauna/dragon/lesser/transformed
/obj/shapeshift_holder
+4 -1
View File
@@ -3,7 +3,10 @@
## ON_CLONE - displayed after a successful cloning operation to the cloned person
## ON_DEFIB_INTACT - displayed after defibbing before memory loss time threshold
## ON_DEFIB_LATE - displayed after defibbing post memory loss time threshold
##
## SDGF - displayed on SDGF clone spawning
## SDGF_GOOD - displayed on SDGF clone spawning, if the clone is loyal
## SDGF_BAD - displayed on SDGF clone spawning, if the clone is not loyal
## PAI - displayed on PAI personality being loaded
## EXAMPLE:
## POLICYCONFIG ON_CLONE insert text here <span class='notice'>span classes are fully supported</span>
+22
View File
@@ -50,6 +50,28 @@
-->
<div class="commit sansserif">
<h2 class="date">02 March 2021</h2>
<h3 class="author">LetterN updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">colorpainter: let's not dispense null</li>
</ul>
<h3 class="author">SandPoot updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Changelings will actually become the person they want to be when using "human form" ability(after having used last resort).</li>
</ul>
<h2 class="date">01 March 2021</h2>
<h3 class="author">SmArtKar updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixes decks breaking your screen</li>
<li class="bugfix">Fixes binders not saving cards</li>
<li class="bugfix">Fixes binders not saving multiple cards of the same type</li>
</ul>
<h3 class="author">Vynzill updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">cursed rice hat right in front of the jungle gateway's entrance is now removed from this dimensional plane</li>
</ul>
<h2 class="date">28 February 2021</h2>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
+14
View File
@@ -28628,3 +28628,17 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- tweak: Body rejuvenation surgery will loop until the patient is completely healed.
dzahlus:
- bugfix: fixes toxinlovers dying from heretic stuff that should heal them instead
2021-03-01:
SmArtKar:
- bugfix: Fixes decks breaking your screen
- bugfix: Fixes binders not saving cards
- bugfix: Fixes binders not saving multiple cards of the same type
Vynzill:
- bugfix: cursed rice hat right in front of the jungle gateway's entrance is now
removed from this dimensional plane
2021-03-02:
LetterN:
- bugfix: 'colorpainter: let''s not dispense null'
SandPoot:
- bugfix: Changelings will actually become the person they want to be when using
"human form" ability(after having used last resort).
@@ -0,0 +1,4 @@
author: "SandPoot"
delete-after: True
changes:
- bugfix: "Legions should now pass their type to the person they infect (if valid)."
@@ -1,6 +0,0 @@
author: "SmArtKar"
delete-after: True
changes:
- bugfix: "Fixes decks breaking your screen"
- bugfix: "Fixes binders not saving cards"
- bugfix: "Fixes binders not saving multiple cards of the same type"
@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- rscdel: "Fusion can no longer be done in open air."
@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- rscadd: "\"Supermatter surge\" event, which might cause problems if the supermatter is not sufficiently cooled (i.e. the setup is messed up in some way)"
@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- rscdel: "Valentine's day event no longer gives everyone a valentine's antag."
@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- config: "pAIs now have a policy config"
@@ -0,0 +1,5 @@
author: "dzahlus"
delete-after: True
changes:
- rscadd: "Added new subtype to lesser ash drake balanced around player control"
- balance: "rebalanced dragon transformation to a 1 minute cooldown as well as using the new subtype of megafauna"
@@ -0,0 +1,5 @@
author: "qweq12yt"
delete-after: True
changes:
- bugfix: "fixed infectious zombies not being able to attack if host was pacifist"
- rscadd: "adds a way for species to have blacklisted quirks, the removal, and restoration of said quirks upon species changes"
@@ -1,4 +0,0 @@
author: "Vynzill"
delete-after: True
changes:
- bugfix: "cursed rice hat right in front of the jungle gateway's entrance is now removed from this dimensional plane"
@@ -0,0 +1,5 @@
author: "MarinaGryphon"
delete-after: True
changes:
- bugfix: "The AOOC mute pref is now properly respected."
- bugfix: "Muting adminhelp sounds no longer mutes AOOC."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 KiB

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 133 KiB

@@ -236,6 +236,22 @@
name = "Grey Turtleneck"
path = /obj/item/clothing/under/suit/turtle/grey
/datum/gear/uniform/purpleturtle
name = "Purple Turtleneck"
path = /obj/item/clothing/under/suit/turtle/purple
/datum/gear/uniform/orangeturtle
name = "Orange Turtleneck"
path = /obj/item/clothing/under/suit/turtle/orange
/datum/gear/uniform/blueturtle
name = "Blue Turtleneck"
path = /obj/item/clothing/under/suit/turtle/blue
/datum/gear/uniform/redturtle
name = "Red Turtleneck"
path = /obj/item/clothing/under/suit/turtle/red
/datum/gear/uniform/polyjump
name = "Polychromic Jumpsuit"
path = /obj/item/clothing/under/misc/polyjumpsuit
+1
View File
@@ -2060,6 +2060,7 @@
#include "code\modules\events\spider_infestation.dm"
#include "code\modules\events\spontaneous_appendicitis.dm"
#include "code\modules\events\stray_cargo.dm"
#include "code\modules\events\supermatter_surge.dm"
#include "code\modules\events\travelling_trader.dm"
#include "code\modules\events\vent_clog.dm"
#include "code\modules\events\wisdomcow.dm"