mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-03 21:42:06 +00:00
37489698a1f855a6ff8dcdeb824e7bf84ff3ed32
3082 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
c8f27896c0 |
Supermatter cascade round-end (#66659)
This PR adds the resonance cascade to the SM (idea ported from vg but with total rewrite) The resonance cascade will turn reality into crystals that devours and destroy everything. It can be triggered by delaminating the SM when is in contact with hypernoblium and antinoblium, both at over 40% and with as many moles to trigger a singulo delamination. The cascade can't be triggered if the SM is already under 80% integrity and if at any point any of the gases gets under 40% or the total gets lower than the amount for singulo, it will stop the cascade and can't be retriggered unless you reset the SM to over 80% integrity. |
||
|
|
068a3be859 |
Makes smoke and foam attempt to fill the available space. (#65281)
Have you ever noticed that the chemical smoke and chemical foam reactions are a lot less effective in confined spaces? This is because they currently attempt to spread to all tiles within n steps of their origin. If they can't expand onto a tile they get blocked and the expanding cloud/flood misses out on all the tiles that would be in range, but that can't be reached. Obviously smoke and foam getting blocked by walls and the like makes intuitive sense, but it seemed a bit nonsensical that walls would basically delete a significant chunk of an expanding, amoebic mass. The solution I came up with is making smoke and foam expand until they cover a certain area, with a shared tracker for the target size and total size of the flood. The flood will simply expand as normal until it covers the desired target area. Blocked expansions just don't count and will be made up for with expansion elsewhere. Attendant to these changes are a whole bunch of minor code improvement to smoke, foam, and one for wizard spells because I was already in the area and :pain:. There have been some minor balance changes to the chemical smoke and foam reactions: I converted them over to passing the desired area of the resulting smoke cloud/foam flood. The old equation for the resulting area was along the lines of 2sqrt(x)(sqrt(x) + 1) + 1 given reaction volume x and given unobstructed expansion. I've made them just pass around 2x instead. This is actually less than they used to try for, but now they're guaranteed to reach that unless the flood is fully contained. Not entirely certain if buff or nerf. Probably buff on the station. Also, foam dilution is now based on covered area instead of target expansion range. Since this scales faster than it used to foam has been effectively nerfed at high volumes. To compensate for this I removed the jank 6/7 effect multiplier and increased the base reagent scaling a bit. Again, not certain if buff or nerf. |
||
|
|
0504c0a2b4 |
Improper forced qdel cleanup, some expanded del all verbs (#66595)
* Removes all supurfolus uses of QDEL_HINT_LETMELIVE This define exists to allow abstract, sturucturally important things to opt out of being qdeleted. It does not exist to be a "Immune to everything" get out of jail free card. We have systems for this, and it's not appropriate here. This change is inherently breaking, because things might be improperly qdeling these things. Those issues will need to be resolved in future, as they pop up * Changes all needless uses of COMSIG_PARENT_PREQDELETED It exists for things that want to block the qdel. If that's not you, don't use it * Adds force and hard del verbs, for chip and break glass cases respectively The harddel verb comes with two options before it's run, to let you tailor it to your level of fucked * Damn you nova Adds proper parent returns instead of . = ..() Co-authored-by: Seth Scherer <supernovaa41@gmx.com> * Ensures immortality talismans cannot delete their human if something goes fuckey. Thanks ath/oro for pointing this out Co-authored-by: Seth Scherer <supernovaa41@gmx.com> |
||
|
|
b4fb8f3ed1 |
[MDB IGNORE] You can have your cake and eat it too. Remake of #66406 (Splitting up areas.dmi + code related stuff) (#66726)
Areas.dmi right now houses all of our mapped turfs icons (which is roughly 400 icons). Not an issue, but it's incredibly large and clunky to navigate right now. This isn't an issue for the average coder and/or player code diving, but it is for mappers wanting to add new turfs. Currently, the file has some organization, but its still an overall mess. This PR aims to slice the behemoth with multiple .dmi files corresponding to specific areas. I also plan to repath /area/* -> /area/station/* for station turf only. This is to clean it up, as most other turfs follow this format (that being /area/turf_zone/*). I'm also writing an update paths file as I go along. |
||
|
|
ff74afaf4b |
Applying templates now changes a job's payment department. (#66677)
So, unbeknownst to me, the refactor to ID cards and trims from a few months ago also changed how setting your payment department is handled. In that it doesn't, you COULDN'T change your payment department. Now, this made sense at the time because it wasn't a player facing change and I don't imagine that specific circumstance mattered to anyone whose played the game in the last few months. However, as a direct consequence of the changes to paychecks and economy, it made it so that going and getting a new job DIDN'T change your paycheck department, and prevented you from being able to meaningfully avoid the lathe tax by changing jobs, which was a clear part of the previous PR's intent. The best way I could imagine to handle this was to have it compare against the job of the trim/id set and change that value on the job stored within the account on the ID, since we can now count on IDs always having a registered account. Having a job change should ideally change the department that is paying you, and by making you a formal member of your department you can change who you get discounts from in the future. Ideally, we should probably make this work on making your payment department adjusted within the card program and computer, but for the moment this is a serviceable middle ground since I'm already a bit out of my depth with regard to IDs/Trims/Cards. |
||
|
|
a9d8be4d16 |
adds new z-level trait to disable parallax (#66637)
* first push woohoo * more stuff * Update code/datums/components/z_parallax.dm Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> * mothblockification * fuck * fuck 2 * uh * uh yeah style stuff ig * more changes * last changes * fuck * fuck 2 * i hate potatopotato * i hate potato * 2 * a * god * woops * Update code/modules/mapping/space_management/traits.dm Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> * Update code/modules/mapping/space_management/traits.dm Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> * Update code/modules/mapping/space_management/traits.dm Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> |
||
|
|
24326bc649 |
Hud Image Culling By Z Level: Theft edition (#65189)
* makes hud images only apply by z level * makes some of the atom_hud procs have better names * fixes warning with the hud_user list and adds better documentation * better docs for hud_images * removes TODOs * docs for hud_list * adds support for linked z levels so mobs can see lower ones * fixes merge conflict and shittily makes only shocked airlocks get added * adds support for setting images in the hud as active and inactive * gets rid of unatomic spatial grid change * maybe i should actually try COMPILING my changes * fixes merge skew and makes it compile again * fixes huds refusing to remove from users who changed z level * improves z level and registration logic * fixes antag huds not appearing * Fixes antag huds not properly setting. We now use hud_list in init, so it needs to be set before the new call, not after. Not sure why the use of appearance key was split like this, but none else knows either so none can stop me * Ensures that hiding a basic appearance also hides the atom's active list too * Fixes antag huds going poof Ensures that remove_atom_from_hud will return false if the passed atom isn't managed by it This fixes antag huds disappearing randomly, since they assumed that if the parent call of remove_atom_from_hud returned true, we should delete ourselves. This is a safe assumption for them to make, since they should only ever have one atom. Does kinda bork if we call remove_atom_from_hud in a way that is unsure if the passed atom is actually in that list. We were forced into doing this by how atom huds use the qdeleting signal. * makes basic alternate_appearance's only update themselves when setting their hud image to active and makes them not add themselves to the global huds_by_category list * fixes mistake with hud_users list being set non associatively (bad) * as anything in bot path loops * Fixes merge skew problems * Makes bot paths non global This way they can show themselves to only the bot that "owns" them, ya feel me? * Fixes huds not showing up sometimes, cleans up some code Post Kapu's limb refactor, we were calling prepare_huds twice in a human init call chain. What was happening was this: call prepare_huds() // Human I gained a new hud image I set active hud icons to mirror it call prepare_huds() // Living I overwrote the new hud image I attempted to set active hud icons, which failed because it assumes this can never happen *cries* * Renames add_hud_to_atom to show_to My hope is this will make understanding hud code a bit easier, by tying the behavior to a "verb" more closely. Also renamed a few vars * remove_hud_from_mob -> hide_from * Nitpicks a few comments * Whoops/fuck/shit/damn it all/hhhhhhhhhhhh * Moves check down, improves stack trace a bit Co-authored-by: KylerAce <kylerlumpkin1@gmail.com> |
||
|
|
dfa6977f6e |
Enables out of order moveloop removal (#66532)
Two things going on here. First, a stupid clerical error I made in the dequeue_loop proc that prevented loops from removing themselves from a queue. This was easy to resolve. Second and more complex. pour_bucket makes this assumption that when it's done with a bucket, it can just pop the first one that's sitting in the queue. This is unfortunately not always true, because the bucket can be already cleared by a dequeue_loop called under loop.process(). The fix for this is to do some sanity checking on the index and bucket_time arguments. It's not perfect, but a second assoc lookup and a length check isn't that bad. The alternative would be merging buckets and sorted_buckets into one list, but that requires doing quite a few text2num calls on insertion, which I am not a fan of. Thank you to DamianX and MNarath1 for mentioning this issue, and discussing it with me You guys are real cool |
||
|
|
9c186ed3aa |
Radiation pulse changes. The chance of getting irradiated decreases the further you are from the source, and from objects that block radiation. (#66305)
* Radiation. Replaces radiation chance with radiation intensity on radiation pulses. Radiation intensity determines the chance of getting irradiated, and diminishes over range or getting blocked by objects. Getting close to the radioactive source will give you a high chance to get irradiated, while being far but still in range will give you a low chance to get irradiated. * I suck at spelling. Balances some atmos related radiation stuff. Changes supermatter radiation stuff, though I would probably need to adjust the threshold to adjust for the new changes. Calling radiation pulse without intensity parameter filled will now set the intensity to be the value where it will give an object a 5% chance to get irradiated from the max range of the pulse, assuming there are no objects between it that absorb radiation. The same will happen if you call radiation pulse without max range parameter filled. |
||
|
|
abb095886d |
Anomaly expansion - part 1 - Hallucination anomaly (#66392)
New anomaly, the hallucination anomaly. It has small bursts of hallucinations while alive followed by a big one in the moment of the end. More anomalies are fun, i'm planning to add more of these added the hallucination anomaly, spawnrate similar to the flux one, can spawn from the SM if eer are over 5000, can spawn when the SM delams (higher rate than the grav one), you can make the hallucination reactive armor |
||
|
|
e657e6c4f7 |
Most materials can be used to build most things (#66181)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
5f4d5a42d4 |
Arconomy: The bigger balance PR (REVISED EDITION) (#65795)
This PR covers 4 Key features:
Price Rebalancing
Passive Income
Gas Exports
Lathe Tax
Relevant Design Doc (Slightly out of date as a result of the discourse on the subject).
https://hackmd.io/WlWgyRafTaiAqz6ouOqC-Q
-- START DOCUMENT --
# Arconomy Version Two
This is mostly me organizing a long list of thoughts that I'm not sure if I can properly describe and get across, but lets just work with what we got and go from there.
## There should probably be a relationship to time and profit
So, part one of a series called "Arcane was completely wrong about game design", I made a rather large misstep in regards to designing arconomy, and nobody told me this until far, FAR after I had gone way too in on my own ideas:
"There needs to be a relationship between time and money". Because Space Station 13 is a game that is built around rounds, either long, LONG rounds on MRP or 30 min - 1 hour long rounds in LRP, your whole orientation of the game is built around time. The longer you spend in a single round, the more you can do and mold the station and the game in a specific direction, whether it's from an admin event, doing your job, or going off on a wierd character based tangent.
The issue here lies in a question I tried to answer in my previous design doc:
> "Command players start with lots of money, and make mountains of money, and as a result, have so much money by the end of the shift that they're practically immune to the effects of the economy.
> Assistant players start out with practically no money, find that the station is covered in costs that they'll never be able to practically afford, and decide that the economy is stupid and not worth utilizing altogether."
Two fundimentally different outlooks on the same problem, caused by the pay discrepency as it existed originally. Since we have so many different jobs all at different paygrades, the option that made the most sense at the time was to completely remove paychecks alltogether because they would multiplicitively exacerbate the previous issue.
While it would flood the in-game economy over time at high levels, it did add a sense of timescale to the existing in-game relationships. You **KNEW** that after x many minutes you would get that fancy hat, or that you would need to find cash in other ways to get it. Having that time-scale is helpful as we've moved to our 90 minute round average/goal. It also, similarly, means that we know exactly how many credits each job SHOULD have had access to before a major disaster calls for a shuttle call. But, in hindsight, that is a value that should be consistant for all players. If a single, unaided player looks at a 200 credit bill, that should have the same impact player to player, and not limit their access to jobs.
## Bounties just ain't that fun, but they stand to see improvement from where they are now
So, guilty as charged, bounty running doesn't quite have the same charm as it used to have. For our friends just joining us, cargo used to have a single, per round laundry list of items that would payout to the cargo budget each shift. Each list would start with 10 items, one of which would randomly be assigned higher priority with a higher payout, and it would be cargo's job to ~~Break into each department and steal that thing~~ cooperate with jobs around the station to aquire funds for station crisis or when you just want to dick around and make stacks of cash. This had a distinct charm to it, but one element of it that majorly reduced the replayability of bounties was that they were severely limited in scope. Once you did your ONE drink bounty or your ONE chemical bounty, you no longer needed to interact with that department.
My original goal was this: Make an unlimited bounty system, where crewmates were able to get a cut of their work as profit. To a degree, it's fairly successful! Crew do have a way to actively work with cargo to get paid for their labor, and they help cargo as a result by giving them free valuables. The issue lies in the fact that this has kinda flipped the relationship on it's head: Bounties stopped being cargo's job to outsource to the crew, and instead the crew's job that becomes dependent on cargo.
In general, many bounties simply weren't meant to be repeatable content in the first place. And certainly not meant to be used for every job. Offloading it as a kind of fetchquest minigame so that all jobs can offset the loss of passive income? It's not the best choice. For jobs like botanists or scientists it's tolerable at best, frustrating at worst. Just look at the state of things like experisci-slime experiments or scanning furniture.
It gets far worse when it's from the perspective of jobs that have *explicitly* limited supplies like security. No, a security player is not going to be allowed to haul away all the good metal handcuffs from the brig for a bounty, and no, you cannot take all the riot shotguns from the brig.
Now, a few of these things were fixed over time, with mixed successes. Bounties started to be cleaned up in order to prevent limited quantity items from being an option for repeat bounties. Jobs that lack exports started to get some content for still allowing them to have repeatable exports (Like the Scanners for Security Officers to go on patrols).
The BIG EXCEPTION to this is Restaurant Bots, but we'll hit that in a second.
## Getting everything on the same price scale has been a major improvement.
Unironically one of the best changes made has been the idea that even if we lack that good time-credit scale from before, we didn't really have a "standard" to work off of when something new is added to the game and the dev needs to determine how much to make that thing cost. That's why the current costs of objects and values on-station are scaled off of a single define, the value of a crate sold on the cargo shuttle.
> Yes, I'd like an APPLE. It's worth 3124151 CREDITS. NO, I don't know why the apple juice in the vendor is worth 415 CREDITS, nor do I CARE, GOOD MAN.
From the back end, everything is scaled off the same define now. Paygrades are defined off of a different scale still, but that's fine. You know, from the cargo end of things, that a cargo player needs to ship off X number of empty metal crates to purchase a laser crate, or a pizza crate. Definate relationships help in solidifying the singular value of a product.
If we decide that we want to rescale the in-game economy and provide space credits with more granularity, at least we know we can do it with a single line of code, and not looking at every single instance of something that charges the player money.
### Arconomy Tangent: We gotta nuke gas selling.
This has been a long time coming and I know people are going to be upset at me, but look man.
I have no idea how selling moles of gas works these days. It seems like with minimal resources, true atmos wizards are able to make singular cans of gasses with infinite moles of some kind of gas, and if it's exotic enough, they can make upwards of a million credits a can. I've seen multiple occasions where selling gas cans to cargo has allowed for players to buy a bike.
For our Gen-Z zoomers reading this, players were never meant to BUY the bike. The bike is just a reskinned scooter meant as a cute little pokemon joke. If a player can actually buy a bike in a round, that's a sign that someone, somewhere, fucked up.
We fucked up the whole system with atmos gas selling.
We've now gone through metas of extracting miasma from lavaland for credits, we've gone through a meta where cargo starts building their own hydrogen burn chambers for simply produced gasses, we've seen time and time again that processed gasses in the funny space simulator just tends to be abused to death and back. I've had talks with TheFinalPotato on this in the past, and it just feels like a system that would need to be rewritten from the ground up, or looked at in terms of the whole cargo department. If I don't get to it first, the next cargo design doc someone writes **SHOULD**.
## Giving jobs content that integrates into the economy can be really fun.
Tourism bots and the baked in ingredient shopping is fun! It's enabled for a fluff job that doesn't have too terribly much by way of serious responsibilites to integrate active income minigames into the gameplay of chefs and bartenders. It's fully optional, it's quick, and it's not even a full shift investment.
These secondary tasks, which utilize jobs core gameplay loops in a new way, while rewarding them within the in-game economy are a decent way to keep players engaged with their jobs, and allow for them to use credits as a player resource as well as a primary job resource.
**I AM NOT SAYING** that all jobs need to find tasks to arbitrarily reward players with credits for. The reason it works so well for jobs like the chef or bartender is because their job is already to make food and drinks, but they have so many options that they're not encouraged to make too wide of a variety of food, especially when botanists won't always make everything you need. The food market gives them an outlet to buy outlier ingredients and the tourists pay handsomely enough that you can offset your costs most or the time.
I'll break this down as well into the three different methods of money-making in game as well, to guide someone on how to make good, secondary income content.
| Primary | Secondary | Tertiary |
| -------- | -------- | -------- |
| This is something like passive paycheck income. You get this just purely for playing the game, and staying alive. | This is an active trade off between your job's specific content, where you are trading your time for something it is directly your responsibility to do. Eg. Tourist Bots. | An active task you are performing for income, but lacks the specialization of a job. EG. Bounties. |
Jobs that excell at more service based tasks and less production based tasks should aim to aquire more seconary style economy integration, like medical, science, or security.
## The options for moving money around the station are actually pretty decent, but could be streamlined
Bounty boards are pretty decent at being a way to pay crew members for single service jobs. However, bounty boards are pretty much dead content, in a sense. There's not much incentive to hunt down your department's bounty board.
Similarly, most crew would just prefer to hand credits out by hand to prevent most kinds of abuse of their own credit supply.
Long term and certainly a major personal outcome I'd like to see: Bounty boards and Newscasters should be merged together. Newscasters have some truely awful spaghetti and their being held together by shoe-strings and duct tape (This is slang for HTML). Bounty boards are... well they're functional, but they have the benefit of being built in TGUI. Merging the two's functions should cut down on wall-space, as well as improve the quality of a vast deal of code, and make money transfer on station slightly easier.
Honestly, pretty happy with vend-a-trays. They're pretty decent store-machines on station and do their job pretty well when they get used. All in all I'm happy with how they work.
Custom Vendors are clunky to a fairly major degree and I don't think most players get how to make them work on account of need a price tagger (not a sales tagger, that's the cargo item) to mark an object for it's sale value, then load it into a custom vendor sales unit, then load it into a custom vending machine, and that's only IF custom vending machines decide to work this year. Streamlining the tools, or perhaps just vending machines would certainly improve this as a service.
## Just ain't enough cool stuff to buy with credits.
An ever-present problem, that we're just kinda stuck with. There's a decent number of issues involved with making content that can safely be gated with just credits.
* If it's usable as a weapon, is it too dangerous to hand out to the crew at large?
* Does security get potential oversight?
* If it's illegal, does it go through cargo?
* Does it HAVE to go through cargo?
* If it's beneficial, is it going to invalidate the existance of a job? (Think old medkits!)
* Is there anything that players WANT that's not a weapon, benefical to the station but not too strong, or quite literally traitor equipment?
It's a tough question.
Some items make complete sense to implement on a per job basis as either uncommon or premium equipment, while other items could potentially be moved to station-wide unique purchasables.
# Takeaways:
Look, these are just some possible solutions that I'm considering. I think that working alongside a maintainer who could actually give a damn on getting this system orderly and possibly alligned with our current design philosophy (Who also understands that a not-insignificant amount of current economy was abitrarly written by goofball an actual decade ago) could help iron this out into a clear and consise set of goals and milestones to make the in-game economy workable. Not balanced, but workable.
* **Design a simple simulation for per round intake and outtake, to determine benchmark values for a 90 minute round.**

It would need to look something like this, as a kind of fucked up, Multi-Input Multi-Output Control Problem. Possibly could be done in simulink, but I'm not quite sure how to do that at this moment, so a less complex version might be fine.
* **Look back at implementing crewmember incomes, but at a flat, more consistant rate over all jobs**
My leading idea: 50 credit, uniform paygrade. No wild, unscaled pay rates based on what job is "important" or not.
That line of thinking means that certain jobs should have more expensive equipment over other jobs, but then we're right back to the captain thinking that a cup of coffee is practically free where an assistant thinks that a screwdriver from the vendor is going to put them out of house and home.
Improves time-relationship values with credits.
This could lead way to heads of staff having some degree of control to giving raises or paycuts to crew-members, but perhaps at a very, VERY gradual rate.
* **Perform another big-picture look at bounty cubes.**
Potentially try to put bounties back in the hands of cargo, while still providing payouts to crewmates who assist in completing jobs. This may require some minor refactoring of the pricetag component, perhaps to even allow for multiple crewmembers to recieve profit from a payout.
This means once again, look at making bounties workable for all jobs on the station, not making the objects requested literal lathe-fodder, and finding ways to benefit the station in some way with the task of bounty cubes, even if it's just for credits.
Deceptively hard task.
* **Add secondary tasks that integrate the economy into non-bounty-able jobs/departments**
Like it says on the tin, look into ways to add content that improves economy integration into existing jobs, without necessarily changing what those jobs DO. The bounties for those jobs can still exist as a tertiary thing, but should be made clear that they're... tertiary.
Chefs still make food and bartenders still serve drinks, but they have a way to hand them out for fun and profit.
Some thoughts and ways to handle this potentially:
*Science:* Perform intricate testing on anomalous materials using science equipment. Should NOT REWARD RESEARCH POINTS. Mr. OJ Headcoder will CHEMICALLY CASTRATE me, or you, if you do.
*Medical:* Complete tricky or non-standard surgeries on dummies for medical data. Think like that meme from the TV show, House.
"He needs Mouse bites to live. MORE MOUSE BITES."
*Engineering:* Repair wacky machines that use both station-standard parts as well as solving quick puzzles.
* **Look into more effective money sinks that are dynamic sensitive**
Think, for example, about the station ransom event that spawns space pirates.
What if instead of the captain just dumping credits from the cargo budget into the aether to prevent pirate spawns (They're bugged anyway to my knowledge to spawn anyway), crewmates had to cough up that dough before a time-limit, or risk a pirate spawn. For those of you who were scratching their heads at (Operational Costs!?) in the above controls diagram, this is the sort of thing I mean.
Little, smaller things that might need to be purchased, invested in, or otherwise drain credits from the station over the course of the round.
# Arconomy 2.0: Smarter, Better, Flashier.
## Roundstart
Players begin each shift with a set amount of money, with the value being mostly uniform over the course of a shift assuming no interaction with economy. Jobs are split up into only 3 paygrades, Minimal, Crew, and Command. Minimal is reserved for jobs that are meant to fill population counts but lack a specialization, like prisoner and assistant. When starting the shift, a player will start with 5 paychecks worth of savings. This system is not designed for persistance, so you will always be able to tell how much money a player starts out with. Every 5 minutes, aka every economy tick, the player will recieve one paycheck, which is capped out at the standard crew member paycheck. This means that even if you start the shift as the captain, and begin the shift with 500 credits, you will recieve the same 50 credits as regular crew members.
| Minimal Paycheck | Crew Paycheck | Command Paycheck | Frequency |
| -------- | -------- | -------- |--------|
| 125 Cr | 250 Cr | 500 Cr | Roundstart |
| 25 Cr | 50 Cr | 50 Cr | Passive Income |
## Product Prices
Products found in vending machines are defined by the amount of a player's paycheck they're meant to cost. Regular items use the PAYCHECK_CREW value, while more expensive or otherwise prohibitive items are defined by PAYCHECK_COMMAND. Items are defined in this uniform, horizontal fashion in order to maintain the equal value of credits over all jobs. A 100 credit medkit in medical should have the same value to a doctor as it does to a botanist.
Jobs apply a discount to vending within their own department, so an engineering would have a discount on tools, and a doctor would have a discount on sutures. Items that are important to gameplay progression in a role are less expensive to their intended users.
> **AUTHORS NOTE:** I am considering removing in-department discounts. In the benefit of making the value of purchasables more universal, deciding that credits shouldn't be spent within their own department just seems... rather fucking stupid.
> Possibly move the discount to only the first few minutes of the shift, or perhaps as some kind of gameplay benefit to slowly increase in-department discount through gameplay milestones? Who knows 👻
>
Some jobs have premium, high value items stocked in their vending machines that are not meant to be purchased at roundstart. These are meant to encourage players to save or combine resources to gain access. An example of this is insulated gloves. Other high value items can also be found in contraband through hacking vending machines. This remains unchanged.
## Markets
The cargo department has been changed in order to improve player involvement with the economy, as well as to give cargo more variety in their merchandise while preventing a singular stale meta of products to purchase from.
Yes, I'm looking at you, russian surplus crate.
Lets start with what's remaining the same:
* Cargo is a department that manages imports and exports of products, fulfilling departmental orders, and aquiring supplies dependent on the station's state.
* Cargo encompasses the station's mail, mining, and flow of orders, as well as drone exploration.
* A skilled cargo member is able to find high value items to sell back to centcom in exchange for more funds, to purchase those supplies.
* Centcom may request bounties which crew can fulfill in exchange for credits, if they wish for additional work.
**Now for the new design flow:**
Cargo starts out with a new mechanic called a market. Markets hold existing export datums as well as purchasable products. The values of items will fluxuate up and down based on the market status, with in-game events or player actions raising or lowering the values of specific markets.
At roundstart, cargo has a single market to sell to, which is Nanotransen. This will not incapsulate all the existing export datums in the game, just the *primary* exports that are used by players. Items that are exclusive to nanotrasen and required to play certain game modes, like mindshield implants or being able to sell crates, are included and will always be available to purchase.
Additional markets can be unlocked through gameplay sources, such as:
| Market Name | Source | Imports/Exports |
| -------- | -------- |- |
| The Syndicate | Emagging/Hacking the Console | Illegal Goods/Contraband |
| The Clown Planet Commerse | Discovering the clown planet ruin | Pies, Horns, Pranking Equipment |
|Terragov Sector Security Surplus | Killing any megafauna. | Weapons, Ammunition, Advanced Riot Gear. |
| Mekki Materials Co. | Recovered loot from Exodrones | Materials and industrial equipment. |
|Donk Co.| As a tip from tourist robots. | Foods and Drinks, Toys and Games.|
|Waffle Co.| As above. | Bootleg products and wacky merchandise. |
|The Research Consortium| Reward for completing any experiment tree. | Slime Cores, RnD Artifacts, Robotics Equipment |
...And more, if I can think of more.
The purpose being, of course, to split up cargo's purchasable goods to be more instanced and unique, while also create unique situations where due to profitable markets, very specific exports are needed to help the department make money.
End of document for now :@ArcaneMusic
-- END DOCUMENT
Price Shifting
So, in-game items that have prices have a major issue on their hands, being that they were decided by how much money that job should make. This means that many of the jobs in-game have been given prices scaled to their job's income. That income I adjusted by removing passive income in #54161. While this was helpful to moving towards an active in-game economy, it resulted in items falling into distinct price brackets. A high paying job like security's items could never be purchased by someone like a botanist, but a job like a security officer had more capital and buying power than most other jobs in-game combined when moving down those brackets. We've done a simple normalization of scale to help in bring things closer to a semblance of equality.
There are now 3 price brackets, PAYCHECK_LOW, PAYCHECK_CREW, and PAYCHECK_COMMAND. Command staff will still have a higher base level of money on-hand than other crew, and low paying wages that we on-station don't respect as being real jobs (assistant, prisoner) will have their items be intentionally cheaper to encourage active participation in the economy, but the difference in scale is now noticeably far closer to each other. This means that assistants can still interact with the economy as spenders, but if they want to be doing a lot of work with money, they'll need to put in work. Additionally, this means we arbitrarily enforce a system that allows for items to have uniformity in what they cost to other players. 50 credits for a wrench feels better when you know that other job critical items in-game are also around the same price, and it's equivalent to one paycheck.
Paychecks are reintroduced
Economy lost it's relationship to time. In a game where a single round takes 90+ minutes (Backed up not only by the head-coder's design direction as well as plenty of aggregate round data), having a relationship to time and how long it takes to afford something is a major consideration when you look at buying something. Also, we get to say that I was certifiably wrong in regards to the active economy thing, since we have very, VERY few active sources of content in-game that are very... fun? Bounties are literal fetch quests but something like tourists is at least more engaging and interactive with the round, and should be the direction we want economy-job integration to head in.
Between having inflation as a price manipulation mechanic already in the code, as well as prices being roughly equalized in terms of their costs between jobs and their impact on the round, this allows for the reintroduction of paychecks to an extent.
As an additional note, doing this meant tweaking down the syndicate briefcase of cash, so that instead of giving you 5000 credits for 1 TC, it now costs 5 TC to accompany the fact that this is now a rather significant amount of money, even on decently high population. Fun fact: the Syndicate Briefcase of Cash actually PREDATES the economy, and was NEVER ADJUSTED beyond the original implementation of the economy as a result!
Gas Exports.
ALRIGHT ARE YOU READY FOR SOME GRAPHS? I THOUGHT SO, YOU LOVE GRAPHS.
So, gas exports are fucked, have always been fucked, and consistently have proven to be capable of breaking the in-game economy for a long time. This is no secret, I've been pinged with players getting billions, actual billions of credits using it multiple times in as many years. See, any round where a player manages to buy the bicycle is a round where I've fucked up, or someone fucked and I let it get past me.
So here's how gas exports work right now.
So, all of this hinges on the value of a single mole of gas, and some gasses enable you to make extremely, EXTREMELY profitable gasses through atmospheric gas wizardry However, even those less profitable gasses are still in an extremely high magnitude of value.
Most gasses if you have a full can of it will net you OVER 10k credits. For scale, one crate being sold in cargo is 200 credits.
That's a minimum of crates for pumping gas into a hollow metal box and praying it doesn't explode.
So we adjusted the values accordingly.
The baseline value of a single gas has been tweaked downward significantly. Even these values are still arguably very high, but I can play with it at the discretion of LemonintheDark. The green line at the top represents gasses that previously sold for 100 credits per mole, antinobilium I believe, and working downwards. I am going to try and enforce 10 credits per mole as the absolute maximum hard cap on gas exports, regardless of how many gasses we try to add in the future. Because the alternative is getting a gunjillion credits by huffing miasma into a tank of steel. And we ain't having that shit.
Lathe Tax
Part of the testing for this PR involved me modeling the SS13 economy in a given round as a kind of controls problem, with each source of income introduced in the round as a kind of input (Passive Income, Bounties, Tourists) in order to get a handle on roughly how much income a single round of SS13 will see per player on the given designed round-length, in order to estimate how much things are going to cost. Modeling how much players spend on a given round is variable enough that it'd be too difficult to accurately test without just throwing this up on a server and getting live data.
However, from the appearance of my dataset, players would be making a LOT more money nowadays with all of the above changes implemented. In an attempt to curve that intake, I attempted to implement a small, low scale tax of printing items that would take a small amount of players income every time they print, as a way to add a basic economic side-effect to this mechanic.
This has made a lot of people very angry and been widely regarded as a mixed decision. So, maintainers came up with an intended direction they want to see it, as they wanted to make sure that economy would remain a secondary system, that could still have an impact on round direction and the changes they want to see in the game.
So, here's the intent:
Lathe tax should exist in the form of printing things from protolathes outside of your department, not on autolathes or your own protolathe.
We want to promote people talking and collaborating to access things if it's outside the scope of their department and they still want it, with theft still being a viable avenue of gameplay.
Players will be charged 10 credits for printing a set of items not from their own protolathe, each. Printing an item can be paid for from your own ID card's bank account automatically, but the payment component has been buffed to handle physical money alternatives, as well as pulled money, similar to the luxury shuttle scanner gate's behavior.
Borgs are still enabled to print from lathes, however instead of it costing them credits, they now take a self-significant power cost in order to do so, preventing them from being used as a roving bank account for printing. I'll look into this further as we don't want to invalidate mechanics like borgs being able to do organ based surgery or building machinery, but we don't want them to become credit cards, so place that under advisement.
Tweaks and Updates:
(Suggested by Ziiro) If the revolutionaries win, centcom will no longer enforce the Lathe Tax.
(Suggested by about ~1000 people independently between my DMs, Reddit threads, the Feedback Thread, and elsewhere)
Printing items only taxes you once per print. EG: If you print 10 Kitchen Knifes as an assistant from the service lathe, you will only be charged once instead of 10 times.
For many of the reasons that I outlined above, this is a good change in a positive direction.
Players get more ability to interact with the economy without having to do content that's becoming increasingly depreciated in my absence.
Players also have a baseline consensus on what values of credits are high and low because jobs have been given an equalized standard in regards to the cost of certain items.
Price fluctuations through inflation will now be more meaningful in situations where the economy becomes more relevant.
The system will still encourage you to play a job that's productive to the status of the station through lower paycheck jobs existing as well.
Gas exports are now reduced to the point that their value is appropriate for the first time... actually ever. Nice.
The values of nearly every item purchasable by players has been rebalanced.
Players will now start with less starting money, but will receive a paycheck once every 5 minutes.
The value of gasses exported through the cargo department have been skewed way, WAY down in terms of price.
The Syndicate briefcase of cash now contains now costs 5 TC, up from 1 TC, for 5000 credits.
Printing items from lathes on station now costs a fee of 10 credits per item printed if it's from a lathe not under your department.
The payment component has received additional handling for physical credits, as well as pulled credits/ID cards for those without hands.
|
||
|
|
6ad8000bd3 |
Adds the Accounting Console to the game (HOP Job Content) (#66304)
This PR adds the accounting console to the game, as a console that exists round start within the HOP's office. The accounting console allows for players to get 2 separate lists of information: - A list of all the bank accounts associated with each crewmember on the station, listing their account balance, their job, and their paygrade modifier (Which is either 1 or 0.7, depending on their species) - The audit log, a basic list of transactions of player purchases, listed listed in the following formal universally: [person] spent [cost]CR on [Purchase Source]. It's intentionally left without all the information so that players will need to investigate if they notice strange purchases coming from an account, as a kind of ghetto money forensics. |
||
|
|
565319095f |
Adds MC initialization stages. Earlier stages can fire while later ones init. Fixes tgui chat reconnection banner showing during init. (#66473)
* Adds MC initialization stages. Earlier stages can fire while later ones init. Removes TICK_LIMIT_MC_INIT config for barely doing anything to speed up init and being inconvenient to work with if fires and inits can happen at the same time. |
||
|
|
cd1b891d79 |
Modular Tablets: Converting PDAs to the NtOS System (#65755)
Converts PDA functions and applications over to modular tablets and devices, namely the messaging function. HREF data code is quite honestly clunky and difficult to work with, as I've definitely experienced whilst working on this. By moving from this system over the easier to read (and frankly, easier to add to) TGUI system, you get cleaner looking and more user friendly UIs and a greater degree of standardization amongst other UIs. Co-authored-by: Seth Scherer <supernovaa41@gmx.com> Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> |
||
|
|
fd0f398d6f |
tgui-panel: Soft ping (#66299)
* tgui-panel: Soft ping |
||
|
|
934ace8098 | Fix: rename suffix for tgui-polyfill to min.js (#66309) | ||
|
|
9f4b146bd2 |
Adds load testing macros (#66178)
Adds a macro that consumes cpu up to some tick limit Adds a define that uses said macro to leave verb processing just its reserve of the tick Adds a second subdefine that forces verb processing into total overtime Mimicing the worst case scenario around maptick spikes |
||
|
|
b86cf89125 |
tgui: API improvements + docs (#65943)
About The Pull Request
This pull request improves tgui API in many ways.
Using TGUI for custom HTML popups
This standardizes and simplifies the process of HTML popup creation and DM <-> JS communication.
Makes tgui window API a perfect alternative for old-style browser panels. It will be super useful for @Iamgoofball since he wanted to make a lightweight browser element that plays background music, and this will make his life a lot easier.
It is now possible to create tgui windows with fully inlined JS and CSS, which can be used to make unkillable tgui-based UIs (can't white/blue screen due to network errors). You can split files into JS and CSS, and still serve a single HTML file using this.
Moved sendMessage function to the Byond API object, where it rightfully belongs, and now supports a shorthand form: Byond.sendMessage(type, payload). This shortens and simplifies a lot of code.
Refactored window.update to no longer be public. Now to subscribe to incoming messages, you should use new public APIs: Byond.subscribe(fn) and Byond.subscribeTo(type, fn), and TGUI internally uses these functions as well, which reduces boilerplate in index.js.
Renamed window.__windowId__ to Byond.windowId (old variable is still available for backwards compatibility).
Byond API now supports null id, e.g. Byond.winget(null, 'url'), which makes things like this possible:
// Fetch URL of a currently connected server
Byond.winget(null, 'url').then((serverUrl) => {
// Connect to this server (opens a new dreamseeker instance)
Byond.call(serverUrl);
// Close this client because new instance is connecting
Byond.command('.quit');
});
Certain polyfills are now statically compiled (commited into git) and are baked into tgui.html. The downside is that HTML went 16 kB -> 50 kB. The upside is that you can now use a relatively modern level API with full support for IE8 when writing plain old html UIs using /datum/tgui_window directly. They are committed into git, because polyfills will never need to be updated (unless of course we randomly decide to get rid of ie8.js and html5shiv.js).
Breaking Changes
No breaking changes. This should be tested for regressions. Upgrading is simple if you're on a relatively up-to-date branch - copy paste all affected tgui files and you're good.
|
||
|
|
bded5e4b35 | Makes engravings actually show up in maintenance. (probably) (#66212) | ||
|
|
971749c06d |
Gives traitor logging its own config flag (#66148)
Co-authored-by: tattle <article.disaster@gmail.com> |
||
|
|
b17a90718e |
Replaces the accounting machine with all IDs having their own bank account by default. (#65980)
* Replaces the accounting machine with all IDs having their own bank account by default. * Thanks, conflict. * Oh right pushing the commits |
||
|
|
a8766712f8 |
hopefully fixes unit test failures from things in the spatial grid not having their refs cleared from it (#65771)
things being held inside the spatial grid while they should be deleted causes a rareish unit test failure for create_and_destroy. hopefully this fixes it by checking for if the entering movable is being qdeleted as well as early returning in enter_cell if the spatial grid isnt initialized. Im not sure what exactly causes the hanging refs, but i suspect its something to do with not properly catching qdeleting objects if they for whatever reason enter another part of the spatial grid instead of nullspacing. This will give us a better idea of what kind of failure we're dealing with -Lemon |
||
|
|
8a51c10665 |
[MDB IGNORE] Adds dead space navigation (#65741)
Adds the navigate verb, it makes a holographic path to any navigation beacon on station Video here: https://streamable.com/2uy76l removes wayfiding pinpointers and the associated quirk, as theyre kinda redundant with it needs #65665 before merge partially inspired by goon |
||
|
|
204cbbb736 |
Ingame Atmos Reaction Guide (#65271)
About The Pull Request https://imgur.com/a/pMMEi4i https://imgur.com/a/xCrIcz4 Title, really. Adds an ingame guide to atmos. Currently hooked to the atmos monitors, analyzer, and the tablet app. Lots of reaction data not implemented yet, banking on the cleanup to get merged first, so drafting. Done, all reactions in. Haven't double checked them though. Code is pretty much finished, feel free to take a look. Ill probably retidy them while adding stuffs so no rush. Might add a reaction handbook obj later Implemented in analyzer. Dotted tooltip idea shamelessly stolen from preferences. Lots of the diffs are from breaking the sensor file up, dont worry about it. Why It's Good For The Game Less need to open the wiki in another page I guess. Changelog cl add: Added an ic atmos reaction guide. Available in your atmos control consoles/monitors, ntosatmos app, and analyzer. code: Some changes to how gas canister descriptions are generated. /cl |
||
|
|
50689f89a4 |
Action button refactor/rework: Enhanced Dragging (#65180)
About The Pull Request
I noticed a lot of strange and un-intuitive behavior in action buttons, and got stung by the bloat bug. Damn it hug #58027
I'll do my best to explain what I've changed and why, might get a bit long.
If you want a better idea, read the commits. Most of em are pretty solid, if long.
Whelp. Here we go.
How do action buttons currently work
All action buttons are draggable, to any place on the screen. They're held in an actions list on the player's mob.
Their location in this list determines their position on the top of the screen. If one is dragged away from the top, its position in the list is "saved". This looks really bad.
If two buttons are dragged over each other, their positions swap. (inside the actions list too)
If a button is shift clicked, it is brought back to the position it started at.
If the action collapse button that you likely just mentally edit out is alt clicked, it resets the position of all action buttons on the screen.
If an action is ctrl clicked, it is "locked". This prevents any future position changes, and also enables a saving feature. With this saving feature, locked button positions persist between rounds. So your first o2 canister will always start where you saved it, etc.
Actions and buttons are a one to one link. While there is functionality to share action buttons between two players, this means showing the same object to both. So one player can move a button on another's screen. Horrendous.
This also makes code that modifies properties of the screen object itself very clunky.
Why is this bad
A: None knew pretty much any of this information. It is actually documented, just in a horribly formatted screen tip on the collapse button, you know the one we all mentally delete from the hud.
B: None of this is intuitive. Dragging buttons makes the hud look much worse, and you get no feedback that you even can drag them. Depressing
C: We use actions to make new options clear to the player. This means players can have a lot of action buttons on the hud. This gets cluttery
D: The collapse button is useless. It lets you clear your screen if someone like me fucks up and gives you 2000 actions, but outside of that it just hides all information from you. You never want to see none of your action buttons, just a filtered list of them.
E: On a technical level, they're quite messy, and not fully functionally complete. This is depressing.
What I've done
Assuming the above to be true, how do we fix them?
Well first I'm going to go over everything I changed, including links to major commits. I'll then describe the finished product, and why I made the decisions I did.
Oh and I've moved some of the more niche or technical discussion to dropdowns. Hopefully this makes finding the major functional changes easier
Adds helper procs for turning screen_loc strings into more manageable arrays. This doesn't fully support all of the screen_loc spec, but it's enough for what I'm doing. (f54865f)
Uses these helper procs to improve existing code (6273b93)
Fixes an issue with tooltip code itself. If you tried to hold down a mouse button while dragging onto a tooltip enabled object, it would silently fail. The js made assumptions about the order args came in, which broke when buttons were held down (
|
||
|
|
3bc48ce599 | Extra-large painting canvases: 36x24 and 45x27 (#65642) | ||
|
|
0c4af38f41 |
[MDB IGNORE] TGUI library, plus polish (#65326)
* Prevents potentially infinite length books from being written and stored. I'm not sure if this is an actual issue, but I have a funny feeling it may become one someday * Moves the paper defines to their own file * It's become clear to me that I am stupid * git add --all * Makes book info into a datum to allow for easy passing around * Converts the library scanner to tgui, lays the groundwork for tgui visitor consoles * Makes the db request for book info sort Adds the frontend for the visitor's console Adds a hash to prevent duplicate db requests Adds a prams changed var to help facilitate a better search button Makes the page number code accept text as input * Makes the ui index at 1 even tho we index at 0 internally * Begins the conversion process for the library console. Changes the library console to override the visitor, to utalize for the archive access portion of the ui Makes scanner into a weakref, I'm coming for you handheld scanner Renames some vars to make things clearer * Converts the remaining refs of the old console typepath over, adds a circuit board for consoles because pain * Changes how bookshelves load in books Instead of loading them in lazyally, we load them during init This lets us track what books are stored in which areas Somewhat jutting off of this, adds map config for designating something as "part of the library" This will be useful later * Renames the random poster, adds a spritesheet for bibles. Both will be useful in a moment * Ok. This is a bit of a mess. Converts the library console to tgui. This comes with a few minor behavior changes: You can now select what type of poster you want to print, instead of just printing a random one It's now possible to heed the console's emag warning The console's inventory page will fill at roundstart with the books in your area/if you're in a library, any areas designated as "library like" in the map config You can see what type of bible the chaplin has selected? "Fixes": You can no longer just dump books into the scanner forever Implementation details: Any input that makes a db request will now A: freeze up any other db inputs until it's finished, and B: Start a 1 second timer before any new db requests can be made Of note, I'm handling html encoding in a very targeted way. All book_data datums need to have html encoded values. get_title/author/content exist so a defaulting and tgui appropriate version can be loaded in. This somewhat matches with the trusted var on set_title, it exists to prevent double html encoding. While we're here Input/DB (Book data should be html encoded) Inside book datum (Book data should be html encoded) Sending to tgui (Book data should be decoded during extraction with the get_() procs) Sending anywhere else (Book data should be html encoded, otherwise it's an xss vuln) Uhhhh tgui stuff? I'm using a custom theme for emag visuals, I'll get into that more later The visitor and book management console share the same data/act pipeline, which is why they're parented/subtyped They also share a page selection component, which is why the visitor's console imports it. Uhhhhh Oh right, fuck. Ok so the page selection component is kinda cursed, the left and right controls are fine But I'm trying to get a << < [page/max] > >> setup going, and that means resetting the center input past change so the default value can be used This ends up being slightly hacky. I'm sorry. Oh also, I implemented a custom tab setup for this ui. I have no idea why it was literally like 5 months ago. I think it looks pretty nice, but if you want me to nuke it I can. Sorry for any headache around this. More tgui stuff next * Scanner/visitor cleanup, some other odds and ends * Adds in a dark red and black theme for library computers to be triggered by an emag. Things of note: I'm overriding some lists that get passed into buttons and one other thing using set, since the list is alreadt generated by that step in the process? I think? I've added dimness control to the dimmer component, since well, it was dimming already dark uis. I also made and added a rather large background svg. I've got no experience with this sort of thing, and all the compression methods I found for this ended up being busts. I know this isn't acceptable as an end product, but I don't know how to get it there. Somewhat on that note, this ui might not be worth the size for the amount of use it gets. I'm fine with nuking it if that's the case, I bring this up because I have a very poor understanding of the logistics of something like this, so I have a feeling I've fucked up somewhere * Forgot these, just a scss file for library computers, barely used but I think it's worthwhile * Missed this eariler. As a part of the uploading tab, I'm displaying the contents of books. I'm loading in that context as raw html so paper -> book books look close to right. Means I need more html tags then our current sanitize provides. I don't think any of these will cause issues, and there's also a good chance I'm missing some. Will come up with a list later * Updates the rest of the maps to use the new management typepath * Fixes the default bible name being Default Bible Name, I am sorry * Turns out I had the scaling wrong for bible names, lead to weird stacking because the bible icon doesn't scale, so I lowered its sizing * Yeets unneeded exports (Thank you jlsnow) Haha wouldn't it be funny if I didn't know how components worked Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> * Resets the maps to master * Fixes oversights from merge commit, changes maps * Removes needless Flex's from the scanner * Gives the library console the ability to parse markdown. Expands the list of acceptable html elements a bit * Adds audio cues for printing and inserting/removing from the scanner, makes the scanner nicer to use in general * Uses a compressed version of the background. It's still huge, but smaller at least * Adds the printing audio to the book binder * Cleans up tram * curse you tram * AHHHHHHHH * MY LIFE IS TRUE PAIN * Adds a path conversion statement to make people's lives easier * Apply's style's suggestions thx style Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> * Compresses the background svg * Further js cleanup * We no longer render markdown in the ui, since any source of markdown is converted to html anyway * More ui changes Makes the tab/main screen logic use Flex rather then manuel offsets Makes modals better fit the size of their contents Readjusts the width of some inputs Properly uses the header prop for a table Makes the buttons in the upload panel look nicer Restructures the print tab a bit * Increase a modal's size * Fixes computers with no keyboard overlay showing their screen even when the power is out * Moves some data and logic onto the library subsystem. Kyler's review Fixes harddels held by the library scanner. Makes the scanner's buffer actually do something * Makes book icon randomization a proc rather then just copypasta'd code * Removes the kilo library edit, the soul was removed * Damn you san (Fixes mapconflicts) * Pain Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> |
||
|
|
7e32bdfca1 |
Pingbus changes and improvements (#65625)
Adds new configs for non-urgent ahelps to be sent to a channel when no admins are on. This will include urgent ahelps too. Adds a response message that is sent to discord when an ahelp is responded to in any way Player counts are now sent in the embed. |
||
|
|
a85d7c6974 |
Cleans up some varedit procs not using strings instead of the proper helper (#65769)
Although these vars are unlikely to ever change, if the vars were ever renamed it would result in these strings not erroring properly if they weren't updated as well. |
||
|
|
cd515971a1 |
makes vent scrubbers only activate if a gas they filter is on their tile, again! alive edition (#65591)
Alsonce scrubbers only wake up if something they can filter is on the tile an existing bug where scrubbers dont filter very small but non garbage collectable amounts of a gas becomes a big issue, as in without changing scrubbing rates you can breathe once on a tile with a scrubber set to scrub co2 and that co2 wont go away barring any other factors and the scrubber wont go to sleep. so now with the idea of rohesie and permission of lemon i changed how scrubbers removed small molar amounts of gas from their turf. now scrubbers will look through 100% of the turfs air mix for filtering, but will only remove up to gas moles * (scrubber volume / turf volume) * (gas moles / total filterable moles) moles from each filterable gas in the turfs mix unless that amount is less than either MOLAR_ACCURACY * 100 or the number of moles of that filterable gas, in which case all of the moles of that gas are subtracted from the mix. this is to make it easier for the scrubber to remove very small amounts of gas with filters without changing how fast they scrub large amounts of gas, thus making scrubbers able to go to sleep faster only after a gas has been reduced to near zero scrubbers are the biggest proportion of SSair's machine processing cost which is a non trivial amount of SSair's total cost. now they will only do most of their work if they can actually scrub anything on the tile which is a minority of the time. |
||
|
|
82daae0649 |
Renames some security accesses + misc (#65679)
Renames ACCESS_SEC_DOORS to ACCESS_BRIG_ENTRANCE Renames ACCESS_FORENSICS_LOCKERS to ACCESS_FORENSICS Adds a helper for detective access (because I forgot it in my first PR, oops) Changes gulag item reclaimer access from ACCESS_SECURITY to ACCESS_BRIG |
||
|
|
6a461dff81 |
Arconomy Adjacent Content: Newscaster Refactor Omega (#65038)
This PR moves the in-game Newscaster over to TGUI, which is one the most bothersome html to tgui projects on the codebase being that it's gone untouched for like... over 4 years now after the introduction of tgui. Newscasters are widely used in-game by players wanting to be deranged whistleblowers, noir detectives, and journalists. They're flavorful, fun, and we still use an html window to make them run so it looks like it's from 2003. |
||
|
|
afad417787 |
Improved the Art Gallery App and the AI Portrait Picker. Added a search function to them. (#65481)
* Improved the Art Gallery App. Added a search function to it. |
||
|
|
e37729a660 | fixes SFX_SHATTER being used in place of explosions (#65460) | ||
|
|
12a90800c5 |
Adds tooltips to /tg/c keywords. Adds support for chat embedded tgui components (#65383)
* Refactors tcg code a bit. Adds support for "keywords"
Idea is to allow card makers to embed tooltips in their card
descriptions.
These tooltips are defined in the keywords.json file
They can be referenced using {$keyword_name}
I've also done some refactoring to move more logic and state onto the
subsystem, and implemented a few keywords from the wiki
* New keywords, applies the old ones to the second card set
* Adds support for embedding react components in tgui chat
This is done by adding the data-component attribute to an html element
The value of that attibute is the component you want to use.
New components can be added by modifying the TGUI_CHAT_COMPONENTS list
in tgui-panel/chat/renderer.js.
Props can also be passed in in a limited capacity.
Any props you wish to pass must be added to
TGUI_CHAT_ATTRIBUTES_TO_PROPS.
This is due to a style restriction of html attributes, they cannot
contain an upper case char.
Use this list to convert between attibute compatible text and the prop's
name.
Props support 3 datatypes.
true and false can be passed by wrapping them in ""s. (Note to self add
a special char here to prevent colison with people just passing the
string true.
Numbers are supported in a limited capacity. Whitespace is not allowed,
but floats and ints are fair game.
And of course, strings are fully supported.
I've currently added support for Tooltip, since that's what I'm using
this for. Also added some tooltip html styles to the chat css.
* Implements the embedded component system to make tcg cards have nice pretty tooltips so people don't need to have the wiki open on one screen
* Adds documentation for embedding tgui components in chat, adds some protection against accidentially sending true as a bool
* Adds italitcs to the tooltips, moves the span stuff to a macro
* tGUI -> tgui, thank fikou
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Style suggestions
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
* Removes unneeded key from the components list
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
* Removes needless span
* Actually adds the tooltip, oops
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
|
||
|
|
787e0f08b4 | Fixes persistent painting patron name not being loaded (#65411) | ||
|
|
ac88a9a57f |
Becoming the patron of a painting now lets you select a different, persistent appearance for the frame it's in. (#65305)
* Painting frame selection for patrons, painting json version update. |
||
|
|
b9f6f0f6ba |
Restores the Persistent Scars preference (#65358)
* Restores the Persistant Scars preference I also had to remove some raw READ_FILE()s because that was now useless. I was thus able to remove the persistent_scars variable from the prefs, as it is now a standalone preference. * I forgor... |
||
|
|
684eab3d31 |
Converts SFX keys into DEFINES (#65146)
About The Pull Request Simply converts all instances of soundkeys that use get_sfx from strings into defines. E.g. "sparks" is now SFX_SPARKS Why It's Good For The Game It makes life a lot easier when you're looking for a sound effect. You just type SFX_ and you get suggestions in VSC. Plus, it looks better. image Changelog Not player facing. |
||
|
|
eeb5465931 |
Ordnance Content Update: Scientific Papers (#62284)
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) |
||
|
|
4e9731712a |
Dehardcodes SSmapping (#65077)
Essentially SSmapping had a list for each theme of ruin (space, lava, ice, ice underground). These were all filled with an if statement checking the ruin templates type. Now, i've given ruins a ruin_type var, which is then used to dynamically add to a single list of ruins, which separates lists of ruins by ruin type. Good for downstreams who may have more ruin types Changelog cl refactor: Dehardcoded SSmapping ruin types. /cl |
||
|
|
81437eda3e |
Hardens painting saving against inconsistent state (#65024)
Should help when paintings lists gets zeroed unintentionally during the round for some reason. Now it only deletes the painting file right before it writes the new file to prevent loss of data if anything runtimes or breaks. |
||
|
|
9dd5cf8e35 |
The mc now detects if its priority budget gets out of sync with reality and soft resets. (#64498)
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
2b11472f02 |
Changes what appears for urgent ahelps to supportmins. (#64748)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> |
||
|
|
811abc15f9 | Refactor: make SSrunechat to be subsystem of SStimer (#64366) | ||
|
|
6277d21e77 |
Makes SSTimer actually recover (#64784)
Makes SSTimer actually recover properly when it needs to. This is a follow-up for #60846 (
|
||
|
|
f73b94a0b6 |
Adds logic to hopefully prevent/yell about init breaking (#64705)
Safeguards restoring initialize mode after runtimes during atom initialization |
||
|
|
9220e5ef71 |
Fix random job assignments occasionally assigning to roles that were already filled (#64734)
Missing continue in the random job assignment code meant an if statement was ineffective, code fell through and assigned roles to jobs that were already full. |
||
|
|
1db0c08810 |
Fixes a potential "fail to setup jobs" state due to disappearing clients (#64735)
Fixes a runtime error that can occur during DivideOccupations() in the event that one of the players has their clients disappear during setup due to classic byond client volatility. If a new player's client vanishes during job setup, it will read as null instead of runtiming, which throws a JobDebug and moves onto the next player. |