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

[READY FOR REVIEW] I killed bubblegum on hard mode and all I got was this stupid medal. Adds hard mode to megafauna. #22016

Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
6b101ec
hard mode stuff
Qwertytoforty Aug 16, 2023
a1845b4
further progress
Qwertytoforty Aug 17, 2023
76f7a83
more progress
Qwertytoforty Aug 17, 2023
b111be5
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Aug 17, 2023
d8f78f8
pausing work to fix bug
Qwertytoforty Aug 17, 2023
76ad621
lets pr this mess
Qwertytoforty Aug 17, 2023
d703f9d
more progress saving as vacation soon
Qwertytoforty Aug 18, 2023
440ce44
sleep_check_qdel
Qwertytoforty Aug 18, 2023
57218bd
saving work
Qwertytoforty Aug 27, 2023
d528a20
medals into deconflicting
Qwertytoforty Aug 30, 2023
b1733b6
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Aug 30, 2023
19dda8f
icons
Qwertytoforty Aug 30, 2023
afbb852
Fix compilings, medals
Qwertytoforty Aug 31, 2023
15fd461
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Sep 2, 2023
6e5e4da
Apply suggestions from code review
Qwertytoforty Sep 9, 2023
50ad8c5
yes
Qwertytoforty Sep 10, 2023
018d0ad
Merge branch 'I-killed-bubblegum-on-hard-mode-and-all-I-got-was-this-…
Qwertytoforty Sep 10, 2023
0818b7a
Apply suggestions from code review
Qwertytoforty Sep 18, 2023
88b45b8
earliest of the returns
Qwertytoforty Sep 18, 2023
b5812d1
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Sep 18, 2023
85c1a54
icons
Qwertytoforty Sep 18, 2023
904ec4c
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Sep 19, 2023
9fbd893
Apply suggestions from code review
Qwertytoforty Sep 23, 2023
dcc0781
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Sep 23, 2023
1d4b327
Update code/modules/mob/living/simple_animal/hostile/megafauna/megafa…
Qwertytoforty Sep 23, 2023
faf07ee
ah lateload, my beloved and hated with no debug points
Qwertytoforty Sep 23, 2023
3217d42
Merge branch 'I-killed-bubblegum-on-hard-mode-and-all-I-got-was-this-…
Qwertytoforty Sep 23, 2023
18bcaaa
todoops
Qwertytoforty Sep 23, 2023
39f4b49
requested changes
Qwertytoforty Oct 9, 2023
067e67f
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Oct 9, 2023
691edce
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Oct 9, 2023
e229101
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Oct 9, 2023
8213804
move medals / move comment
Qwertytoforty Oct 9, 2023
e201344
guh
Qwertytoforty Oct 9, 2023
62aadae
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Oct 9, 2023
8fff82b
Merge remote-tracking branch 'upstream/master' into I-killed-bubblegu…
Qwertytoforty Oct 9, 2023
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
2,271 changes: 1,149 additions & 1,122 deletions _maps/map_files/generic/centcomm.dmm

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions code/__DEFINES/dcs/signals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,8 @@
// /mob/living/simple_animal/hostile signals
#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget"
#define COMPONENT_HOSTILE_NO_ATTACK (1<<0)
//Called when a /mob/living/simple_animal/hostile fines a new target: (atom/source, give_target)
#define COMSIG_HOSTILE_FOUND_TARGET "comsig_hostile_found_target"

// /obj signals

Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/misc_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -552,3 +552,6 @@
#define BLOCKED_BURROWS "Blocked Burrows"
#define CLASSIC_CAVES "Classic Caves"
#define DEADLY_DEEPROCK "Deadly Deeprock"

///Sleep check QDEL. Like sleep check death, but checks deleting. Good for non mobs.
#define SLEEP_CHECK_QDEL(X) sleep(X); if(QDELETED(src)) return;
1 change: 1 addition & 0 deletions code/__DEFINES/sound_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#define CHANNEL_ENGINE 1017 // Engine ambient sounds
#define CHANNEL_FIREALARM 1016 //fire alarm alarms
#define CHANNEL_ASH_STORM 1015
#define CHANNEL_BOSS_MUSIC 1014

#define USER_VOLUME(M, C) M?.client?.prefs.get_channel_volume(C)

Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/status_effects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@

#define STATUS_EFFECT_CRYO_BEAM /datum/status_effect/cryo_beam //Chills target, freezes reagents in their blood, breaks if sight is lost.

