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

Endermage Rcorp Updates: Buffing/Reworking R-Corp Abnormalities [DONE] #2547

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Binary file modified ModularTegustation/Teguicons/48x48.dmi
Binary file not shown.
28 changes: 27 additions & 1 deletion ModularTegustation/tegu_items/rcorp/!abno_overwrites.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@
//Porccubus gets a much shorter dash cooldown to better maneuver itself with how big of a commitment dashing is.
/mob/living/simple_animal/hostile/abnormality/porccubus/Initialize()
if(IsCombatMap())
ranged_cooldown_time = 3 SECONDS
maxHealth = 3000
health = 3000
ranged_cooldown_time = 0.5 SECONDS
return ..()

// Fairy gentleman gets a bump to his survival, damage, and a bigger ass.
Expand All @@ -75,6 +77,24 @@
bullet_damage = 200
return ..()

//Due to Redblooded's very low damage and health, which is normaly fitting for a Teth. That causes them to underperform in R-Corp since they don't have any utility.
//For that reason his health is increased and let his ammo gimmick work by reducing his ranged cooldown.
/mob/living/simple_animal/hostile/abnormality/redblooded/Initialize()
if(SSmaptype.maptype == "rcorp")
ranged_cooldown_time = 0.5 SECONDS
maxHealth = 1200
health = 1200
melee_damage_lower = 15
melee_damage_upper = 20
casingtype = /obj/item/ammo_casing/caseless/rcorp_true_patriot
return ..()

/mob/living/simple_animal/hostile/abnormality/ppodae/Initialize()
if(IsCombatMap())
smash_damage_low = 32
smash_damage_high = 40
return ..()

//Warden deals even less damage then more bodies they eat, and they take more damage from all attacks.
//Warden currently slowballs far to quickly, so this nerf should give R-Corp a better chance at fighting back against them.
/mob/living/simple_animal/hostile/abnormality/warden/Initialize()
Expand All @@ -96,3 +116,9 @@
heal_percent_per_second = 0.01275
r_corp_regen_start = 0.5
return ..()

