Skip to content

Commit

Permalink
bot boss icons and organizing
Browse files Browse the repository at this point in the history
  • Loading branch information
silencer-pl committed Sep 26, 2024
1 parent 639bf71 commit 3d72b15
Show file tree
Hide file tree
Showing 20 changed files with 319 additions and 229 deletions.
3 changes: 3 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,9 @@
// Hellhound strain flags
#define HELLHOUND_NORMAL "Normal"

// Boss strain flags
#define BOSS_NORMAL "Normal"

var/list/default_onmob_icons = list(
WEAR_L_HAND = 'icons/mob/humans/onmob/items_lefthand_0.dmi',
WEAR_R_HAND = 'icons/mob/humans/onmob/items_righthand_0.dmi',
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,8 @@

#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND)

#define XENO_CASTE_XENOSURGE_BOSS_BOT "Interceptor"

// Checks if two hives are allied to each other.
// PARAMETERS:
// source_hive integer the hive to check the alliance of
Expand Down
3 changes: 3 additions & 0 deletions code/game/objects/effects/decals/cleanable/blood/blood.dm
Original file line number Diff line number Diff line change
Expand Up @@ -178,3 +178,6 @@

if (step_to(src, get_step(src, direction), 0))
break

/obj/effect/decal/cleanable/blood/oil
basecolor = "#220707"
10 changes: 9 additions & 1 deletion code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,14 @@
var/atom/movable/vis_obj/xeno_wounds/wound_icon_holder
var/atom/movable/vis_obj/xeno_pack/backpack_icon_holder

//Xenosurge vars that go here for same reasons as above
var/boss_type = 0
//below should be safely disregarded if type is not set to 1
var/boss_stage = 1
var/explosion_damage = 30
var/aoe_delay = 40
var/missile_storm_missiles = 25

/mob/living/carbon/xenomorph/Initialize(mapload, mob/living/carbon/xenomorph/oldXeno, h_number, ai_hard_off = FALSE)
var/area/A = get_area(src)
if(A && A.statistic_exempt)
Expand Down Expand Up @@ -1054,7 +1062,7 @@
. = ..()
if (. & IGNITE_IGNITED)
RegisterSignal(src, COMSIG_XENO_PRE_HEAL, PROC_REF(cancel_heal))
if(!caste || !(caste.fire_immunity & FIRE_IMMUNITY_NO_DAMAGE) || fire_reagent.fire_penetrating)
if(!caste || !(caste.fire_immunity & FIRE_IMMUNITY_NO_DAMAGE) || fire_reagent.fire_penetrating||boss_type == 1)
INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, emote), "roar")

/mob/living/carbon/xenomorph/ExtinguishMob()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/datum/action/xeno_action/activable/surge_proj
name = "Living Target Sweep"
action_icon_state = "runner_bonespur"
ability_name = "Living Target Sweep"
macro_path = /datum/action/xeno_action/verb/surge_proj
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_1
xeno_cooldown = 60
plasma_cost = 0

var/ammo_type = /datum/ammo/xeno/surge_proj


/datum/action/xeno_action/activable/rapid_missles
name = "Missile Barrage"
action_icon_state = "runner_bonespur"
ability_name = "missile barrage"
macro_path = /datum/action/xeno_action/verb/rapid_missles
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_2
xeno_cooldown = 60
plasma_cost = 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/datum/action/xeno_action/verb/surge_proj()
set category = "Alien"
set name = "Living Target Sweep"
set hidden = TRUE
var/action_name = "Living Target Sweep"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/rapid_missles()
set category = "Alien"
set name = "Missile Barrage"
set hidden = TRUE
var/action_name = "Missile Barrage"
handle_xeno_macro(src, action_name)
161 changes: 161 additions & 0 deletions code/modules/mob/living/carbon/xenomorph/abilities/boss/boss_powers.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/mob/living/carbon/human/proc/warning_ping()
to_chat(src, SPAN_BOLDWARNING("A Surge is targeting you with a special attack!"))
overlays += (image('icons/effects/surge_hit_warning.dmi', "aoe"))
sleep(40)
overlays -= (image('icons/effects/surge_hit_warning.dmi', "aoe"))

