From 721e89eac751fe09f26f8cb1df93a1dde12af66d Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Thu, 18 Jan 2024 00:45:52 +0300 Subject: [PATCH 1/8] prae fix --- .../xenomorph/abilities/praetorian/praetorian_powers.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm index 966e9ce84309..2eaf332755dc 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm @@ -738,7 +738,9 @@ if (!X.check_state() || X.action_busy) return - if (!action_cooldown_check() && check_and_use_plasma_owner()) + if (!action_cooldown_check()) + return + if (!check_and_use_plasma_owner()) return var/turf/current_turf = get_turf(X) @@ -750,8 +752,6 @@ to_chat(X, SPAN_XENODANGER("We cancel our acid ball.")) return - if (!action_cooldown_check()) - return apply_cooldown() From 894021ed955c9a565941f4184cfb9cb0d982d853 Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Thu, 18 Jan 2024 16:44:24 +0300 Subject: [PATCH 2/8] sofar --- code/__DEFINES/mobs.dm | 4 + code/__DEFINES/typecheck/xenos.dm | 1 + code/__DEFINES/xeno.dm | 4 +- code/game/jobs/role_authority.dm | 2 + .../items/explosives/grenades/xeno_nades.dm | 39 ++++++++ .../admin/player_panel/actions/transform.dm | 5 + code/modules/cm_aliens/XenoStructures.dm | 6 +- .../mob/living/carbon/xenomorph/Evolution.dm | 2 + .../abilities/queen/queen_abilities.dm | 15 --- .../xenomorph/abilities/queen/queen_powers.dm | 59 ----------- .../abilities/reaper/reaper_abilities.dm | 25 +++++ .../abilities/reaper/reaper_powers.dm | 94 ++++++++++++++++++ .../living/carbon/xenomorph/castes/Drone.dm | 2 +- .../living/carbon/xenomorph/castes/Queen.dm | 3 +- .../living/carbon/xenomorph/castes/Reaper.dm | 77 ++++++++++++++ colonialmarines.dme | 3 + icons/mob/xenos/reaper.dmi | Bin 0 -> 10946 bytes 17 files changed, 260 insertions(+), 81 deletions(-) create mode 100644 code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_abilities.dm create mode 100644 code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm create mode 100644 code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm create mode 100644 icons/mob/xenos/reaper.dmi diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 9cd69e61c8b2..a06aeb823723 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -372,6 +372,10 @@ #define PRAETORIAN_WARDEN "Warden" #define PRAETORIAN_OPPRESSOR "Oppressor" +// Reaper strain flags + +#define REAPER_NORMAL "Normal" + // Hellhound strain flags #define HELLHOUND_NORMAL "Normal" diff --git a/code/__DEFINES/typecheck/xenos.dm b/code/__DEFINES/typecheck/xenos.dm index 34b70ac92f45..2f525eda749e 100644 --- a/code/__DEFINES/typecheck/xenos.dm +++ b/code/__DEFINES/typecheck/xenos.dm @@ -3,6 +3,7 @@ #define isxeno_human(A) (isxeno(A) || ishuman(A)) //ask walter if i should turn into castechecks +#define isravager(A) (istype(A, /mob/living/carbon/xenomorph/reaper)) #define isboiler(A) (istype(A, /mob/living/carbon/xenomorph/boiler)) #define iscarrier(A) (istype(A, /mob/living/carbon/xenomorph/carrier)) #define iscrusher(A) (istype(A, /mob/living/carbon/xenomorph/crusher)) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index e3a35d0c4744..94c35bdd2ff0 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -263,6 +263,7 @@ #define XENO_PLASMA_TIER_6 600 * XENO_UNIVERSAL_PLASMAMULT #define XENO_PLASMA_TIER_8 800 * XENO_UNIVERSAL_PLASMAMULT #define XENO_PLASMA_TIER_10 1000 * XENO_UNIVERSAL_PLASMAMULT +#define XENO_PLASMA_TIER_12 2000 * XENO_UNIVERSAL_PLASMAMULT // Plasma gain bands #define XENO_PLASMA_GAIN_TIER_1 1 @@ -643,11 +644,12 @@ #define XENO_CASTE_SPITTER "Spitter" #define XENO_T2_CASTES list(XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER) //t3 +#define XENO_CASTE_REAPER "Reaper" #define XENO_CASTE_BOILER "Boiler" #define XENO_CASTE_PRAETORIAN "Praetorian" #define XENO_CASTE_CRUSHER "Crusher" #define XENO_CASTE_RAVAGER "Ravager" -#define XENO_T3_CASTES list(XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER) +#define XENO_T3_CASTES list(XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_REAPER) //special #define XENO_CASTE_QUEEN "Queen" #define XENO_CASTE_PREDALIEN "Predalien" diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index be2b75e0e7f6..f697b45cfbf7 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -812,6 +812,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou M = /mob/living/carbon/xenomorph/predalien if(XENO_CASTE_HELLHOUND) M = /mob/living/carbon/xenomorph/hellhound + if(XENO_CASTE_REAPER) + M = /mob/living/carbon/xenomorph/reaper return M diff --git a/code/game/objects/items/explosives/grenades/xeno_nades.dm b/code/game/objects/items/explosives/grenades/xeno_nades.dm index 7925434e2fb4..67b0f1dcd0cc 100644 --- a/code/game/objects/items/explosives/grenades/xeno_nades.dm +++ b/code/game/objects/items/explosives/grenades/xeno_nades.dm @@ -15,3 +15,42 @@ create_shrapnel(loc, shrapnel_count, , ,shrapnel_type, cause_data) qdel(src) ..() + + + +/obj/item/explosive/grenade/xeno_weed_grenade + name = "Node Ball" + desc = "a small resin node pulsating and turning in itself." + icon_state = "neuro_nade" + det_time = 1 SECONDS + item_state = "neuro_nade" + + rebounds = FALSE + +/obj/item/explosive/grenade/xeno_weed_grenade/prime() + + + var/turf/current_turf = get_turf(src) + var/obj/effect/alien/weeds/weed = locate() in current_turf + + if((locate(/obj/effect/alien/weeds/node) in current_turf)) + qdel(src) + return + if(weed && weed.weed_strength >= WEED_LEVEL_HIVE) + qdel(src) + return + else + new /obj/effect/alien/weeds/node(current_turf) + qdel(src) + + + + + + + + + + + + diff --git a/code/modules/admin/player_panel/actions/transform.dm b/code/modules/admin/player_panel/actions/transform.dm index 91a62b1a1d02..0bf3c2b7f59a 100644 --- a/code/modules/admin/player_panel/actions/transform.dm +++ b/code/modules/admin/player_panel/actions/transform.dm @@ -122,6 +122,11 @@ GLOBAL_LIST_INIT(pp_transformables, list( name = XENO_CASTE_CRUSHER, key = /mob/living/carbon/xenomorph/crusher, color = "purple" + ), + list( + name = XENO_CASTE_REAPER, + key = /mob/living/carbon/xenomorph/reaper, + color = "purple" ) ), diff --git a/code/modules/cm_aliens/XenoStructures.dm b/code/modules/cm_aliens/XenoStructures.dm index 7e4f7996d3f8..d16428fc77ec 100644 --- a/code/modules/cm_aliens/XenoStructures.dm +++ b/code/modules/cm_aliens/XenoStructures.dm @@ -701,9 +701,9 @@ icon_state = "resin_pillar" invisibility = INVISIBILITY_MAXIMUM var/width = 3 - var/height = 3 - var/time_to_brittle = 45 SECONDS - var/time_to_collapse = 45 SECONDS + var/height = 1 + var/time_to_brittle = 5 SECONDS + var/time_to_collapse = 5 SECONDS var/turf_icon = WALL_THICKRESIN var/brittle_turf_icon = WALL_MEMBRANE diff --git a/code/modules/mob/living/carbon/xenomorph/Evolution.dm b/code/modules/mob/living/carbon/xenomorph/Evolution.dm index d6f963747e33..48e25a15ab53 100644 --- a/code/modules/mob/living/carbon/xenomorph/Evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/Evolution.dm @@ -324,6 +324,8 @@ xeno_type = /mob/living/carbon/xenomorph/defender if(XENO_CASTE_BURROWER) xeno_type = /mob/living/carbon/xenomorph/burrower + if(XENO_CASTE_REAPER) + xeno_type = /mob/living/carbon/xenomorph/reaper var/mob/living/carbon/xenomorph/new_xeno = new xeno_type(get_turf(src), src) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm index 50fa9fd92b2c..7e82b37d4697 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_abilities.dm @@ -175,21 +175,6 @@ SIGNAL_HANDLER hide_from(Q) - -/datum/action/xeno_action/activable/blockade - name = "Place Blockade" - action_icon_state = "place_blockade" - ability_name = "place blockade" - plasma_cost = 300 - action_type = XENO_ACTION_CLICK - - var/obj/effect/alien/resin/resin_pillar/pillar_type = /obj/effect/alien/resin/resin_pillar - var/time_taken = 6 SECONDS - charges = 0 - - var/brittle_time = 45 SECONDS - var/decay_time = 45 SECONDS - /datum/action/xeno_action/activable/blockade/give_to(mob/living/carbon/xenomorph/queen/Q) . = ..() if(!Q.ovipositor) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm index 917a7b1c9af7..77fb4b059ada 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm @@ -635,65 +635,6 @@ return TRUE -/datum/action/xeno_action/activable/blockade/use_ability(atom/A) - var/mob/living/carbon/xenomorph/queen/Q = owner - if(!Q.check_state()) - return FALSE - - if(!action_cooldown_check()) - return FALSE - - if(Q.action_busy) - return FALSE - - var/width = initial(pillar_type.width) - var/height = initial(pillar_type.height) - - var/turf/T = get_turf(A) - if(T.density) - to_chat(Q, SPAN_XENOWARNING("You can only construct this blockade in open areas!")) - return FALSE - - if(T.z != owner.z) - to_chat(Q, SPAN_XENOWARNING("That's too far away!")) - return FALSE - - if(!T.weeds) - to_chat(Q, SPAN_XENOWARNING("You can only construct this blockade on weeds!")) - return FALSE - - if(!Q.check_plasma(plasma_cost)) - return - - var/list/alerts = list() - for(var/i in RANGE_TURFS(Floor(width/2), T)) - alerts += new /obj/effect/warning/alien(i) - - if(!do_after(Q, time_taken, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY)) - QDEL_NULL_LIST(alerts) - return FALSE - QDEL_NULL_LIST(alerts) - - if(!check_turf(Q, T)) - return FALSE - - if(!check_and_use_plasma_owner()) - return - - var/turf/new_turf = locate(max(T.x - Floor(width/2), 1), max(T.y - Floor(height/2), 1), T.z) - to_chat(Q, SPAN_XENONOTICE("You raise a blockade!")) - var/obj/effect/alien/resin/resin_pillar/RP = new pillar_type(new_turf) - RP.start_decay(brittle_time, decay_time) - - return ..() - -/datum/action/xeno_action/activable/blockade/proc/check_turf(mob/living/carbon/xenomorph/queen/Q, turf/T) - if(T.density) - to_chat(Q, SPAN_XENOWARNING("You can't place a blockade here.")) - return FALSE - - return TRUE - /mob/living/carbon/xenomorph/proc/xeno_tacmap() set name = "View Xeno Tacmap" set desc = "This opens a tactical map, where you can see where every xenomorph is." diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_abilities.dm new file mode 100644 index 000000000000..04ece7d61400 --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_abilities.dm @@ -0,0 +1,25 @@ +/datum/action/xeno_action/activable/blockade + name = "Place Blockade" + action_icon_state = "place_blockade" + ability_name = "place blockade" + plasma_cost = 300 + action_type = XENO_ACTION_CLICK + xeno_cooldown = 15 SECONDS + + var/obj/effect/alien/resin/resin_pillar/pillar_type = /obj/effect/alien/resin/resin_pillar + var/time_taken = 1 SECONDS + + var/brittle_time = 5 SECONDS + var/decay_time = 5 SECONDS + + +/datum/action/xeno_action/activable/weed_nade + name = "Lob Resin" + action_icon_state = "prae_dodge" + plasma_cost = 300 + action_type = XENO_ACTION_CLICK + xeno_cooldown = 10 SECONDS + + var/explode_delay = 1 SECONDS + var/priming_delay = 1 SECONDS + diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm new file mode 100644 index 000000000000..6e1d1d7e1ab1 --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm @@ -0,0 +1,94 @@ +/datum/action/xeno_action/activable/blockade/use_ability(atom/A) // blockade, this abiltiy should always either last a short time or the walls should be destructible in 1-3 hits. + var/mob/living/carbon/xenomorph/queen/reaper = owner + if(!reaper.check_state()) + return FALSE + + if(!action_cooldown_check()) + return FALSE + + if(reaper.action_busy) + return FALSE + + var/width = initial(pillar_type.width) + var/height = initial(pillar_type.height) + + var/turf/T = get_turf(A) + if((locate (/obj/effect/alien/weeds/node/pylon/core) in T)) //core has resin node in it, wall ontop of resin node deletes it, wall ontop of hive core delets all hive weeds if put ontop of it. + return FALSE + if(T.density) + to_chat(reaper, SPAN_XENOWARNING("We can only construct this blockade in open areas!")) + return FALSE + + if(T.z != owner.z) + to_chat(reaper, SPAN_XENOWARNING("That's too far away!")) + return FALSE + + if(!T.weeds) + to_chat(reaper, SPAN_XENOWARNING("We can only construct this blockade on weeds!")) + return FALSE + + if(!reaper.check_plasma(plasma_cost)) + return + + + if(!check_turf(reaper, T)) + return FALSE + + if(!check_and_use_plasma_owner()) + return + + var/turf/new_turf = locate(max(T.x - Floor(width/2), 1), max(T.y - Floor(height/2), 1), T.z) + to_chat(reaper, SPAN_XENONOTICE("We raise a blockade!")) + var/obj/effect/alien/resin/resin_pillar/RP = new pillar_type(new_turf) + RP.start_decay(brittle_time, decay_time) + apply_cooldown() + return ..() + + + +/datum/action/xeno_action/activable/blockade/proc/check_turf(mob/living/carbon/xenomorph/queen/reaper, turf/T) + if(T.density) + to_chat(reaper, SPAN_XENOWARNING("We can't place a blockade here.")) + return FALSE + + return TRUE + + + + +/datum/action/xeno_action/activable/weed_nade/use_ability(atom/A) // weed nade + var/mob/living/carbon/xenomorph/reaper_spit = owner + if (!reaper_spit.check_state() || reaper_spit.action_busy) + return + if (!action_cooldown_check()) + return + if (!check_and_use_plasma_owner()) + return + + var/turf/current_turf = get_turf(reaper_spit) + + if (!current_turf) + return + + if (!do_after(reaper_spit, explode_delay, INTERRUPT_ALL | BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)) + to_chat(reaper_spit, SPAN_XENODANGER("We stop preparing a resin node in our glands.")) + return + + apply_cooldown() + to_chat(reaper_spit, SPAN_XENOWARNING("We throw a resin node through the air.")) + + var/obj/item/explosive/grenade/xeno_weed_grenade/reaper_grenade = new /obj/item/explosive/grenade/xeno_weed_grenade + reaper_grenade.cause_data = create_cause_data(initial(reaper_spit.caste_type), reaper_spit) + reaper_grenade.forceMove(get_turf(reaper_spit)) + reaper_grenade.throw_atom(A, 5, SPEED_SLOW, reaper_spit, TRUE) + addtimer(CALLBACK(reaper_grenade, TYPE_PROC_REF(/obj/item/explosive, prime)), priming_delay) + + + + + + + + + + diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/Drone.dm index c4c9b11b37e4..c2703d2a9367 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Drone.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Drone.dm @@ -15,7 +15,7 @@ build_time_mult = BUILD_TIME_MULT_BUILDER caste_desc = "A builder of hives. Only drones may evolve into Queens." - evolves_to = list(XENO_CASTE_QUEEN, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD) //Add more here separated by commas + evolves_to = list(XENO_CASTE_QUEEN, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_REAPER) //Add more here separated by commas deevolves_to = list("Larva") can_hold_facehuggers = 1 can_hold_eggs = CAN_HOLD_TWO_HANDS diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm index 6d082b327b48..949e60455496 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm @@ -308,8 +308,7 @@ /datum/action/xeno_action/onclick/banish, /datum/action/xeno_action/onclick/readmit, /datum/action/xeno_action/onclick/queen_award, - /datum/action/xeno_action/activable/info_marker/queen, - ) + /datum/action/xeno_action/activable/info_marker/queen, ) inherent_verbs = list( /mob/living/carbon/xenomorph/proc/claw_toggle, diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm new file mode 100644 index 000000000000..5879ee63a6aa --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm @@ -0,0 +1,77 @@ +/datum/caste_datum/Reaper + caste_type = XENO_CASTE_REAPER + tier = 3 + + melee_damage_lower = XENO_DAMAGE_TIER_4 + melee_damage_upper = XENO_DAMAGE_TIER_6 + melee_vehicle_damage = XENO_DAMAGE_TIER_9 //Queen and Ravs have extra multiplier when dealing damage in multitile_interaction.dm + max_health = XENO_HEALTH_TIER_9 + plasma_gain = XENO_PLASMA_GAIN_TIER_7 + plasma_max = XENO_PLASMA_TIER_12 + xeno_explosion_resistance = XENO_EXPLOSIVE_ARMOR_TIER_4 + armor_deflection = XENO_ARMOR_TIER_2 + evasion = XENO_EVASION_NONE + speed = XENO_SPEED_FASTMOD_TIER_6 + + build_time_mult = BUILD_TIME_MULT_BUILDER + + is_intelligent = 1 + evolution_allowed = FALSE + fire_immunity = FIRE_IMMUNITY_NO_DAMAGE|FIRE_IMMUNITY_NO_IGNITE + caste_desc = "He who reaps" + deevolves_to = list("Larva") + can_hold_facehuggers = 1 + can_hold_eggs = CAN_HOLD_ONE_HAND + acid_level = 2 + weed_level = WEED_LEVEL_STANDARD + can_be_revived = FALSE + + spit_delay = 25 + + tackle_min = 2 + tackle_max = 6 + tackle_chance = 55 + + aura_strength = 4 + tacklestrength_min = 5 + tacklestrength_max = 6 + + +/mob/living/carbon/xenomorph/reaper + caste_type = XENO_CASTE_REAPER + name = XENO_CASTE_REAPER + desc = "An alien reaper" + icon_size = 64 + icon_state = "Reaper Walking" + plasma_types = list(PLASMA_EGG, PLASMA_CATECHOLAMINE) + tier = 3 + pixel_x = -12 + old_x = -12 + base_actions = list( + /datum/action/xeno_action/onclick/xeno_resting, + /datum/action/xeno_action/onclick/regurgitate, + /datum/action/xeno_action/watch_xeno, + /datum/action/xeno_action/activable/tail_stab, + /datum/action/xeno_action/activable/corrosive_acid/weak, + /datum/action/xeno_action/onclick/emit_pheromones, + /datum/action/xeno_action/activable/place_construction, + /datum/action/xeno_action/onclick/plant_weeds, //first macro + /datum/action/xeno_action/onclick/choose_resin, //second macro + /datum/action/xeno_action/activable/secrete_resin, //third macro + /datum/action/xeno_action/activable/queen_give_plasma, //fourth macro + /datum/action/xeno_action/onclick/tacmap, + /datum/action/xeno_action/activable/blockade, + /datum/action/xeno_action/activable/weed_nade, + ) + + icon_xeno = 'icons/mob/xenos/reaper.dmi' + icon_xenonid = 'icons/mob/xenonids/praetorian.dmi' + + inherent_verbs = list( + /mob/living/carbon/xenomorph/proc/rename_tunnel, + /mob/living/carbon/xenomorph/proc/set_hugger_reserve_for_morpher, + ) + mutation_type = REAPER_NORMAL + + + diff --git a/colonialmarines.dme b/colonialmarines.dme index ec330db86a4d..7d15b79e86ef 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -2012,6 +2012,8 @@ #include "code\modules\mob\living\carbon\xenomorph\abilities\ravager\ravager_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\ravager\ravager_macros.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\ravager\ravager_powers.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\reaper\reaper_abilities.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\reaper\reaper_powers.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\runner\runner_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\runner\runner_macros.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\runner\runner_powers.dm" @@ -2041,6 +2043,7 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\Predalien.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Queen.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Ravager.dm" +#include "code\modules\mob\living\carbon\xenomorph\castes\Reaper.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Runner.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Sentinel.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Spitter.dm" diff --git a/icons/mob/xenos/reaper.dmi b/icons/mob/xenos/reaper.dmi new file mode 100644 index 0000000000000000000000000000000000000000..738fd0df73588ab75f020fd97b96231b0f11652d GIT binary patch literal 10946 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 E2VyWK*#H0l literal 0 HcmV?d00001 From 63aa8273c015574c78bc7a4eaf33132904552f89 Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Thu, 18 Jan 2024 18:22:57 +0300 Subject: [PATCH 3/8] shield pillar and global list --- code/_globalvars/global_lists.dm | 14 +++++++++++++- .../mob/living/carbon/xenomorph/castes/Reaper.dm | 7 ++++++- .../living/carbon/xenomorph/resin_constructions.dm | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 6e1b229e562f..9edaa3979219 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -67,6 +67,18 @@ GLOBAL_LIST_INIT(resin_build_order_drone, list( /datum/resin_construction/resin_obj/resin_spike )) +GLOBAL_LIST_INIT(resin_build_order_reaper, list( + /datum/resin_construction/resin_turf/wall/thick, + /datum/resin_construction/resin_turf/wall/reflective, + /datum/resin_construction/resin_turf/membrane/thick, + /datum/resin_construction/resin_obj/door/thick, + /datum/resin_construction/resin_obj/acid_pillar, + /datum/resin_construction/resin_obj/sticky_resin, + /datum/resin_construction/resin_obj/fast_resin, + /datum/resin_construction/resin_obj/resin_spike, + /datum/resin_construction/resin_obj/shield_dispenser +)) + GLOBAL_LIST_INIT(resin_build_order_hivelord, list( /datum/resin_construction/resin_turf/wall/thick, /datum/resin_construction/resin_turf/wall/reflective, @@ -75,7 +87,7 @@ GLOBAL_LIST_INIT(resin_build_order_hivelord, list( /datum/resin_construction/resin_obj/acid_pillar, /datum/resin_construction/resin_obj/sticky_resin, /datum/resin_construction/resin_obj/fast_resin, - /datum/resin_construction/resin_obj/resin_spike + /datum/resin_construction/resin_obj/resin_spike, )) GLOBAL_LIST_INIT(resin_build_order_hivelord_whisperer, list( diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm index 5879ee63a6aa..c7f7b997684e 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm @@ -58,7 +58,7 @@ /datum/action/xeno_action/onclick/plant_weeds, //first macro /datum/action/xeno_action/onclick/choose_resin, //second macro /datum/action/xeno_action/activable/secrete_resin, //third macro - /datum/action/xeno_action/activable/queen_give_plasma, //fourth macro + /datum/action/xeno_action/activable/queen_give_plasma, //fourth macro /datum/action/xeno_action/onclick/tacmap, /datum/action/xeno_action/activable/blockade, /datum/action/xeno_action/activable/weed_nade, @@ -73,5 +73,10 @@ ) mutation_type = REAPER_NORMAL +/datum/caste_datum/Reaper/New() + . = ..() + + resin_build_order = GLOB.resin_build_order_reaper + diff --git a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm index 793ed45bcb13..73207bf58107 100644 --- a/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm +++ b/code/modules/mob/living/carbon/xenomorph/resin_constructions.dm @@ -281,6 +281,7 @@ GLOBAL_VAR_INIT(resin_lz_allowed, FALSE) construction_name = "shield pillar" cost = XENO_RESIN_SHIELD_PILLAR_COST max_per_xeno = 1 + build_overlay_icon = /obj/effect/warning/alien/weak build_path = /obj/effect/alien/resin/shield_pillar build_time = 12 SECONDS From d985671dd6ff73f3c89617f414ee703562abcab7 Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Wed, 21 Feb 2024 19:08:13 +0300 Subject: [PATCH 4/8] placeholder descp, damage change and empty line dels --- .../carbon/xenomorph/abilities/reaper/reaper_powers.dm | 10 ---------- .../mob/living/carbon/xenomorph/castes/Reaper.dm | 6 +++--- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm index 6e1d1d7e1ab1..b26c32ae8157 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm @@ -82,13 +82,3 @@ reaper_grenade.forceMove(get_turf(reaper_spit)) reaper_grenade.throw_atom(A, 5, SPEED_SLOW, reaper_spit, TRUE) addtimer(CALLBACK(reaper_grenade, TYPE_PROC_REF(/obj/item/explosive, prime)), priming_delay) - - - - - - - - - - diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm index c7f7b997684e..e9db9bb50987 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm @@ -3,8 +3,8 @@ tier = 3 melee_damage_lower = XENO_DAMAGE_TIER_4 - melee_damage_upper = XENO_DAMAGE_TIER_6 - melee_vehicle_damage = XENO_DAMAGE_TIER_9 //Queen and Ravs have extra multiplier when dealing damage in multitile_interaction.dm + melee_damage_upper = XENO_DAMAGE_TIER_5 + melee_vehicle_damage = XENO_DAMAGE_TIER_9 max_health = XENO_HEALTH_TIER_9 plasma_gain = XENO_PLASMA_GAIN_TIER_7 plasma_max = XENO_PLASMA_TIER_12 @@ -18,7 +18,7 @@ is_intelligent = 1 evolution_allowed = FALSE fire_immunity = FIRE_IMMUNITY_NO_DAMAGE|FIRE_IMMUNITY_NO_IGNITE - caste_desc = "He who reaps" + caste_desc = "john reaper" // temporary deevolves_to = list("Larva") can_hold_facehuggers = 1 can_hold_eggs = CAN_HOLD_ONE_HAND From 55fcf8debbec3bc5c1af4ae39120597ddaa8cd33 Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Wed, 21 Feb 2024 19:17:14 +0300 Subject: [PATCH 5/8] typecheck --- code/__DEFINES/typecheck/xenos.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/typecheck/xenos.dm b/code/__DEFINES/typecheck/xenos.dm index 2f525eda749e..57d10f8e935b 100644 --- a/code/__DEFINES/typecheck/xenos.dm +++ b/code/__DEFINES/typecheck/xenos.dm @@ -3,7 +3,7 @@ #define isxeno_human(A) (isxeno(A) || ishuman(A)) //ask walter if i should turn into castechecks -#define isravager(A) (istype(A, /mob/living/carbon/xenomorph/reaper)) +#define isreaper(A) (istype(A, /mob/living/carbon/xenomorph/reaper)) #define isboiler(A) (istype(A, /mob/living/carbon/xenomorph/boiler)) #define iscarrier(A) (istype(A, /mob/living/carbon/xenomorph/carrier)) #define iscrusher(A) (istype(A, /mob/living/carbon/xenomorph/crusher)) From 5027ec942b11becf47366d02e86b7cf2329c48d5 Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Wed, 21 Feb 2024 19:24:20 +0300 Subject: [PATCH 6/8] more empty lines deleted --- .../objects/items/explosives/grenades/xeno_nades.dm | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/code/game/objects/items/explosives/grenades/xeno_nades.dm b/code/game/objects/items/explosives/grenades/xeno_nades.dm index 67b0f1dcd0cc..e037fe6504ee 100644 --- a/code/game/objects/items/explosives/grenades/xeno_nades.dm +++ b/code/game/objects/items/explosives/grenades/xeno_nades.dm @@ -42,15 +42,3 @@ else new /obj/effect/alien/weeds/node(current_turf) qdel(src) - - - - - - - - - - - - From 64a155c0a48bd5960ffc21c03bf60dbd7db5cc97 Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Wed, 21 Feb 2024 19:29:51 +0300 Subject: [PATCH 7/8] remove old strain --- code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm index e9db9bb50987..04692b22f73b 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm @@ -71,7 +71,6 @@ /mob/living/carbon/xenomorph/proc/rename_tunnel, /mob/living/carbon/xenomorph/proc/set_hugger_reserve_for_morpher, ) - mutation_type = REAPER_NORMAL /datum/caste_datum/Reaper/New() . = ..() From 93d8c8aa2e77c2d7e70e05af8f3f9468087b2701 Mon Sep 17 00:00:00 2001 From: InsaneRed Date: Wed, 21 Feb 2024 19:41:14 +0300 Subject: [PATCH 8/8] snake_case, spit delay removal and max build dist --- .../abilities/reaper/reaper_powers.dm | 22 +++++++++---------- .../living/carbon/xenomorph/castes/Reaper.dm | 4 +--- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm index b26c32ae8157..4d2b3b50c825 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/reaper/reaper_powers.dm @@ -1,5 +1,5 @@ /datum/action/xeno_action/activable/blockade/use_ability(atom/A) // blockade, this abiltiy should always either last a short time or the walls should be destructible in 1-3 hits. - var/mob/living/carbon/xenomorph/queen/reaper = owner + var/mob/living/carbon/xenomorph/reaper = owner if(!reaper.check_state()) return FALSE @@ -12,18 +12,18 @@ var/width = initial(pillar_type.width) var/height = initial(pillar_type.height) - var/turf/T = get_turf(A) - if((locate (/obj/effect/alien/weeds/node/pylon/core) in T)) //core has resin node in it, wall ontop of resin node deletes it, wall ontop of hive core delets all hive weeds if put ontop of it. + var/turf/active_turf = get_turf(A) + if((locate (/obj/effect/alien/weeds/node/pylon/core) in active_turf)) //core has resin node in it, wall ontop of resin node deletes it, wall ontop of hive core delets all hive weeds if put ontop of it. return FALSE - if(T.density) + if(active_turf.density) to_chat(reaper, SPAN_XENOWARNING("We can only construct this blockade in open areas!")) return FALSE - if(T.z != owner.z) + if(active_turf.z != owner.z) to_chat(reaper, SPAN_XENOWARNING("That's too far away!")) return FALSE - if(!T.weeds) + if(!active_turf.weeds) to_chat(reaper, SPAN_XENOWARNING("We can only construct this blockade on weeds!")) return FALSE @@ -31,22 +31,22 @@ return - if(!check_turf(reaper, T)) + if(!check_turf(reaper, active_turf)) return FALSE if(!check_and_use_plasma_owner()) return - var/turf/new_turf = locate(max(T.x - Floor(width/2), 1), max(T.y - Floor(height/2), 1), T.z) + var/turf/new_turf = locate(max(active_turf.x - Floor(width/2), 1), max(active_turf.y - Floor(height/2), 1), active_turf.z) to_chat(reaper, SPAN_XENONOTICE("We raise a blockade!")) - var/obj/effect/alien/resin/resin_pillar/RP = new pillar_type(new_turf) - RP.start_decay(brittle_time, decay_time) + var/obj/effect/alien/resin/resin_pillar/resin_blockade = new pillar_type(new_turf) + resin_blockade.start_decay(brittle_time, decay_time) apply_cooldown() return ..() -/datum/action/xeno_action/activable/blockade/proc/check_turf(mob/living/carbon/xenomorph/queen/reaper, turf/T) +/datum/action/xeno_action/activable/blockade/proc/check_turf(mob/living/carbon/xenomorph/reaper, turf/T) if(T.density) to_chat(reaper, SPAN_XENOWARNING("We can't place a blockade here.")) return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm index 04692b22f73b..ab10b86c5d1d 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm @@ -14,10 +14,10 @@ speed = XENO_SPEED_FASTMOD_TIER_6 build_time_mult = BUILD_TIME_MULT_BUILDER + max_build_dist = 1 is_intelligent = 1 evolution_allowed = FALSE - fire_immunity = FIRE_IMMUNITY_NO_DAMAGE|FIRE_IMMUNITY_NO_IGNITE caste_desc = "john reaper" // temporary deevolves_to = list("Larva") can_hold_facehuggers = 1 @@ -26,8 +26,6 @@ weed_level = WEED_LEVEL_STANDARD can_be_revived = FALSE - spit_delay = 25 - tackle_min = 2 tackle_max = 6 tackle_chance = 55