Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The main CWC PR #1709

Merged
merged 51 commits into from
Jul 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
92988ab
restricted warps
wraith-54321 Apr 21, 2024
0acd292
anchoring crystals fix
wraith-54321 Apr 22, 2024
95a6a2b
in uplink
wraith-54321 Apr 22, 2024
5b893a2
windows
wraith-54321 Apr 23, 2024
80f76e3
atm lootboxes
wraith-54321 Apr 23, 2024
a9f2aaf
note
wraith-54321 Apr 23, 2024
729ba9d
vitality fix
wraith-54321 Apr 24, 2024
f1f4110
bit more
wraith-54321 Apr 24, 2024
36c0517
make them members count
wraith-54321 Apr 24, 2024
3d6b96d
walls
wraith-54321 Apr 24, 2024
bfeaf2a
Update kindle.dm
wraith-54321 Apr 25, 2024
af043e2
oop
wraith-54321 Apr 25, 2024
a15537f
Update antag_datum.dm
wraith-54321 Apr 26, 2024
5dd8dc5
atm fix
wraith-54321 Apr 28, 2024
f6bebc3
I am such a big smart
wraith-54321 Apr 28, 2024
192b184
Flesh Spiders Regenerate + QoL (#78704)
Jacquerel Oct 11, 2023
1b11c15
Headslug Eggs Work Again + More Consistent Timing (#80916)
IndieanaJones Jan 13, 2024
75a2d65
fix
wraith-54321 Apr 29, 2024
ae65749
forbearance refactor
wraith-54321 May 1, 2024
3a034bb
minor fix
wraith-54321 May 1, 2024
932a6f7
e
wraith-54321 May 1, 2024
05ac9c0
pain
wraith-54321 May 9, 2024
11ab289
Update whirring_convergence.dm
wraith-54321 May 26, 2024
1ddac43
ghost eminence good
wraith-54321 May 26, 2024
5dde1c1
Merge remote-tracking branch 'upstream/master' into oh-ok
wraith-54321 May 26, 2024
4f262c6
guess ill deal with this later
wraith-54321 May 26, 2024
6de4fcd
Update tgstation.dme
wraith-54321 May 26, 2024
1057cf6
im dumb
wraith-54321 May 26, 2024
53f433e
so much stuff
wraith-54321 Jun 3, 2024
0b004be
a lot more stuff
wraith-54321 Jun 3, 2024
4ac2d41
lets commit before it becomes too annoying
wraith-54321 Jun 4, 2024
9693f00
eh
wraith-54321 Jun 4, 2024
49dd047
Merge remote-tracking branch 'upstream/master' into oh-ok
wraith-54321 Jun 4, 2024
ea6196e
not quite finished
wraith-54321 Jun 17, 2024
69c1912
no debug
wraith-54321 Jun 17, 2024
990470e
Update tgstation.dme
wraith-54321 Jun 17, 2024
4fec593
nukes duplicate
wraith-54321 Jun 18, 2024
066f172
fix
wraith-54321 Jun 19, 2024
7b076b8
eh
wraith-54321 Jun 23, 2024
a7dec7c
Merge remote-tracking branch 'upstream/master' into oh-ok
wraith-54321 Jun 23, 2024
89cb047
grrgfrs
wraith-54321 Jun 27, 2024
9bc4a14
Merge remote-tracking branch 'upstream/master' into oh-ok
wraith-54321 Jun 27, 2024
ee988c9
compile
wraith-54321 Jun 30, 2024
c8a766b
oh
wraith-54321 Jul 1, 2024
3e321da
oooohh
wraith-54321 Jul 1, 2024
997e30c
Merge remote-tracking branch 'upstream/master' into oh-ok
wraith-54321 Jul 1, 2024
7727a80
oops
wraith-54321 Jul 1, 2024
8fd317b
things
wraith-54321 Jul 4, 2024
0fe2dd5
ready?
wraith-54321 Jul 4, 2024
bddfd02
Update skewer.dm
wraith-54321 Jul 4, 2024
ca06ba0
Update burning.dm
wraith-54321 Jul 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions code/__DEFINES/~monkestation/clock_cult.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,32 @@

#define SIGIL_TRANSMISSION_RANGE 4

#define MAX_CLOCK_VITALITY 400

///base state the ark is created in, any state besides this will be a hostile environment
#define ARK_STATE_BASE 0
///state for the grace period after the cult has reached its member count max and have enough activing anchoring crystals to summon
#define ARK_STATE_CHARGING 1
///state for after the cult has been annouced as well as the first half of the assault
#define ARK_STATE_ACTIVE 2
///state for after the cult has been annouced and are preparing for the portals to open
#define ARK_STATE_GRACE 2
///state for the first half of the assault
#define ARK_STATE_ACTIVE 3
///state for the halfway point of ark activation
#define ARK_STATE_SUMMONING 3
#define ARK_STATE_SUMMONING 4
///the ark has either finished opening or been destroyed in this state
#define ARK_STATE_FINAL 4
#define ARK_STATE_FINAL 5

///max damage taken per hit by "important" clock structures
#define MAX_IMPORTANT_CLOCK_DAMAGE 30

///how many anchoring crystals need to be active before the ark can open
#define ANCHORING_CRYSTALS_TO_SUMMON 2

///the map path of the reebe map
#define REEBE_MAP_PATH "_maps/~monkestation/templates/reebe.dmm"

///how long between uses of the anchoring crystal scripture, also how long the hostile environment lasts if the crystal is not destroyed
#define ANCHORING_CRYSTAL_COOLDOWN 7 MINUTES

///up to how many tiles away will the ark stop certain things from breaking turfs
#define ARK_TURF_DESTRUCTION_BLOCK_RANGE 9
7 changes: 7 additions & 0 deletions code/__DEFINES/~monkestation/components.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
//for the wound converter component, higher values will take priority over lower ones
#define WOUND_CONVERSION_PRIORITY_ITEM 1
#define WOUND_CONVERSION_PRIORITY_ITEM_HIGH 2
#define WOUND_CONVERSION_PRIORITY_MOB 3
#define WOUND_CONVERSION_PRIORITY_HIGH 4
///NEVER USE THIS PRIORITY LEVEL OR HAVE ANYTHING HIGHER, this is used to make sure we dont try and act on wounds we have already handled
#define WOUND_CONVERSION_PRIORITY_CONVERTED 5
6 changes: 3 additions & 3 deletions code/__DEFINES/~monkestation/dcs/signals/signals_atom.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@
/// /datum/component/clockwork_trap signals: ()
#define COMSIG_CLOCKWORK_SIGNAL_RECEIVED "clock_received"

/// Called when a clock cultist uses a clockwork slab: (obj/item/clockwork/clockwork_slab/slab)
#define COMSIG_CLOCKWORK_SLAB_USED "clockwork_slab_used"

/// from base of atom/eminence_act() : (mob/living/eminence/user)
#define COMSIG_ATOM_EMINENCE_ACT "atom_eminence_act"

Expand All @@ -17,3 +14,6 @@
/// Mob is trying to open the hacking menu of a target [/atom], from /datum/hacking/interactable(): (mob/user)
#define COMSIG_TRY_HACKING_INTERACT "try_hacking_interact"
#define COMPONENT_CANT_INTERACT_HACKING (1<<0)

/// generic turf checker signal
#define COMSIG_CHECK_TURF_GENERIC "check_turf_generic"
4 changes: 4 additions & 0 deletions code/__DEFINES/~monkestation/dcs/signals/signals_element.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
///called when /datum/element/turf_checker detects a new state on constant checking (new_state) TRUE for a valid turf FALSE for an invalid
#define COMSIG_TURF_CHECKER_UPDATE_STATE "turf_checker_update_state"
#define COMPONENT_CHECKER_VALID_TURF (1<<0)
#define COMPONENT_CHECKER_INVALID_TURF (2<<0)
6 changes: 6 additions & 0 deletions code/__DEFINES/~monkestation/dcs/signals/signals_item.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,9 @@
#define COMPONENT_HANDLED_MESSAGE (1 << 1)
/// Called after an item is compressed by a bluespace compression kit: (mob/user, obj/item/compression_kit/kit)
#define COMSIG_ITEM_COMPRESSED "item_compressed"

/// Called when a clock cultist uses a clockwork slab: (obj/item/clockwork/clockwork_slab/slab)
#define COMSIG_CLOCKWORK_SLAB_USED "clockwork_slab_used"

/// the comsig for clockwork items checking turf
#define COMSIG_CHECK_TURF_CLOCKWORK "check_turf_clockwork"
3 changes: 3 additions & 0 deletions code/__DEFINES/~monkestation/market.dm
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
#define MARKET_PROCESS (1<<0)
#define MARKET_AUCTION (1<<1)

///How much does it cost to buy a lootbox
#define LOOTBOX_COST 5000
22 changes: 22 additions & 0 deletions code/__HELPERS/~monkestation-helpers/atoms.dm
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
///Returns all the objects that we are nested within the contents of starting with ourself then adding our previous loc's loc, does not include our turf
/atom/movable/proc/get_locs_recursive()
var/atom/movable/current_loc = loc
var/list/locs_list = list(src)
if(!current_loc)
return locs_list

var/sanity = 0 //you REALLY should not have something nested in 500 layers of contents
while(!isturf(current_loc))
sanity++
locs_list += current_loc
if(sanity > 500 || !ismovable(current_loc))
return locs_list

current_loc = current_loc.loc
return locs_list //if sanity is 0 then that means our loc is a turf and we are the highest level loc

///Returns our highest level loc that is not a turf or ourselves if we are directly in a turf, if we were in a box in the backpack of a mob we would return that mob
/atom/movable/proc/get_highest_non_turf_loc()
var/list/locs_list = get_locs_recursive()
return locs_list[length(locs_list)]

/atom/proc/effective_contents(list/typecache = null)
var/static/list/default_typecache
if(!typecache)
Expand Down
2 changes: 0 additions & 2 deletions code/controllers/subsystem/economy.dm
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ SUBSYSTEM_DEF(economy)
/// Tracks a temporary sum of all money in the system
/// We need this on the subsystem because of yielding and such
var/temporary_total = 0
///the mail crate we last generated
var/obj/structure/closet/crate/mail/economy/mail_crate

/datum/controller/subsystem/economy/Initialize()
//removes cargo from the split
Expand Down
7 changes: 6 additions & 1 deletion code/game/machinery/computer/communications.dm
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,13 @@
state = STATE_MAIN
if ("recallShuttle")
// AIs cannot recall the shuttle
if (!authenticated(usr) || issilicon(usr) || syndicate)
var/clock_user = IS_CLOCK(usr) //monkestation edit
if (!authenticated(usr) || issilicon(usr) || syndicate || (clock_user && GLOB.main_clock_cult?.member_recalled)) //monkestation edit: adds the CWC check
return
//monkestation edit start
if(clock_user)
GLOB.main_clock_cult?.member_recalled = TRUE
//monkestation edit end
SSshuttle.cancelEvac(usr)
if ("requestNukeCodes")
if (!authenticated_as_non_silicon_captain(usr))
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/effects/spiderwebs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@
return TRUE
if(!isliving(mover))
return
if(isspider(mover.pulledby))
if(!isnull(mover.pulledby) && isspider(mover.pulledby))
return TRUE
balloon_alert(mover, "stuck in web!")
return FALSE
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/melee/baton.dm
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@
playsound(src, on_sound, 50, TRUE)
return COMPONENT_NO_DEFAULT_MESSAGE

//monkestation removal start
//monkestation removal start, moved to \antagonists\contractor\items in the modular folder
/*/obj/item/melee/baton/telescopic/contractor_baton
name = "contractor baton"
desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets."
Expand Down
3 changes: 2 additions & 1 deletion code/modules/antagonists/_common/antag_datum.dm
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ GLOBAL_LIST_EMPTY(antagonists)
/// The typepath for the outfit to show in the preview for the preferences menu.
var/preview_outfit
/// Flags for antags to turn on or off and check!
var/antag_flags = NONE /// If true, this antagonist can assign themself a new objective
var/antag_flags = NONE
/// If true, this antagonist can assign themself a new objective
var/can_assign_self_objectives = FALSE
/// Default to fill in when entering a custom objective.
var/default_custom_objective = "Cause chaos on the space station."
Expand Down
8 changes: 1 addition & 7 deletions code/modules/antagonists/brother/brother.dm
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
return ..()

/datum/antagonist/brother/proc/on_mob_successful_flashed_carbon(mob/living/source, mob/living/carbon/flashed, obj/item/assembly/flash/flash)
/* SIGNAL_HANDLER */ // monkestation edit: allow used of is_banned_from
SIGNAL_HANDLER

if (flashed.stat == DEAD)
return
Expand All @@ -63,12 +63,6 @@
flashed.balloon_alert(source, "[flashed.p_their()] mind is vacant!")
return

// monkestation edit: allow people to opt-out of BB
if(!(ROLE_BROTHER in flashed.client?.prefs?.be_special) || is_banned_from(flashed.ckey, list(ROLE_BROTHER, ROLE_SYNDICATE)))
flashed.balloon_alert(source, "unwilling to play role!")
return
// monkestation end

for(var/datum/objective/brother_objective as anything in source.mind.get_all_objectives())
// If the objective has a target, are we flashing them?
if(flashed == brother_objective.target?.current)
Expand Down
18 changes: 13 additions & 5 deletions code/modules/antagonists/changeling/headslug_eggs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,21 @@
desc = "Twitching and disgusting."
/// The mind of the original changeling that gave forth to the headslug mob.
var/datum/mind/origin
/// Tracks how long the egg has been growing.
var/time = 0
/// When we're expected to hatch.
var/hatch_time = 0
/// When this egg last got removed from a body. If -1, the egg hasn't been removed from a body.
var/removal_time = -1

/obj/item/organ/internal/body_egg/changeling_egg/Insert(mob/living/carbon/egg_owner, special = FALSE, drop_if_replaced = TRUE) //monkestation edit: movement_flags = DELETE_IF_REPLACED)
. = ..()
hatch_time = world.time + (removal_time == -1 ? EGG_INCUBATION_TIME : (hatch_time - removal_time))

/obj/item/organ/internal/body_egg/changeling_egg/Remove(mob/living/carbon/egg_owner, special, movement_flags)
. = ..()
removal_time = world.time

/obj/item/organ/internal/body_egg/changeling_egg/egg_process(seconds_per_tick, times_fired)
// Changeling eggs grow in dead people
time += seconds_per_tick * 10
if(time >= EGG_INCUBATION_TIME)
if(owner && hatch_time <= world.time)
pop()

/// Once the egg is fully grown, we gib the host and spawn a monkey (with the changeling's player controlling it). Very descriptive proc name.
Expand Down
22 changes: 21 additions & 1 deletion code/modules/antagonists/spiders/spiders.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

/datum/antagonist/spider/on_gain()
forge_objectives(directive)
. = ..()
return ..()

/datum/antagonist/spider/greet()
. = ..()
Expand All @@ -35,3 +35,23 @@
var/datum/objective/spider/objective = new(directive)
objective.owner = owner
objectives += objective

/// Subtype for flesh spiders who don't have a queen
/datum/antagonist/spider/flesh
name = "Flesh Spider"

/datum/antagonist/spider/flesh/forge_objectives()
var/datum/objective/custom/destroy = new()
destroy.owner = owner
destroy.explanation_text = "Wreak havoc and consume living flesh."
objectives += destroy

var/datum/objective/survive/dont_die = new()
dont_die.owner = owner
objectives += dont_die

/datum/antagonist/spider/flesh/greet()
. = ..()
to_chat(owner, span_boldwarning("An abomination of flesh set upon the station by changelings, \
you are aggressive to all living beings outside of your species and know no loyalties... even to your creator. \
<br>Your malleable flesh quickly regenerates if you can avoid taking damage for a few seconds."))
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/**
* Spider-esque mob summoned by changelings. Exclusively player-controlled.
* An independent hit-and-run antagonist which can make webs and heals itself if left undamaged for a few seconds.
* Not a spider subtype because it keeps getting hit by unrelated balance changes intended for the Giant Spiders gamemode.
*/
/mob/living/basic/flesh_spider
name = "flesh spider"
desc = "A odd fleshy creature in the shape of a spider. Its eyes are pitch black and soulless."
icon = 'icons/mob/simple/arachnoid.dmi'
icon_state = "flesh"
icon_living = "flesh"
icon_dead = "flesh_dead"
mob_biotypes = MOB_ORGANIC|MOB_BUG
speak_emote = list("chitters")
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
basic_mob_flags = FLAMMABLE_MOB
status_flags = NONE
speed = -0.1
maxHealth = 90
health = 90
melee_damage_lower = 15
melee_damage_upper = 20
obj_damage = 30
melee_attack_cooldown = CLICK_CD_MELEE
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
attack_vis_effect = ATTACK_EFFECT_BITE
unsuitable_cold_damage = 4
unsuitable_heat_damage = 4
// combat_mode = TRUE //monkestation removal
faction = list() // No allies but yourself
pass_flags = PASSTABLE
unique_name = TRUE
lighting_cutoff_red = 22
lighting_cutoff_green = 5
lighting_cutoff_blue = 5
butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8)
ai_controller = /datum/ai_controller/basic_controller/giant_spider

/mob/living/basic/flesh_spider/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_WEB_SURFER, INNATE_TRAIT)
AddElement(/datum/element/cliff_walking)
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW)
AddElement(/datum/element/venomous, /datum/reagent/toxin/hunterspider, 5)
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web)
AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move)
AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!")
AddComponent(\
/datum/component/blood_walk,\
blood_type = /obj/effect/decal/cleanable/blood/bubblegum,\
blood_spawn_chance = 5,\
)
AddComponent(\
/datum/component/regenerator,\
regeneration_delay = 4 SECONDS,\
health_per_second = maxHealth / 6,\
outline_colour = COLOR_PINK,\
)

