mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-15 01:54:52 +01:00
64f76f52a9
## Interface Science You know what the problem is with our features? They're all too easy, too optimized to use. Look at Genetics; we went from a confusing UI that a 14 year old hardcoded with html into byond to a polished UI using tgui, optimized for player comfort, and gameplay has suffered. Too long we have coddled players with fun and easy content, no more I say!!! To fix ss13, I have added a feature with the most awful, unusable UI ever. It's just wires with random sequences that may or may not do something. And yet, you will use it till your fingers bleed and your eyes go white, and you will be grateful. "Thank you coder daddy", you say as you sacrifice yourself to a display of unending, procedurally generated dogshit. <img width="563" height="294" alt="image" src="https://github.com/user-attachments/assets/e56c947f-a40c-4df9-beed-672812357576" /> Or maybe you're a sick little deviant, and you don't respect me. Instead of using my awful UI, you start optimizing. You've forced the secret pulse code, and you're not going to pulse them again and again. You make your own interface by connecting it with signallers, or integrated circuits. Ahhh, you beat me! Damn it, and you're gonna get away with it too. ## About the Pull Request Adds new job content to science. Science spawns with a few "gizmo" devices and can order more through cargo. These gizmo's have random functionalities, like the strange objects you can find in maintenance. These functionalities come with different settings to change how they operate. However, there are no buttons, just wires or a voice interface. You need to solve, for example, a wire puzzle. You just pulse the wires, and if you hear ping the sequence is good, if you hear buzz its bad. Just keep going till you hear a creak sound. If you do a sequence correctly, there are a bunch of randomly generated ways this interacts with the functionality, mimicking real life settings and interactions. Imagine a TV remote with randomized buttons, and you have to map them out again. Once you've mapped the sequences, you can make an interface. For simple ones, you can just make some signaller assemblies. For the best control, you could connect it with a bunch of integrated circuit signallers, and program sequences into an integrated circuit machine. Below is a short video of how the puzzle solving works. (I can't be arsed to figure out how to record tgui, here's a video I made with my phone. Also I had the sequences written down, which I STRONGLY recommend you do.) https://github.com/user-attachments/assets/93f79f0f-df14-4ff9-8096-f079ebae7e91 <details> <summary>Actual details</summary> I have hidden the details to make exploring the feature itself more fun. The whole thing was written to be convoluted, but intuitive. You should be able to hit it with a multitool, and figure out everything from there. It will take a bit to get the gist of it. Nonetheless, for review purposes I have written down the details here. If you're reading this for non-review purposes, you should know I have embedded an internet curse that will at some point in 2026 teleport you 2 meters in a random direction. Continue reading at your own discretion. The gizmo objects is usually generated with 1 or 2 'gizmodes'. 'Gizmodes' contains the fun-ctionality, and holds different operating modes (so dubbed 'gizpulse'). You can't directly select a gizpulse, but instead it generates a bunch of mode selections. For example, a function that toggles lights has two gizpulses: toggle_on and toggle_off. There are four different mode selects: Cycle mode: Adds signal to cycle to the next gizpulse, and to activate the current gizpulse Select mode: Adds a signal for selecting every gizpulse, and a signal to activate whatever the activate gizpulse is Direct activate mode: Adds a signal for selecting every gizpulse, and also immediately activates that gizpulse Cycle-active mode: Cycles to the next mode, and activates it (inconvenient but only has 1 signal to worry about) So a light gizmode with the randomly selected 'select mode' has three signals: select toggle_on, select toggle_off and trigger the currently selected gizpulse. Currently implemented gizmodes: - Lights: toggle on, toggle off - Move: start moving, stop moving - Food printer (its filled with the spongebob grey goop thing): print food (donut or burger) - Mood pulser (AOE): happy pulse, sad pulse, radiation pulse - Mopper: select different reagent, dump onto tile (1/2/3 range), make smoke cloud - Teleporter (5 to 15 tiles, random dir): Teleport self, teleport mobs in range 1, do both - Electric: charge from nearest cell (looks into objects and stuff), magically gain some charge, make lightning, make emp, charge nearby object, defibrillate in an area - Copier (makes fake copies of mobs and objects, visual copy only): scan objects, print objects, erase all copies - Sputter: dump oil and shake, throw self - Bad: explode, explode, explode harder, explode with fire, stab you, warning, make robot spider, breaks your bones, throws a grenade at you, radiation pulses - Some behind the scenes gizmodes (language toggle for voice interface, for example) The voice interface starts with wires, with signals to toggle the language or dump the code words. After that, you can talk to it using the code words similarly to the wire sequence to solve the rest of the gizmodes. </details> I've added two to every map, somewhere in or near the experimentor room. They may ocassionally spawn from a maintenance crate spawner <img width="611" height="331" alt="image" src="https://github.com/user-attachments/assets/3782700f-57d3-4591-9282-e0de590056e1" /> ## Why It's Good For The Game It's really difficult to have "experimentation" type features in the game. It all has to fit into 1h rounds, and people get used to it real quick. The experimentor and strange objects kinda try, but it's just one button and praying a bear doesnt spawn you explodes you. I don't claim to have solved this perfectly, but I think this is fun. You truly have to start experimenting, be systematic and write things down. If you figure out how something works, you can go to the next stage of making it more convenient to use. I think it's really fun to mess around with integrated circuits and USB's, and make, for example, a BCI controlled bluespace launchpad. So I lean into it! There's different settings to account for, and its up to you to make it usable! If you like integrated circuits, you'll love this (maybe). The gizmo functions are aimed at benefiting the station as a whole in some ways, to motivate people to make some fun systems for these to get maximum benefit! A mood pulser near a busy area will make everyone happier! (I do need to add more like these, I got distracted doing stupid shit.)
136 lines
5.5 KiB
Plaintext
136 lines
5.5 KiB
Plaintext
/datum/supply_pack/science
|
|
group = "Science"
|
|
access_view = ACCESS_RESEARCH
|
|
crate_type = /obj/structure/closet/crate/science
|
|
|
|
/datum/supply_pack/science/plasma
|
|
name = "Plasma Assembly Crate"
|
|
desc = "Everything you need to burn something to the ground, this contains three \
|
|
plasma assembly sets. Each set contains a plasma tank, igniter, proximity sensor, \
|
|
and timer! Warranty void if exposed to high temperatures."
|
|
cost = CARGO_CRATE_VALUE * 2
|
|
access = ACCESS_ORDNANCE
|
|
access_view = ACCESS_ORDNANCE
|
|
contains = list(/obj/item/tank/internals/plasma = 3,
|
|
/obj/item/assembly/igniter = 3,
|
|
/obj/item/assembly/prox_sensor = 3,
|
|
/obj/item/assembly/timer = 3,
|
|
)
|
|
crate_name = "plasma assembly crate"
|
|
crate_type = /obj/structure/closet/crate/secure/plasma
|
|
|
|
// Dummy type used in generating anomaly core supply packs, not actually orderable
|
|
/datum/supply_pack/science/raw_anomaly
|
|
cost = CARGO_CRATE_VALUE * 10
|
|
access = ACCESS_ORDNANCE
|
|
access_view = ACCESS_ORDNANCE
|
|
crate_type = /obj/structure/closet/crate/secure/science
|
|
|
|
/datum/supply_pack/science/raw_anomaly/generate_supply_packs()
|
|
if(length(contains))
|
|
return null // having contents indicates this is a generated pack so it doesn't need to generate more
|
|
|
|
var/list/anomaly_packs = list()
|
|
for(var/obj/item/raw_anomaly_core/raw_core as anything in subtypesof(/obj/item/raw_anomaly_core) - /obj/item/raw_anomaly_core/random)
|
|
var/datum/supply_pack/science/raw_anomaly/pack = new
|
|
pack.name = full_capitalize(raw_core::name)
|
|
pack.id = "[type]/[raw_core]"
|
|
pack.desc = "Contains the raw core of \a [raw_core::anomaly_type::anomaly_type::name || "anomaly"], ready to be implosion-compressed into a powerful artifact."
|
|
pack.contains = list(raw_core)
|
|
pack.crate_name = LOWER_TEXT(pack.name)
|
|
anomaly_packs += pack
|
|
return anomaly_packs
|
|
|
|
/datum/supply_pack/science/robotics
|
|
name = "Robotics Assembly Crate"
|
|
desc = "The tools you need to replace those finicky humans with a loyal robot army! \
|
|
Contains four proximity sensors, two empty first aid kits, two health analyzers, \
|
|
two red hardhats, two toolboxes, and two cleanbot assemblies!"
|
|
cost = CARGO_CRATE_VALUE * 3
|
|
access = ACCESS_ROBOTICS
|
|
access_view = ACCESS_ROBOTICS
|
|
contains = list(/obj/item/assembly/prox_sensor = 4,
|
|
/obj/item/healthanalyzer = 2,
|
|
/obj/item/clothing/head/utility/hardhat/red = 2,
|
|
/obj/item/storage/medkit = 2,
|
|
/obj/item/storage/toolbox = 2,
|
|
/obj/item/bot_assembly/cleanbot = 2)
|
|
crate_name = "robotics assembly crate"
|
|
crate_type = /obj/structure/closet/crate/secure/science/robo
|
|
|
|
/datum/supply_pack/science/rped
|
|
name = "RPED crate"
|
|
desc = "Need to rebuild the ORM but science got annihilated after a bomb test? \
|
|
Buy this for the most advanced parts NT can give you."
|
|
cost = CARGO_CRATE_VALUE * 3
|
|
contains = list(/obj/item/storage/part_replacer/cargo)
|
|
crate_name = "\improper RPED crate"
|
|
|
|
/datum/supply_pack/science/shieldwalls
|
|
name = "Shield Generator Crate"
|
|
desc = "These high powered Shield Wall Generators are guaranteed to keep any unwanted \
|
|
lifeforms on the outside, where they belong! Contains four shield wall generators."
|
|
cost = CARGO_CRATE_VALUE * 4
|
|
access = ACCESS_TELEPORTER
|
|
access_view = ACCESS_TELEPORTER
|
|
contains = list(/obj/machinery/power/shieldwallgen = 4)
|
|
crate_name = "shield generators crate"
|
|
crate_type = /obj/structure/closet/crate/secure/science
|
|
|
|
/datum/supply_pack/science/transfer_valves
|
|
name = "Tank Transfer Valves Crate"
|
|
desc = "The key ingredient for making a lot of people very angry very fast. \
|
|
Contains two tank transfer valves."
|
|
cost = CARGO_CRATE_VALUE * 12
|
|
access = ACCESS_RD
|
|
contains = list(/obj/item/transfer_valve = 2)
|
|
crate_name = "tank transfer valves crate"
|
|
crate_type = /obj/structure/closet/crate/secure/science
|
|
order_flags = ORDER_DANGEROUS
|
|
|
|
/datum/supply_pack/science/monkey_helmets
|
|
name = "Monkey Mind Magnification Helmet crate"
|
|
desc = "Some research is best done with monkeys, yet sometimes they're \
|
|
just too dumb to complete more complicated tasks. These two helmets should help."
|
|
cost = CARGO_CRATE_VALUE * 3
|
|
contains = list(/obj/item/clothing/head/helmet/monkey_sentience = 2)
|
|
crate_name = "monkey mind magnification crate"
|
|
|
|
/datum/supply_pack/science/cytology
|
|
name = "Cytology supplies crate"
|
|
desc = "Did out-of-control specimens pulverize xenobiology? Here's some more \
|
|
supplies for further testing. Contains a microscope, biopsy tool, two petri dishes, \
|
|
and a box of swabs."
|
|
cost = CARGO_CRATE_VALUE * 3
|
|
access_view = ACCESS_XENOBIOLOGY
|
|
contains = list(/obj/structure/microscope,
|
|
/obj/item/biopsy_tool,
|
|
/obj/item/storage/box/petridish = 2,
|
|
/obj/item/storage/box/swab,
|
|
/obj/item/circuitboard/machine/vatgrower,
|
|
/obj/item/reagent_containers/condiment/protein,
|
|
)
|
|
crate_name = "cytology supplies crate"
|
|
|
|
/datum/supply_pack/science/mod_core
|
|
name = "MOD core Crate"
|
|
desc = "Three cores, perfect for any MODsuit construction! Naturally Harvested™, of course."
|
|
cost = CARGO_CRATE_VALUE * 3
|
|
access = ACCESS_ROBOTICS
|
|
access_view = ACCESS_ROBOTICS
|
|
contains = list(/obj/item/mod/core/standard = 3)
|
|
crate_name = "\improper MOD core crate"
|
|
crate_type = /obj/structure/closet/crate/nakamura
|
|
|
|
/datum/supply_pack/science/gizmo
|
|
name = "Gizmo research crate"
|
|
desc = "Three weird science gizmo thinga-majiggers? We don't know what they do."
|
|
cost = CARGO_CRATE_VALUE * 5
|
|
access = ACCESS_SCIENCE
|
|
access_view = ACCESS_SCIENCE
|
|
contains = list(
|
|
/obj/machinery/gizmo = 1,
|
|
/obj/effect/spawner/random/gizmo = 2,
|
|
)
|
|
crate_name = "\improper Gizmo research crate"
|