#define STATUS_EFFECT_BUBBLEGUM_CURSE /datum/status_effect/bubblegum_curse //Bleeding. Damage over time. Fog. And, of course, a suprise for people that try to run away.

//#define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse
//#define CURSE_BLINDING 1 //makes the edges of the target's screen obscured
//#define CURSE_SPAWNING 2 //spawns creatures that attack the target only
Expand Down
4 changes: 2 additions & 2 deletions code/__HELPERS/filters.dm
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,6 @@ GLOBAL_LIST_INIT(master_filter_info, list(
in_atom.remove_filter("wibbly-[i]")

/// Used to create rays on an item. Make sure to removefilter("rays") when done with it
/atom/proc/ray_filter_helper(_priority = 1, _size = 40, _color = "#FFFFFF", _factor = 6, _density = 20)
add_filter(name = "ray", priority = _priority, params = list(type = "rays", size = _size, color = _color , factor = _factor, density = _density))
/atom/proc/ray_filter_helper(_priority = 1, _size = 40, _color = "#FFFFFF", _factor = 6, _density = 20, _y = 0)
add_filter(name = "ray", priority = _priority, params = list(type = "rays", size = _size, color = _color , factor = _factor, density = _density, y = _y))

12 changes: 10 additions & 2 deletions code/__HELPERS/unsorted.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1593,17 +1593,23 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)

y = t_center.y + c_dist - 1
x = t_center.x + c_dist
var/list/temp_list_one = list()
for(y in t_center.y-c_dist to y)
T = locate(x,y,t_center.z)
if(T)
L += T
temp_list_one += T
for(var/turf/temp_one in reverselist(temp_list_one))
L += temp_one
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved

y = t_center.y - c_dist
x = t_center.x + c_dist - 1
var/list/temp_list_two = list()
for(x in t_center.x-c_dist to x)
T = locate(x,y,t_center.z)
if(T)
L += T
temp_list_two += T
for(var/turf/temp_two in reverselist(temp_list_two))
L += temp_two
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved

y = t_center.y - c_dist + 1
x = t_center.x - c_dist
Expand Down Expand Up @@ -2052,6 +2058,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
return "Fire Alarms"
if(CHANNEL_ASH_STORM)
return "Ash Storms"
if(CHANNEL_BOSS_MUSIC)
return "Boss Music"

/proc/slot_bitfield_to_slot(input_slot_flags) // Kill off this garbage ASAP; slot flags and clothing flags should be IDENTICAL. GOSH DARN IT. Doesn't work with ears or pockets, either.
switch(input_slot_flags)
Expand Down
5 changes: 5 additions & 0 deletions code/_onclick/hud/fullscreen.dm
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,11 @@
icon_state = "payback"
show_when_dead = TRUE

/obj/screen/fullscreen/fog
icon = 'icons/mob/screen_fog.dmi'
icon_state = "fog"
color = "#FF0000"

/obj/screen/fullscreen/flash
icon = 'icons/mob/screen_gen.dmi'
screen_loc = "WEST,SOUTH to EAST,NORTH"
Expand Down
5 changes: 5 additions & 0 deletions code/datums/beam.dm
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@
..()
A.ex_act(1)

/obj/effect/ebeam/vetus/Destroy()
for(var/mob/living/M in get_turf(src))
M.electrocute_act(20, "the giant arc", flags = SHOCK_NOGLOVES) //fuck your gloves.
return ..()

/obj/effect/ebeam/disintegration_telegraph
alpha = 100
layer = ON_EDGED_TURF_LAYER
Expand Down
73 changes: 73 additions & 0 deletions code/datums/components/boss_music.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* Attaches to a hostile simplemob and plays that music while they have a target.
*/
/datum/component/boss_music
///The music track we will play to players.
var/boss_track
///How long the track is, used to clear players out when the music is supposed to end.
var/track_duration

///List of all mobs listening to the boss music currently. Cleared on Destroy or after `track_duration`.
var/list/players_listening_uids = list()
///List of callback timers, used to clear out mobs listening to boss music after `track_duration`.
var/list/music_callbacks = list()

/datum/component/boss_music/Initialize(
boss_track,
track_duration
)
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
. = ..()
if(!ishostile(parent))
return COMPONENT_INCOMPATIBLE
src.boss_track = boss_track
src.track_duration = track_duration

/datum/component/boss_music/Destroy(force, silent)
. = ..()
for(var/callback in music_callbacks)
deltimer(callback)
music_callbacks = null

for(var/player_refs in players_listening_uids)
clear_target(player_refs)
players_listening_uids = null

/datum/component/boss_music/RegisterWithParent()
. = ..()
RegisterSignal(parent, COMSIG_HOSTILE_FOUND_TARGET, PROC_REF(on_target_found))

/datum/component/boss_music/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_HOSTILE_FOUND_TARGET)
return ..()