var/datum/action/cooldown/mob_cooldown/lay_web/webbing = new(src)
webbing.webbing_time *= 0.7
webbing.Grant(src)
ai_controller?.set_blackboard_key(BB_SPIDER_WEB_ACTION, webbing)

var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src)
spikes_web.Grant(src)

var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src)
web_sticky.Grant(src)
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@
/// Just to be super-duper safe to the player, we do return TRUE if all goes well and read that value in check_and_implant() to be nice to the player.
/mob/living/basic/headslug/proc/infect(mob/living/carbon/victim)
var/obj/item/organ/internal/body_egg/changeling_egg/egg = new(victim)
egg.Insert(victim)

egg.origin = mind

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -468,54 +468,6 @@
menu_description = "Weaker version of the nurse spider, specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage."
ai_controller = /datum/ai_controller/basic_controller/giant_spider/weak

/**
* ### Flesh Spider
*
* A subtype of giant spider which only occurs from changelings.
* Has the base stats of a hunter, but they can heal themselves and spin webs faster.
* They also occasionally leave puddles of blood when they walk around. Flavorful!
*/
/mob/living/basic/spider/giant/hunter/flesh
name = "flesh spider"
desc = "A odd fleshy creature in the shape of a spider. Its eyes are pitch black and soulless."
icon = 'icons/mob/simple/arachnoid.dmi'
icon_state = "flesh"
icon_living = "flesh"
icon_dead = "flesh_dead"
web_speed = 0.7
maxHealth = 90
health = 90
menu_description = "Self-sufficient spider variant capable of healing themselves and producing webbbing fast."

