mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
All megafauna now drop ore on death (#29169)
* All megafauna drop ore as a reward now * Fixes vetus * Apply suggestions from code review Batching lewc's changes Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> --------- Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
This commit is contained in:
@@ -70,14 +70,15 @@ Difficulty: Hard
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
del_on_death = TRUE
|
||||
loot = list(/obj/structure/closet/crate/necropolis/ancient)
|
||||
crusher_loot = list(/obj/structure/closet/crate/necropolis/ancient/crusher)
|
||||
loot = list(/obj/item/pinpointer/tendril)
|
||||
crusher_loot = list(/obj/item/crusher_trophy/adaptive_intelligence_core)
|
||||
internal_gps = /obj/item/gps/internal/ancient
|
||||
medal_type = BOSS_MEDAL_ROBOT
|
||||
score_type = ROBOT_SCORE
|
||||
deathmessage = "explodes into a shower of alloys"
|
||||
footstep_type = FOOTSTEP_MOB_HEAVY //make stomp like bubble
|
||||
attack_action_types = list()
|
||||
difficulty_ore_modifier = 4 //Vetus' whole deal was that it dropped ore before all megas did, so it gets a ton
|
||||
|
||||
var/charging = FALSE
|
||||
var/revving_charge = FALSE
|
||||
@@ -138,6 +139,18 @@ Difficulty: Hard
|
||||
QDEL_NULL(beam)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/ancient_robot/spawn_ore_reward(atom/spawn_location)
|
||||
..()
|
||||
var/list/exquisite_ore = list(
|
||||
/obj/item/stack/ore/platinum, // The vetus can have some, as a treat
|
||||
/obj/item/stack/ore/iridium,
|
||||
/obj/item/stack/ore/palladium
|
||||
)
|
||||
|
||||
new /obj/item/stack/sheet/mineral/abductor(spawn_location, roll("4d8")) // This is the amount of the other rare ores spawned
|
||||
for(var/ore in exquisite_ore)
|
||||
new ore(spawn_location, rand(5, 10)) // Don't want mining to step too much on explorer's toes.
|
||||
|
||||
/obj/item/gps/internal/ancient
|
||||
icon_state = null
|
||||
gpstag = "Malfunctioning Signal"
|
||||
@@ -175,15 +188,14 @@ Difficulty: Hard
|
||||
core_type = /obj/item/assembly/signaler/anomaly/vortex
|
||||
if(CRYO)
|
||||
core_type = /obj/item/assembly/signaler/anomaly/cryo
|
||||
loot += core_type
|
||||
|
||||
var/crate_type = pick(loot)
|
||||
var/obj/structure/closet/crate/C = new crate_type(loc)
|
||||
new core_type(C)
|
||||
if(!enraged)
|
||||
return
|
||||
for(var/mob/living/M in urange(40, src)) //Bigger range, ran once per shift, as people run away from vetus as it blows up.
|
||||
if(M.client)
|
||||
new /obj/item/disk/fauna_research/vetus(C)
|
||||
if(enraged)
|
||||
for(var/mob/living/M in urange(40, src)) //Bigger range, ran once per shift, as people run away from vetus as it blows up.
|
||||
if(!M.client)
|
||||
return
|
||||
loot += /obj/item/disk/fauna_research/vetus
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/ancient_robot/enrage()
|
||||
. = ..()
|
||||
|
||||
@@ -38,7 +38,7 @@ Difficulty: Medium
|
||||
ranged = TRUE
|
||||
ranged_cooldown_time = 16
|
||||
pixel_x = -7
|
||||
crusher_loot = list(/obj/item/melee/energy/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator, /obj/item/crusher_trophy/miner_eye)
|
||||
crusher_loot = list(/obj/item/crusher_trophy/miner_eye)
|
||||
loot = list(/obj/item/melee/energy/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator)
|
||||
wander = FALSE
|
||||
del_on_death = TRUE
|
||||
|
||||
@@ -53,8 +53,11 @@ Difficulty: Hard
|
||||
ranged = TRUE
|
||||
pixel_x = -32
|
||||
del_on_death = TRUE
|
||||
crusher_loot = list(/obj/structure/closet/crate/necropolis/bubblegum/crusher)
|
||||
loot = list(/obj/structure/closet/crate/necropolis/bubblegum)
|
||||
difficulty_ore_modifier = 3
|
||||
crusher_loot = list(/obj/item/crusher_trophy/demon_claws)
|
||||
loot = list(/obj/item/clothing/suit/space/hostile_environment,
|
||||
/obj/item/clothing/head/helmet/space/hostile_environment,
|
||||
/obj/item/melee/spellblade/random)
|
||||
blood_volume = BLOOD_VOLUME_MAXIMUM //BLEED FOR ME
|
||||
var/charging = FALSE
|
||||
var/enrage_till = 0
|
||||
@@ -158,6 +161,10 @@ Difficulty: Hard
|
||||
new /obj/effect/bubblegum_exit(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/drop_loot()
|
||||
if(enraged && !second_life)
|
||||
return //The jebait chest already drops
|
||||
return ..()
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire(atom/A)
|
||||
if(second_life)
|
||||
Shoot(A)
|
||||
|
||||
@@ -50,8 +50,8 @@ Difficulty: Very Hard
|
||||
internal_gps = /obj/item/gps/internal/colossus
|
||||
medal_type = BOSS_MEDAL_COLOSSUS
|
||||
score_type = COLOSSUS_SCORE
|
||||
crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher)
|
||||
loot = list(/obj/structure/closet/crate/necropolis/colossus)
|
||||
difficulty_ore_modifier = 3
|
||||
crusher_loot = list(/obj/item/crusher_trophy/blaster_tubes)
|
||||
deathmessage = "disintegrates, leaving a glowing core in its wake."
|
||||
death_sound = 'sound/misc/demon_dies.ogg'
|
||||
enraged_loot = /obj/item/disk/fauna_research/colossus
|
||||
@@ -343,6 +343,13 @@ Difficulty: Very Hard
|
||||
return
|
||||
floating = on
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/generate_random_loot()
|
||||
var/list/crystalchoices = subtypesof(/obj/machinery/anomalous_crystal)
|
||||
var/random_crystal = pick(crystalchoices)
|
||||
var/list/choices = list(/obj/item/organ/internal/vocal_cords/colossus, /obj/item/organ/internal/eyes/cybernetic/eyesofgod, random_crystal)
|
||||
for(var/I in 1 to 2)
|
||||
loot += pick_n_take(choices)
|
||||
|
||||
/obj/item/projectile/colossus
|
||||
name ="death bolt"
|
||||
icon_state= "chronobolt"
|
||||
|
||||
@@ -50,8 +50,8 @@ Difficulty: Medium
|
||||
move_to_delay = 5
|
||||
ranged = TRUE
|
||||
pixel_x = -32
|
||||
crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher)
|
||||
loot = list(/obj/structure/closet/crate/necropolis/dragon)
|
||||
difficulty_ore_modifier = 2
|
||||
crusher_loot = list(/obj/item/crusher_trophy/tail_spike)
|
||||
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
|
||||
var/swooping = NONE
|
||||
var/player_cooldown = 0
|
||||
@@ -425,6 +425,13 @@ Difficulty: Medium
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/generate_random_loot()
|
||||
var/list/choices = list(/obj/item/melee/ghost_sword,
|
||||
/obj/item/lava_staff,
|
||||
/obj/item/dragons_blood,
|
||||
list(/obj/item/spellbook/oneuse/sacredflame, /obj/item/gun/magic/wand/fireball))
|
||||
loot += pick(choices)
|
||||
|
||||
/obj/effect/temp_visual/lava_warning
|
||||
icon_state = "lavastaff_warn"
|
||||
layer = BELOW_MOB_LAYER
|
||||
@@ -593,11 +600,14 @@ Difficulty: Medium
|
||||
melee_damage_lower = 30
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
loot = list()
|
||||
crusher_loot = list()
|
||||
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30)
|
||||
attack_action_types = list()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/lesser/generate_random_loot()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon
|
||||
name = "space dragon"
|
||||
desc = "A space carp turned dragon by vile magic. Has the same ferocity of a space carp, but also a much more enabling body."
|
||||
@@ -646,6 +656,10 @@ Difficulty: Medium
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
fire_stream()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon/generate_random_loot()
|
||||
return
|
||||
|
||||
|
||||
/datum/spell/aoe/repulse/spacedragon
|
||||
name = "Tail Sweep"
|
||||
desc = "Throw back attackers with a sweep of your tail."
|
||||
|
||||
@@ -56,7 +56,8 @@ Difficulty: Hard
|
||||
ranged_cooldown_time = 40
|
||||
aggro_vision_range = 21 //so it can see to one side of the arena to the other
|
||||
loot = list(/obj/item/hierophant_club)
|
||||
crusher_loot = list(/obj/item/hierophant_club, /obj/item/crusher_trophy/vortex_talisman)
|
||||
difficulty_ore_modifier = 2
|
||||
crusher_loot = list(/obj/item/crusher_trophy/vortex_talisman)
|
||||
wander = FALSE
|
||||
internal_gps = /obj/item/gps/internal/hierophant
|
||||
medal_type = BOSS_MEDAL_HIEROPHANT
|
||||
|
||||
@@ -44,7 +44,8 @@ Difficulty: Medium
|
||||
medal_type = BOSS_MEDAL_LEGION
|
||||
score_type = LEGION_SCORE
|
||||
loot = list(/obj/item/storm_staff)
|
||||
crusher_loot = list(/obj/item/storm_staff, /obj/item/crusher_trophy/empowered_legion_skull)
|
||||
difficulty_ore_modifier = 3
|
||||
crusher_loot = list(/obj/item/crusher_trophy/empowered_legion_skull)
|
||||
enraged_loot = /obj/item/disk/fauna_research/legion
|
||||
vision_range = 13
|
||||
elimination = TRUE
|
||||
@@ -72,22 +73,28 @@ Difficulty: Medium
|
||||
legiontwo.transform /= 1.5
|
||||
legiontwo.loot = list()
|
||||
legiontwo.crusher_loot = list()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/unrage()
|
||||
. = ..()
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_list)
|
||||
if(other != src)
|
||||
other.loot = list(/obj/item/storm_staff) //Initial does not work with lists.
|
||||
other.crusher_loot = list(/obj/item/storm_staff, /obj/item/crusher_trophy/empowered_legion_skull)
|
||||
other.crusher_loot = list(/obj/item/crusher_trophy/empowered_legion_skull)
|
||||
other.maxHealth = 2500
|
||||
other.health = 2500
|
||||
qdel(src) //Suprise, it's the one on lavaland that regrows to full.
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/drop_loot()
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_list)
|
||||
if(other != src)
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/death(gibbed)
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_list)
|
||||
if(other != src)
|
||||
other.loot = list(/obj/item/storm_staff) //Initial does not work with lists.
|
||||
other.crusher_loot = list(/obj/item/storm_staff, /obj/item/crusher_trophy/empowered_legion_skull)
|
||||
other.crusher_loot = list(/obj/item/crusher_trophy/empowered_legion_skull)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/AttackingTarget()
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
var/enraged = FALSE
|
||||
/// Path of the hardmode loot disk, if applicable.
|
||||
var/enraged_loot
|
||||
/// How much ore should killing this give
|
||||
var/difficulty_ore_modifier = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -53,6 +55,7 @@
|
||||
for(var/action_type in attack_action_types)
|
||||
var/datum/action/innate/megafauna_attack/attack_action = new action_type()
|
||||
attack_action.Grant(src)
|
||||
generate_random_loot()
|
||||
RegisterSignal(src, COMSIG_HOSTILE_FOUND_TARGET, PROC_REF(hoverboard_deactivation))
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/Destroy()
|
||||
@@ -91,8 +94,37 @@
|
||||
SSblackbox.record_feedback("tally", "megafauna_kills", 1, "[initial(name)]")
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/drop_loot()
|
||||
var/obj/structure/closet/crate/necropolis/loot_drop = new(get_turf(src))
|
||||
for(var/item in loot)
|
||||
new item(loot_drop)
|
||||
spawn_ore_reward(loot_drop)
|
||||
|
||||
/// If the megafauna has a pool of random loot items to pick from, override this proc to have it be set on initialization
|
||||
/mob/living/simple_animal/hostile/megafauna/proc/generate_random_loot()
|
||||
return
|
||||
|
||||
/// Handling the ore part of the mega reward, the higher the difficulty_ore_modifier the more ore will spawn
|
||||
/mob/living/simple_animal/hostile/megafauna/proc/spawn_ore_reward(atom/spawn_location)
|
||||
var/list/common_ore = list(
|
||||
/obj/item/stack/ore/uranium,
|
||||
/obj/item/stack/ore/silver,
|
||||
/obj/item/stack/ore/gold,
|
||||
/obj/item/stack/ore/plasma,
|
||||
/obj/item/stack/ore/titanium)
|
||||
var/list/rare_ore = list(
|
||||
/obj/item/stack/ore/diamond,
|
||||
/obj/item/stack/ore/bluespace_crystal)
|
||||
|
||||
for(var/ore in common_ore)
|
||||
var/obj/item/stack/O = new ore(spawn_location)
|
||||
O.amount = roll(difficulty_ore_modifier * 2, 4 + difficulty_ore_modifier)
|
||||
for(var/ore in rare_ore)
|
||||
var/obj/item/stack/O = new ore(spawn_location)
|
||||
O.amount = roll(difficulty_ore_modifier, 4 + difficulty_ore_modifier)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/proc/spawn_crusher_loot()
|
||||
loot = crusher_loot
|
||||
loot += crusher_loot
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/AttackingTarget()
|
||||
if(recovery_time >= world.time)
|
||||
@@ -152,9 +184,11 @@
|
||||
/mob/living/simple_animal/hostile/megafauna/proc/enrage()
|
||||
if(enraged || ((health / maxHealth) * 100 <= 80))
|
||||
return
|
||||
difficulty_ore_modifier += 4 // Hardmode only helps the station more and gives you bragging rights, no special items for hardmode
|
||||
enraged = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/proc/unrage()
|
||||
difficulty_ore_modifier -= 4
|
||||
enraged = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/DestroySurroundings()
|
||||
|
||||
Reference in New Issue
Block a user