///Handles giving the boss music to a new target the fauna has recieved.
///Keeps track of them to not repeatedly overwrite its own track.
/datum/component/boss_music/proc/on_target_found(atom/source, mob/new_target)
SIGNAL_HANDLER
if(QDELETED(source) || !istype(new_target))
return

var/target_uid = new_target.UID()
if(target_uid in players_listening_uids)
return

players_listening_uids += target_uid
RegisterSignal(new_target, COMSIG_MOB_DEATH, PROC_REF(on_mob_death))
music_callbacks += addtimer(CALLBACK(src, PROC_REF(clear_target), target_uid), track_duration, TIMER_STOPPABLE)
new_target.playsound_local(new_target, boss_track, 200, FALSE, channel = CHANNEL_BOSS_MUSIC, pressure_affected = FALSE, use_reverb = FALSE)

///Called when a mob listening to boss music dies- ends their music early.
/datum/component/boss_music/proc/on_mob_death(mob/living/source)
SIGNAL_HANDLER
var/target_uid = source.UID()
clear_target(target_uid)

///Removes `old_target` from the list of players listening, and stops their music if it is still playing.
///This allows them to have music played again if they re-enter combat with this fauna.
/datum/component/boss_music/proc/clear_target(incoming_uid)
players_listening_uids -= incoming_uid

var/mob/old_target = locateUID(incoming_uid)
if(old_target)
UnregisterSignal(old_target, COMSIG_MOB_DEATH)
old_target.stop_sound_channel(CHANNEL_BOSS_MUSIC)
131 changes: 131 additions & 0 deletions code/datums/status_effects/debuffs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -972,3 +972,134 @@
owner.reagents.remove_reagent(R.id, 0.75)
if(prob(10))
to_chat(owner, "<span class='userdanger'>Your blood freezes in your veins, get away!</span>")

/datum/status_effect/bubblegum_curse
id = "bubblegum curse"
alert_type = /obj/screen/alert/status_effect/bubblegum_curse
duration = -1 //Kill it. There is no other option.
tick_interval = 1 SECONDS
var/damage = 0.75
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
var/source_UID
///Are we starting the process to check if the person has still gotten out of range of bubble / crossed zlvls.
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
var/coward_checking = FALSE
S34NW marked this conversation as resolved.
Show resolved Hide resolved

/datum/status_effect/bubblegum_curse/on_creation(mob/living/new_owner, mob/living/source)
. = ..()
source_UID = source.UID()
owner.overlay_fullscreen("Bubblegum", /obj/screen/fullscreen/fog, 1)

/datum/status_effect/bubblegum_curse/tick()
var/mob/living/simple_animal/hostile/megafauna/bubblegum/attacker = locateUID(source_UID)
if(!attacker)
qdel(src)
if(attacker.health <= attacker.maxHealth / 2)
owner.clear_fullscreen("Bubblegum")
owner.overlay_fullscreen("Bubblegum", /obj/screen/fullscreen/fog, 2)
if(!coward_checking)
if(owner.z != attacker.z)
addtimer(CALLBACK(src, PROC_REF(onstation_coward_callback)), 12 SECONDS)
coward_checking = TRUE
else if(get_dist(attacker, owner) >= 25)
addtimer(CALLBACK(src, PROC_REF(runaway_coward_callback)), 12 SECONDS)
coward_checking = TRUE

owner.apply_damage(damage, BRUTE)
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.bleed(0.33)
if(prob(5))
to_chat(owner, "<span class='userdanger'>[pick("You feel your sins crawling on your back.", "You felt your sins weighing on your neck.", "You feel your blood pulsing inside you.", "<b>YOU'LL NEVER ESCAPE ME</b>", "<b>YOU'LL DIE FOR INSULTING ME LIKE THIS</b>")]</span>")

/datum/status_effect/bubblegum_curse/on_remove()
owner.clear_fullscreen("Bubblegum")

