Files
Bubberstation/code/modules/bitrunning/objects/landmarks.dm
Thunder12345 058cb039eb Bitrunning 1.5: Secondary Objectives (#81828)
## About The Pull Request

Added secondary objective lockboxes to bitrunning. These pull from a
list of secondary objective loot on the domain, with a limited quantity
of items. Once there are no items left to pull, the secondary objective
disappears. If multiple secondary objective markers are placed, they
will be placed until all markers have been used, or all the items in the
loot pool are already spoken for.

To support this functionality, adds SSbitrunning, which stores all
domains as instances, instead of checking the hardcoded types as
previously. SSbitrunning manages listing domains for the quantum
console, and rolling secondary loot.

As an example of this functionality, added a side path to Glacier Grind
with a polar bear and some loot.

## Why It's Good For The Game

Secondary objectives give mappers ways to encourage players to venture
into a wider range of domains by offering non-trivial loot beyond the
fluff items given in the main caches. The absolute limit on the number
of items available ensures these items can't be farmed.

As well as supporting secondary objectives, SSbitrunning allows for
future support of features relying on mid-round modification of domains,
for instance adding custom domains.

## Changelog
🆑
add: Added secondary objectives to bitrunning!
add: Pick up encrypted curiosities and return them to the safehouse to
claim their contents.
add: Glacier Grind has been given a secondary objective, look out for
the limited edition hat.
add: Bitrunning domains can now be modified during the round by admins.
/🆑
2024-03-09 22:42:23 +01:00

80 lines
2.7 KiB
Plaintext

/obj/effect/landmark/bitrunning
name = "Generic bitrunning effect"
icon = 'icons/effects/bitrunning.dmi'
icon_state = "crate"
/// In case you want to gate the crate behind a special condition.
/obj/effect/landmark/bitrunning/loot_signal
name = "Mysterious aura"
/// Where the exit hololadder spawns
/obj/effect/landmark/bitrunning/hololadder_spawn
name = "Bitrunning hololadder spawn"
icon_state = "hololadder"
/// Where the crates need to be taken
/obj/effect/landmark/bitrunning/cache_goal_turf
name = "Bitrunning goal turf"
icon_state = "goal"
/// Where you want the crate to spawn
/obj/effect/landmark/bitrunning/cache_spawn
name = "Bitrunning crate spawn"
icon_state = "crate"
/// Where you want secondary objectives to spawn
/obj/effect/landmark/bitrunning/curiosity_spawn
name = "Bitrunning curiosity spawn"
icon_state = "crate"
///Swaps the locations of an encrypted crate in the area with another randomly selected crate.
///Randomizes names, so you have to inspect crates manually.
/obj/effect/landmark/bitrunning/crate_replacer
name = "Bitrunning Goal Crate Randomizer"
icon_state = "crate"
/obj/effect/landmark/bitrunning/crate_replacer/Initialize(mapload)
. = ..()
#ifdef UNIT_TESTS
return
#endif
var/list/crate_list = list()
var/obj/structure/closet/crate/secure/bitrunning/encrypted/encrypted_crate
var/area/my_area = get_area(src)
for (var/list/zlevel_turfs as anything in my_area.get_zlevel_turf_lists())
for (var/turf/area_turf as anything in zlevel_turfs)
for(var/obj/structure/closet/crate/crate_to_check in area_turf)
if(istype(crate_to_check, /obj/structure/closet/crate/secure/bitrunning/encrypted))
encrypted_crate = crate_to_check
crate_to_check.desc += span_hypnophrase(" This feels like the crate we're looking for!")
else
crate_list += crate_to_check
crate_to_check.name = "Unidentified Crate"
if(!encrypted_crate)
stack_trace("Bitrunning Goal Crate Randomizer failed to find an encrypted crate to swap positions for.")
return
if(!length(crate_list))
stack_trace("Bitrunning Goal Crate Randomizer failed to find any NORMAL crates to swap positions for.")
return
var/original_location = encrypted_crate.loc
var/obj/structure/closet/crate/selected_crate = pick(crate_list)
encrypted_crate.abstract_move(selected_crate.loc)
selected_crate.abstract_move(original_location)
/// A location for mobs to spawn.
/obj/effect/landmark/bitrunning/mob_segment
name = "Bitrunning modular mob segment"
icon_state = "mob_segment"
/// Bitrunning safehouses. Typically 7x6 rooms with a single entrance.
/obj/modular_map_root/safehouse
config_file = "strings/modular_maps/safehouse.toml"
icon = 'icons/effects/bitrunning.dmi'
icon_state = "safehouse"