/datum/action/xeno_action/activable/surge_proj/use_ability(atom/affected_atom)
var/mob/living/carbon/xenomorph/xeno = owner
if (!istype(xeno))
return

if (!action_cooldown_check())
return
var/list/mobs_in_range = list()
for(var/mob/living/carbon/human/target in range("15x15",xeno))
if(mobs_in_range.Find(target) == 0)
mobs_in_range.Add(target)
if(mobs_in_range.len == 0)
to_chat(xeno, SPAN_WARNING("No potential targets in visible range"))
return
for(var/mob/living/carbon/human/target_to_warn in mobs_in_range)
INVOKE_ASYNC(target_to_warn, TYPE_PROC_REF(/mob/living/carbon/human/, warning_ping))
xeno.overlays += (image('icons/effects/surge_hit_warning_64.dmi', "aoe_surge"))
xeno.anchored = 1
if(xeno.armor_deflection > 20) xeno.armor_deflection = 20
sleep(xeno.aoe_delay)
xeno.overlays -= (image('icons/effects/surge_hit_warning_64.dmi', "aoe_surge"))
xeno.anchored = 0
xeno.armor_deflection = initial(xeno.armor_deflection)
var/list/mobs_in_view = list()
for(var/mob/living/carbon/human/target in view("15x15",xeno))
if(mobs_in_view.Find(target) == 0)
mobs_in_view.Add(target)
for(var/mob/living/carbon/human/target_to_shoot in mobs_in_range)
if(mobs_in_view.Find(target_to_shoot) != 0)
var/turf/target = get_turf(target_to_shoot)
var/obj/projectile/projectile = new /obj/projectile(xeno.loc, create_cause_data(initial(xeno.caste_type), xeno))
var/datum/ammo/ammo_datum = GLOB.ammo_list[ammo_type]
projectile.generate_bullet(ammo_datum)
projectile.fire_at(target, xeno, xeno, ammo_datum.max_range, ammo_datum.shell_speed)
apply_cooldown()
return ..()

/obj/item/prop/big_warning_ping
name = "warning ping"
opacity = FALSE
mouse_opacity = FALSE
anchored = TRUE
indestructible = TRUE
layer = ABOVE_MOB_LAYER
pixel_x = -80
pixel_y = -80
icon = 'icons/effects/surge_hit_warning_160.dmi'
icon_state = "big_boom"

/turf/proc/warning_ping()
var/obj/item/prop/big_warning_ping/ping = new(src)
sleep(60)
qdel(ping)

/obj/item/prop/missile_storm_up
name = "going up"
opacity = FALSE
mouse_opacity = FALSE
anchored = TRUE
indestructible = TRUE
layer = ABOVE_MOB_LAYER
icon = 'icons/effects/missile_storm.dmi'
icon_state = "up"


/obj/item/prop/missile_storm_up/proc/animate_takeoff()
animate(src,pixel_y=384,time = 10,easing=QUAD_EASING|EASE_IN)
sleep(11)
qdel(src)

/obj/item/prop/missile_storm_up/Initialize(mapload, ...)
. = ..()
pixel_x = pick(-8,-2,2,8)
INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/item/prop/missile_storm_up/, animate_takeoff))

/obj/item/prop/missile_storm_down
name = "going down"
opacity = FALSE
mouse_opacity = FALSE
anchored = TRUE
indestructible = TRUE
layer = ABOVE_MOB_LAYER
icon = 'icons/effects/missile_storm.dmi'
icon_state = "down"


/obj/item/prop/missile_storm_down/proc/animate_landing()
animate(src,pixel_y=0,time = 10,easing=QUAD_EASING|EASE_IN)
sleep(11)
qdel(src)

/obj/item/prop/missile_storm_down/Initialize(mapload, ...)
. = ..()
pixel_y = 384
pixel_x = pick(-8,-2,2,8)
INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/item/prop/missile_storm_down/, animate_landing))