/datum/status_effect/bubblegum_curse/proc/onstation_coward_callback()
coward_checking = FALSE
var/mob/living/simple_animal/hostile/megafauna/bubblegum/attacker = locateUID(source_UID)
if(owner.z != attacker.z)
to_chat(owner, "<span class='colossus'><b>YOU CHALLENGE ME LIKE THIS... AND YOU RUN WITH YOUR FALSE MAGICS?</b></span>")
else
return
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>REALLY?</b></span>")
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>SUCH INSOLENCE!</b></span>")
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>SO PATHETIC...</b></span>")
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>...SO FOOLISH!</b></span>")
get_over_here()

/datum/status_effect/bubblegum_curse/proc/runaway_coward_callback()
coward_checking = FALSE
var/mob/living/simple_animal/hostile/megafauna/bubblegum/attacker = locateUID(source_UID)
if(get_dist(attacker, owner) >= 25)
to_chat(owner, "<span class='colossus'><b>My my, you can run FAST.</b></span>")
else
return
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>I thought you wanted a true fight?</b></span>")
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>Perhaps I was mistaken.</b></span>")
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>You are a coward who does not want a fight...</b></span>")
SLEEP_CHECK_QDEL(2 SECONDS)
to_chat(owner, "<span class='colossus'><b>...BUT I WANT YOU DEAD!</b></span>")
get_over_here()

/datum/status_effect/bubblegum_curse/proc/get_over_here()
var/mob/living/simple_animal/hostile/megafauna/bubblegum/attacker = locateUID(source_UID)
if(!attacker)
return //Let's not nullspace
var/turf/TA = get_turf(owner)
owner.Immobilize(3 SECONDS)
new /obj/effect/decal/cleanable/blood/bubblegum(TA)
new /obj/effect/temp_visual/bubblegum_hands/rightsmack(TA)
sleep(6)
var/turf/TB = get_turf(owner)
to_chat(owner, "<span class='userdanger'>[attacker] rends you!</span>")
playsound(TB, attacker.attack_sound, 100, TRUE, -1)
owner.adjustBruteLoss(10)
new /obj/effect/decal/cleanable/blood/bubblegum(TB)
new /obj/effect/temp_visual/bubblegum_hands/leftsmack(TB)
sleep(6)
var/turf/TC = get_turf(owner)
to_chat(owner, "<span class='userdanger'>[attacker] rends you!</span>")
playsound(TC, attacker.attack_sound, 100, TRUE, -1)
owner.adjustBruteLoss(10)
new /obj/effect/decal/cleanable/blood/bubblegum(TC)
new /obj/effect/temp_visual/bubblegum_hands/rightsmack(TC)
sleep(6)
var/turf/TD = get_turf(owner)
to_chat(owner, "<span class='userdanger'>[attacker] rends you!</span>")
playsound(TD, attacker.attack_sound, 100, TRUE, -1)
owner.adjustBruteLoss(10)
new /obj/effect/temp_visual/bubblegum_hands/leftpaw(TD)
new /obj/effect/temp_visual/bubblegum_hands/leftthumb(TD)
sleep(8)
to_chat(owner, "<span class='userdanger'>[attacker] drags you through the blood!</span>")
playsound(TD, 'sound/misc/enter_blood.ogg', 100, TRUE, -1)
var/turf/targetturf = get_step(attacker, attacker.dir)
owner.forceMove(targetturf)
playsound(targetturf, 'sound/misc/exit_blood.ogg', 100, TRUE, -1)
addtimer(CALLBACK(attacker, TYPE_PROC_REF(/mob/living/simple_animal/hostile/megafauna/bubblegum, FindTarget), list(owner), 1), 2)

/obj/screen/alert/status_effect/bubblegum_curse
name = "I SEE YOU"
desc = "YOUR SOUL WILL BE MINE FOR YOUR INSOLENCE"
icon_state = "bubblegumjumpscare"

/obj/screen/alert/status_effect/bubblegum_curse/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)

/obj/screen/alert/status_effect/bubblegum_curse/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()

/obj/screen/alert/status_effect/bubblegum_curse/process()
var/new_filter = isnull(get_filter("ray"))
ray_filter_helper(1, 40,"#ce3030", 6, 20)
if(new_filter)
animate(get_filter("ray"), offset = 10, time = 10 SECONDS, loop = -1)
animate(offset = 0, time = 10 SECONDS)
3 changes: 3 additions & 0 deletions code/game/area/areas/ruins/space_areas.dm
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@
icon_state = "dark"
requires_power = FALSE