/mob/living/basic/spider/giant/hunter/flesh/Initialize(mapload)
. = ..()
AddComponent(/datum/component/blood_walk, \
blood_type = /obj/effect/decal/cleanable/blood/bubblegum, \
blood_spawn_chance = 5)
// It might be easier and more fitting to just replace this with Regenerator
AddComponent(/datum/component/healing_touch,\
heal_brute = 45,\
heal_burn = 45,\
interaction_key = DOAFTER_SOURCE_SPIDER,\
valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/giant/hunter/flesh)),\
extra_checks = CALLBACK(src, PROC_REF(can_mend)),\
action_text = "%SOURCE% begins mending themselves...",\
complete_text = "%SOURCE%'s wounds mend together.",\
)

var/datum/action/cooldown/mob_cooldown/lay_web/web_spikes/spikes_web = new(src)
spikes_web.Grant(src)

var/datum/action/cooldown/mob_cooldown/lay_web/sticky_web/web_sticky = new(src)
web_sticky.Grant(src)

/// Prevent you from healing other flesh spiders, or healing when on fire
/mob/living/basic/spider/giant/hunter/flesh/proc/can_mend(mob/living/source, mob/living/target)
if (on_fire)
balloon_alert(src, "on fire!")
return FALSE
return TRUE

/**
* ### Viper Spider (Wizard)
*
Expand Down
Loading
Loading