## About The Pull Request
The idea was born from a small conversation about bepis nodes having low
visibility, which somehow degressed into the idea of announcing
researched nodes to the channels of the interested departments thru the
announcement system machine, which is what I'm doing here, while also
adding documentation, defines and purging some, not all, instances of
camel cases from announcement_system.dm.
Oh, by the by, like the arrival and new head arrival messages, it can be
customized or disabled by interacting with the announcement system.
## Why It's Good For The Game
I think it's helpful to let players know when the research of their dept
is researched, and I think it's kinda interesting to announce bepis tech
on common like it's some hot stuff while it actually isn't just because
it's often missed out and miscellaneous.
## Changelog
🆑
add: Automated announcement systems now announce researched nodes to
their respective departments. You can stop this by either disabling the
announcement systems or by using a multitool on the circuitboard of the
console you're researching nodes from.
/🆑
## About The Pull Request
I've come to realize manually updating all fishing stuff on the very
much outdated wiki would be a colossal pain in the rear, so I've decided
to automate a few bits to generate autowiki lists containing information
about fish, fish traits, bait, hooks, reels, fishng rods, fish sources
and fish experiments.
Now tested.
## Why It's Good For The Game
Making a huge autowiki for a feature that's being constantly updated (by
me) but still has a particularly lame and outdated page on the wiki.
## Changelog
N/A
## About The Pull Request
Interaction with the queue didn't work for mobs of a type different from
`/mob/living/carbon/human`
Fixed this.
## Why It's Good For The Game
Fixes#85049
## Changelog
🆑
fix: Borgs and AI can now use research queue
/🆑
## About The Pull Request
<img alt="2dZbpr8MK1"
src="https://github.com/tgstation/tgstation/assets/3625094/dd78feba-224a-41a1-8d4a-83af3a8b68df">
Added an ability to queue up to one node per player in a techweb for an
automatic research.
You can queue up a node only when all requirements are met, but there
are not enough points.
People can't research when there is something in the queue, only add
things to the queue. So a 40 points node can't be researched if someone
queued up a 200 points node ahead of it.
When a node is enqueued by RD, it is placed in front of the queue.
The research button is available when the queue is empty.
TODO:
- [x] Bypass queue when the node cost is zero
## Why It's Good For The Game
No need to stay at the console to wait for the points. No "Research"
button spamming.
## Changelog
🆑
qol: Research nodes can be queued, one per player. RDs can place their
node at the beginning of the queue.
/🆑
## About The Pull Request
Right now research points sometimes bug out and get additional .000...1
added to them due to a floating point error. I just added rounding to
only keep one digit after the point.
## Why It's Good For The Game
No more annoying numbers in the RND console
## Changelog
🆑
fix: RND console now properly rounds research points
/🆑
## About The Pull Request
We currently have a list of point types that is meant to be
list(``DEFINE`` = name) but it's completely useless since the define is
just the name anyways. It's not used for anything, it has no purpose to
be this way. It seems more like a holdover from when there were multiple
types of research points (it was made for that purpose, even before
nanite points were a thing) but even for that, it serves no purpose.
I reworked it now to be the abbreviated name of the research point type,
de-hardcoding techwebs a little bit and removing the need for
downstreams to edit the techweb UI.
## Why It's Good For The Game
This at least looks better and makes more sense at people just looking
over it.
## Changelog
No player-facing changes.
## About The Pull Request
Doing experisci experiments after their tech is researched gives the
full 100% point amount, up from 66%
## Why It's Good For The Game
This encourages actually doing the tedious helpful experiments (like
upgrading the chem dispensers, cryo cells, SMES, etc.) that give a low
point bonus (1.5K pts, etc.) which helps other players. Also, the
scientist doing experiments has zero control over who is researching,
they might be just about to finish the 10K pts HyperNob gas shells
experiment and a random dude walks in and buys T4 lasers for 15K pts
anyway. So now the experiment is worth 3400 pts less for no reason
## Changelog
🆑
balance: Doing experiments AFTER their tech is researched now gives full
100% points instead of 66%.
/🆑
## About The Pull Request
Recently, I've been trying to unlock the ayy node, but couldn't even
after disassembling an alien tool. Looked into the variables viewer and
saw the node id wasn't set in the `available_nodes` list. It seems there
was no update after it being unhidden.
## Why It's Good For The Game
Fixing an issue with the destructive analyzer, maybe from the new UI
refactor, but I couldn't bother to git blame it.
## Changelog
🆑
fix: Fixed an issue with un-hidden (alien, syndie etc.) nodes not being
researchable.
/🆑
## About The Pull Request
I made this to help me move more towards my goals [laid out
here](https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA) which currently doesn't
have much interest.
This makes the Destructive Analyzer use a little neat TGUI menu instead
of its old HTML one. I also touch a lot of science stuff and a little
experimentor stuff, so let me explain a bit:
Old iterations of Science had different items that you can use to boost
nodes through deconstruction. This has been removed, and its only
feature is the auto-unlocking of nodes (that is; making them visible to
the R&D console). I thought that instead of keeping this deprecated code
around, I would rework it a little to make it clear what we actually use
it for (unhiding nodes).
All vars and procs that mentioned this have been renamed or reworked to
make more sense now.
Experimentor stuff shares a lot with the destructive analyzer, so I had
to mess with that a bit to keep its decayed corpse of deprecated code,
functional.
I also added context tips to the destructive analyzer, and added the
ability to AltClick to remove the inserted item. Removing items now also
plays a little sound because it was kinda lame.
Also, balloon alerts.
## Why It's Good For The Game
Moves a shitty machine to TGUI so it is slightly less shitty, now it's
more direct and compact with more player-feedback.
Helps me with a personal project and yea
### Video demonstration
I show off connecting the machine to R&D Servers, but I haven't changed
the behavior of that and the roundstart analyzers are connected to
servers by default.
https://github.com/tgstation/tgstation/assets/53777086/65295600-4fae-42d1-9bae-eccefe337a2b
## Changelog
🆑
refactor: Destructive Analyzers now have a TGUI menu.
/🆑
## About The Pull Request
This PR is half a successor to #77399, and half QOL changes. When I made
the old PR, I originally wanted to add a scanning experiment to the
advanced robotics node, but several people (including at least one
maintainer) had reservations with this idea. My plan was to make the
experiment be completed automatically, instead of needing someone to
wave the scanner around, but as it turns out the experiment system is
just fundamentally not designed for experiments like that.
Now I've realized that there doesn't really need to be a new experiment.
So now the advanced robotics node is just not dependent on neural
programming, and that's it. No cost increase, no experiment needed.
As for the QOL changes, it just allows certain experiments to be
completed earlier than they otherwise would be. Normally, for an
experiment to even be available for completion, you need to get at least
one prerequisite node for one of the nodes the experiment benefits (as
in, one of the nodes it is required for or grants a discount too).
However, this sometimes means that you can't complete an experiment even
if you have the means to do it. Nonhuman autopsy is a good example; you
can autopsy a nonhuman corpse right at the start of a round, but the
experiment won't actually be completed unless biological technology has
been researched. The tier two laser experiment is another example. You
get access to tier two lasers necessary for the experiment by
researching industrial technology, but the experiment itself is locked
behind electromagnetic theory.
Now, the nonhuman autopsy experiment, divergent biology experiment, and
all medium and high grade material scanning experiments are unlocked
round-start. The tier two lasers experiment is unlocked by industrial
engineering.
## Why It's Good For The Game
For the advanced robotics change, I'll just quote myself from the last
PR:
> Robotics should not be dependent on an entirely different department
to access their core job content. Such dependencies encourage tiding and
other toxic interactions between departments.
For the QOL changes, it makes the whole system a lot more
newbie-friendly. For the autopsy especially, its common to see new
coroners autopsy the nonhuman bodies first and the human one second.
This means that, when the nonhuman autopsy experiment is actually
unlocked, there aren't any nonhuman bodies left to autopsy. Now it
doesn't matter which order they're autopsied in.
## Changelog
🆑
qol: Nonhuman autopsy, Tier Two Lasers, and several other experiments
can now be completed earlier.
balance: Advanced robotics techweb node no longer requires neural
programming node.
/🆑
## About The Pull Request
This is a PR I worked on last month, but had to put on hold while
dealing with some pressing issues with fishing feature, minigame and
other stuff, and because I had to atomize out some of the stuff
previously present here.
I've expanded on the fishing portal generator to do something other than
dispense guppies and goldfishes. It now has multiple settings,
unlockable by performing scanning experiments for fish types, available
from the get go, which also reward a meager amount of techweb points
upon completion. The generator can now be built too. No longer it has to
be ordered from cargo.
It can also be emagged for the syndicate setting, tho right now it only
dispenses donkfish and emulsijack, both otherwise impossible to get
outside of... exodrone adventures.
The advanced fishing rod now comes with an experiment handler component,
specific to the fish scanning experiment, that automatically scans
fished content. The node to get it now requires 2000 points and the
first fish scanning exp to be unock.
A new skillchip has been added, which adds a trait that changes the icon
of the fish shown in the minigame UI, giving some clues on what the
reward will be. The same trait is also gained by reaching the master
(penultimate) level of the fishing skill.
A new fish type has been added, with its own quirks. One of these quirks
included temporarily switching movement direction of the bait.
Currently, it can only be fished in the hyperspace and randomizer
setting of the fishing portal.
Screenshots:


## Why It's Good For The Game
The fishing portal generator is but a stale and underdeveloped prototype
of the fishing feature right now, so much I was thinking of removing it
at first. However, we also have a lot of fishes which are pretty much
unfishable, so I came up with the idea of adding new portal settings
that allow people to actually get them.
As for the skillchip and trait, it's but an extra to both the vending
machine in the library and the fishing skill itself, which has an
overall humble impact on the minigame.
## Changelog
🆑
add: Expanded the fishing portal generator. It now comes with several
portal options that can be unlocked by performing fish scanning
experiments, which also award a modest amount of techweb points.
balance: The fishing portal generator is now buildable and no longer
orderable. The board can be printed from cargo, service and science
lathes.
balance: Advanced fishing tech is no longer a BEPIS design. It now
requires the base fish scanning experiment and 2000 points to be
unlocked.
add: The advanced fishing rod now comes with an incorporated
experiscanner specific for fish scanning.
add: Added a new skillchip that may change the icon of the "fish" shown
in the minigame UI to less generic ones. Reaching master level in
fishing also does that.
qol: The experiment handler UI no longer shows unselectable experiments.
/🆑
## About The Pull Request
This PR does many things and I expect to be asked to atomize some stuff.
### Oldstation Additions
Oldstation now has their own research server, generating their own
points. To help alleviate major concerns, they have a few stuff to help
with this:
- They now have a pre-built operating computer
- They now have an Autopsy scanner
- They now have access to Experimental Dissection
Experimental Dissection is the old dissection, giving research points in
the form of paper notes on completion. They must be turned in to the RND
server (only works on the Oldstation one, so you can't abuse this) for
points. This was an idea I've had for some time, as Oldstation is used
somewhat as a representation of how ss13 used to be (through its use of
directional windows (before they got removed, but I'd like to bring them
back), old IDs, RTGs, and old engines before they got removed from the
game fully)
Considering there are 11 alien mobs in Oldstation, there is 27.5k
research points to get from alien corpses, enough to bring them up to
speed with whatever they wish to do. This is their 'alternative' for
experiments (which they can still do if they want, but it is very hard
to do, outside of dissection which is needed for the node).
This surgery isn't repeatable, isn't upgradable, and isn't removed by
being healed. It is not mutually exclusive with autopsy (so you can't
ruin yourself doing the wrong surgery).
### Other stuff
- Ninjas now drain RND points from the server they drain from, rather
than always hitting science
- Syncing machines to research roundstart is now a macro, and now
immediately syncs to a server on your Z-level. Machines will
automatically connect to the Science servers if none else are available.
### non-player facing
- Science, Admin, and Oldstation techwebs are now no longer vars on
research, but stored in research's list of techwebs.
- ``get_available_servers`` and ``find_valid_servers`` are now procs on
the research subsystem, rather than the experisci component.
- Oldstation code has been split into separate files.
## Why It's Good For The Game
Oldstation is one of my favorite ruins, but it is also one of the
largest complaints for RND (along with Golems) because they use the
station's Science nodes & points (I recently tried de-hardcoding Science
stuff to help prepare for this, but I didn't get everything in advance).
The complaint stems from these ghost roles, who are meant to be a fun
activity to do while waiting for the next round, using the station's
research points for their own stuff, completely untrackable unless
someone goes out of their way to grief a ghost spawn just for using
points to get things they need. These roles make their own servers to
drain the station, and I find that unfun and quite boring for everyone-
it's also not very flavorful, why would Charliestation know of the
station's RND to take advantage of it?
This hopes to fix those issues, make Charliestation more worthwhile, and
more flavorful.
## Changelog
🆑
fix: Getting a node researched now properly makes it no longer hidden.
fix: Ninjas draining RD servers now drains it from the connected
techweb, rather than sniping Science.
balance: Machines will first try to connect to a techweb with servers on
their z-level, with the Science techweb remaining as fallback.
add: Oldstation RND, comes with their own Techweb and special surgery to
gain research points through dissecting Xenomorphs.
/🆑
## About The Pull Request
Copying techwebs did not take into account whether
available/researched/visible nodes were hidden in the techweb being
copied from, so copying a base techweb to another would reveal all the
bepis tech modules that are available but hidden.
## Why It's Good For The Game
Pretty big cheat. Although you can't print disks any more there are
Technology Disks lying around in science in most stations, so this still
exploitable.
## Changelog
🆑
fix: copying nodes from a techweb to another no longer reveals hidden
nodes
/🆑
## About The Pull Request
Did you know that there's 2 types of disks Science can print?
One of them creates a whole new techweb and is used to transfer data to
and from techwebs (which used to be for Theft objective, but nowadays
all it's used for is Admin techweb).
The other one is these disks you can find from Lavaland & for the
Limbgrower which holds nodes on them directly, they don't need anything
else.
These are both printable and have very similar names which could easily
confuse people, especially since they are both printed and used at the
same place, being the R&D room and R&D console.
This will hopefully simplify it, by removing the base Tech disks from
being printable. The only one that can be printed now is for
Limbgrowers, which can't be easily mixed with the other type of Disk.
Outside of that, Lavaland disks are staying the same, but I've moved
Bepis disks to use this, which allows us to remove Bepis techwebs being
made every single time a new bepis disk is created.
Examples of it in-game



## Why It's Good For The Game
There's no reason why every single Bepis node should be making a whole
new techweb set with experiments to complete, roundstart nodes
researched, being constantly checked if it should gain research points,
have a list of papers to publish, and everything else that techwebs do.
Can you guess which disk does what in this screenshot?

## Changelog
🆑
balance: You can no longer print Technology data disks. You can still
print Tech disks, which hold techweb information on it, just not the one
that holds up to 5 nodes.
balance: ^ Because of this, there's no way to download nodes from an RD
console and upload them to an Autolathe to bypass departmental
restrictions, you have to go through a Techfab/Circuit imprinter for
your needs.
balance: Ones that are found cannot have anything uploaded/deleted off
of them either, you can only upload them to the Web.
code: Every individual Bepis disk no longer create an entire techweb
/🆑
## About The Pull Request
So we're like simultaneously moving two vague directions with research.
One being "experisci grants discounts for prohibitively expensive nodes
so you want to do the experiments to discount them" and the other being
"Let's give Heads of Staff a way to research anything they want without
any communication to the research department, including the very
expensive nodes that scientists may be working on"
You already see the issue, right? You can't have your cake and eat it
too.
It sucks for scientists to be working on a complex experiment like
weapons tech for that huge 90% discount only for the HoS to stumble onto
the bridge and research it anyways. Your time is wasted and RND is
slowed down massively.
We can do something to assuage that.
This PR makes it so completing an experiment which discounts already
completed nodes will refund a partial amount of the discount that
would've applied.
For example, researching industrial engineering without scanning the
iron toilets will refund ~5000 points.
This can only apply once per experiment, so if an experiment discounts
multiple technologies, they will only get a refund based on the first
technology researched.
## Why It's Good For The Game
This accomplishes the following:
- Expensive research nodes with difficult experiments remain expensive
without completing the experiments. If no one does the experiment, they
act the same as before.
- Expensive research nodes with very easy experiments (but time
consuming) no longer put RND on a time crunch to beat the itchy trigger
finger of the Heads of Staff. Stuff like scanning lathes allow the
scientists to work more at their own pace: they can talk to people or
maybe stop at the bar or kitchen between departments without feeling
pressure to get it done urgently.
- Scientists are able to complete experiments which previously were no
longer deemed relevant if they need a point injection. Experiments left
behind are no longer completely useless bricks. Maybe even gives
latejoin scientists something to do.
- Scientists mid experiment can still complete it to not feel like their
time is wasted.
Overall I think this has many benefits to the current science system
where many have complaints.
## Changelog
🆑 Melbert
qol: Completing an experiment which discounts a researched tech node
will give a partial refund of the discount lost. For example,
researching the industrial engineering research without scanning iron
toilets will refund ~5000 points if you complete it afterwards. This
only applies once per experiment, so experiments which discount multiple
nodes only refund the first researched.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
I wrote this while constantly rushing lol
This PR does many things, the largest is that the R&D Monitoring console
(the RD's one) is now TGUI
It also changes how researching loggings work, bringing the RD console
and NtosRD app on par with eachother
The type of person is also logged differently, instead of ``Cyborg:
[name]`` and ``User: [name]``, humans do not have a prefix and cyborgs
will say ``CYBORG [name]``. ``research_logs`` also works differently now
to make it easier to reference each needed data from the list.
Lastly, I added the ability to see R&D consoles from the console, and
the ability to remotely un/lock them down. This currently is pretty
useless as it can't control the tablet app variant, and anyone with
Science access can just unlock it, however with some minor future
changes I think this can be turned into a good way for the RD to get
control of their department.
Video demonstration, mostly (I made a few edits after this):
https://user-images.githubusercontent.com/53777086/215005387-817106f4-5237-4f2e-b0ac-da28e6a17f9c.mp4
## Why It's Good For The Game
This console is overhyped by the game, being hidden behind an RD-locked
Command-colored door, in the same room as one of the most damaging theft
objectives, yet it is one of the most useless and forgotten consoles in
R&D if you don't count everything outside of researching, experiments
and robotics.
This adds a nice TGUI menu while making it a little more worthwhile to
use.
## Changelog
🆑
balance: The R&D monitoring console now shows R&D consoles and their
locations.
refactor: The R&D monitoring console now has a nice TGUI menu.
/🆑
## About The Pull Request
Research point generation is now done on all techwebs that have
``should_generate_points`` set to TRUE, which by default is only the
Science techweb.
I also entirely replaced the old 'servers' and 'master_servers' lists on
SSresearch with the individual 'techweb_servers' (that already existed
prior to this PR, the title is a little misleading) which are all stored
on the individual techwebs, so we no longer store these in 2-3 different
lists. Funnily enough, master server's list was unused as their behavior
was refactored a good while ago.
Sabotaging a master server now only affects the techweb the master
server is connected to, rather than cut everyone's by half
I also removed ``calculate_server_coefficient`` instead of reworked it
to work with techweb servers, because it was entirely unused.
## Why It's Good For The Game
Better consistency for several techwebs, as sabotaging one techweb won't
sabotage all of them.
This was also at the request of one of our contributors who wanted to
make use of this system but didn't know that non-science techwebs didn't
generate points, so here you go.
## Changelog
🆑
fix: If there are several techwebs, sabotaging the master server of one
of them will no longer cut research point generation of the rest.
/🆑
## About The Pull Request
Did you know that for every Autolathe, Limbgrower, Biogenerator, ORM,
and Smelter that was built, an entire new techweb was made? The average
round has 2 ORMs (smelters count) if not more from ORM deconstruction
objective, 2 biogenerators, several autolathes and generally 0-1
limbgrower, I think there's more techwebs being created than we need.
Creating a whole techweb was a pretty terrible way to optimize this, so
I made a global list that stores these techwebs. Created on demand,
these autounlocking techwebs now share between the machines that use
them. It also generate all hacked nodes which will be visible if the
machine is hacked, instead of 'researching' them for each hacked
individual machine.
The 'specialized' techweb subtype was removed because its sole purpose
was to allow autounlocking to be a subtype of it. Now autounlocking is
just the direct subtype. I also removed mechfab autounlocking type
because it wasn't used, mechfabs use techwebs directly.
Autolathes and Limbgrowers now locally store 'imported designs' which
are things uploaded from technology disks. Outside of this, the
autounlocking techweb subtype now stores 'hacked designs' which unlocks
when the machine is emagged.
While doing this, I saw ORMs and Biogenerators had disks you can insert
into them, but I did not find anything that can actually be uploaded to
them (I saw Alien Alloys as a possibility, but there's no such disk to
allow uploading this alloy to the machine, and I didn't think an entire
system for 1 single alloy was worth keeping around), so I removed this
unused feature from both machines.
I merged 'Hacked' and 'Emagged' categories because they served the same
purpose, 'hacked' being on hacked autolathes and 'emagged' being on
hacked (emagged) limbgrowers.
Tech disk techwebs (which is created every time a disk is made, however
I hope to change this in the future) into it's own subtype, so admins
understand where its from when looking in VV panel (because I was
confused when I saw them at first).
``autolathe_crafted`` proc was removed because it was entirely unused
too.
Now it looks like this, which I consider an improvement:

## Why It's Good For The Game
We no longer initialize a brand new techweb for no reason whatsoever.
Each techweb made is making entire lists of experiments and research
papers, all of which is never to be seen in-game and is completely
useless to the player. Cutting down on these techwebs is a good first
step to this needless initializing.
## Changelog
🆑
qol: Removed the tech disk part of the ORM's UI as it was entirely
unused, now it's a little more compact with less scrolling needed.
refactor: Autolathes, Limb growers, Biogenerators, ORMs and Smelters now
share techwebs with other machines of their types, rather than all make
new techwebs each time. This means they only build their nodes once,
including hacked ones. Instead of researching nodes on hacking the
machine, they now show hacked ones depending on if it's hacked.
/🆑
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
The recent R&D PR introduced a very large regression in init time
performance, as this always logs 300+ lines every single round, from the
station techwebs, CentCom techwebs, and more. This isn't helpful for
developers or admins, so limits logs to only after the MC is running,
which will mean user triggers.
## About The Pull Request
This hopes to stop floodings in SSresearch.techwebs by making tech disks
not initialize techwebs twice each time, especially since techwebs never
get deleted currently.
I also added some loggings to research because currently its only use is
when completing an experiment.
## Why It's Good For The Game
Better logs for research stuff and prevents a flood of techwebs when
trying to find one specific one in SSresearch's techweb list.
It would also slightly help with
https://github.com/tgstation/tgstation/issues/71434 because I don't know
what would cause this as bepis isn't logged.
## Changelog
🆑
admin: Researching nodes and bepis unlocking stuff is now logged in
research.
/🆑
## About The Pull Request
This is a continuation of my previous PR
https://github.com/tgstation/tgstation/pull/71070
That one tackled techwebs and syncing it to machines, this one primarily
focuses on Generic techwebs and Experiment handlers.
### What it does
* Experiment handlers now only broadcast completed experiments over the
node they're connected to
* RD consoles once again no longer bluescreen if not connected to a
techweb
* RD servers now delete their techweb on deconstruction if they're the
creator of it
* 'Generic' techwebs are now capitalized
* Experiment handlers now see all techwebs instead of all servers being
listed under the same web, allowing there to have more than 1 techweb on
the same Z level but not list it as the same. They don't show the
location of the server anymore, I don't know if that's something that's
wanted or not.
In-game screenshot:

## Why It's Good For The Game
Mostly the same reason as my previous PR, this opens up more ways to
modularize techwebs and give more possibilities for ghost roles and
downstreams.
## Changelog
🆑
fix: Experisci handlers no longer show all servers as being on the same
techweb if they aren't.
fix: RnD consoles no longer bluescreen if they aren't connected to a
techweb, instead it will give an error message.
balance: Experisci handlers no longer show the location of RnD servers.
/🆑
Starts shaving off a lot of less than 0.1s performance killers by, in
nearly every case, just writing better code.
Numbers are amount saved.
- /obj/machinery/bluespace_vendor/LateInitialize -> 29.4ms
Changes a loop over all machines to a specialized list.
- /obj/structure/table/glass/Initialize -> 42.53ms
Stops every table from initializing glass shards and table frames before
any destruction.
- /obj/structure/chair/Initialize -> 24.64ms
Removes an unnecessary addtimer that existed for chairs that weren't
anchored in emergency shuttles. Didn't do anything.
- /datum/orderable_item/New -> 44.3ms
Instead of initializing every item to get its desc, just uses initial.
Added a unit test to make sure none are dynamic.
- /obj/machinery/computer/slot_machine/Initialize -> 26.19ms
Currently goes through every coin subtype, creates it, calls a proc,
then qdels it. Changes that to only run once. Could be optimized further
by making the coin info on a datum to avoid creating the object, but it
currently sits at 7.82ms, far below worth caring about for now.
- /obj/machinery/door_buttons/airlock_controller/findObjsByTag -> 3.51ms
Loops over just doors instead of typechecking airlock in machines.
- /obj/structure/closet/Initialize -> 60.57ms
Moves the code for taking everything on the tile from a next-tick timer
to LateInitialize.
- /obj/machinery/rnd/experimentor/Initialize -> 36.92ms
Changes a list that is generated by going through every item in the game
and getting information from a large amount of them to only run when
needed.
- /obj/structure/tank_dispenser/Initialize -> 20.81ms
No longer initializes every tank in it right away, only when needed.
- /obj/machinery/telecomms/LateInitialize -> 16.63ms
Removes `urange` to instead just loop over telecomms machines and check
distance. There's not that many of them.
- /mob/living/simple_animal/hostile/carp/cayenne/Initialize -> 3.17ms
Defers a GAGS overlay creation until its needed. BTW GAGS is
*horrendous* on init costs, and is the root cause for a lot of pretty
terrible performance. I investigated precompiling but the gains weren't
crazy, but likely could be the more stuff is GAGS'd.
- /turf/open/floor/engine/cult/Initialize -> 14.64ms
Temporary visual effect that is created is no longer done on mapload,
since nobody will see it.
- /datum/techweb/specialized/autounlocking/proc/autounlock -> 5.55ms
Changes some loops to shorter checks. This whole proc is pretty bad and
it's still 14.21ms for 17 calls.
- /matrix/New -> 13.41ms
- /matrix/proc/Translate -> 42.06ms
~~Changed the mineral matrice to only generate once, then take it from a
static.~~ An extra ~0.05s taken off by avoiding setting icon and
transform every Initialize.
I recategorized EVERY /datum/design/ IN THE GAME to be more UX friendly and I HATE MYSELF FOR IT
I refactored techfab UI to WORK ANYWHERE for ANY MACHINE THAT USES /datum/design as a SET OF MODULAR COMPONENTS
I moved a lot of DESIGNS EXCLUSIVE TO THE AUTOLATHE to also work IN PROTOLATHES
I made MATERIAL ICONS animate between ICON STATES for STACKS
I PUT ICONS IN ALL OF YOUR FABRICATORS
I SOMEHOW DID ALL OF THIS WITHOUT LOSING ANY PERFORMANCE
ALSO SUPPORTS COMPONENT PRINTERS AND MODULE DUPLICATORS
Other garbage:
Fixed numerous spelling and consistency issues in designs
Removed Machine Design (<x>) and Computer Design (<x>) from all relevant designs
All designs are now in title case
Numerous designs that were formerly autolathe exclusives can now also be printed at a protolathe (but not all); this is mostly just service equipment like drinking glasses and plates and silverware
Circuits components can no longer be printed at a circuit imprinter (fixes
Integrated circuit components printed in the component printer/module printer cost twice as much than from an un upgraded circuit printer #67758)
Designs that are not sensible for a department to have are no longer accessible to that department (read: medbay printing turbine parts)
Why It's Good For The Game
Improved UX for techfabs, but also for mechfabs and autolathes, and oh look it's pretty!
also I spent like eight hours doing nothing but categorizing /datum/designs and I'll cry if some version of this doesn't get merged eventually
Changelog
cl
refactor: mechfabs, autolathes, component printers, and module duplicators now use techfab tgui components
refactor: every single design is now categorized and subcategorized
refactor: mechfabs and autolathes are now in typescript
qol: techfabs now have icons for what you're about to print
qol: techfab material icons are now animated
qol: techfab material icons now fade when no materials are available
qol: techfab searching no longer lags like hell
qol: techfab searching now searches all recipes instead of just the current category
qol: techfabs now have subcategorization (stock part users rejoice)
qol: techfabs now announce when new recipes are available
qol: numerous other techfab ui tweaks
balance: some designs that were formerly autolathe exclusive can now be printed at some departmental techfabs
This PR focuses on cleaning up two procs - updateDialog and updateUsrDialog. Both of which are/were used updating for old HTML UIs. As these UIs got converted to TGUI over time, these old code fragments started to pile up, often due to coders simply overlooking them. This resulted in them being dead code doing nothing when called, or randomly opening up windows when they shouldnt, for example when a vending machine is screwdrivered and UI cannot even be interacted with.
However, there were also some desirable uses - like opening a window when an ID is inserted into civilian bounty console, which you are then gonna obviously use to pick a bounty. I kept these uses and replaced them with proper ui_interact, so they now always work, instead of them working only when you had them set as a currently used machine on mob. The list of these changes is:
Civilian Bounty Console will now always bring up its UI when you insert the ID.
Air Alarm and APC will now always bring up its UI when you unlock their controls.
Portable Chem Mixer, Chem Dispenser, Chem Heater, Improvised Chem Heater, Chem Spectometer and Chem Master will now always bring up their UI when you add or replace beaker to them.
Two old /Topic calls were cleaned up as well, as they were no longer relevant.
Removes dead or outdated code, adds sensible UX when working with certain UIs.
How do I play/test/operate this?
Download NT Frontier on any modular computers. It should debrief you on what experiments are available and how to publish.
If you want to do a bomb experiment, make sure it's captured by the doppler array (as usual) and then print the experiments into a disk and publish it.
If you want to do a gas experiment, make the gas and either pump it into a tank and 1) overpressurize it with a "clear" gas like N2 or 2) overpressurize tanks with the gas itself. Make sure you do the overpressurizing in the compressor machine. When tanks are destroyed/ejected leaked gas will get recorded. Print it into a disk and publish it.
For publication, the file needs to be directly present inside the computer's HDD. This means you need to copy it first with the file manager.
Fill the data (if desired, it will autofill with boiler plate if you dont) and send away!
Doing experiments unlock nodes, while doing them well unlocks boosts (which are discounts but slightly more restrictive) which are purchaseable with NT Frontier.
If you are testing this and have access to admin tools, there are various premade bombs under obj/effect/spawner/newbomb
A doc I wrote detailing the why and what part of this PR.
https://hackmd.io/JOakSYVMSh2zU2YL5ju_-Q
---
# Intro
## The Problem(s)
Ordnance, (previously toxins) seems to lack a lot of content and things to do. The gameplay loop consists of making a bomb and then sending it off for credits or using it to refine cores. Ordnance at it's inception originally relies on players experimenting and finding the perfect mix over multiple rounds, but once the recipe for a "do-everything" mix got out, the original charm of individual discoveries becomes meaningless.
Another issue with ordnance is the odd difficulty curve. As a new player, ordnance is almost impossible to decipher, but once you watch a tutorial or read a wiki and can mail a 50k into space, there pretty much isn't anything else to do. Most players will be satisfied at this point without the gameplay loop encouraging them to understand or play more. The only thing you can do afterwards is to sink your teeth in and understand why that particular mix explodes the way it does. This again has a significant difficulty curve, but if you do that, the department doesn't acknowledge or reward that in any way. There are pretty much two huge spikes, with the latter one not really existing inside the department.
TLDR:
* The content being same-y over rounds.
* Odd difficulty curve:
1. A new player is oblivious to everything.
2. Those in the middle can repeat the final goal consistently without needing to understanding why
3. There is nothing to justify spending more time in the department after reaching the midgame.
## Abstract
Scientific Papers aim to add a framework to run multiple experiments in ordnance. Adding more experiments scattered across various atmospheric aspects might allow players of various knowledge levels to still have something engaging to do. A new player should have an easier challange than to mail a 50K. While those that already can make bombs should have an easier time understanding why their bombs explode the way it does. Once they fully understand why, they can set their sights on taking advantage of another reaction to set their bomb off or hone one particular reaction down.
## Goals
* Have some intro-level challanges for new players.
* Have some semblance of late-game challanges for more experienced players.
* Explain the mechanics better for those in the middle of the road.
* Incentivize trying new things out in the department.
* Better integrate Ordnance with Experisci
## Boundaries / Dont's
* Do not incentivize people to learn ordnance by using PvP loots.
* Do not shake or change the reaction system by a huge amount.
* Disincentivize having a single god-mix that does everything.
****
# Main design pillars
## A. Framework surrounding the experiments
### A.1. New experiments
Add new experiments to the ExperiSci module. These will come in two flavours: New explosions to do, and various gas synthesis experiments. Both of these are actually supported by the map layout of ordnance right now, but there is no reason to do anything outside of making a 50k as fast as possible.
### A.2. Rewards for experiments: Cash and Techweb Boosts.
Scientific papers will add a separate experiment handling system. A single experiment will be graded into various tiers, each tier corresponding to the explosion size or amount of gas made. Doing any tier of a specific experiment will unlock the discount for that specific reactions. A single explosion **WILL NOT** do multiple experiments (or even tiers) at once.
On publication, a partner can be selected. A single partner only has a specific criteria of experiments they want. The experiments will then be graded on "how good they are done", with the criteria being more punishing as tier increases. Publication will then reward scientific cooperation with the partnered partner. Players can spend this cooperation on techweb boosts. Techweb boosts are meant to be subservient to discount from experiments and will not shave a node's price to be lower than 500 points.
**Experiments will only unlock nodes, discounts are handled through this boost system.**
This is more for maintainability than anything.
### A.3. On Tedium
*This is a note on implementation more than anything, but I think this helps explains why several things are done.*
Due to the nature of atmospheric reactions in the game (they're all linear), tedium is a very important thing to consider. An experiment should have a sweet spot to aim for, but there should not be a point where further mastery is stopped dead on it's track with a reward cap.
Scientific Papers attempts to discourage this behaviour by having the "maximum score" scale off to infinity but with the rewards being smaller and smaller. The sweet spot is always there to aim for and should be well communicated with players, but on their last submission of an experiment topic players should be encouraged to do their best. There should always be a reward for pushing the system to it's limit as long as it doesn't completely nullify the other subdepartments. This is the reason why there is a hard limit on the number of publications and why the score calculation is a bit more complex than it needed to be.
## B. Gas Synthesis (Early-Mid Game)
Scientific papers will add one new machine that requests a tank to release x amounts of y gas. This will be accomplished by adding a tank pumping machine which will either burst or explode a tank, releasing the gas inside. The gas currently requested are BZ, Nitryl, Halon and Nob.
The overarching goal of this compressor machine is to present a gas synthesis challange for the players and to get them more accustomed to how a tank explodes. The gas synthesis part can always be changed in order to reflect the current state of atmospheric reactions.
## C. Explosion Changes (Mid-Late Game)
### C.1 Cause and effect.
The main theme of the explosion changes is establishing cause and effect of explosions. Reactions that happens inside a tank that's going to explode will be recorded and forwarded to a doppler array. Some experiments will require only a single cause to be present (think of it as isolating a variable). This is currently implemented for nobliumformation and pressure based bombs. Having other reactions occuring besides noblium formation will fail the first one, while having any reactions at all will fail the second one.
Adding more explosions here will be a slight challange because as of now the game has only two reactions that can reliably make an explosion.
### C.2 Tools upgrade.
Doppler array has now been retrofitted to state the probable cause of an explosion, be it reactions or just overpressurization on gas merging. These should help intermediate players figure out what is causing an explosion.
Added a new functionality to the implosion compressor:
Basically performs the gas merging and reaction that TTV does in a machine and reports the results back as if someone uses an analyzer on them. Here to give players feedback so they can try and understand what is actually going on in a bomb.
## D. Player Interaction
There should be more room for more than 1 player to play ordnance simultaneously. Previously players are also able to split tasks, but this rarely happens because tritium synthesis needs only the gas chamber to be reconfigured. Now, different players can pick different experiments and work on them. Players can also do joint tasks on one single experiment. Gases like noblium will need tritium production and also a cooling module online.
Ordnance can also coordinate with their parent department on what they really need, be it money or research bonuses.
# Potential Changes
The best-case changes that can be implemented if the current roster of content isn't enough is more reactions that can be used in bombs. Eliminating bombs entirely goes against the spirit of the subdepartment, while adding new ones will need a lot of care and consideration.
Another possible change is to implement a "gas payload" bomb. Bombs that has a set number of unreacting gas inside that will increase the heat capacity, reduce the payload, and neccesitates more bespoke mixes.
Adding more gas synthesis experiments is discouraged. The main focus of ordnance should be bombs, with gas synthesis being a side project for ordnance. These are present to ease the introduction to bombs and provide some side content.
There should be a somewhat well-justified goal in adding new synthesis experiments: e.g. BZ is there as a "tutorial" gas, Nitryl to introduce players to cooling/heating mixes, Halon to a more efficient tritium production, and Nob as a nudge to nobformation bombs and mastery over other aspects.
# Conclusion / Summary
Add more experiments to ordnance that players can take, accomplish this by:
1. Making the players perform gas synthesis or make bombs.
2. Have them collect the data, see if it fits the criteria. Explain why if it fits and why if it doesn't.
3. Have the player publish a paper.
Reward them based on how well did they do, give players agency both on the experiment phase and also publication phase.
---
TLDR: Added new experiment to toxins, added the framework for those experiments existing. Experiments comes in gas synthesis and also bombs but with more parameters. Experiments needs to be published through papers, various choices to be made there.
Implementation notes:
Because of how paper works, ordnance experiments are handled outside of experiment_handler components. My reasoning for this is twofold:
The experiments will be completed manually on publication and if the experiment isn't unlocked yet it will still be completed.
Experiment handler datums have several procs which require an atom-level parent, and I figured this is the most sensible and cleanest way to implement this without changing the experiment handler datum too much.
Small change to /obj/machinery/proc/power_change() signal ordering to adjust the state first and then send the signal. Didn't found any other usage of this signal except mine but barge down my door if it broke something.
Rewrote the ttv merge_gases() code to be slightly more readable.
A small code improvement for thermomachine to use tofixed (my fault).
Ordnance have been updated to enable the publication of papers
Several new explosive and gas synthesis experiments have been added to ordnance
Anomaly compressor has been TGUIzed and now supports simulating the reaction of the gases inside the ttv.
New tank compressor machine for toxins. You can overpressurize tanks with exotic gases and complete experiments.
Several techweb nodes are locked and require toxin experiments to complete.
Toxins can purchase boosts for various techweb nodes.
You no longer need to anchor doppler arrays for it to work.
Doppler array and implosion compressor now supports deconstruction, implosion compressor construction added.
Doppler now emits a red light to denote it's direction and it being on. Doppler not malf.
Implosion compressor renamed to anomaly refinery.
Created a new program tab "Science" for the downloader app. Removed Robotics.
Reworked the code for bombspawner (used in the cuban pete arcade game)
Done using this command sed -Ei 's/(\s*\S+)\s*\t+/\1 /g' code/**/*.dm
We have countless examples in the codebase with this style gone wrong, and defines and such being on hideously different levels of indentation. Fixing this to keep the alignment involves tainting the blames of code your PR doesn't need to be touching at all. And ultimately, it's hideous.
There are some files that this sed makes uglier. I can fix these when they are pointed out, but I believe this is ultimately for the greater good of readability. I'm more concerned with if any strings relied on this.
Hi codeowners!
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
Removes various R&D machine requirements including circuit imprinters, protolathes, destructive analyzer and the mechfabs. All machines that previously required an R&D console to function are standalone, including omni protolathes and omni imprinters.
Replaces "production"-class R&D consoles with civilian modular computers on all maps. There are no longer "production"-class consoles.
Removes the concept of "core" R&D consoles. R&D consoles only research and handle tech disks and stuff. All existing core consoles have been switched to their basic archetype.
Because it's a pain in the ass to manage, material reclaimation has been removed from the destructive analyzer. The destructive analyzer is now ONLY for destroying items and unlocking research nodes such as illegal and alien tech.
* Squashes Commits, has BEPIS, Techs, TGUIs, Rewards, and fixes.
* Makes rewardable techs a variable in all_nodes, and removes RnD Points rewards from the minor reward pool.
* Fixes conflict with pubby and beam icon.
* Review comments and basic cleanup A
* Review Comments and basic cleanup B, also cleans up icon states to work fluidly.
* Map Update
* Indentation, flipped Update_decal_path, and rebuilds tgui
* One last clean up of icon_state, adds the last bit of changes from review, and that should be everything.
* Alright last change for real I swear 105%
* Last change, adds simple sanity check for silicons.
* Moved Human and card variables into ui_interact.
* Fixes map conflict
* Alright Review Round 2 Part A, Fixes Grammar, splits polycircuit into it's own file, UI QOL improvements, Withdrawing credits, changes from arbitary values on the mini RLD, etc.
* More review bits, Part 2:B. Easier returns for less processing, Defines, fixes the merge conflict and updates the UI with new buttons. Just need to figure out Button Mapping for the UI and Duplicate prevention.
* Implemented duplicate tech protection. Yeet.
* Get back in there you
* Alright why are you breaking on me god damnit.
* It's optimized, closer to god, nearly perfect, all together it's ready to ship.
* Cleans up all of the decal painter, shorter, cleaner, works around all the turf_decal quirks.
* Tab spacing on github will look fucky
* More review changes.
* Uses use_power == ACTIVE_POWER_USE instead of powered except for the UI
Adds a new abductor themed shuttle to the game, available for 8k
credits! The shuttle is only unlocked after alien technology has been
researched!
The shuttle offers some unique items and layout compared to others
currently available. Two singular entrances with the brig in the back
means security needs to walk prisoners to the brig area to secure them.
Unique unlock mechanism encourages either bringing alien tech back from
Lavaland or stealing some from an abductor.
A few unique items aboard, including alien tools, the experimental
cloner, and a void core can provide interesting opportunity if utilized
in the window of time that the shuttle is on station.
GENETICS
The random hexadecimal rng game has been replaced with gene sequencing from goon.
Adds mutation activators and mutators
You can now store mutations
Everyone now has their own set of unique mutations
Limited mutations per person to 8 (including one always being monkey)
Adds race specific mutations (See fire breathing for lizads)
You can inspect discovered mutations, undiscovered mutations use an alias to recognize them by
Adds a sequence analyzer. Can be used to scan someones genes sequence. Useful for determing what mutations they can safely have and or collecting data for very difficult sequences
Adds mutation combining. It's currently only RADIOACTIVE + STRONG = HULK (So yes you will now need 2 mutations for to get hulk)
Adds several other mutations. Telepathy, firebreath, glowy, radioactive and strength
cl Time-Green
add: Goon genetics!
add: More mutations! Fire breath for lizards! Radioactive! Telepathy! Glowy! Strength, though its cosmetic and should be combined with radioactivity instead! Fiery sweat!
add: Adds void magnet mutation by @tralezab !
/cl
Yeah yeah I know no opening too many WIP PRs but this one's [ready] and I want to make sure any furthur techweb development doesn't keep using the old reference system which will make refactoring it harder, and this makes it easier for coders to do stuff in theory (at least for me), standardizes getting a node/design, and makes stuff actually GC properly.
cl Cobby (using cyclown's formula)
balance: Techweb point gen via toxins are now very-hard-soft capped at 50K point rewards. After 50K points have been awarded, you can still get points for bombs that would reward higher than 50K, but they are worth only a flat 1K (hint: it's not beneficial). Give those other bombs to mining!
balance: Techweb toxins equation has been edited (once again)
/cl
Reason: 10 minute prep is not worth nullifying the entire balancing act of techwebs, which are meant to more/less dripfeed items into an hour-hour thirty round.
The header has been made tighter, shows current research production, and
doesn't show disk status. Researchable technologies in the overview show
their point cost. Tech summaries are tighter, and unlocked designs are
represented visually with tooltips.