Skip to content

Commit

Permalink
Adds 8 new goobers to Rcorp, plus some misceclaneous playables/rcorp …
Browse files Browse the repository at this point in the history
…changes. (#2040)

* adds everything

* fixes linters due to my hubris

* fixes to general bee and porccubus balance on rcorp

balance: decreased porccubus dash cooldown on rcorp.
balance: let's artillery sight see through walls outside combat maps.
converts general bee artillery sight into a generic innate action.
gives artillery sight toggleable zoom levels.
fix artillery sight sprite breaking.

* small flavor + tidying up

removes unecessary comment
adds better flavor to woodsman ramping.
  • Loading branch information
TaculoTaculo authored Apr 14, 2024
1 parent ac3dcf9 commit 7000e95
Show file tree
Hide file tree
Showing 12 changed files with 329 additions and 30 deletions.
15 changes: 13 additions & 2 deletions ModularTegustation/tegu_items/rcorp/!abno_overwrites.dm
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,20 @@
..()

//Porccubus gets a much shorter dash cooldown to better maneuver itself with how big of a commitment dashing is.
//May unironically be too much as the thing is slippery as a eel with how big the dash is but i'd rather it be mobile than feeling ass to play as.
/mob/living/simple_animal/hostile/abnormality/porccubus/Initialize()
. = ..()
if(IsCombatMap())
ranged_cooldown_time = 6 SECONDS
ranged_cooldown_time = 3 SECONDS

// Fairy gentleman gets a bump to his survival, damage, and a bigger ass.
// This is to account for being a fully melee fighter with TETH resists.
/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/Initialize()
if(IsCombatMap())
maxHealth = 1400
health = 1400
move_to_delay = 2.3
melee_damage_lower = 20
melee_damage_upper = 25
jump_damage = 100
jump_aoe = 2
..()
10 changes: 9 additions & 1 deletion ModularTegustation/tegu_items/rcorp/landmarks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ GLOBAL_LIST_INIT(easycombat, list(
/mob/living/simple_animal/hostile/abnormality/smile,
/mob/living/simple_animal/hostile/abnormality/pinocchio,
/mob/living/simple_animal/hostile/abnormality/fragment,
/mob/living/simple_animal/hostile/abnormality/fairy_gentleman,
/mob/living/simple_animal/hostile/abnormality/drifting_fox,
/mob/living/simple_animal/hostile/abnormality/headless_ichthys,
/mob/living/simple_animal/hostile/abnormality/puss_in_boots,
/mob/living/simple_animal/hostile/abnormality/woodsman,
))

GLOBAL_LIST_INIT(easysupport, list(
Expand All @@ -15,6 +20,7 @@ GLOBAL_LIST_INIT(easysupport, list(
/mob/living/simple_animal/hostile/abnormality/apex_predator,
/mob/living/simple_animal/hostile/abnormality/cleaner,
/mob/living/simple_animal/hostile/abnormality/der_freischutz,
/mob/living/simple_animal/hostile/abnormality/better_memories,
))

GLOBAL_LIST_INIT(easytank, list(
Expand All @@ -24,6 +30,7 @@ GLOBAL_LIST_INIT(easytank, list(
/mob/living/simple_animal/hostile/abnormality/warden,
/mob/living/simple_animal/hostile/abnormality/golden_apple,
/mob/living/simple_animal/hostile/abnormality/porccubus,
/mob/living/simple_animal/hostile/abnormality/black_swan,
))

GLOBAL_LIST_INIT(hardcombat, list(
Expand All @@ -33,7 +40,7 @@ GLOBAL_LIST_INIT(hardcombat, list(
/mob/living/simple_animal/hostile/abnormality/big_wolf,
/mob/living/simple_animal/hostile/abnormality/luna,
/mob/living/simple_animal/hostile/abnormality/dimensional_refraction,
/mob/living/simple_animal/hostile/abnormality/black_swan,
/mob/living/simple_animal/hostile/abnormality/red_hood,
))

GLOBAL_LIST_INIT(hardsupport, list(/mob/living/simple_animal/hostile/abnormality/sphinx,
Expand All @@ -55,6 +62,7 @@ GLOBAL_LIST_INIT(hardtank, list(/mob/living/simple_animal/hostile/abnormality/me
/mob/living/simple_animal/hostile/abnormality/titania,
/mob/living/simple_animal/hostile/abnormality/greed_king,
/mob/living/simple_animal/hostile/abnormality/eris,
/mob/living/simple_animal/hostile/abnormality/general_b,
))

//Used for the specific raidboss mode
Expand Down
5 changes: 5 additions & 0 deletions code/datums/looping_sounds/abnormalities.dm
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,11 @@
volume = 75
extra_range = -4

/datum/looping_sound/woodsman
mid_sounds = 'sound/abnormalities/woodsman/woodsman_loop.ogg'
mid_length = 4 SECONDS
volume = 20

// Ordeals
/datum/looping_sound/amberdusk
mid_sounds = 'sound/effects/ordeals/amber/dusk_ambience.ogg'
Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/dead/observer/observer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ GLOBAL_LIST_EMPTY(ghost_images_simple) //this is a list of all ghost images as t
GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)

GLOBAL_LIST_INIT(unpossessable_mobs, list( // LOBOTOMYCORPORATION ADDITION -- abnormality blacklist
/mob/living/simple_animal/hostile/abnormality/woodsman,
/mob/living/simple_animal/hostile/abnormality/punishing_bird,
))

/mob/dead/observer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,21 @@

//--Side Gamemodes stuff--
else
SpawnMinion(get_turf(src)) // Spawns 2 minions on Rcorp.
breaching_minion = SpawnMinion(get_turf(src))
QDEL_IN(src, 1 SECONDS) //Destroys the core, as it is unecessary in Rcorp.

if(client)
mind.transfer_to(breaching_minion) //For playable abnormalities, directly lets the playing currently controlling core get control of the spawned mob
return

//Side Gamemodes stuff, should only ever be called outside of the main gamemode
/mob/living/simple_animal/hostile/abnormality/better_memories/BreachEffect(mob/living/carbon/human/user, breach_type)
if(!IsCombatMap())
return FALSE
ZeroQliphoth()
return FALSE

/mob/living/simple_animal/hostile/abnormality/better_memories/proc/SpawnMinion(turf/spawn_turf)
var/mob/living/simple_animal/hostile/better_memories_minion/spawningmonster = new(spawn_turf)
RegisterSignal(spawningmonster, COMSIG_PARENT_QDELETING, PROC_REF(MinionSlain))
Expand Down Expand Up @@ -519,7 +527,7 @@
L.adjust_attribute_buff(PRUDENCE_ATTRIBUTE, -30)
L.adjust_attribute_buff(TEMPERANCE_ATTRIBUTE, -30)
L.physiology.work_success_mod -= 0.25
to_chat(owner, span_warning("Your distracted by memories of your past."))
to_chat(owner, span_warning("You're distracted by memories of your past."))

/datum/status_effect/display/better_memories_curse/tick()
. = ..()
Expand All @@ -535,7 +543,7 @@
span_warning("You forget your happiest moments."),
span_warning("You wonder why your face is wet with tears."),
span_warning("You try your best to hold onto the memory of your loved ones."),
span_warning("Your forced to reminiscence on a happier time, then its gone."),
span_warning("You're forced to reminiscence on a happier time, then its gone."),
))

/datum/status_effect/display/better_memories_curse/on_remove()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,8 @@
break
forceMove(line_turf)
SLEEP_CHECK_DEATH(0.8)
playsound(src, 'sound/abnormalities/porccubus/head_explode_laugh.ogg', 50, FALSE, 4)
playsound(src, 'sound/abnormalities/porccubus/porccu_giggle.ogg', 10, FALSE, 4) // This thing is absurdly loud
ranged_cooldown = world.time + ranged_cooldown_time

/mob/living/simple_animal/hostile/abnormality/porccubus/AttackingTarget()
var/mob/living/carbon/human/H
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,25 @@
var/can_act = TRUE
var/finishing = FALSE

//PLAYABLES ATTACKS
attack_action_types = list(/datum/action/innate/abnormality_attack/toggle/puss_finisher_toggle)

/datum/action/innate/abnormality_attack/toggle/puss_finisher_toggle
name = "Toggle Finisher"
button_icon_state = "puss_toggle0"
chosen_attack_num = 2
chosen_message = span_colossus("You will now perform a powerful finisher move.")
button_icon_toggle_activated = "puss_toggle1"
toggle_attack_num = 1
toggle_message = span_colossus("You will not perform a finisher anymore.")
button_icon_toggle_deactivated = "puss_toggle0"

//Init stuff
/mob/living/simple_animal/hostile/abnormality/puss_in_boots/Initialize()
. = ..()
if(IsCombatMap())
friendly = FALSE
return // There are no friends in war.
for(var/mob/living/carbon/human/potential_user in GLOB.player_list)
if(!potential_user.has_status_effect(STATUS_EFFECT_CHOSEN))
continue
Expand Down Expand Up @@ -278,9 +294,13 @@
/mob/living/simple_animal/hostile/abnormality/puss_in_boots/OpenFire()
if(!can_act)
return
if((finisher_cooldown < world.time) && prob(50))
Execute(target)
return
if(!client)
if((finisher_cooldown < world.time) && prob(50))
Execute(target)
return
if(chosen_attack == 1)
return
Execute(target)

//Death/Defeat
/mob/living/simple_animal/hostile/abnormality/puss_in_boots/death(gibbed)
Expand Down
78 changes: 76 additions & 2 deletions code/modules/mob/living/simple_animal/abnormality/he/woodsman.dm
Original file line number Diff line number Diff line change
Expand Up @@ -49,20 +49,40 @@
/mob/living/simple_animal/hostile/abnormality/pinocchio = 1.5,
)

// Flurry Vars
var/flurry_cooldown = 0
var/flurry_cooldown_time = 15 SECONDS
var/flurry_delay = 1.5 SECONDS
var/flurry_pause = 0.25 SECONDS
var/flurry_count = 7
var/flurry_small = 12
var/flurry_big = 60 // It was requested that he beats their ass harder
var/flurry_length = 3
var/flurry_width = 2
var/can_act = TRUE

// Combat map check
var/combat_map = FALSE

// Ramping Vars
var/ramping = 0
var/ramping_max = 10
var/ramping_decay
var/ramping_decay_time = 1 MINUTES
var/initial_melee_damage_lower
var/initial_melee_damage_upper
var/initial_move_to_delay
var/initial_flurry_delay
var/initial_flurry_pause
// Looping Sound for max ramping
var/datum/looping_sound/woodsman/soundloop

//PLAYABLES ATTACKS
attack_action_types = list(/datum/action/innate/abnormality_attack/toggle/woodsman_flurry_toggle)

/datum/action/innate/abnormality_attack/toggle/woodsman_flurry_toggle
name = "Toggle Deforestation"
desc = "Toggle your ability to perform a multi-hitting attack that hits a wide area in front of you."
button_icon_state = "woodsman_toggle0"
chosen_attack_num = 2
chosen_message = span_colossus("You won't fell hearts anymore.")
Expand All @@ -71,6 +91,29 @@
toggle_message = span_colossus("You will now attempt to fell all hearts in your path.")
button_icon_toggle_deactivated = "woodsman_toggle0"

/mob/living/simple_animal/hostile/abnormality/woodsman/Initialize()
. = ..()
soundloop = new(list(src), FALSE)
if(IsCombatMap())
combat_map = TRUE
initial_melee_damage_lower = melee_damage_lower
initial_melee_damage_upper = melee_damage_upper
initial_flurry_delay = flurry_delay
initial_flurry_pause = flurry_pause
initial_move_to_delay = move_to_delay

/mob/living/simple_animal/hostile/abnormality/woodsman/Destroy()
QDEL_NULL(soundloop)
..()

/mob/living/simple_animal/hostile/abnormality/woodsman/Life()
. = ..()
if((combat_map) && !(ramping == 0) && ramping_decay <= world.time)
if(soundloop.timerid)
soundloop.stop()
ramping = 0
to_chat(src, span_notice("You feel a cold emptyness in your chest... it's still not enough."))
RampingUpdate()

/mob/living/simple_animal/hostile/abnormality/woodsman/Move()
if(!can_act)
Expand All @@ -85,6 +128,16 @@
if(H.stat == DEAD || (H.health <= HEALTH_THRESHOLD_DEAD && HAS_TRAIT(H, TRAIT_NODEATH)) || H.health <= -30)
Heal(H)
return ..()
else
if(combat_map)
GainRamping(1)
if(client)
switch(chosen_attack)
if(1)
Woodsman_Flurry(target)
if(2)
return ..()
return ..()
if(isliving(target) && flurry_cooldown <= world.time && get_dist(src, target) <= 2 && prob(30))
Woodsman_Flurry(target)
return ..()
Expand All @@ -107,6 +160,25 @@
return pick(lower_priority)
return ..()

/mob/living/simple_animal/hostile/abnormality/woodsman/proc/GainRamping(amount)
ramping += amount
ramping_decay = world.time + ramping_decay_time
if(ramping >= ramping_max)
ramping = ramping_max
if(!soundloop.timerid)
to_chat(src, span_warning("Your chest echoes loudly... is this how it feels to have a thumping heart?"))
soundloop.start()
return
RampingUpdate()

/mob/living/simple_animal/hostile/abnormality/woodsman/proc/RampingUpdate()
melee_damage_lower = initial_melee_damage_lower + (ramping * 3)
melee_damage_upper = initial_melee_damage_upper + (ramping * 3)
flurry_delay = initial_flurry_delay - (ramping * 0.1) SECONDS
flurry_pause = initial_flurry_pause - (ramping * 0.01) SECONDS
move_to_delay = initial_move_to_delay - (ramping * 0.22)
UpdateSpeed()

/mob/living/simple_animal/hostile/abnormality/woodsman/proc/Heal(mob/living/carbon/human/body)
src.visible_message(span_warning("[src] plunges their hand into [body]'s chest and rips out their heart!"), \
span_notice("You plung your hand into the body of [body] and take their heart, placing it into your cold chest. It's not enough."), \
Expand All @@ -118,6 +190,8 @@
QDEL_NULL(O)
break
body.gib()
if(combat_map)
GainRamping(10)

/mob/living/simple_animal/hostile/abnormality/woodsman/CanAttack(atom/the_target)
if(isliving(target) && !ishuman(target))
Expand Down Expand Up @@ -228,7 +302,7 @@
dir = dir_to_target
playsound(get_turf(src), 'sound/abnormalities/woodsman/woodsman_prepare.ogg', 75, 0, 5)
icon_state = "woodsman_prepare"
SLEEP_CHECK_DEATH(1.5 SECONDS)
SLEEP_CHECK_DEATH(flurry_delay)
for (var/i = 0; i < flurry_count; i++)
icon_state = icon_living
var/list/been_hit = list()
Expand All @@ -239,7 +313,7 @@
playsound(get_turf(src), 'sound/abnormalities/woodsman/woodsman_strong.ogg', 100, 0, 8) // BAM
else
playsound(get_turf(src), 'sound/abnormalities/woodsman/woodsman_attack.ogg', 75, 0, 5)
SLEEP_CHECK_DEATH(0.25 SECONDS)
SLEEP_CHECK_DEATH(flurry_pause)
icon_state = "woodsman_prepare"
icon_state = icon_living
can_act = TRUE
Expand Down
Loading

0 comments on commit 7000e95

Please sign in to comment.