mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-17 12:35:26 +00:00
## 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. /🆑
96 lines
3.8 KiB
Plaintext
96 lines
3.8 KiB
Plaintext
#define ORE_MULTIPLIER_IRON 3
|
|
#define ORE_MULTIPLIER_GLASS 2
|
|
#define ORE_MULTIPLIER_PLASMA 1
|
|
#define ORE_MULTIPLIER_SILVER 0.7
|
|
#define ORE_MULTIPLIER_GOLD 0.6
|
|
#define ORE_MULTIPLIER_TITANIUM 0.5
|
|
#define ORE_MULTIPLIER_URANIUM 0.4
|
|
#define ORE_MULTIPLIER_DIAMOND 0.3
|
|
#define ORE_MULTIPLIER_BLUESPACE_CRYSTAL 0.2
|
|
|
|
/obj/structure/closet/crate/secure/bitrunning // Base class. Do not spawn this.
|
|
name = "base class cache"
|
|
desc = "Talk to a coder."
|
|
icon_state = "bitrunning"
|
|
base_icon_state = "bitrunning"
|
|
|
|
/// The virtual domain - side of the bitrunning crate. Deliver to the send location.
|
|
/obj/structure/closet/crate/secure/bitrunning/encrypted
|
|
name = "encrypted cache"
|
|
desc = "Needs to be decrypted at the safehouse to be opened."
|
|
locked = TRUE
|
|
damage_deflection = 30
|
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
|
|
|
/obj/structure/closet/crate/secure/bitrunning/encrypted/can_unlock(mob/living/user, obj/item/card/id/player_id, obj/item/card/id/registered_id)
|
|
return FALSE
|
|
|
|
/// The bitrunner den - side of the bitrunning crate. Appears in the receive location.
|
|
/obj/structure/closet/crate/secure/bitrunning/decrypted
|
|
name = "decrypted cache"
|
|
desc = "Compiled from the virtual domain. The reward of a successful bitrunner."
|
|
locked = FALSE
|
|
|
|
/obj/structure/closet/crate/secure/bitrunning/decrypted/Initialize(
|
|
mapload,
|
|
datum/lazy_template/virtual_domain/completed_domain,
|
|
rewards_multiplier = 1,
|
|
)
|
|
. = ..()
|
|
playsound(src, 'sound/magic/blink.ogg', 50, TRUE)
|
|
|
|
if(isnull(completed_domain))
|
|
return
|
|
|
|
PopulateContents(completed_domain.reward_points, completed_domain.completion_loot, rewards_multiplier)
|
|
|
|
/obj/structure/closet/crate/secure/bitrunning/decrypted/PopulateContents(reward_points, list/completion_loot, rewards_multiplier)
|
|
. = ..()
|
|
spawn_loot(completion_loot)
|
|
|
|
new /obj/item/stack/ore/iron(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_IRON))
|
|
new /obj/item/stack/ore/glass(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_GLASS))
|
|
|
|
if(reward_points > 1)
|
|
new /obj/item/stack/ore/silver(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_SILVER))
|
|
new /obj/item/stack/ore/titanium(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_TITANIUM))
|
|
|
|
if(reward_points > 2)
|
|
new /obj/item/stack/ore/plasma(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_PLASMA))
|
|
new /obj/item/stack/ore/gold(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_GOLD))
|
|
new /obj/item/stack/ore/uranium(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_URANIUM))
|
|
|
|
if(reward_points > 3)
|
|
new /obj/item/stack/ore/diamond(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_DIAMOND))
|
|
new /obj/item/stack/ore/bluespace_crystal(src, calculate_loot(reward_points, rewards_multiplier, ORE_MULTIPLIER_BLUESPACE_CRYSTAL))
|
|
|
|
/// Handles generating random numbers & calculating loot totals
|
|
/obj/structure/closet/crate/secure/bitrunning/decrypted/proc/calculate_loot(reward_points, rewards_multiplier, ore_multiplier)
|
|
var/base = rewards_multiplier + reward_points
|
|
var/random_sum = (rand() + 0.5) * base
|
|
return ROUND_UP(random_sum * ore_multiplier)
|
|
|
|
/// Handles spawning completion loot. This tries to handle bad flat and assoc lists
|
|
/obj/structure/closet/crate/secure/bitrunning/decrypted/proc/spawn_loot(list/completion_loot)
|
|
for(var/path in completion_loot)
|
|
if(!ispath(path))
|
|
return FALSE
|
|
|
|
if(isnull(completion_loot[path]))
|
|
return FALSE
|
|
|
|
for(var/i in 1 to completion_loot[path])
|
|
new path(src)
|
|
|
|
return TRUE
|
|
|
|
#undef ORE_MULTIPLIER_IRON
|
|
#undef ORE_MULTIPLIER_GLASS
|
|
#undef ORE_MULTIPLIER_PLASMA
|
|
#undef ORE_MULTIPLIER_SILVER
|
|
#undef ORE_MULTIPLIER_GOLD
|
|
#undef ORE_MULTIPLIER_TITANIUM
|
|
#undef ORE_MULTIPLIER_URANIUM
|
|
#undef ORE_MULTIPLIER_DIAMOND
|
|
#undef ORE_MULTIPLIER_BLUESPACE_CRYSTAL
|