/datum/action/xeno_action/activable/rapid_missles/proc/fire_animation()
var/mob/living/carbon/xenomorph/xeno = owner
var/spawned_props = 1
var/sound_cycle = 0
while(spawned_props <= xeno.missile_storm_missiles)
var/turf/owner_turf = get_turf(owner)
if(sound_cycle == 8) sound_cycle = 0
if(sound_cycle == 0) playsound(owner_turf,'sound/surge/rockets_launching.ogg', 80)
new /obj/item/prop/missile_storm_up(owner_turf)
spawned_props += 1
sleep(2)
sound_cycle += 2
xeno.armor_deflection = 100
xeno.anchored = FALSE

/datum/action/xeno_action/activable/rapid_missles/proc/hit_animation(turf/turf_to_hit_animate)
var/mob/living/carbon/xenomorph/xeno = owner
new /obj/item/prop/missile_storm_down(turf_to_hit_animate)
sleep(13)
var/datum/cause_data/cause_data = create_cause_data("surge bombardment")
cell_explosion(turf_to_hit_animate, xeno.explosion_damage, (xeno.explosion_damage / 2), EXPLOSION_FALLOFF_SHAPE_LINEAR, null, cause_data)


/datum/action/xeno_action/activable/rapid_missles/proc/fire_loop(turf/target_turf)
var/list/turfs_to_hit = list()
for (var/turf/turf in range("5x5", target_turf))
if(turfs_to_hit.Find(turf) == 0)
turfs_to_hit += turf
while(turfs_to_hit.len > 0)
var/turf/turf_to_hit = pick(turfs_to_hit)
turfs_to_hit -= turf_to_hit
INVOKE_ASYNC(src, TYPE_PROC_REF(/datum/action/xeno_action/activable/rapid_missles, hit_animation), turf_to_hit)
sleep(rand(1,5))

/datum/action/xeno_action/activable/rapid_missles/use_ability(atom/affected_atom)
var/mob/living/carbon/xenomorph/xeno = owner
if (!istype(xeno))
return
if (!action_cooldown_check())
return
var/turf/turf_center = get_turf(affected_atom)
var/list/mobs_in_range = list()
xeno.anchored = 1
if(xeno.armor_deflection > 20) xeno.armor_deflection = 20
for(var/mob/living/carbon/human/target in range("15x15",turf_center))
if(mobs_in_range.Find(target) == 0)
mobs_in_range.Add(target)
if(mobs_in_range.len != 0)
to_chat(mobs_in_range,SPAN_BOLDWARNING("The [usr] launches a series of rockets into the air! Look out for impact markers!"))
INVOKE_ASYNC(src, TYPE_PROC_REF(/datum/action/xeno_action/activable/rapid_missles, fire_animation))
turf_center.warning_ping()
INVOKE_ASYNC(src, TYPE_PROC_REF(/datum/action/xeno_action/activable/rapid_missles, fire_loop), turf_center)
sleep(100)
xeno.anchored = 0
xeno.armor_deflection = initial(xeno.armor_deflection)

apply_cooldown()
return ..()
Original file line number Diff line number Diff line change
Expand Up @@ -53,25 +53,3 @@
var/minimal_acid = 200


/datum/action/xeno_action/activable/surge_proj
name = "Surge - Projectile AOE"
action_icon_state = "runner_bonespur"
ability_name = "surge aoe proj"
macro_path = /datum/action/xeno_action/verb/surge_proj
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_2
xeno_cooldown = 60
plasma_cost = 0

var/ammo_type = /datum/ammo/xeno/surge_proj


/datum/action/xeno_action/activable/rapid_missles
name = "Missile Barrage"
action_icon_state = "runner_bonespur"
ability_name = "missile barrage"
macro_path = /datum/action/xeno_action/verb/rapid_missles
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_2
xeno_cooldown = 60
plasma_cost = 0
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,3 @@
var/action_name = "For the Hive!"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/surge_proj()
set category = "Alien"
set name = "Surge AoE"
set hidden = TRUE
var/action_name = "Surge AoE"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/rapid_missles()
set category = "Alien"
set name = "Missile Barrage"
set hidden = TRUE
var/action_name = "Missile Barrage"
handle_xeno_macro(src, action_name)
Loading

0 comments on commit 3d72b15

Please sign in to comment.