/area/ruin/space/bubblegum_arena
name = "Bubblegum Arena"

/area/ruin/space/wreck_cargoship
name = "Faint Signal"
icon_state = "yellow"
Expand Down
11 changes: 11 additions & 0 deletions code/game/objects/effects/landmarks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,17 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/awaystart) //Without this away mission
/obj/effect/landmark/spawner/rev
name = "revenantspawn"
icon_state = "Rev"
/obj/effect/landmark/spawner/bubblegum_arena
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
name = "bubblegum_arena_human"
icon_state = "Explorer"

/obj/effect/landmark/spawner/bubblegum
name = "bubblegum_arena_bubblegum"
icon_state = "bubblegumjumpscare"

/obj/effect/landmark/spawner/bubblegum_exit
name = "bubblegum_arena_exit"
icon_state = "bubblegumjumpscare"

/obj/effect/landmark/spawner/syndie
name = "Syndicate-Spawn"
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/devices/radio/radio_objects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
/// How many times this is disabled by EMPs
var/disable_timer = 0
/// Areas in which this radio cannot send messages
var/static/list/blacklisted_areas = list(/area/adminconstruction, /area/tdome)
var/static/list/blacklisted_areas = list(/area/adminconstruction, /area/tdome, /area/ruin/space/bubblegum_arena)

flags = CONDUCT
slot_flags = SLOT_BELT
Expand Down
10 changes: 10 additions & 0 deletions code/game/objects/items/weapons/storage/boxes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -976,6 +976,16 @@
new /obj/item/stock_parts/matter_bin(src)
new /obj/item/screwdriver(src)

/obj/item/storage/box/hardmode_box
name = "box of HRD-MDE project box"
desc = "Contains everything needed to get yourself killed for a medal."

/obj/item/storage/box/hardmode_box/populate_contents()
for(var/I in 1 to 7)
new /obj/item/grenade/megafauna_hardmode(src)
new /obj/item/storage/lockbox/medal/hardmode_box(src)
new /obj/item/paper/hardmode(src)

#undef NODESIGN
#undef NANOTRASEN
#undef SYNDI
Expand Down
29 changes: 29 additions & 0 deletions code/game/objects/items/weapons/storage/lockbox.dm
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,35 @@
new /obj/item/clothing/accessory/medal/silver/valor(src)
new /obj/item/clothing/accessory/medal/heart(src)

/obj/item/storage/lockbox/medal/hardmode_box
name = "\improper HRD-MDE program medal box"
desc = "A locked box used to store medals of pride. Use a fauna research disk on the box to transmit the data and print a medal."
req_access = list(ACCESS_MINING) //No grubby assistant hands on my hard earned medals
can_hold = list(/obj/item/clothing/accessory, /obj/item/coin) //Whoops almost gave miners boxes that could store 12 legion cores. Scoped to accessory if they want to store neclaces or hope or something in there. Or a coin collection.
var/list/completed_fauna = list()
var/number_of_megafauna = 7 //Increase this if new megafauna are added.
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved


/obj/item/storage/lockbox/medal/hardmode_box/populate_contents()
return


/obj/item/storage/lockbox/medal/hardmode_box/attackby(obj/item/W, mob/user, params)
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
if(istype(W, /obj/item/disk/fauna_research))
var/obj/item/disk/fauna_research/O = W
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
var/obj/item/pride = new O.output(get_turf(src))
qdel(O)
to_chat(user, "<span class='notice'>[src] accepts [O], and prints out [pride]!</span>")
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
if(!is_type_in_list(pride, completed_fauna))
completed_fauna += pride.type
if(length(completed_fauna) == 7)
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved
to_chat(user, "<span class='notice'>[src] prints out a very fancy medal!</span>")
var/obj/item/accomplishment = new /obj/item/clothing/accessory/medal/gold/heroism/hardmode_full(get_turf(src))
user.put_in_hands(accomplishment)
user.put_in_hands(pride)
else
return ..()
Qwertytoforty marked this conversation as resolved.
Show resolved Hide resolved

/obj/item/storage/lockbox/t4
name = "lockbox (T4)"
desc = "Contains three T4 breaching charges."
Expand Down
Loading