mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-27 09:31:54 +00:00
## About The Pull Request [Design doc](https://hackmd.io/@shadowh4nd/r1P7atPjn) Adds a new supply role centered on short dungeon-esque runs with a focus on unifying the job with the fun part. Some virtual domains are combat related, some are silly, some focus on "objectives". Avatar health is linked to your physical presence and retries are limited. <details> <summary>Photos, WIP</summary> Net pod stasis  Server loaded  Server cooldown  the quantum console UI  Cyber police antag page  A safehouse  Domain info page, every domain gets this (and sometimes help text)  Me getting steamrolled in one of the missions  Ghost roles getting notified that server is kicking them out  Players enjoying the new combat missions  Players exploring some of the virtual maps  (Not part of the PR, but)  New bitrunner vendor  </details> ## Why It's Good For The Game Content, firstly, and moreso being supply department content. The framework that this implements is a great (preauthorized) replacement for two systems which are collecting dust: BEPIS and the gateway. They integrate into this system and it's a direct upgrade. This adds a way for the players on station to generate materials (if that remains). The nice part about it is that I can throw balance and believability to the wind, as unlike its unrelated predecessor VR or away missions, bitrunning entirely washes its hands of the map and mobs each reboot. It offers a very expandable map framework to add content and it's all fairly well documented. I'd like to add a feature that represents the idea that jobs don't have to be mundane and "external" jobs can stay tied to the main gameplay loop. ## Changelog jlsnow301, kinneb, mmmiracles, ical92, spockye 🆑 add: Adds Bitrunning to supply department- a semi-offstation role that rewards teamwork. add: Adds new machines to complement the job- net pod, quantum server, quantum consoles, and the nexacache vendor. add: Adds several new maps which can be loaded and unloaded at will. add: Some flair for the new bitrunning vendor. add: Adds a new antagonist for the virtual domain only. Short lived ghost role that fights bitrunners. del: Removes the BEPIS machine, moves its tech into the Bitrunning vendor. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> --------- Co-authored-by: MMMiracles <lolaccount1@hotmail.com> Co-authored-by: Ical <wolfsgamingtips@gmail.com> Co-authored-by: spockye <79304582+spockye@users.noreply.github.com> Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
147 lines
4.5 KiB
Plaintext
147 lines
4.5 KiB
Plaintext
/**
|
|
* Bitrunning tech disks which let you load items or programs into the vdom on first avatar generation.
|
|
* For the record: Balance shouldn't be a primary concern.
|
|
* You can make the custom cheese spells you've always wanted.
|
|
* Just make it fun and engaging, it's PvE content.
|
|
*/
|
|
/obj/item/bitrunning_disk
|
|
name = "generic bitrunning program"
|
|
desc = "A disk containing source code."
|
|
icon = 'icons/obj/assemblies/module.dmi'
|
|
base_icon_state = "datadisk"
|
|
icon_state = "datadisk0"
|
|
/// Name of the choice made
|
|
var/choice_made
|
|
|
|
/obj/item/bitrunning_disk/Initialize(mapload)
|
|
. = ..()
|
|
|
|
icon_state = "[base_icon_state][rand(0, 7)]"
|
|
update_icon()
|
|
RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined))
|
|
|
|
/obj/item/bitrunning_disk/proc/on_examined(datum/source, mob/examiner, list/examine_text)
|
|
SIGNAL_HANDLER
|
|
|
|
examine_text += span_infoplain("This disk must be carried on your person into a netpod to be used.")
|
|
|
|
if(isnull(choice_made))
|
|
examine_text += span_notice("To make a selection, toggle the disk in hand.")
|
|
return
|
|
|
|
examine_text += span_info("It has been used to select: <b>[choice_made]</b>.")
|
|
examine_text += span_notice("It cannot make another selection.")
|
|
|
|
/obj/item/bitrunning_disk/ability
|
|
desc = "A disk containing source code. It can be used to preload abilities into the virtual domain."
|
|
/// The selected ability that this grants
|
|
var/datum/action/granted_action
|
|
/// The list of actions that this can grant
|
|
var/list/datum/action/selectable_actions = list()
|
|
|
|
/obj/item/bitrunning_disk/ability/attack_self(mob/user, modifiers)
|
|
. = ..()
|
|
|
|
if(choice_made)
|
|
return
|
|
|
|
var/names = list()
|
|
for(var/datum/action/thing as anything in selectable_actions)
|
|
names += initial(thing.name)
|
|
|
|
var/choice = tgui_input_list(user, message = "Select an ability", title = "Bitrunning Program", items = names)
|
|
if(isnull(choice))
|
|
return
|
|
|
|
for(var/datum/action/thing as anything in selectable_actions)
|
|
if(initial(thing.name) == choice)
|
|
granted_action = thing
|
|
|
|
if(isnull(granted_action))
|
|
return
|
|
|
|
balloon_alert(user, "selected")
|
|
playsound(user, 'sound/items/click.ogg', 50, TRUE)
|
|
choice_made = choice
|
|
|
|
/// Tier 1 programs. Simple, funny, or helpful.
|
|
/obj/item/bitrunning_disk/ability/tier1
|
|
name = "bitrunning program: basic"
|
|
selectable_actions = list(
|
|
/datum/action/cooldown/spell/conjure/cheese,
|
|
/datum/action/cooldown/spell/basic_heal,
|
|
)
|
|
|
|
/// Tier 2 programs. More complex, powerful, or useful.
|
|
/obj/item/bitrunning_disk/ability/tier2
|
|
name = "bitrunning program: complex"
|
|
selectable_actions = list(
|
|
/datum/action/cooldown/spell/pointed/projectile/fireball,
|
|
/datum/action/cooldown/spell/pointed/projectile/lightningbolt,
|
|
/datum/action/cooldown/spell/forcewall,
|
|
)
|
|
|
|
/// Tier 3 abilities. Very powerful, game breaking.
|
|
/obj/item/bitrunning_disk/ability/tier3
|
|
name = "bitrunning program: elite"
|
|
selectable_actions = list(
|
|
/datum/action/cooldown/spell/shapeshift/dragon,
|
|
/datum/action/cooldown/spell/shapeshift/polar_bear,
|
|
)
|
|
|
|
/obj/item/bitrunning_disk/item
|
|
desc = "A disk containing source code. It can be used to preload items into the virtual domain."
|
|
/// The selected item that this grants
|
|
var/obj/granted_item
|
|
/// The list of actions that this can grant
|
|
var/list/obj/selectable_items = list()
|
|
|
|
/obj/item/bitrunning_disk/item/attack_self(mob/user, modifiers)
|
|
. = ..()
|
|
|
|
if(choice_made)
|
|
return
|
|
|
|
var/names = list()
|
|
for(var/obj/thing as anything in selectable_items)
|
|
names += initial(thing.name)
|
|
|
|
var/choice = tgui_input_list(user, message = "Select an ability", title = "Bitrunning Program", items = names)
|
|
if(isnull(choice))
|
|
return
|
|
|
|
for(var/obj/thing as anything in selectable_items)
|
|
if(initial(thing.name) == choice)
|
|
granted_item = thing
|
|
|
|
balloon_alert(user, "selected")
|
|
playsound(user, 'sound/items/click.ogg', 50, TRUE)
|
|
choice_made = choice
|
|
|
|
/// Tier 1 items. Simple, funny, or helpful.
|
|
/obj/item/bitrunning_disk/item/tier1
|
|
name = "bitrunning gear: simple"
|
|
selectable_items = list(
|
|
/obj/item/pizzabox/infinite,
|
|
/obj/item/gun/medbeam,
|
|
/obj/item/grenade/c4,
|
|
)
|
|
|
|
/// Tier 2 items. More complex, powerful, or useful.
|
|
/obj/item/bitrunning_disk/item/tier2
|
|
name = "bitrunning gear: complex"
|
|
selectable_items = list(
|
|
/obj/item/chainsaw,
|
|
/obj/item/gun/ballistic/automatic/pistol,
|
|
/obj/item/melee/energy/blade/hardlight,
|
|
)
|
|
|
|
/// Tier 3 items. Very powerful, game breaking.
|
|
/obj/item/bitrunning_disk/item/tier3
|
|
name = "bitrunning gear: advanced"
|
|
selectable_items = list(
|
|
/obj/item/gun/energy/tesla_cannon,
|
|
/obj/item/dualsaber/green,
|
|
/obj/item/melee/beesword,
|
|
)
|