/mob/living/simple_animal/hostile/abnormality/greed_king/Initialize()
if(IsCombatMap())
initial_charge_damage = 200
growing_charge_damage = 80
return ..()
22 changes: 11 additions & 11 deletions _maps/RandomRooms/rcorp/facility/nest.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
/area/city/outskirts)
"as" = (
/obj/machinery/door/airlock/wood,
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"aA" = (
/obj/effect/turf_decal/siding/wood/corner,
Expand Down Expand Up @@ -134,7 +134,7 @@
/area/city/outskirts)
"cK" = (
/obj/machinery/light/small,
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"cS" = (
/obj/effect/turf_decal/trimline/green/filled/line{
Expand Down Expand Up @@ -298,7 +298,7 @@
/area/city/outskirts)
"fs" = (
/obj/structure/closet/secure_closet/freezer/fridge,
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"fH" = (
/obj/effect/decal/cleanable/blood/drip,
Expand Down Expand Up @@ -557,7 +557,7 @@
/obj/effect/decal/cleanable/blood/tracks{
dir = 10
},
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"lg" = (
/obj/effect/turf_decal/siding/wood,
Expand Down Expand Up @@ -705,7 +705,7 @@
"nG" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/drinks/dry_ramen,
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"ob" = (
/obj/structure/fluff/bus/passable,
Expand Down Expand Up @@ -831,11 +831,11 @@
/turf/open/floor/plasteel/dark,
/area/city/outskirts)
"pP" = (
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"pU" = (
/obj/machinery/griddle,
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"pV" = (
/obj/machinery/conveyor{
Expand Down Expand Up @@ -1295,7 +1295,7 @@
/area/city/outskirts)
"yk" = (
/obj/effect/decal/cleanable/blood/gibs,
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"yy" = (
/turf/open/floor/plating/ashplanet/rocky,
Expand Down Expand Up @@ -1621,7 +1621,7 @@
/obj/structure/sink/kitchen{
pixel_y = 14
},
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"Ft" = (
/obj/machinery/light/broken,
Expand Down Expand Up @@ -2066,7 +2066,7 @@
pixel_x = -7;
pixel_y = 4
},
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"OC" = (
/obj/structure/fluff/bus/passable/seat,
Expand Down Expand Up @@ -2384,7 +2384,7 @@
/area/city/outskirts)
"Tc" = (
/obj/machinery/vending/dinnerware,
/turf/open/floor/plasteel/airless/white,
/turf/open/floor/plasteel/white,
/area/city/outskirts)
"Td" = (
/obj/machinery/light/floor,
Expand Down
3 changes: 3 additions & 0 deletions code/game/objects/items/grenades/grenade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
/// the higher this number, the more projectiles are created as shrapnel
var/shrapnel_radius
var/shrapnel_initialized
var/thrower

/obj/item/grenade/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] primes [src], then eats it! It looks like [user.p_theyre()] trying to commit suicide!</span>")
Expand Down Expand Up @@ -107,6 +108,7 @@
active = TRUE
icon_state = initial(icon_state) + "_active"
SEND_SIGNAL(src, COMSIG_GRENADE_ARMED, det_time, delayoverride)
thrower = user
addtimer(CALLBACK(src, PROC_REF(detonate)), isnull(delayoverride)? det_time : delayoverride)

/**
Expand All @@ -116,6 +118,7 @@
* * lanced_by- If this grenade was detonated by an elance, we need to pass that along with the COMSIG_GRENADE_DETONATE signal for pellet clouds
*/
/obj/item/grenade/proc/detonate(mob/living/lanced_by)
thrower = null
if(shrapnel_type && shrapnel_radius && !shrapnel_initialized) // add a second check for adding the component in case whatever triggered the grenade went straight to prime (badminnery for example)
shrapnel_initialized = TRUE
AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_radius)
Expand Down
7 changes: 4 additions & 3 deletions code/game/objects/items/grenades/r_corp.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,19 @@
desc = "An anti-abnormality grenade, this weapon excels at damaging abnormality using the tech from L-Corp. It deals 90% less damage to humans."
icon_state = "r_corp"
var/explosion_damage_type = RED_DAMAGE
var/explosion_damage = 300
var/explosion_damage = 200
var/explosion_range = 2

/obj/item/grenade/r_corp/detonate(mob/living/lanced_by)
var/aThrower = thrower
. = ..()
update_mob()
new /obj/effect/temp_visual/explosion(get_turf(src))
playsound(loc, 'sound/effects/ordeals/steel/gcorp_boom.ogg', 75, TRUE)
for(var/mob/living/simple_animal/H in view(explosion_range, src))
H.apply_damage(explosion_damage, explosion_damage_type, null, H.run_armor_check(null, RED_DAMAGE))
for(var/mob/living/carbon/C in view(explosion_range, src))
C.apply_damage(explosion_damage * 0.1, explosion_damage_type, null, C.run_armor_check(null, RED_DAMAGE))
C.apply_damage(C == aThrower ? explosion_damage * 0.5 : explosion_damage * 0.1, explosion_damage_type, null, C.run_armor_check(null, RED_DAMAGE))
qdel(src)

/obj/item/grenade/r_corp/white
Expand All @@ -31,4 +32,4 @@
name = "r-corp pale grenade"
icon_state = "r_corp_pale"
explosion_damage_type = PALE_DAMAGE
explosion_damage = 250
explosion_damage = 150
14 changes: 4 additions & 10 deletions code/modules/mob/living/simple_animal/abnormality/he/eris.dm
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,14 @@
Hours later, Eris dines with another stranger. <br>My head is resting on that very same plate."

var/girlboss_level = 0
var/can_heal = TRUE

/mob/living/simple_animal/hostile/abnormality/eris/Login()
. = ..()
to_chat(src, "<h1>You are Eris, A Tank Role Abnormality.</h1><br>\
<b>|Humanoid Disguise|: You are only able to attack humans who only have a very low amount of health, or if they are dead.<br>\
If they attack a human who fulfills the above conditions, you will devor them, and gain a stack of 'Girl Boss'<br>\
<br>\
|Dine with me...|: Every second, you heal ALL targets that you can see if they are bellow half health.<br>\
|Dine with me...|: Every second, you heal ALL targets that you can see.<br>\
Your healing increases depending on the amount of 'Girl Boss' you have.<br>\
<br>\
|Elegant Form|: When you are attacked by a human, deal WHITE damage to the attack. This damage is increase depending on your 'Girl Boss' stacks.</b>")
Expand Down Expand Up @@ -192,17 +191,12 @@
//Okay, but here's the math
/mob/living/simple_animal/hostile/abnormality/eris/proc/healpulse()
for(var/mob/living/H in view(10, get_turf(src)))
can_heal = TRUE
if(H.stat >= SOFT_CRIT)
continue
//Shamelessly fucking stolen from risk of rain's teddy bear. Maxes out at 20.
if(SSmaptype.maptype == "rcorp")
if(H.health > H.maxHealth*0.5)
can_heal = FALSE
if (can_heal == TRUE)
var/healamount = 20 * (TOUGHER_TIMES(girlboss_level))
H.adjustBruteLoss(-healamount) //Healing for those around.
new /obj/effect/temp_visual/heal(get_turf(H), "#FF4444")
var/healamount = 20 * (TOUGHER_TIMES(girlboss_level))
H.adjustBruteLoss(-healamount) //Healing for those around.
new /obj/effect/temp_visual/heal(get_turf(H), "#FF4444")

//Okay but here's the defensive options
/mob/living/simple_animal/hostile/abnormality/eris/bullet_act(obj/projectile/Proj)
Expand Down
78 changes: 62 additions & 16 deletions code/modules/mob/living/simple_animal/abnormality/he/porccubus.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,25 @@
var/teleport_cooldown_time = 5 MINUTES
var/teleport_cooldown
var/damage_taken = FALSE
var/leap_recharge_time = 2 SECONDS
var/leap_charges = 3
var/max_leap_charges = 3
var/timer_added = FALSE
var/in_charging = FALSE
attack_action_types = list(/datum/action/innate/abnormality_attack/toggle/porccubus_dash_toggle)

/mob/living/simple_animal/hostile/abnormality/porccubus/Login()
. = ..()
if(!. || !client)
return FALSE
to_chat(src, "<h1>You are Porccubus, A Tank Role Abnormality.</h1><br>\
<b>|Fluttering|: You are immune to all projectiles. However you are unable to move. \
However, If you click on a tile that is at least 3 tiles away from you. You will spend a leap charge to dash to that tile. \
You regain a leap charge every 3 seconds, and you can hold a max of 3 at a time.<br>\
<br>\
|Happiness|: Your melee attack has a range of 2 tiles.</b>")

//PLAYABLE ATTACKS
attack_action_types = list(/datum/action/innate/abnormality_attack/toggle/porccubus_dash_toggle)

/datum/action/innate/abnormality_attack/toggle/porccubus_dash_toggle
name = "Toggle Dash"
Expand Down Expand Up @@ -171,31 +187,52 @@
//Breach Code Attacks
/mob/living/simple_animal/hostile/abnormality/porccubus/OpenFire(atom/A)
if(client)
if(ranged_cooldown > world.time || chosen_attack != 1)
RangedAttack(A)
if(!IsCombatMap())
if(ranged_cooldown > world.time || chosen_attack != 1)
RangedAttack(A)
switch(chosen_attack)
if(1)
PorcDash(target)
DashChecker(target)
return

if(!target)
return
if(!isliving(target))
return
PorcDash(A)
DashChecker(A)

/mob/living/simple_animal/hostile/abnormality/porccubus/proc/PorcDash(atom/target)//additionally, it can dash to its target every 15 seconds if it's out of range
/mob/living/simple_animal/hostile/abnormality/porccubus/proc/DashChecker(atom/target)
var/dist = get_dist(target, src)
if(dist > 2 && ranged_cooldown < world.time)
ranged_cooldown = world.time + ranged_cooldown_time
var/list/dash_line = getline(src, target)
for(var/turf/line_turf in dash_line) //checks if there's a valid path between the turf and the friend
if(line_turf.is_blocked_turf(exclude_mobs = TRUE))
break
forceMove(line_turf)
SLEEP_CHECK_DEATH(0.8)
playsound(src, 'sound/abnormalities/porccubus/porccu_giggle.ogg', 10, FALSE, 4) // This thing is absurdly loud
ranged_cooldown = world.time + ranged_cooldown_time
if(IsCombatMap())
if(dist > 2 && leap_charges > 0 && !in_charging)
PorcDash(target)
else
if(dist > 2 && ranged_cooldown < world.time)
ranged_cooldown = world.time + ranged_cooldown_time
PorcDash(target)

/mob/living/simple_animal/hostile/abnormality/porccubus/proc/PorcDash(atom/target)//additionally, it can dash to its target every 15 seconds if it's out of range
// var/dist = get_dist(target, src)
// if(IsCombatMap())
// if(dist > 2 && charges > 0)
// else
// if(dist > 2 && ranged_cooldown < world.time)
// ranged_cooldown = world.time + ranged_cooldown_time
in_charging = TRUE
var/list/dash_line = getline(src, target)
for(var/turf/line_turf in dash_line) //checks if there's a valid path between the turf and the friend
if(line_turf.is_blocked_turf(exclude_mobs = TRUE))
break
forceMove(line_turf)
SLEEP_CHECK_DEATH(1)
playsound(src, 'sound/abnormalities/porccubus/porccu_giggle.ogg', 10, FALSE, 4) // This thing is absurdly loud
ranged_cooldown = world.time + ranged_cooldown_time
if(IsCombatMap())
leap_charges -= 1
if(!timer_added)
addtimer(CALLBACK(src, PROC_REF(AddCharge)), leap_recharge_time)
timer_added = TRUE
in_charging = FALSE

/mob/living/simple_animal/hostile/abnormality/porccubus/AttackingTarget(atom/attacked_target)
var/mob/living/carbon/human/H
Expand All @@ -214,6 +251,15 @@
LoseTarget()
H.faction += "porccubus" //that guy's already fucked, even if they can kill porccubus safely now, porccubus has done its job of being a cunt

/mob/living/simple_animal/hostile/abnormality/porccubus/proc/AddCharge()
if(leap_charges < max_leap_charges)
leap_charges++
to_chat(src, "<span class='notice'> You now have [leap_charges]/[max_leap_charges] leap charges.</span>")
timer_added = FALSE
if(leap_charges < max_leap_charges)
addtimer(CALLBACK(src, PROC_REF(AddCharge)), leap_recharge_time)
timer_added = TRUE

//Drug Item
//this is only obtainable if someone else dies from the addiction, but it's the only way to get drugged without working on porccubus
/obj/item/porccubus_drug
Expand Down
Loading
Loading