From 5f4d5a42d4477c163f33f5513dbaf3fc549fcab9 Mon Sep 17 00:00:00 2001
From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Date: Wed, 27 Apr 2022 06:01:21 -0400
Subject: [PATCH] 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 :ghost:
>
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.
---
_maps/map_files/debug/runtimestation.dmm | 30 ++--
code/__DEFINES/dcs/signals/signals_global.dm | 2 +
code/__DEFINES/economy.dm | 31 ++--
code/controllers/subsystem/economy.dm | 1 +
.../subsystem/persistent_paintings.dm | 2 +-
code/datums/components/payment.dm | 139 +++++++++++++++---
code/game/machinery/autolathe.dm | 1 -
code/game/objects/items/RCD.dm | 2 +-
code/game/objects/items/cigs_lighters.dm | 2 +-
.../circuitboards/machine_circuitboards.dm | 2 +-
code/game/objects/items/devices/flashlight.dm | 4 +-
code/game/objects/items/devices/multitool.dm | 2 +-
code/game/objects/items/devices/paicard.dm | 2 +-
.../items/devices/portable_chem_mixer.dm | 4 +-
.../items/devices/scanners/gas_analyzer.dm | 10 +-
.../items/devices/scanners/health_analyzer.dm | 2 +-
.../items/devices/scanners/t_scanner.dm | 2 +-
.../objects/items/devices/sensor_device.dm | 4 +-
code/game/objects/items/food/burgers.dm | 6 +-
code/game/objects/items/food/moth.dm | 2 +-
code/game/objects/items/food/salad.dm | 2 +-
code/game/objects/items/food/snacks.dm | 14 +-
code/game/objects/items/grenades/flashbang.dm | 2 +-
code/game/objects/items/handcuffs.dm | 4 +-
code/game/objects/items/kitchen.dm | 12 +-
code/game/objects/items/knives.dm | 2 +-
code/game/objects/items/melee/baton.dm | 2 +-
code/game/objects/items/pinpointer.dm | 6 +-
code/game/objects/items/stacks/medical.dm | 2 +-
code/game/objects/items/stacks/tape.dm | 2 +-
code/game/objects/items/storage/bags.dm | 2 +-
code/game/objects/items/storage/belt.dm | 6 +-
code/game/objects/items/storage/boxes.dm | 12 +-
code/game/objects/items/storage/fancy.dm | 6 +-
code/game/objects/items/storage/medkit.dm | 4 +-
code/game/objects/items/storage/secure.dm | 3 +-
code/game/objects/items/tanks/watertank.dm | 4 +-
code/game/objects/items/tcg/tcg.dm | 2 +-
code/game/objects/items/wall_mounted.dm | 2 +-
code/game/objects/items/weaponry.dm | 2 +-
.../objects/structures/lavaland/geyser.dm | 2 +-
.../antagonists/revolution/revolution.dm | 4 +-
code/modules/art/paintings.dm | 6 +-
.../atmospherics/gasmixtures/gas_types.dm | 44 +++---
code/modules/cargo/exports/large_objects.dm | 13 ++
code/modules/cargo/goodies.dm | 50 +++----
code/modules/clothing/ears/_ears.dm | 2 +-
code/modules/clothing/gloves/color.dm | 6 +-
code/modules/clothing/gloves/tacklers.dm | 2 +-
code/modules/clothing/head/beanie.dm | 2 +-
code/modules/clothing/head/helmet.dm | 4 +-
code/modules/clothing/head/wig.dm | 2 +-
code/modules/clothing/masks/hailer.dm | 2 +-
code/modules/clothing/neck/_neck.dm | 12 +-
code/modules/clothing/shoes/cowboy.dm | 2 +-
code/modules/clothing/shoes/galoshes.dm | 2 +-
code/modules/clothing/shoes/sneakers.dm | 2 +-
code/modules/clothing/shoes/wheelys.dm | 8 +-
code/modules/clothing/suits/armor.dm | 2 +-
code/modules/clothing/under/jobs/security.dm | 2 +-
code/modules/clothing/under/miscellaneous.dm | 2 +-
code/modules/clothing/under/pants.dm | 4 +-
code/modules/clothing/under/skirt_dress.dm | 8 +-
code/modules/economy/account.dm | 2 +
code/modules/food_and_drinks/drinks/drinks.dm | 12 +-
.../food_and_drinks/drinks/drinks/bottle.dm | 30 ++--
.../drinks/drinks/drinkingglass.dm | 4 +-
code/modules/hydroponics/grown/random.dm | 2 +-
code/modules/instruments/items.dm | 4 +-
code/modules/instruments/piano_synth.dm | 4 +-
code/modules/jobs/job_types/_job.dm | 8 +-
code/modules/jobs/job_types/assistant.dm | 2 +-
.../jobs/job_types/atmospheric_technician.dm | 2 +-
code/modules/jobs/job_types/bartender.dm | 2 +-
code/modules/jobs/job_types/botanist.dm | 2 +-
.../jobs/job_types/cargo_technician.dm | 2 +-
code/modules/jobs/job_types/chaplain.dm | 2 +-
code/modules/jobs/job_types/chemist.dm | 2 +-
code/modules/jobs/job_types/clown.dm | 2 +-
code/modules/jobs/job_types/cook.dm | 2 +-
code/modules/jobs/job_types/curator.dm | 2 +-
code/modules/jobs/job_types/detective.dm | 2 +-
code/modules/jobs/job_types/geneticist.dm | 2 +-
code/modules/jobs/job_types/janitor.dm | 2 +-
code/modules/jobs/job_types/lawyer.dm | 2 +-
code/modules/jobs/job_types/medical_doctor.dm | 2 +-
code/modules/jobs/job_types/mime.dm | 2 +-
code/modules/jobs/job_types/paramedic.dm | 2 +-
code/modules/jobs/job_types/prisoner.dm | 2 +-
code/modules/jobs/job_types/psychologist.dm | 2 +-
code/modules/jobs/job_types/quartermaster.dm | 2 +-
code/modules/jobs/job_types/roboticist.dm | 2 +-
code/modules/jobs/job_types/scientist.dm | 2 +-
.../jobs/job_types/security_officer.dm | 2 +-
code/modules/jobs/job_types/shaft_miner.dm | 2 +-
.../jobs/job_types/station_engineer.dm | 2 +-
code/modules/jobs/job_types/virologist.dm | 2 +-
code/modules/jobs/job_types/warden.dm | 2 +-
.../library/skill_learning/skillchip.dm | 2 +-
.../modular_computers/hardware/hard_drive.dm | 2 +-
code/modules/photography/camera/camera.dm | 2 +-
code/modules/power/cable.dm | 2 +-
code/modules/power/cell.dm | 2 +-
code/modules/power/lighting/light_items.dm | 4 +-
code/modules/power/pipecleaners.dm | 2 +-
.../reagents/reagent_containers/dropper.dm | 2 +-
.../reagents/reagent_containers/hypospray.dm | 4 +-
.../reagents/reagent_containers/medigel.dm | 6 +-
.../reagents/reagent_containers/spray.dm | 2 +-
.../reagents/reagent_containers/syringes.dm | 2 +-
.../modules/research/machinery/_production.dm | 53 +++++--
.../departmental_circuit_imprinter.dm | 1 +
.../machinery/departmental_protolathe.dm | 6 +
.../machinery/departmental_techfab.dm | 6 +
code/modules/surgery/tools.dm | 2 +-
code/modules/uplink/uplink_items/badass.dm | 2 +-
code/modules/vending/_vending.dm | 8 +-
code/modules/vending/assist.dm | 4 +-
code/modules/vending/autodrobe.dm | 4 +-
code/modules/vending/boozeomat.dm | 2 +-
code/modules/vending/cigarette.dm | 4 +-
code/modules/vending/clothesmate.dm | 4 +-
code/modules/vending/coffee.dm | 4 +-
code/modules/vending/cola.dm | 4 +-
code/modules/vending/drinnerware.dm | 4 +-
code/modules/vending/engineering.dm | 2 +-
code/modules/vending/engivend.dm | 2 +-
code/modules/vending/games.dm | 4 +-
code/modules/vending/liberation.dm | 2 +-
code/modules/vending/liberation_toy.dm | 2 +-
code/modules/vending/medical.dm | 2 +-
code/modules/vending/medical_wall.dm | 4 +-
code/modules/vending/megaseed.dm | 4 +-
code/modules/vending/modularpc.dm | 4 +-
code/modules/vending/nutrimax.dm | 4 +-
code/modules/vending/plasmaresearch.dm | 4 +-
code/modules/vending/robotics.dm | 2 +-
code/modules/vending/security.dm | 4 +-
code/modules/vending/snack.dm | 4 +-
code/modules/vending/sovietsoda.dm | 2 +-
code/modules/vending/sustenance.dm | 4 +-
code/modules/vending/toys.dm | 4 +-
code/modules/vending/wardrobes.dm | 12 +-
code/modules/vending/youtool.dm | 2 +-
144 files changed, 506 insertions(+), 346 deletions(-)
diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm
index 63a64035017..faac5974745 100644
--- a/_maps/map_files/debug/runtimestation.dmm
+++ b/_maps/map_files/debug/runtimestation.dmm
@@ -2103,11 +2103,6 @@
/obj/machinery/door/airlock/shell,
/turf/open/floor/iron/dark,
/area/construction)
-"sE" = (
-/obj/structure/cable,
-/obj/machinery/power/rtg/debug,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"sH" = (
/obj/structure/table,
/obj/item/storage/box/shipping,
@@ -2235,6 +2230,11 @@
},
/turf/open/floor/engine,
/area/hallway/secondary/entry)
+"yN" = (
+/obj/structure/cable,
+/obj/machinery/power/rtg/debug,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"zo" = (
/obj/machinery/power/apc/auto_name/directional/south,
/obj/structure/cable,
@@ -6636,11 +6636,11 @@ aa
aa
ae
ab
-sE
-sE
-sE
-sE
-sE
+yN
+yN
+yN
+yN
+yN
ab
bv
bI
@@ -6728,11 +6728,11 @@ aa
aa
ae
ab
-sE
+yN
an
-sE
+yN
an
-sE
+yN
ab
bv
BG
@@ -6820,11 +6820,11 @@ aa
aa
ae
ab
-sE
+yN
an
ao
an
-sE
+yN
ab
bv
bJ
diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm
index 0ef60fca2ee..81827008283 100644
--- a/code/__DEFINES/dcs/signals/signals_global.dm
+++ b/code/__DEFINES/dcs/signals/signals_global.dm
@@ -68,3 +68,5 @@
/// Global signal sent when a light mechanism is completed (try_id)
#define COMSIG_GLOB_LIGHT_MECHANISM_COMPLETED "!light_mechanism_completed"
+///Global Signal sent when the crew wins the revolution (No arguments).
+#define COMSIG_GLOB_REVOLUTION_TAX_REMOVAL "!revolution_tax_removal"
diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm
index 3473ce858de..62e0bae049c 100644
--- a/code/__DEFINES/economy.dm
+++ b/code/__DEFINES/economy.dm
@@ -1,28 +1,33 @@
/// Number of paychecks jobs start with at the creation of a new bank account for a player (So at shift-start or game join, but not a blank new account.)
-#define STARTING_PAYCHECKS 7
+#define STARTING_PAYCHECKS 5
/// How much mail the Economy SS will create per minute, regardless of firing time.
#define MAX_MAIL_PER_MINUTE 3
/// Probability of using letters of envelope sprites on all letters.
#define FULL_CRATE_LETTER_ODDS 70
-//Experimental change: These are subject to tweaking based on the /tg/ economy overhaul.
-//Current design direction: Higher paying jobs are vastly outnumbered by lower paying jobs, so anything above medium hurts inflation, common jobs help inflation
-#define PAYCHECK_PRISONER 25
-#define PAYCHECK_ASSISTANT 50
-#define PAYCHECK_MINIMAL 55
-#define PAYCHECK_EASY 60
-#define PAYCHECK_MEDIUM 75
-#define PAYCHECK_HARD 100
-#define PAYCHECK_COMMAND 200
-
+//Current Paycheck values. Altering these changes both the cost of items meant for each paygrade, as well as the passive/starting income of each job.
+///Default paygrade for the Unassigned Job/Unpaid job assignments.
#define PAYCHECK_ZERO 0
+///Paygrade for Prisoners and Assistants.
+#define PAYCHECK_LOWER 25
+///Paygrade for all regular crew not belonging to PAYGRADE_LOWER or PAYGRADE_COMMAND.
+#define PAYCHECK_CREW 50
+///Paygrade for Heads of Staff.
+#define PAYCHECK_COMMAND 100
+
+//How many credits a player is charged if they print something from a departmental lathe they shouldn't have access to.
+#define LATHE_TAX 10
+//How much POWER a borg's cell is taxed if they print something from a departmental lathe.
+#define SILICON_LATHE_TAX 2000
+
+#define STATION_TARGET_BUFFER 25
+
-#define STATION_TARGET_BUFFER 40
#define MAX_GRANT_DPT 500
//What should vending machines charge when you buy something in-department.
-#define VENDING_DISCOUNT 0.2
+#define DEPARTMENT_DISCOUNT 0.2
#define ACCOUNT_CIV "CIV"
#define ACCOUNT_CIV_NAME "Civil Budget"
diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm
index 10e26185790..ce63d4124e1 100644
--- a/code/controllers/subsystem/economy.dm
+++ b/code/controllers/subsystem/economy.dm
@@ -88,6 +88,7 @@ SUBSYSTEM_DEF(economy)
var/datum/bank_account/bank_account = bank_accounts_by_id[account]
if(bank_account?.account_job && !ispath(bank_account.account_job))
temporary_total += (bank_account.account_job.paycheck * STARTING_PAYCHECKS)
+ bank_account.payday(1)
station_total += bank_account.account_balance
station_target = max(round(temporary_total / max(bank_accounts_by_id.len * 2, 1)) + station_target_buffer, 1)
if(!HAS_TRAIT(SSeconomy, TRAIT_MARKET_CRASHING))
diff --git a/code/controllers/subsystem/persistent_paintings.dm b/code/controllers/subsystem/persistent_paintings.dm
index b00a41c6f6b..7f23b8df26d 100644
--- a/code/controllers/subsystem/persistent_paintings.dm
+++ b/code/controllers/subsystem/persistent_paintings.dm
@@ -1,7 +1,7 @@
#define PAINTINGS_DATA_FORMAT_VERSION 2
// Patronage thresholds for paintings. Different cosmetic frames become available as more credits are spent on the patronage.
-#define PATRONAGE_OK_FRAME PAYCHECK_ASSISTANT * 3 // 150 credits, as of early 2022
+#define PATRONAGE_OK_FRAME PAYCHECK_CREW * 3 // 150 credits, as of march 2022
#define PATRONAGE_NICE_FRAME PATRONAGE_OK_FRAME * 2.5
#define PATRONAGE_GREAT_FRAME PATRONAGE_NICE_FRAME * 2
#define PATRONAGE_EXCELLENT_FRAME PATRONAGE_GREAT_FRAME * 2
diff --git a/code/datums/components/payment.dm b/code/datums/components/payment.dm
index c5c9c5b8542..198c5c1ae6e 100644
--- a/code/datums/components/payment.dm
+++ b/code/datums/components/payment.dm
@@ -17,47 +17,130 @@
var/transaction_style = "Clinical"
///Who's getting paid?
var/datum/bank_account/target_acc
+ ///Does this payment component respect same-department-discount?
+ var/department_discount = FALSE
+ ///A static typecache of all the money-based items that can be actively used as currency.
+ var/static/list/allowed_money = typecacheof(list(
+ /obj/item/stack/spacecash,
+ /obj/item/holochip,
+ /obj/item/coin))
/datum/component/payment/Initialize(_cost, _target, _style)
target_acc = _target
if(!target_acc)
target_acc = SSeconomy.get_dep_account(ACCOUNT_CIV)
-
cost = _cost
transaction_style = _style
RegisterSignal(parent, COMSIG_OBJ_ATTEMPT_CHARGE, .proc/attempt_charge)
RegisterSignal(parent, COMSIG_OBJ_ATTEMPT_CHARGE_CHANGE, .proc/change_cost)
+ RegisterSignal(parent, COMSIG_GLOB_REVOLUTION_TAX_REMOVAL, .proc/clean_up)
/datum/component/payment/proc/attempt_charge(datum/source, atom/movable/target, extra_fees = 0)
SIGNAL_HANDLER
-
- if(!cost) //In case a free variant of anything is made it'll skip charging anyone.
+ if(!cost && !extra_fees) //In case a free variant of anything is made it'll skip charging anyone.
return
+ var/total_cost = cost + extra_fees
if(!ismob(target))
return COMPONENT_OBJ_CANCEL_CHARGE
var/mob/living/user = target
+ if(issilicon(user)) //They have evolved beyond the need for mere credits
+ return
var/obj/item/card/id/card
if(istype(user))
card = user.get_idcard(TRUE)
- if(!card)
- switch(transaction_style)
- if(PAYMENT_FRIENDLY)
- to_chat(user, span_warning("ID not detected, sorry [user]!"))
- if(PAYMENT_ANGRY)
- to_chat(user, span_warning("WHERE IS YOUR GOD DAMN CARD! GOD DAMNIT!"))
- if(PAYMENT_CLINICAL)
- to_chat(user, span_warning("ID card not present. Aborting."))
- return COMPONENT_OBJ_CANCEL_CHARGE
- if(!card.registered_account)
+ if(!card && istype(user.pulling, /obj/item/card/id))
+ card = user.pulling
+ if(handle_card(user, card, total_cost))
+ return //Only breaks here if the card can handle the cost of purchasing with someone's ID.
+ if(handle_cardless(user, total_cost)) //Here we attempt to handle the purchase physically, with held money first. Otherwise we default to below.
+ return
+ return COMPONENT_OBJ_CANCEL_CHARGE
+
+/**
+ * Proc that changes the base cost of the interaction.
+ *
+ * * source: Datum source of the thing changing the cost.
+ * * new_cost: the int value of the attempted new_cost to replace the cost value.
+ */
+/datum/component/payment/proc/change_cost(datum/source, new_cost)
+ SIGNAL_HANDLER
+
+ if(!isnum(new_cost))
+ CRASH("change_cost called with variable new_cost as not a number.")
+ cost = new_cost
+
+/**
+ * Attempts to charge the mob, user, an integer number of credits, total_cost, without the use of an ID card to directly draw upon.
+ */
+/datum/component/payment/proc/handle_cardless(mob/living/user, total_cost)
+ //Here is all the possible non-ID payment methods.
+ var/list/counted_money = list()
+ var/physical_cash_total = 0
+ for(var/obj/item/credit in typecache_filter_list(user.get_all_contents(), allowed_money)) //Coins, cash, and credits.
+ if(physical_cash_total > total_cost)
+ break
+ physical_cash_total += credit.get_item_credit_value()
+ counted_money += credit
+
+ if(is_type_in_typecache(user.pulling, allowed_money) && (physical_cash_total < total_cost)) //Coins(Pulled).
+ var/obj/item/counted_credit = user.pulling
+ physical_cash_total += counted_credit.get_item_credit_value()
+ counted_money += counted_credit
+
+ if(physical_cash_total < total_cost)
+ var/armless //Suggestions for those with no arms/simple animals.
+ if(!ishuman(user) && !istype(user, /mob/living/simple_animal/slime))
+ armless = TRUE
+ else
+ var/mob/living/carbon/human/harmless_armless = user
+ if(!harmless_armless.get_bodypart(BODY_ZONE_L_ARM) && !harmless_armless.get_bodypart(BODY_ZONE_R_ARM))
+ armless = TRUE
+
+ if(armless)
+ if(!user.pulling || !iscash(user.pulling) && !istype(user.pulling, /obj/item/card/id))
+ to_chat(user, span_notice("Try pulling a valid ID, space cash, holochip or coin while using \the [parent]!"))
+ return FALSE
+ return FALSE
+
+ if(physical_cash_total < total_cost)
+ to_chat(user, span_notice("Insufficient funds. Aborting."))
+ return FALSE
+ for(var/obj/cash_object in counted_money)
+ qdel(cash_object)
+ physical_cash_total -= total_cost
+
+ if(physical_cash_total > 0)
+ var/obj/item/holochip/holochange = new /obj/item/holochip(user.loc) //Change is made in holocredits exclusively.
+ holochange.credits = physical_cash_total
+ holochange.name = "[holochange.credits] credit holochip"
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/paying_customer = user
+ if(!INVOKE_ASYNC(paying_customer, /mob.proc/put_in_hands, holochange))
+ user.pulling = holochange
+ else
+ user.pulling = holochange
+ log_econ("[total_cost] credits were spent on [parent] by [user].")
+ to_chat(user, span_notice("Purchase completed with held credits."))
+ playsound(user, 'sound/effects/cashregister.ogg', 20, TRUE)
+ return TRUE
+
+/**
+ * Attempts to charge a mob, user, an integer number of credits, total_cost, directly from an ID card/bank account.
+ */
+/datum/component/payment/proc/handle_card(mob/living/user, obj/item/card/id/idcard, total_cost)
+ if(!idcard)
+ return FALSE
+ if(!idcard?.registered_account)
switch(transaction_style)
if(PAYMENT_FRIENDLY)
to_chat(user, span_warning("There's no account detected on your ID, how mysterious!"))
if(PAYMENT_ANGRY)
to_chat(user, span_warning("ARE YOU JOKING. YOU DON'T HAVE A BANK ACCOUNT ON YOUR ID YOU IDIOT."))
if(PAYMENT_CLINICAL)
- to_chat(user, span_warning("ID Card lacks a bank account. Aborting."))
- return COMPONENT_OBJ_CANCEL_CHARGE
- if(!(card.registered_account.has_money(cost + extra_fees)))
+ to_chat(user, span_warning("ID Card lacks a bank account. Advancing."))
+ return FALSE
+
+ if(!(idcard.registered_account.has_money(total_cost)))
switch(transaction_style)
if(PAYMENT_FRIENDLY)
to_chat(user, span_warning("I'm so sorry... You don't seem to have enough money."))
@@ -65,14 +148,22 @@
to_chat(user, span_warning("YOU MORON. YOU ABSOLUTE BAFOON. YOU INSUFFERABLE TOOL. YOU ARE POOR."))
if(PAYMENT_CLINICAL)
to_chat(user, span_warning("ID Card lacks funds. Aborting."))
- return COMPONENT_OBJ_CANCEL_CHARGE
- target_acc.transfer_money(card.registered_account, cost + extra_fees)
- card.registered_account.bank_card_talk("[cost + extra_fees] credits deducted from your account.")
+ user.balloon_alert(user, "Cost: [total_cost] credits.")
+ return FALSE
+ target_acc.transfer_money(idcard.registered_account, total_cost)
+ log_econ("[total_cost] credits were spent on [parent] by [user] via [idcard.registered_account.account_holder]'s card.")
+ idcard.registered_account.bank_card_talk("[total_cost] credits deducted from your account.")
playsound(src, 'sound/effects/cashregister.ogg', 20, TRUE)
- SSeconomy.track_purchase(card.registered_account, cost + extra_fees, parent)
+ SSeconomy.track_purchase(idcard.registered_account, total_cost, parent)
+ return TRUE
-/datum/component/payment/proc/change_cost(datum/source, new_cost)
+/**
+ * Attempts to remove the payment component, currently when the crew wins a revolution.
+ * * datum/source: source of the signal.
+ */
+/datum/component/payment/proc/clean_up(datum/source)
SIGNAL_HANDLER
- if(!isnum(new_cost))
- CRASH("change_cost called with variable new_cost as not a number.")
- cost = new_cost
+ target_acc = null
+ qdel(src)
+ return
+
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index c4500940339..8fdde994953 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -45,7 +45,6 @@
/obj/machinery/autolathe/Initialize(mapload)
AddComponent(/datum/component/material_container, SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], 0, MATCONTAINER_EXAMINE, _after_insert = CALLBACK(src, .proc/AfterMaterialInsert))
. = ..()
-
wires = new /datum/wires/autolathe(src)
stored_research = new /datum/techweb/specialized/autounlocking/autolathe
matching_designs = list()
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 2c9a60067f2..7572c6420d8 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -227,7 +227,7 @@ RLD
worn_icon_state = "RCD"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
- custom_premium_price = PAYCHECK_HARD * 10
+ custom_premium_price = PAYCHECK_COMMAND * 10
max_matter = 160
slot_flags = ITEM_SLOT_BELT
item_flags = NO_MAT_REDEMPTION | NOBLUDGEON
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index ec8483d5961..08f8356925a 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -669,7 +669,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
heat = 1500
resistance_flags = FIRE_PROOF
grind_results = list(/datum/reagent/iron = 1, /datum/reagent/fuel = 5, /datum/reagent/fuel/oil = 5)
- custom_price = PAYCHECK_ASSISTANT * 1.1
+ custom_price = PAYCHECK_CREW * 1.1
light_system = MOVABLE_LIGHT
light_range = 2
light_power = 0.6
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 155e4cb2267..453c55112f1 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -508,7 +508,7 @@
/obj/item/circuitboard/machine/vendor
name = "Custom Vendor (Machine Board)"
desc = "You can turn the \"brand selection\" dial using a screwdriver."
- custom_premium_price = PAYCHECK_ASSISTANT * 1.5
+ custom_premium_price = PAYCHECK_CREW * 1.5
build_path = /obj/machinery/vending/custom
req_components = list(/obj/item/vending_refill/custom = 1)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 8fb8368eb57..a62c116c8dc 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -1,7 +1,7 @@
/obj/item/flashlight
name = "flashlight"
desc = "A hand-held emergency light."
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
icon = 'icons/obj/lighting.dmi'
icon_state = "flashlight"
inhand_icon_state = "flashlight"
@@ -450,7 +450,7 @@
/obj/item/flashlight/glowstick
name = "glowstick"
desc = "A military-grade glowstick."
- custom_price = PAYCHECK_PRISONER
+ custom_price = PAYCHECK_LOWER
w_class = WEIGHT_CLASS_SMALL
light_range = 4
light_system = MOVABLE_LIGHT
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index e91811ac91d..275fd593b76 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -27,7 +27,7 @@
drop_sound = 'sound/items/handling/multitool_drop.ogg'
pickup_sound = 'sound/items/handling/multitool_pickup.ogg'
custom_materials = list(/datum/material/iron=50, /datum/material/glass=20)
- custom_premium_price = PAYCHECK_HARD * 3
+ custom_premium_price = PAYCHECK_COMMAND * 3
toolspeed = 1
usesound = 'sound/weapons/empty.ogg'
var/obj/machinery/buffer // simple machine buffer for device linkage
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index e6c73bc7b6b..e69f101ad5c 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT
- custom_premium_price = PAYCHECK_HARD * 1.25
+ custom_premium_price = PAYCHECK_COMMAND * 1.25
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE
/// Spam alert prevention
diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm
index eba967b874f..ba904a534eb 100644
--- a/code/game/objects/items/devices/portable_chem_mixer.dm
+++ b/code/game/objects/items/devices/portable_chem_mixer.dm
@@ -7,8 +7,8 @@
w_class = WEIGHT_CLASS_HUGE
slot_flags = ITEM_SLOT_BELT
equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
- custom_price = PAYCHECK_MEDIUM * 10
- custom_premium_price = PAYCHECK_MEDIUM * 14
+ custom_price = PAYCHECK_CREW * 10
+ custom_premium_price = PAYCHECK_CREW * 14
var/obj/item/reagent_containers/beaker = null ///Creating an empty slot for a beaker that can be added to dispense into
var/amount = 30 ///The amount of reagent that is to be dispensed currently
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index cf5316866e9..898960a4fac 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -1,7 +1,7 @@
/obj/item/analyzer
desc = "A hand-held environmental scanner which reports current gas levels."
name = "gas analyzer"
- custom_price = PAYCHECK_ASSISTANT * 0.9
+ custom_price = PAYCHECK_LOWER * 0.9
icon = 'icons/obj/device.dmi'
icon_state = "analyzer"
inhand_icon_state = "analyzer"
@@ -125,7 +125,7 @@
/**
* Outputs a message to the user describing the target's gasmixes.
- *
+ *
* Gets called by analyzer_act, which in turn is called by tool_act.
* Also used in other chat-based gas scans.
*/
@@ -133,7 +133,7 @@
var/mixture = target.return_analyzable_air()
if(!mixture)
return FALSE
-
+
var/icon = target
var/message = list()
if(!silent && isliving(user))
@@ -157,7 +157,7 @@
if(total_moles > 0)
message += span_notice("Moles: [round(total_moles, 0.01)] mol")
-
+
var/list/cached_gases = air.gases
for(var/id in cached_gases)
var/gas_concentration = cached_gases[id][MOLES]/total_moles
@@ -167,7 +167,7 @@
message += span_notice("Pressure: [round(pressure, 0.01)] kPa")
else
message += airs.len > 1 ? span_notice("This node is empty!") : span_notice("[target] is empty!")
-
+
gasmix_data += list(gas_mixture_parser(air, mix_name))
if(istype(tool))
diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm
index 7e4124859cf..20a6c03f37c 100644
--- a/code/game/objects/items/devices/scanners/health_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/health_analyzer.dm
@@ -25,7 +25,7 @@
var/mode = SCANNER_VERBOSE
var/scanmode = SCANMODE_HEALTH
var/advanced = FALSE
- custom_price = PAYCHECK_HARD
+ custom_price = PAYCHECK_COMMAND
/obj/item/healthanalyzer/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/devices/scanners/t_scanner.dm b/code/game/objects/items/devices/scanners/t_scanner.dm
index 679f8574dea..84a7749d35c 100644
--- a/code/game/objects/items/devices/scanners/t_scanner.dm
+++ b/code/game/objects/items/devices/scanners/t_scanner.dm
@@ -1,7 +1,7 @@
/obj/item/t_scanner
name = "\improper T-ray scanner"
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
- custom_price = PAYCHECK_ASSISTANT * 0.7
+ custom_price = PAYCHECK_LOWER * 0.7
icon = 'icons/obj/device.dmi'
icon_state = "t-ray0"
var/on = FALSE
diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm
index b7b26ad2d98..325dccbd3fb 100644
--- a/code/game/objects/items/devices/sensor_device.dm
+++ b/code/game/objects/items/devices/sensor_device.dm
@@ -7,8 +7,8 @@
worn_icon_state = "electronic"
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT
- custom_price = PAYCHECK_MEDIUM * 5
- custom_premium_price = PAYCHECK_MEDIUM * 6
+ custom_price = PAYCHECK_CREW * 5
+ custom_premium_price = PAYCHECK_CREW * 6
/obj/item/sensor_device/attack_self(mob/user)
GLOB.crewmonitor.show(user,src) //Proc already exists, just had to call it
diff --git a/code/game/objects/items/food/burgers.dm b/code/game/objects/items/food/burgers.dm
index dc539cc68d7..90fc6dee78d 100644
--- a/code/game/objects/items/food/burgers.dm
+++ b/code/game/objects/items/food/burgers.dm
@@ -13,7 +13,7 @@
desc = "The cornerstone of every nutritious breakfast."
food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 1)
foodtypes = GRAIN | MEAT
- custom_price = PAYCHECK_ASSISTANT * 0.8
+ custom_price = PAYCHECK_CREW * 0.8
venue_value = FOOD_PRICE_CHEAP
/obj/item/food/burger/plain/Initialize(mapload)
@@ -325,7 +325,7 @@
icon_state = "baseball"
food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 2)
foodtypes = GRAIN | GROSS
- custom_price = PAYCHECK_ASSISTANT * 0.8
+ custom_price = PAYCHECK_CREW * 0.8
venue_value = FOOD_PRICE_NORMAL
/obj/item/food/burger/baconburger
@@ -335,7 +335,7 @@
food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 2)
tastes = list("bacon" = 4, "bun" = 2)
foodtypes = GRAIN | MEAT
- custom_premium_price = PAYCHECK_ASSISTANT * 1.6
+ custom_premium_price = PAYCHECK_CREW * 1.6
venue_value = FOOD_PRICE_NORMAL
/obj/item/food/burger/empoweredburger
diff --git a/code/game/objects/items/food/moth.dm b/code/game/objects/items/food/moth.dm
index 10a728c00db..62333c97888 100644
--- a/code/game/objects/items/food/moth.dm
+++ b/code/game/objects/items/food/moth.dm
@@ -762,7 +762,7 @@
name = "\improper Activin 12 Hour medicated gum packet"
desc = "Stay awake during long shifts in the maintenance tunnels with Activin! The approval seal of the Mothic Nomad Fleet is emblazoned on the packaging, alongside a litany of health and safety disclaimers in both Mothic and Galactic Common."
icon_state = "bubblegum_wake_up"
- custom_premium_price = PAYCHECK_EASY * 1.5
+ custom_premium_price = PAYCHECK_CREW * 1.5
/obj/item/storage/box/gum/wake_up/examine_more(mob/user)
. = ..()
diff --git a/code/game/objects/items/food/salad.dm b/code/game/objects/items/food/salad.dm
index 37e8aa8d661..dda051ec6c8 100644
--- a/code/game/objects/items/food/salad.dm
+++ b/code/game/objects/items/food/salad.dm
@@ -135,7 +135,7 @@
reagent_flags = OPENCONTAINER
custom_materials = list(/datum/material/glass = 500)
w_class = WEIGHT_CLASS_NORMAL
- custom_price = PAYCHECK_ASSISTANT * 0.6
+ custom_price = PAYCHECK_CREW * 0.6
/obj/item/reagent_containers/glass/bowl/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/food/snacks.dm b/code/game/objects/items/food/snacks.dm
index b97bbbcbf17..60d7ac7b9d5 100644
--- a/code/game/objects/items/food/snacks.dm
+++ b/code/game/objects/items/food/snacks.dm
@@ -25,7 +25,7 @@
bite_consumption = 10
tastes = list("candy" = 5, "weight loss" = 4, "insect larva" = 1)
foodtypes = JUNKFOOD | RAW | GROSS
- custom_price = PAYCHECK_ASSISTANT * 1.6 //Joke adjusted for inflation
+ custom_price = PAYCHECK_CREW * 1.6 //Joke adjusted for inflation
w_class = WEIGHT_CLASS_TINY
var/revelation = FALSE
@@ -111,7 +111,7 @@
tastes = list("dried raisins" = 1)
foodtypes = JUNKFOOD | FRUIT | SUGAR
food_flags = FOOD_FINGER_FOOD
- custom_price = PAYCHECK_ASSISTANT * 0.7
+ custom_price = PAYCHECK_CREW * 0.7
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/no_raisin/healthy
@@ -130,7 +130,7 @@
junkiness = 25
foodtypes = JUNKFOOD | GRAIN | SUGAR
food_flags = FOOD_FINGER_FOOD
- custom_price = PAYCHECK_PRISONER
+ custom_price = PAYCHECK_LOWER
w_class = WEIGHT_CLASS_SMALL
/obj/item/food/candy_trash
@@ -188,7 +188,7 @@
food_reagents = list(/datum/reagent/consumable/nutriment = 2)
tastes = list("peanuts" = 4, "anger" = 1)
foodtypes = JUNKFOOD | NUTS
- custom_price = PAYCHECK_ASSISTANT * 0.8 //nuts are expensive in real life, and this is the best food in the vendor.
+ custom_price = PAYCHECK_CREW * 0.8 //nuts are expensive in real life, and this is the best food in the vendor.
junkiness = 10 //less junky than other options, since peanuts are a decently healthy snack option
w_class = WEIGHT_CLASS_SMALL
grind_results = list(/datum/reagent/consumable/peanut_butter = 5, /datum/reagent/consumable/cooking_oil = 2)
@@ -321,7 +321,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types())
food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1) //a healthy but expensive snack
tastes = list("pistachios" = 4, "subtle sweetness" = 1)
foodtypes = JUNKFOOD | NUTS
- custom_price = PAYCHECK_MEDIUM//pistachios are even more expensive.
+ custom_price = PAYCHECK_CREW//pistachios are even more expensive.
junkiness = 10 //on par with peanuts
w_class = WEIGHT_CLASS_SMALL
grind_results = list(/datum/reagent/consumable/peanut_butter = 5, /datum/reagent/consumable/cooking_oil = 2)
@@ -334,7 +334,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types())
food_reagents = list(/datum/reagent/consumable/cornoil = 1, /datum/reagent/consumable/salt = 6) //1 cornoil is equal to 1.33 nutriment
tastes = list("sunflowers" = 5)
foodtypes = JUNKFOOD | NUTS
- custom_price = PAYCHECK_ASSISTANT * 0.4 //sunflowers are cheap in real life.
+ custom_price = PAYCHECK_LOWER * 0.4 //sunflowers are cheap in real life.
bite_consumption = 1
junkiness = 25
w_class = WEIGHT_CLASS_SMALL
@@ -356,7 +356,7 @@ GLOBAL_LIST_INIT(safe_peanut_types, populate_safe_peanut_types())
bite_consumption = 2
food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/cooking_oil = 2, /datum/reagent/consumable/salt = 3)
junkiness = 20
- custom_price = PAYCHECK_ASSISTANT * 0.8 //we are filled to the brim with flavor
+ custom_price = PAYCHECK_LOWER * 0.8 //we are filled to the brim with flavor
tastes = list("fried corn" = 1)
foodtypes = JUNKFOOD | FRIED
w_class = WEIGHT_CLASS_SMALL
diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm
index 009903c097b..7bfee47bf0e 100644
--- a/code/game/objects/items/grenades/flashbang.dm
+++ b/code/game/objects/items/grenades/flashbang.dm
@@ -53,7 +53,7 @@
var/flashbang_range = 1 //how many tiles away the mob will be stunned.
shrapnel_type = /obj/projectile/bullet/pellet/stingball
shrapnel_radius = 5
- custom_premium_price = PAYCHECK_HARD * 3.5 // mostly gotten through cargo, but throw in one for the sec vendor ;)
+ custom_premium_price = PAYCHECK_COMMAND * 3.5 // mostly gotten through cargo, but throw in one for the sec vendor ;)
/obj/item/grenade/stingbang/mega
name = "mega stingbang"
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index 97d10dccbf1..08da280742b 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -40,7 +40,7 @@
custom_materials = list(/datum/material/iron=500)
breakouttime = 1 MINUTES
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 50)
- custom_price = PAYCHECK_HARD * 0.35
+ custom_price = PAYCHECK_COMMAND * 0.35
///Sound that plays when starting to put handcuffs on someone
var/cuffsound = 'sound/weapons/handcuffs.ogg'
///If set, handcuffs will be destroyed on application and leave behind whatever this is set to.
@@ -504,7 +504,7 @@
hitsound = 'sound/weapons/taserhit.ogg'
w_class = WEIGHT_CLASS_SMALL
breakouttime = 6 SECONDS
- custom_price = PAYCHECK_HARD * 0.35
+ custom_price = PAYCHECK_COMMAND * 0.35
/obj/item/restraints/legcuffs/bola/energy/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 4ba0d0b3b77..6210bbba59e 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -34,7 +34,7 @@
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
sharpness = SHARP_POINTY
var/datum/reagent/forkload //used to eat omelette
- custom_price = PAYCHECK_PRISONER
+ custom_price = PAYCHECK_LOWER
/obj/item/kitchen/fork/Initialize(mapload)
. = ..()
@@ -69,7 +69,7 @@
w_class = WEIGHT_CLASS_TINY
throwforce = 0
custom_materials = list(/datum/material/plastic=80)
- custom_price = PAYCHECK_PRISONER * 2
+ custom_price = PAYCHECK_LOWER * 2
/obj/item/kitchen/fork/plastic/Initialize(mapload)
. = ..()
@@ -92,7 +92,7 @@
attack_verb_continuous = list("prods", "whiffs", "scratches", "pokes")
attack_verb_simple = list("prod", "whiff", "scratch", "poke")
sharpness = SHARP_EDGED
- custom_price = PAYCHECK_PRISONER * 2
+ custom_price = PAYCHECK_LOWER * 2
/obj/item/knife/plastic/Initialize(mapload)
. = ..()
@@ -111,7 +111,7 @@
w_class = WEIGHT_CLASS_NORMAL
attack_verb_continuous = list("bashes", "batters", "bludgeons", "thrashes", "whacks")
attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "whack")
- custom_price = PAYCHECK_EASY * 1.5
+ custom_price = PAYCHECK_CREW * 1.5
tool_behaviour = TOOL_ROLLINGPIN
/obj/item/kitchen/rollingpin/suicide_act(mob/living/carbon/user)
@@ -132,7 +132,7 @@
attack_verb_continuous = list("whacks", "spoons", "taps")
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 50, ACID = 30)
custom_materials = list(/datum/material/iron=120)
- custom_price = PAYCHECK_PRISONER * 5
+ custom_price = PAYCHECK_LOWER * 5
tool_behaviour = TOOL_MINING
toolspeed = 25 // Literally 25 times worse than the base pickaxe
@@ -141,7 +141,7 @@
icon_state = "plastic_spoon"
force = 0
custom_materials = list(/datum/material/plastic=120)
- custom_price = PAYCHECK_PRISONER * 2
+ custom_price = PAYCHECK_LOWER * 2
toolspeed = 75 // The plastic spoon takes 5 minutes to dig through a single mineral turf... It's one, continuous, breakable, do_after...
/obj/item/kitchen/spoon/plastic/Initialize(mapload)
diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm
index c161e51d8bd..9c85fe3d391 100644
--- a/code/game/objects/items/knives.dm
+++ b/code/game/objects/items/knives.dm
@@ -89,7 +89,7 @@
attack_verb_continuous = list("cleaves", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("cleave", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
w_class = WEIGHT_CLASS_NORMAL
- custom_price = PAYCHECK_EASY * 5
+ custom_price = PAYCHECK_CREW * 5
wound_bonus = 15
/obj/item/knife/hunting
diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm
index 8056b48e603..9e3210add1a 100644
--- a/code/game/objects/items/melee/baton.dm
+++ b/code/game/objects/items/melee/baton.dm
@@ -272,7 +272,7 @@
desc = "A strange box containing wood working tools and an instruction paper to turn stun batons into something else."
icon = 'icons/obj/storage.dmi'
icon_state = "uk"
- custom_price = PAYCHECK_HARD * 4.5
+ custom_price = PAYCHECK_COMMAND * 4.5
/obj/item/melee/baton/telescopic
name = "telescopic baton"
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index ee838463df5..5c15cd4e8ab 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -90,8 +90,8 @@
desc = "A handheld tracking device that points to crew suit sensors."
icon_state = "pinpointer_crew"
worn_icon_state = "pinpointer_crew"
- custom_price = PAYCHECK_MEDIUM * 4
- custom_premium_price = PAYCHECK_MEDIUM * 6
+ custom_price = PAYCHECK_CREW * 4
+ custom_premium_price = PAYCHECK_CREW * 6
var/has_owner = FALSE
var/pinpointer_owner = null
var/ignore_suit_sensor_level = FALSE /// Do we find people even if their suit sensors are turned off
@@ -167,7 +167,7 @@
desc = "A handheld tracking device that displays its proximity to crew suit sensors."
icon_state = "pinpointer_crewprox"
worn_icon_state = "pinpointer_prox"
- custom_price = PAYCHECK_MEDIUM * 3
+ custom_price = PAYCHECK_CREW * 3
/obj/item/pinpointer/crew/prox/get_direction_icon(here, there)
var/size = ""
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 961e3065f3c..8d8b06217d3 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -131,7 +131,7 @@
max_amount = 12
amount = 6
grind_results = list(/datum/reagent/cellulose = 2)
- custom_price = PAYCHECK_ASSISTANT * 2
+ custom_price = PAYCHECK_CREW * 2
absorption_rate = 0.125
absorption_capacity = 5
splint_factor = 0.7
diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm
index 252d79c0089..48a08a7272f 100644
--- a/code/game/objects/items/stacks/tape.dm
+++ b/code/game/objects/items/stacks/tape.dm
@@ -87,5 +87,5 @@
prefix = "surgical"
conferred_embed = list("embed_chance" = 30, "pain_mult" = 0, "jostle_pain_mult" = 0, "ignore_throwspeed_threshold" = TRUE)
splint_factor = 0.5
- custom_price = PAYCHECK_MEDIUM
+ custom_price = PAYCHECK_CREW
merge_type = /obj/item/stack/sticky_tape/surgical
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 260c6d619c5..3162e77321b 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -324,7 +324,7 @@
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BELT
custom_materials = list(/datum/material/iron=3000)
- custom_price = PAYCHECK_ASSISTANT * 0.6
+ custom_price = PAYCHECK_CREW * 0.6
/obj/item/storage/bag/tray/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 51ee5d39375..5ba5a8eed68 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -36,7 +36,7 @@
inhand_icon_state = "utility"
worn_icon_state = "utility"
content_overlays = TRUE
- custom_premium_price = PAYCHECK_MEDIUM * 2
+ custom_premium_price = PAYCHECK_CREW * 2
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
@@ -334,7 +334,7 @@
inhand_icon_state = "securitywebbing"
worn_icon_state = "securitywebbing"
content_overlays = FALSE
- custom_premium_price = PAYCHECK_HARD * 3
+ custom_premium_price = PAYCHECK_COMMAND * 3
/obj/item/storage/belt/security/webbing/ComponentInitialize()
. = ..()
@@ -694,7 +694,7 @@
inhand_icon_state = "fannypack_leather"
worn_icon_state = "fannypack_leather"
dying_key = DYE_REGISTRY_FANNYPACK
- custom_price = PAYCHECK_ASSISTANT * 2
+ custom_price = PAYCHECK_CREW * 2
/obj/item/storage/belt/fannypack/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 58f47f26797..2ac7149ac31 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -709,7 +709,7 @@
slot_flags = ITEM_SLOT_BELT
drop_sound = 'sound/items/handling/matchbox_drop.ogg'
pickup_sound = 'sound/items/handling/matchbox_pickup.ogg'
- custom_price = PAYCHECK_ASSISTANT * 0.4
+ custom_price = PAYCHECK_CREW * 0.4
base_icon_state = "matchbox"
illustration = null
@@ -1106,7 +1106,7 @@
/obj/item/storage/box/dishdrive
name = "DIY Dish Drive Kit"
desc = "Contains everything you need to build your own Dish Drive!"
- custom_premium_price = PAYCHECK_EASY * 3
+ custom_premium_price = PAYCHECK_CREW * 3
/obj/item/storage/box/dishdrive/PopulateContents()
var/static/items_inside = list(
@@ -1229,7 +1229,7 @@
w_class = WEIGHT_CLASS_TINY
illustration = null
foldable = null
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/storage/box/gum/ComponentInitialize()
. = ..()
@@ -1245,7 +1245,7 @@
name = "nicotine gum packet"
desc = "Designed to help with nicotine addiction and oral fixation all at once without destroying your lungs in the process. Mint flavored!"
icon_state = "bubblegum_nicotine"
- custom_premium_price = PAYCHECK_EASY * 1.5
+ custom_premium_price = PAYCHECK_CREW * 1.5
/obj/item/storage/box/gum/nicotine/PopulateContents()
for(var/i in 1 to 4)
@@ -1255,8 +1255,8 @@
name = "HP+ gum packet"
desc = "A seemingly homemade packaging with an odd smell. It has a weird drawing of a smiling face sticking out its tongue."
icon_state = "bubblegum_happiness"
- custom_price = PAYCHECK_HARD * 3
- custom_premium_price = PAYCHECK_HARD * 3
+ custom_price = PAYCHECK_COMMAND * 3
+ custom_premium_price = PAYCHECK_COMMAND * 3
/obj/item/storage/box/gum/happiness/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index e70a0e4d5ec..065ccddd67a 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -82,7 +82,7 @@
spawn_type = /obj/item/food/donut/plain
is_open = TRUE
appearance_flags = KEEP_TOGETHER
- custom_premium_price = PAYCHECK_HARD * 1.75
+ custom_premium_price = PAYCHECK_COMMAND * 1.75
contents_tag = "donut"
/obj/item/storage/fancy/donut_box/ComponentInitialize()
@@ -184,7 +184,7 @@
throwforce = 0
slot_flags = ITEM_SLOT_BELT
spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette
- custom_price = PAYCHECK_MEDIUM
+ custom_price = PAYCHECK_CREW
age_restricted = TRUE
contents_tag = "cigarette"
///for cigarette overlay
@@ -386,7 +386,7 @@
base_icon_state = "cig_paper_pack"
contents_tag = "rolling paper"
spawn_type = /obj/item/rollingpaper
- custom_price = PAYCHECK_PRISONER
+ custom_price = PAYCHECK_LOWER
/obj/item/storage/fancy/rollingpapers/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm
index 2eecc52b1d7..2e178b05d49 100644
--- a/code/game/objects/items/storage/medkit.dm
+++ b/code/game/objects/items/storage/medkit.dm
@@ -240,7 +240,7 @@
desc = "An advanced kit to help deal with advanced wounds."
icon_state = "medkit_advanced"
inhand_icon_state = "medkit-rad"
- custom_premium_price = PAYCHECK_HARD * 6
+ custom_premium_price = PAYCHECK_COMMAND * 6
damagetype_healed = "all"
/obj/item/storage/medkit/advanced/PopulateContents()
@@ -524,7 +524,7 @@
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
throw_speed = 3
throw_range = 7
- custom_premium_price = PAYCHECK_MEDIUM * 4
+ custom_premium_price = PAYCHECK_CREW * 4
/// var to prevent it freezing the same things over and over
var/cooling = FALSE
diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm
index fdf8591cd98..01d459632cb 100644
--- a/code/game/objects/items/storage/secure.dm
+++ b/code/game/objects/items/storage/secure.dm
@@ -156,8 +156,7 @@
/obj/item/storage/secure/briefcase/syndie/PopulateContents()
..()
- var/datum/component/storage/storage_space = GetComponent(/datum/component/storage)
- for(var/i in 1 to storage_space.max_items - 2)
+ for(var/iterator in 1 to 5)
new /obj/item/stack/spacecash/c1000(src)
///Secure Safe
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 4810eb24a33..abd1e7a9a0c 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -147,7 +147,7 @@
desc = "A janitorial cleaner backpack with nozzle to clean blood and graffiti."
icon_state = "waterbackpackjani"
inhand_icon_state = "waterbackpackjani"
- custom_price = PAYCHECK_EASY * 5
+ custom_price = PAYCHECK_CREW * 5
/obj/item/watertank/janitor/Initialize(mapload)
. = ..()
@@ -178,7 +178,7 @@
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "pepperbackpacksec"
inhand_icon_state = "pepperbackpacksec"
- custom_price = PAYCHECK_MEDIUM * 2
+ custom_price = PAYCHECK_CREW * 2
volume = 1000
/obj/item/watertank/pepperspray/Initialize(mapload)
diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm
index 352326e2445..b1f89cf21c9 100644
--- a/code/game/objects/items/tcg/tcg.dm
+++ b/code/game/objects/items/tcg/tcg.dm
@@ -309,7 +309,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices)
icon = 'icons/obj/tcgmisc.dmi'
icon_state = "cardback_nt"
w_class = WEIGHT_CLASS_TINY
- custom_price = PAYCHECK_ASSISTANT * 1.5 //Effectively expensive as long as you're not a very high paying job... in which case, why are you playing trading card games?
+ custom_price = PAYCHECK_CREW * 2 //Effectively expensive as long as you're not a very high paying job... in which case, why are you playing trading card games?
///The card series to look in
var/series = "MEME"
///Chance of the pack having a coin in it out of 10
diff --git a/code/game/objects/items/wall_mounted.dm b/code/game/objects/items/wall_mounted.dm
index 7d4567b9f7e..77d929a196b 100644
--- a/code/game/objects/items/wall_mounted.dm
+++ b/code/game/objects/items/wall_mounted.dm
@@ -90,4 +90,4 @@
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/iron=50, /datum/material/glass=50)
grind_results = list(/datum/reagent/iron = 10, /datum/reagent/silicon = 10)
- custom_price = PAYCHECK_EASY * 0.5
+ custom_price = PAYCHECK_CREW * 0.5
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 941fb3f69d5..31e50ba4760 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -616,7 +616,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
icon_state = "skateboard2"
inhand_icon_state = "skateboard2"
board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro
- custom_premium_price = PAYCHECK_HARD * 5
+ custom_premium_price = PAYCHECK_COMMAND * 5
/obj/item/melee/skateboard/hoverboard
name = "hoverboard"
diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm
index 5e4f02ad91f..bfa9bcd80d0 100644
--- a/code/game/objects/structures/lavaland/geyser.dm
+++ b/code/game/objects/structures/lavaland/geyser.dm
@@ -193,4 +193,4 @@
plunge_mod = 0.5
layer_mode_sprite = "reinforced_plunger_layer"
- custom_premium_price = PAYCHECK_MEDIUM * 8
+ custom_premium_price = PAYCHECK_CREW * 8
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index 2f446740d14..4d6061b7cec 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -434,7 +434,7 @@
if (. == STATION_VICTORY)
// If the revolution was quelled, make rev heads unable to be revived through pods
for (var/datum/mind/rev_head as anything in ex_headrevs)
- if(!isnull(rev_head.current))
+ if(!isnull(rev_head.current))
ADD_TRAIT(rev_head.current, TRAIT_DEFIB_BLACKLISTED, REF(src))
rev_head.current.med_hud_set_status()
@@ -455,6 +455,8 @@
to_chat(headrev_mind.current, span_hear("You hear something crackle in your ears for a moment before a voice speaks. \
\"Please stand by for a message from your benefactor. Message as follows, provocateur. \
You have been chosen out of your fellow provocateurs to rename the station. Choose wisely. Message ends.\""))
+ SEND_GLOBAL_SIGNAL(COMSIG_GLOB_REVOLUTION_TAX_REMOVAL)
+
for (var/mob/living/player as anything in GLOB.player_list)
var/datum/mind/player_mind = player.mind
diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm
index 27388bc7763..36c15cd2141 100644
--- a/code/modules/art/paintings.dm
+++ b/code/modules/art/paintings.dm
@@ -75,7 +75,7 @@
base_pixel_x = 11
base_pixel_y = 10
- custom_premium_price = PAYCHECK_MEDIUM
+ custom_premium_price = PAYCHECK_CREW
/obj/item/canvas/Initialize(mapload)
. = ..()
@@ -399,7 +399,7 @@
pixels_per_unit = 20
w_class = WEIGHT_CLASS_BULKY
- custom_premium_price = PAYCHECK_HARD * 1.25
+ custom_premium_price = PAYCHECK_CREW * 1.25
/obj/item/canvas/thirtysix_twentyfour/Initialize()
. = ..()
@@ -422,7 +422,7 @@
pixels_per_unit = 18
w_class = WEIGHT_CLASS_BULKY
- custom_premium_price = PAYCHECK_HARD * 1.75
+ custom_premium_price = PAYCHECK_CREW * 1.75
/obj/item/canvas/fortyfive_twentyseven/Initialize()
. = ..()
diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm
index d1b97d5338c..5416dce943a 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types.dm
@@ -41,19 +41,27 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
||||only by meta_gas_list(). ||||
\*||||||||||||||||||||||||||||||||||||||||*/
+//This is a plot created using the values for gas exports. Each gas has a value that works as it's kind of soft-cap, which limits you from making billions of credits per sale, based on the base_value variable on the gasses themselves. Most of these gasses as a result have a rather low value when sold, like nitrogen and oxygen at 1500 and 600 respectively at their maximum value. The
/datum/gas
var/id = ""
var/specific_heat = 0
var/name = ""
- var/gas_overlay = "" //icon_state in icons/effects/atmospherics.dmi
+ ///icon_state in icons/effects/atmospherics.dmi
+ var/gas_overlay = ""
var/moles_visible = null
- var/dangerous = FALSE //currently used by canisters
- var/fusion_power = 0 //How much the gas accelerates a fusion reaction
- var/rarity = 0 // relative rarity compared to other gases, used when setting up the reactions list.
+ ///currently used by canisters
+ var/dangerous = FALSE
+ ///How much the gas accelerates a fusion reaction
+ var/fusion_power = 0
+ /// relative rarity compared to other gases, used when setting up the reactions list.
+ var/rarity = 0
+ ///Can gas of this type can purchased through cargo?
var/purchaseable = FALSE
+ ///How does a single mole of this gas sell for? Formula to calculate maximum value is in code\modules\cargo\exports\large_objects.dm. Doesn't matter for roundstart gasses.
var/base_value = 0
var/desc
+
/datum/gas/oxygen
id = "o2"
specific_heat = 20
@@ -90,7 +98,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
moles_visible = MOLES_GAS_VISIBLE
dangerous = TRUE
rarity = 800
- base_value = 2
+ base_value = 1.5
desc = "A flammable gas with many other curious properties. It's research is one of NT's primary objective."
/datum/gas/water_vapor
@@ -114,7 +122,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
dangerous = TRUE
fusion_power = 10
rarity = 50
- base_value = 5
+ base_value = 2.5
desc = "The most noble gas of them all. High quantities of hyper-noblium actively prevents reactions from occuring."
/datum/gas/nitrous_oxide
@@ -127,7 +135,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
dangerous = TRUE
rarity = 600
purchaseable = TRUE
- base_value = 3
+ base_value = 1.5
desc = "Causes drowsiness, euphoria, and eventually unconsciousness."
/datum/gas/nitrium
@@ -139,7 +147,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
moles_visible = MOLES_GAS_VISIBLE
dangerous = TRUE
rarity = 1
- base_value = 100
+ base_value = 6
desc = "An experimental performance enhancing gas. Nitrium can have amplified effects as more of it gets into your bloodstream."
/datum/gas/tritium
@@ -151,7 +159,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
dangerous = TRUE
fusion_power = 5
rarity = 300
- base_value = 5
+ base_value = 2.5
desc = "A highly flammable and radioctive gas."
/datum/gas/bz
@@ -162,7 +170,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
fusion_power = 8
rarity = 400
purchaseable = TRUE
- base_value = 2
+ base_value = 1.5
desc = "A powerful hallucinogenic nerve agent able to induce cognitive damage."
/datum/gas/pluoxium
@@ -171,7 +179,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
name = "Pluoxium"
fusion_power = -10
rarity = 200
- base_value = 5
+ base_value = 2.5
desc = "A gas that could supply even more oxygen to the bloodstream when inhaled, without being an oxidizer."
/datum/gas/miasma
@@ -182,7 +190,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "miasma"
moles_visible = MOLES_GAS_VISIBLE * 60
rarity = 250
- base_value = 2
+ base_value = 1
desc = "Not necessarily a gas, miasma refers to biological pollutants found in the atmosphere."
/datum/gas/freon
@@ -194,7 +202,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
moles_visible = MOLES_GAS_VISIBLE *30
fusion_power = -5
rarity = 10
- base_value = 15
+ base_value = 5
desc = "A coolant gas. Mainly used for it's endothermic reaction with oxygen."
/datum/gas/hydrogen
@@ -215,7 +223,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "healium"
moles_visible = MOLES_GAS_VISIBLE
rarity = 300
- base_value = 19
+ base_value = 5.5
desc = "Causes deep, regenerative sleep."
/datum/gas/proto_nitrate
@@ -226,7 +234,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "proto_nitrate"
moles_visible = MOLES_GAS_VISIBLE
rarity = 200
- base_value = 5
+ base_value = 2.5
desc = "A very volatile gas that reacts differently with various gases."
/datum/gas/zauker
@@ -237,7 +245,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "zauker"
moles_visible = MOLES_GAS_VISIBLE
rarity = 1
- base_value = 100
+ base_value = 7
desc = "A highly toxic gas, it's production is highly regulated on top of being difficult. It also breaks down when in contact with nitrogen."
/datum/gas/halon
@@ -248,7 +256,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
gas_overlay = "halon"
moles_visible = MOLES_GAS_VISIBLE
rarity = 300
- base_value = 9
+ base_value = 4
desc = "A potent fire supressant. Removes oxygen from high temperature fires and cools down the area"
/datum/gas/helium
@@ -257,7 +265,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
name = "Helium"
fusion_power = 7
rarity = 50
- base_value = 6
+ base_value = 3.5
desc = "A very inert gas produced by the fusion of hydrogen and it's derivatives."
/datum/gas/antinoblium
diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm
index 422082a060f..7dfccae45a6 100644
--- a/code/modules/cargo/exports/large_objects.dm
+++ b/code/modules/cargo/exports/large_objects.dm
@@ -96,6 +96,19 @@
unit_name = "security barrier"
export_types = list(/obj/item/grenade/barrier, /obj/structure/barricade/security)
+/**
+ * Gas canister exports.
+ * I'm going to put a quick aside here as this has been a pain to balance for several years now, and I'd like to at least break how to keep gas exports tame.
+ * So: Gasses are sold in canisters below, which have a variable amount of maximum pressure before they start to break. The largest of which is 9.2e13 kPa.
+ * This means we can determine a theoretical maximum value for gas sale prices using the ideal gas laws, as we know we have a minimum gas temperature of 2.7 kelvin.
+ *
+ * Additional note on base value. Gasses are soft capped to limit how much they're worth at large quantities, and time and time again players will find new ways to break your gasses.
+ * so please, *PLEASE* try not to go too much further past 10.
+
+ * * AUTHORS NOTE: This means the theoretical, insane madman number of moles of a single gas in a can sits at a horrifying 4,098,150,709.4 moles.
+ * * Use this as you will, and when someone makes a quinquadrillion credits using gas exports, use these metrics as a way to balance the bejesus out of them.
+ * * For more information, see code\modules\atmospherics\machinery\portable\canister.dm.
+ */
/datum/export/large/gas_canister
cost = CARGO_CRATE_VALUE * 0.05 //Base cost of canister. You get more for nice gases inside.
unit_name = "Gas Canister"
diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm
index 15a6c5b5724..00402422ddb 100644
--- a/code/modules/cargo/goodies.dm
+++ b/code/modules/cargo/goodies.dm
@@ -7,142 +7,142 @@
/datum/supply_pack/goody/dumdum38
name = ".38 DumDum Speedloader"
desc = "Contains one speedloader of .38 DumDum ammunition, good for embedding in soft targets."
- cost = PAYCHECK_MEDIUM * 2
+ cost = PAYCHECK_CREW * 2
access_view = ACCESS_BRIG
contains = list(/obj/item/ammo_box/c38/dumdum)
/datum/supply_pack/goody/match38
name = ".38 Match Grade Speedloader"
desc = "Contains one speedloader of match grade .38 ammunition, perfect for showing off trickshots."
- cost = PAYCHECK_MEDIUM * 2
+ cost = PAYCHECK_CREW * 2
access_view = ACCESS_BRIG
contains = list(/obj/item/ammo_box/c38/match)
/datum/supply_pack/goody/rubber
name = ".38 Rubber Speedloader"
desc = "Contains one speedloader of bouncy rubber .38 ammunition, for when you want to bounce your shots off anything and everything."
- cost = PAYCHECK_MEDIUM * 1.5
+ cost = PAYCHECK_CREW * 1.5
access_view = ACCESS_BRIG
contains = list(/obj/item/ammo_box/c38/match/bouncy)
/datum/supply_pack/goody/mars_single
name = "Colt Detective Special Single-Pack"
desc = "The HoS took your gun and your badge? No problem! Just pay the absurd taxation fee and you too can be reunited with the lethal power of a .38!"
- cost = PAYCHECK_HARD * 40 //they really mean a premium here
+ cost = PAYCHECK_CREW * 40 //they really mean a premium here
access_view = ACCESS_FORENSICS
contains = list(/obj/item/gun/ballistic/revolver/detective)
/datum/supply_pack/goody/stingbang
name = "Stingbang Single-Pack"
desc = "Contains one \"stingbang\" grenade, perfect for playing meanhearted pranks."
- cost = PAYCHECK_HARD * 2.5
+ cost = PAYCHECK_COMMAND * 2.5
access_view = ACCESS_BRIG
contains = list(/obj/item/grenade/stingbang)
/datum/supply_pack/goody/Survivalknives_single
name = "Survival Knife Single-Pack"
desc = "Contains one sharpened survival knive. Guaranteed to fit snugly inside any Nanotrasen-standard boot."
- cost = PAYCHECK_HARD * 1.75
+ cost = PAYCHECK_COMMAND * 1.75
contains = list(/obj/item/knife/combat/survival)
/datum/supply_pack/goody/ballistic_single
name = "Combat Shotgun Single-Pack"
desc = "For when the enemy absolutely needs to be replaced with lead. Contains one Aussec-designed Combat Shotgun, and one Shotgun Bandolier."
- cost = PAYCHECK_HARD * 15
+ cost = PAYCHECK_COMMAND * 15
access_view = ACCESS_ARMORY
contains = list(/obj/item/gun/ballistic/shotgun/automatic/combat, /obj/item/storage/belt/bandolier)
/datum/supply_pack/goody/energy_single
name = "Energy Gun Single-Pack"
desc = "Contains one energy gun, capable of firing both nonlethal and lethal blasts of light."
- cost = PAYCHECK_HARD * 12
+ cost = PAYCHECK_COMMAND * 12
access_view = ACCESS_ARMORY
contains = list(/obj/item/gun/energy/e_gun)
/datum/supply_pack/goody/hell_single
name = "Hellgun Kit Single-Pack"
desc = "Contains one hellgun degradation kit, an old pattern of laser gun infamous for its ability to horribly disfigure targets with burns. Technically violates the Space Geneva Convention when used on humanoids."
- cost = PAYCHECK_MEDIUM * 2
+ cost = PAYCHECK_CREW * 2
access_view = ACCESS_ARMORY
contains = list(/obj/item/weaponcrafting/gunkit/hellgun)
/datum/supply_pack/goody/thermal_single
name = "Thermal Pistol Holster Single-Pack"
desc = "Contains twinned thermal pistols in a holster, ready for use in the field."
- cost = PAYCHECK_HARD * 15
+ cost = PAYCHECK_COMMAND * 15
access_view = ACCESS_ARMORY
contains = list(/obj/item/storage/belt/holster/thermal)
/datum/supply_pack/goody/sologamermitts
name = "Insulated Gloves Single-Pack"
desc = "The backbone of modern society. Barely ever ordered for actual engineering."
- cost = PAYCHECK_MEDIUM * 8
+ cost = PAYCHECK_CREW * 8
contains = list(/obj/item/clothing/gloves/color/yellow)
/datum/supply_pack/goody/gripper_single
name = "Gripper Gloves Single-Pack"
desc = "A spare pair of gripper gloves. Perfect for when the security vendor is empty (or when you're not actually a security officer)."
- cost = PAYCHECK_HARD * 6
+ cost = PAYCHECK_COMMAND * 6
contains = list(/obj/item/clothing/gloves/tackler)
/datum/supply_pack/goody/firstaidbruises_single
name = "Bruise Treatment Kit Single-Pack"
desc = "A single brute medkit, perfect for recovering from being crushed in an airlock. Did you know people get crushed in airlocks all the time? Interesting..."
- cost = PAYCHECK_MEDIUM * 4
+ cost = PAYCHECK_CREW * 4
contains = list(/obj/item/storage/medkit/brute)
/datum/supply_pack/goody/firstaidburns_single
name = "Burn Treatment Kit Single-Pack"
desc = "A single burn medkit. The advertisement displays a winking atmospheric technician giving a thumbs up, saying \"Mistakes happen!\""
- cost = PAYCHECK_MEDIUM * 4
+ cost = PAYCHECK_CREW * 4
contains = list(/obj/item/storage/medkit/fire)
/datum/supply_pack/goody/firstaid_single
name = "First Aid Kit Single-Pack"
desc = "A single medkit, fit for healing most types of bodily harm."
- cost = PAYCHECK_MEDIUM * 3
+ cost = PAYCHECK_CREW * 3
contains = list(/obj/item/storage/medkit/regular)
/datum/supply_pack/goody/firstaidoxygen_single
name = "Oxygen Deprivation Kit Single-Pack"
desc = "A single oxygen deprivation medkit, marketed heavily to those with crippling fears of asphyxiation."
- cost = PAYCHECK_MEDIUM * 4
+ cost = PAYCHECK_CREW * 4
contains = list(/obj/item/storage/medkit/o2)
/datum/supply_pack/goody/firstaidtoxins_single
name = "Toxin Treatment Kit Single-Pack"
desc = "A single first aid kit focused on healing damage dealt by heavy toxins."
- cost = PAYCHECK_MEDIUM * 4
+ cost = PAYCHECK_CREW * 4
contains = list(/obj/item/storage/medkit/toxin)
/datum/supply_pack/goody/toolbox // mostly just to water down coupon probability
name = "Mechanical Toolbox"
desc = "A fully stocked mechanical toolbox, for when you're too lazy to just print them out."
- cost = PAYCHECK_MEDIUM * 3
+ cost = PAYCHECK_CREW * 3
contains = list(/obj/item/storage/toolbox/mechanical)
/datum/supply_pack/goody/valentine
name = "Valentine Card"
desc = "Make an impression on that special someone! Comes with one valentine card and a free candy heart!"
- cost = PAYCHECK_ASSISTANT * 2
+ cost = PAYCHECK_CREW * 2
contains = list(/obj/item/valentine, /obj/item/food/candyheart)
/datum/supply_pack/goody/beeplush
name = "Bee Plushie"
desc = "The most important thing you could possibly spend your hard-earned money on."
- cost = PAYCHECK_EASY * 4
+ cost = PAYCHECK_CREW * 4
contains = list(/obj/item/toy/plush/beeplushie)
/datum/supply_pack/goody/dyespray
name = "Hair Dye Spray"
desc = "A cool spray to dye your hair with awesome colors!"
- cost = PAYCHECK_EASY * 2
+ cost = PAYCHECK_CREW * 2
contains = list(/obj/item/dyespray)
/datum/supply_pack/goody/beach_ball
name = "Beach Ball"
// uses desc from item
- cost = PAYCHECK_MEDIUM
+ cost = PAYCHECK_CREW
contains = list(/obj/item/toy/beach_ball/branded)
/datum/supply_pack/goody/beach_ball/New()
@@ -153,17 +153,17 @@
/datum/supply_pack/goody/medipen_twopak
name = "Medipen Two-Pak"
desc = "Contains one standard epinephrine medipen and one standard emergency medkit medipen. For when you want to prepare for the worst."
- cost = PAYCHECK_MEDIUM * 2
+ cost = PAYCHECK_CREW * 2
contains = list(/obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/hypospray/medipen/ekit)
/datum/supply_pack/goody/mothic_rations
name = "Surplus Mothic Ration Pack"
desc = "A single surplus ration pack from the Mothic Fleet. Comes with 3 random sustenance bars, and a package of Activin chewing gum."
- cost = PAYCHECK_HARD * 2
+ cost = PAYCHECK_COMMAND * 2
contains = list(/obj/item/storage/box/mothic_rations)
/datum/supply_pack/goody/ready_donk
name = "Ready-Donk Single Meal"
desc = "A complete meal package for the terminally lazy. Contains one Ready-Donk meal."
- cost = PAYCHECK_MEDIUM * 2
+ cost = PAYCHECK_CREW * 2
contains = list(/obj/item/food/ready_donk)
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index e560efe2283..070a665da1f 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -16,7 +16,7 @@
strip_delay = 15
equip_delay_other = 25
resistance_flags = FLAMMABLE
- custom_price = PAYCHECK_HARD * 1.5
+ custom_price = PAYCHECK_COMMAND * 1.5
/obj/item/clothing/ears/earmuffs/ComponentInitialize()
. = ..()
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 8f5bf03b190..b00b8b41b1d 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -9,7 +9,7 @@
siemens_coefficient = 0
permeability_coefficient = 0.05
resistance_flags = NONE
- custom_price = PAYCHECK_MEDIUM * 10
+ custom_price = PAYCHECK_CREW * 10
custom_premium_price = PAYCHECK_COMMAND * 6
cut_type = /obj/item/clothing/gloves/cut
clothing_traits = list(TRAIT_CHUNKYFINGERS)
@@ -120,7 +120,7 @@
equip_delay_other = 20
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- custom_price = PAYCHECK_ASSISTANT * 1.5
+ custom_price = PAYCHECK_CREW * 1.5
undyeable = TRUE
clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH)
@@ -256,7 +256,7 @@
desc = "These look pretty fancy."
icon_state = "white"
inhand_icon_state = "wgloves"
- custom_price = PAYCHECK_MINIMAL
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/gloves/kim
name = "aerostatic gloves"
diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm
index c2f1da4e5c3..19626a49970 100644
--- a/code/modules/clothing/gloves/tacklers.dm
+++ b/code/modules/clothing/gloves/tacklers.dm
@@ -6,7 +6,7 @@
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
resistance_flags = NONE
- custom_premium_price = PAYCHECK_HARD * 3.5
+ custom_premium_price = PAYCHECK_COMMAND * 3.5
clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH)
/// For storing our tackler datum so we can remove it after
var/datum/component/tackler
diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm
index c9cda47deb4..dc5dc4dcc24 100644
--- a/code/modules/clothing/head/beanie.dm
+++ b/code/modules/clothing/head/beanie.dm
@@ -7,7 +7,7 @@
name = "white beanie"
desc = "A stylish beanie. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their heads."
icon_state = "beanie" //Default white
- custom_price = PAYCHECK_ASSISTANT * 1.2
+ custom_price = PAYCHECK_CREW * 1.2
/obj/item/clothing/head/beanie/black
name = "black beanie"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 14fc01f5144..b5149ed99ed 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -137,7 +137,7 @@
desc = "A reliable, blue tinted helmet reminding you that you still owe that engineer a beer."
icon_state = "blueshift"
inhand_icon_state = "blueshift"
- custom_premium_price = PAYCHECK_HARD
+ custom_premium_price = PAYCHECK_COMMAND
/obj/item/clothing/head/helmet/riot
name = "riot helmet"
@@ -234,7 +234,7 @@
desc = "A british looking helmet."
icon_state = "constable"
inhand_icon_state = "constable"
- custom_price = PAYCHECK_HARD * 1.5
+ custom_price = PAYCHECK_COMMAND * 1.5
worn_y_offset = 4
/obj/item/clothing/head/helmet/swat/nanotrasen
diff --git a/code/modules/clothing/head/wig.dm b/code/modules/clothing/head/wig.dm
index 02cba05db56..dfa2a4a899b 100644
--- a/code/modules/clothing/head/wig.dm
+++ b/code/modules/clothing/head/wig.dm
@@ -95,7 +95,7 @@
desc = "A bunch of hair without a head attached. This one changes color to match the hair of the wearer. Nothing natural about that."
color = "#FFFFFF"
adjustablecolor = FALSE
- custom_price = PAYCHECK_HARD
+ custom_price = PAYCHECK_COMMAND
/obj/item/clothing/head/wig/natural/Initialize(mapload)
hairstyle = pick(GLOB.hairstyles_list - "Bald")
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
index 12f35516532..8d1bd44c900 100644
--- a/code/modules/clothing/masks/hailer.dm
+++ b/code/modules/clothing/masks/hailer.dm
@@ -191,7 +191,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list(
icon_state = "whistle"
inhand_icon_state = "whistle"
slot_flags = ITEM_SLOT_MASK|ITEM_SLOT_NECK
- custom_price = PAYCHECK_HARD * 1.5
+ custom_price = PAYCHECK_COMMAND * 1.5
actions_types = list(/datum/action/item_action/halt)
/obj/item/clothing/mask/whistle/ui_action_click(mob/user, action)
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 91151e23189..08cd3288c38 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -24,7 +24,7 @@
icon_state = "bluetie"
inhand_icon_state = "" //no inhands
w_class = WEIGHT_CLASS_SMALL
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/neck/tie/blue
name = "blue tie"
@@ -101,7 +101,7 @@
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
w_class = WEIGHT_CLASS_TINY
dog_fashion = /datum/dog_fashion/head
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/neck/scarf/black
name = "black scarf"
@@ -165,17 +165,17 @@
/obj/item/clothing/neck/stripedredscarf
name = "striped red scarf"
icon_state = "stripedredscarf"
- custom_price = PAYCHECK_ASSISTANT * 0.2
+ custom_price = PAYCHECK_CREW * 0.2
/obj/item/clothing/neck/stripedgreenscarf
name = "striped green scarf"
icon_state = "stripedgreenscarf"
- custom_price = PAYCHECK_ASSISTANT * 0.2
+ custom_price = PAYCHECK_CREW * 0.2
/obj/item/clothing/neck/stripedbluescarf
name = "striped blue scarf"
icon_state = "stripedbluescarf"
- custom_price = PAYCHECK_ASSISTANT * 0.2
+ custom_price = PAYCHECK_CREW * 0.2
/obj/item/clothing/neck/petcollar
name = "pet collar"
@@ -237,7 +237,7 @@
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "beads"
color = "#ffffff"
- custom_price = PAYCHECK_ASSISTANT * 0.2
+ custom_price = PAYCHECK_CREW * 0.2
custom_materials = (list(/datum/material/plastic = 500))
/obj/item/clothing/neck/beads/Initialize(mapload)
diff --git a/code/modules/clothing/shoes/cowboy.dm b/code/modules/clothing/shoes/cowboy.dm
index 4225be85dbf..951f11e2402 100644
--- a/code/modules/clothing/shoes/cowboy.dm
+++ b/code/modules/clothing/shoes/cowboy.dm
@@ -4,7 +4,7 @@
icon_state = "cowboy_brown"
permeability_coefficient = 0.05 //these are quite tall
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
var/list/occupants = list()
var/max_occupants = 4
can_be_tied = FALSE
diff --git a/code/modules/clothing/shoes/galoshes.dm b/code/modules/clothing/shoes/galoshes.dm
index 9fe6b3789b7..9f48342b3e9 100644
--- a/code/modules/clothing/shoes/galoshes.dm
+++ b/code/modules/clothing/shoes/galoshes.dm
@@ -10,7 +10,7 @@
resistance_flags = NONE
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 40, ACID = 75)
can_be_bloody = FALSE
- custom_price = PAYCHECK_EASY * 3
+ custom_price = PAYCHECK_CREW * 3
can_be_tied = FALSE
/obj/item/clothing/shoes/galoshes/dry
diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm
index 75c6bcd860c..ce3458d6932 100644
--- a/code/modules/clothing/shoes/sneakers.dm
+++ b/code/modules/clothing/shoes/sneakers.dm
@@ -9,7 +9,7 @@
/obj/item/clothing/shoes/sneakers/black
name = "black shoes"
desc = "A pair of black shoes."
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
diff --git a/code/modules/clothing/shoes/wheelys.dm b/code/modules/clothing/shoes/wheelys.dm
index b7ae3d860a6..780f70361bb 100644
--- a/code/modules/clothing/shoes/wheelys.dm
+++ b/code/modules/clothing/shoes/wheelys.dm
@@ -65,8 +65,8 @@
worn_icon_state = "rollerskates"
slowdown = SHOES_SLOWDOWN+1
wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys/rollerskates
- custom_premium_price = PAYCHECK_EASY * 5
- custom_price = PAYCHECK_EASY * 5
+ custom_premium_price = PAYCHECK_CREW * 5
+ custom_price = PAYCHECK_CREW * 5
/obj/item/clothing/shoes/wheelys/skishoes
name = "ski shoes"
@@ -77,5 +77,5 @@
worn_icon_state = "skishoes"
slowdown = SHOES_SLOWDOWN+1
wheels = /obj/vehicle/ridden/scooter/skateboard/wheelys/skishoes
- custom_premium_price = PAYCHECK_EASY * 1.6
- custom_price = PAYCHECK_EASY * 1.6
+ custom_premium_price = PAYCHECK_CREW * 1.6
+ custom_price = PAYCHECK_CREW * 1.6
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index efa6e78750e..29aa68183c5 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -66,7 +66,7 @@
desc = "A large, yet comfortable piece of armor, protecting you from some threats."
icon_state = "blueshift"
inhand_icon_state = "blueshift"
- custom_premium_price = PAYCHECK_HARD
+ custom_premium_price = PAYCHECK_COMMAND
/obj/item/clothing/suit/armor/vest/cuirass
name = "cuirass"
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index b946e27e55f..a11fd23bda9 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -59,7 +59,7 @@
icon_state = "constable"
inhand_icon_state = "constable"
can_adjust = FALSE
- custom_price = PAYCHECK_HARD
+ custom_price = PAYCHECK_COMMAND
/obj/item/clothing/under/rank/security/warden
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 9cadd5897ad..2e2261781cb 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -71,7 +71,7 @@
icon_state = "overalls"
inhand_icon_state = "lb_suit"
can_adjust = FALSE
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/under/misc/assistantformal
name = "assistant's formal uniform"
diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm
index 6a9aceb0236..4e5001eceec 100644
--- a/code/modules/clothing/under/pants.dm
+++ b/code/modules/clothing/under/pants.dm
@@ -3,7 +3,7 @@
body_parts_covered = GROIN|LEGS
female_sprite_flags = NO_FEMALE_UNIFORM
can_adjust = FALSE
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
icon = 'icons/obj/clothing/under/shorts_pants.dmi'
worn_icon = 'icons/mob/clothing/under/shorts_pants.dmi'
species_exception = list(/datum/species/golem)
@@ -17,7 +17,7 @@
name = "Must Hang jeans"
desc = "Made in the finest space jeans factory this side of Alpha Centauri."
icon_state = "jeansmustang"
- custom_price = PAYCHECK_EASY * 3
+ custom_price = PAYCHECK_CREW * 3
/obj/item/clothing/under/pants/blackjeans
name = "black jeans"
diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm
index e5b964ca2f7..825674434cc 100644
--- a/code/modules/clothing/under/skirt_dress.dm
+++ b/code/modules/clothing/under/skirt_dress.dm
@@ -55,21 +55,21 @@
desc = "A blue, casual skirt."
icon_state = "blueskirt"
inhand_icon_state = "b_suit"
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/under/dress/skirt/red
name = "red skirt"
desc = "A red, casual skirt."
icon_state = "redskirt"
inhand_icon_state = "r_suit"
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/under/dress/skirt/purple
name = "purple skirt"
desc = "A purple, casual skirt."
icon_state = "purpleskirt"
inhand_icon_state = "p_suit"
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/under/dress/skirt/plaid
name = "red plaid skirt"
@@ -78,7 +78,7 @@
inhand_icon_state = "plaid_red"
can_adjust = TRUE
alt_covers_chest = TRUE
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/clothing/under/dress/skirt/plaid/blue
name = "blue plaid skirt"
diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm
index a56e66ce149..6c4f74c513c 100644
--- a/code/modules/economy/account.dm
+++ b/code/modules/economy/account.dm
@@ -123,6 +123,8 @@
if(!account_job)
return
var/money_to_transfer = round(account_job.paycheck * payday_modifier * amt_of_paychecks)
+ if(amt_of_paychecks == 1)
+ money_to_transfer = clamp(money_to_transfer, 0, PAYCHECK_CREW) //We want to limit single, passive paychecks to regular crew income.
if(free)
adjust_money(money_to_transfer)
SSblackbox.record_feedback("amount", "free_income", money_to_transfer)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 1f107163c99..cb6f8fe87b6 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -235,7 +235,7 @@
/obj/item/reagent_containers/food/drinks/ice
name = "ice cup"
desc = "Careful, cold ice, do not chew."
- custom_price = PAYCHECK_PRISONER * 0.6
+ custom_price = PAYCHECK_LOWER * 0.6
icon_state = "coffee"
list_reagents = list(/datum/reagent/consumable/ice = 30)
spillable = TRUE
@@ -268,7 +268,7 @@
list_reagents = list(/datum/reagent/consumable/hot_coco = 15, /datum/reagent/consumable/sugar = 5)
foodtype = SUGAR
resistance_flags = FREEZE_PROOF
- custom_price = PAYCHECK_ASSISTANT * 1.2
+ custom_price = PAYCHECK_CREW * 1.2
/obj/item/reagent_containers/food/drinks/dry_ramen
@@ -278,7 +278,7 @@
list_reagents = list(/datum/reagent/consumable/dry_ramen = 15, /datum/reagent/consumable/salt = 3)
foodtype = GRAIN
isGlass = FALSE
- custom_price = PAYCHECK_ASSISTANT * 0.9
+ custom_price = PAYCHECK_CREW * 0.9
/obj/item/reagent_containers/food/drinks/waterbottle
name = "bottle of water"
@@ -298,7 +298,7 @@
var/cap_lost = FALSE
var/mutable_appearance/cap_overlay
var/flip_chance = 10
- custom_price = PAYCHECK_PRISONER * 0.8
+ custom_price = PAYCHECK_LOWER * 0.8
/obj/item/reagent_containers/food/drinks/waterbottle/Initialize(mapload)
. = ..()
@@ -584,7 +584,7 @@
/obj/item/reagent_containers/food/drinks/flask
name = "flask"
desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go."
- custom_price = PAYCHECK_HARD * 2
+ custom_price = PAYCHECK_COMMAND * 2
icon_state = "flask"
custom_materials = list(/datum/material/iron=250)
volume = 60
@@ -623,7 +623,7 @@
reagent_flags = NONE
spillable = FALSE
isGlass = FALSE
- custom_price = PAYCHECK_ASSISTANT * 0.9
+ custom_price = PAYCHECK_CREW * 0.9
obj_flags = CAN_BE_HIT
throwforce = 12 // set to 0 upon being opened. Have you ever been domed by a soda can? Those things fucking hurt
/// If the can hasn't been opened yet, this is the measure of how fizzed up it is from being shaken or thrown around. When opened, this is rolled as a percentage chance to burst
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index edf70da9687..0ab101c3499 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -10,7 +10,7 @@
icon_state = "glassbottle"
worn_icon_state = "bottle"
fill_icon_thresholds = list(0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
- custom_price = PAYCHECK_EASY * 1.1
+ custom_price = PAYCHECK_CREW * 1.1
amount_per_transfer_from_this = 10
volume = 100
force = 15 //Smashing bottles over someone's head hurts.
@@ -29,7 +29,7 @@
desc = "This blank bottle is unyieldingly anonymous, offering no clues to its contents."
icon_state = "glassbottlesmall"
volume = 50
- custom_price = PAYCHECK_EASY * 0.9
+ custom_price = PAYCHECK_CREW * 0.9
/obj/item/reagent_containers/food/drinks/bottle/smash(mob/living/target, mob/thrower, ranged = FALSE)
if(bartender_check(target) && ranged)
@@ -163,7 +163,7 @@
volume = 30
list_reagents = list(/datum/reagent/consumable/ethanol/beer = 30)
foodtype = GRAIN | ALCOHOL
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/reagent_containers/food/drinks/bottle/beer/almost_empty
list_reagents = list(/datum/reagent/consumable/ethanol/beer = 1)
@@ -179,8 +179,8 @@
volume = 30
list_reagents = list(/datum/reagent/consumable/rootbeer = 30)
foodtype = SUGAR | JUNKFOOD
- custom_price = PAYCHECK_HARD * 1.5
- custom_premium_price = PAYCHECK_HARD * 2
+ custom_price = PAYCHECK_CREW * 1.5
+ custom_premium_price = PAYCHECK_CREW * 2
/obj/item/reagent_containers/food/drinks/bottle/ale
name = "Magm-Ale"
@@ -189,7 +189,7 @@
volume = 30
list_reagents = list(/datum/reagent/consumable/ethanol/ale = 30)
foodtype = GRAIN | ALCOHOL
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/reagent_containers/food/drinks/bottle/gin
name = "Griffeater gin"
@@ -256,7 +256,7 @@
desc = "A 40 full of malt liquor. Kicks stronger than, well, a rabid bear."
icon_state = "maltliquorbottle"
list_reagents = list(/datum/reagent/consumable/ethanol/beer/maltliquor = 100)
- custom_price = PAYCHECK_EASY
+ custom_price = PAYCHECK_CREW
/obj/item/reagent_containers/food/drinks/bottle/holywater
name = "flask of holy water"
@@ -448,7 +448,7 @@
/obj/item/reagent_containers/food/drinks/bottle/orangejuice
name = "orange juice"
desc = "Full of vitamins and deliciousness!"
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "orangejuice"
inhand_icon_state = "carton"
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
@@ -461,7 +461,7 @@
/obj/item/reagent_containers/food/drinks/bottle/cream
name = "milk cream"
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "cream"
inhand_icon_state = "carton"
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
@@ -474,7 +474,7 @@
/obj/item/reagent_containers/food/drinks/bottle/tomatojuice
name = "tomato juice"
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "tomatojuice"
inhand_icon_state = "carton"
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
@@ -487,7 +487,7 @@
/obj/item/reagent_containers/food/drinks/bottle/limejuice
name = "lime juice"
desc = "Sweet-sour goodness."
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "limejuice"
inhand_icon_state = "carton"
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
@@ -500,7 +500,7 @@
/obj/item/reagent_containers/food/drinks/bottle/pineapplejuice
name = "pineapple juice"
desc = "Extremely tart, yellow juice."
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "pineapplejuice"
inhand_icon_state = "carton"
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
@@ -513,7 +513,7 @@
/obj/item/reagent_containers/food/drinks/bottle/menthol
name = "menthol"
desc = "Tastes naturally minty, and imparts a very mild numbing sensation."
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "mentholbox"
inhand_icon_state = "carton"
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
@@ -524,7 +524,7 @@
/obj/item/reagent_containers/food/drinks/bottle/grenadine
name = "Jester Grenadine"
desc = "Contains 0% real cherries!"
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "grenadine"
isGlass = TRUE
list_reagents = list(/datum/reagent/consumable/grenadine = 100)
@@ -534,7 +534,7 @@
/obj/item/reagent_containers/food/drinks/bottle/applejack
name = "Buckin' Bronco's Applejack"
desc = "Kicks like a horse, tastes like an apple!"
- custom_price = PAYCHECK_ASSISTANT
+ custom_price = PAYCHECK_CREW
icon_state = "applejack_bottle"
isGlass = TRUE
list_reagents = list(/datum/reagent/consumable/ethanol/applejack = 100)
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
index 6df985fcd9a..39085d6e1d9 100644
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -14,7 +14,7 @@
obj_flags = UNIQUE_RENAME
drop_sound = 'sound/items/handling/drinkglass_drop.ogg'
pickup_sound = 'sound/items/handling/drinkglass_pickup.ogg'
- custom_price = PAYCHECK_PRISONER
+ custom_price = PAYCHECK_LOWER
/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(datum/reagents/holder, ...)
. = ..()
@@ -71,7 +71,7 @@
fill_icon_state = "shot_glass"
volume = 15
custom_materials = list(/datum/material/glass=100)
- custom_price = PAYCHECK_ASSISTANT * 0.4
+ custom_price = PAYCHECK_CREW * 0.4
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_name(updates)
if(renamedByPlayer)
diff --git a/code/modules/hydroponics/grown/random.dm b/code/modules/hydroponics/grown/random.dm
index df83b492d40..560e3c71e5c 100644
--- a/code/modules/hydroponics/grown/random.dm
+++ b/code/modules/hydroponics/grown/random.dm
@@ -11,7 +11,7 @@
icon_dead = "xpod-dead"
icon_harvest = "xpod-harvest"
growthstages = 4
- custom_premium_price = PAYCHECK_EASY * 2
+ custom_premium_price = PAYCHECK_CREW * 2
/obj/item/seeds/random/Initialize(mapload)
. = ..()
diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm
index f0ba386a94a..3ac8c64292e 100644
--- a/code/modules/instruments/items.dm
+++ b/code/modules/instruments/items.dm
@@ -269,5 +269,5 @@
w_class = WEIGHT_CLASS_TINY
force = 0
hitsound = 'sound/voice/moth/scream_moth.ogg'
- custom_price = PAYCHECK_HARD * 2.37
- custom_premium_price = PAYCHECK_HARD * 2.37
+ custom_price = PAYCHECK_COMMAND * 2.37
+ custom_premium_price = PAYCHECK_COMMAND * 2.37
diff --git a/code/modules/instruments/piano_synth.dm b/code/modules/instruments/piano_synth.dm
index bf5190675c6..05436a68543 100644
--- a/code/modules/instruments/piano_synth.dm
+++ b/code/modules/instruments/piano_synth.dm
@@ -24,7 +24,7 @@
slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD
force = 0
w_class = WEIGHT_CLASS_SMALL
- custom_price = PAYCHECK_ASSISTANT * 2.5
+ custom_price = PAYCHECK_CREW * 2.5
instrument_range = 1
circuit_type = /obj/item/circuit_component/synth/headphones
shell_capacity = SHELL_CAPACITY_TINY
@@ -59,7 +59,7 @@
slot_flags = ITEM_SLOT_EARS
strip_delay = 100 //air pods don't fall out
instrument_range = 0 //you're paying for quality here
- custom_premium_price = PAYCHECK_ASSISTANT * 36 //Save up 5 shifts worth of pay just to lose it down a drainpipe on the sidewalk
+ custom_premium_price = PAYCHECK_CREW * 36 //Save up 5 shifts worth of pay just to lose it down a drainpipe on the sidewalk
/obj/item/circuit_component/synth
display_name = "Synthesizer"
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index a4179618916..85d3fa1a501 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -61,16 +61,20 @@
/// Experience type granted by playing in this job.
var/exp_granted_type = ""
- var/paycheck = PAYCHECK_MINIMAL
+ ///How much money does this crew member make in a single paycheck? Note that passive paychecks are capped to PAYCHECK_CREW in regular gameplay after roundstart.
+ var/paycheck = PAYCHECK_CREW
+ ///Which department does this paycheck pay from?
var/paycheck_department = ACCOUNT_CIV
- var/list/mind_traits // Traits added to the mind of the mob assigned this job
+ /// Traits added to the mind of the mob assigned this job
+ var/list/mind_traits
///Lazylist of traits added to the liver of the mob assigned this job (used for the classic "cops heal from donuts" reaction, among others)
var/list/liver_traits = null
var/display_order = JOB_DISPLAY_ORDER_DEFAULT
+ ///What types of bounty tasks can this job recieve past the default?
var/bounty_types = CIV_JOB_BASIC
/// Goodies that can be received via the mail system.
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index e96fb069a54..ba1f65445dc 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -14,7 +14,7 @@ Assistant
exp_granted_type = EXP_TYPE_CREW
outfit = /datum/outfit/job/assistant
plasmaman_outfit = /datum/outfit/plasmaman
- paycheck = PAYCHECK_ASSISTANT // Get a job. Job reassignment changes your paycheck now. Get over it.
+ paycheck = PAYCHECK_LOWER // Get a job. Job reassignment changes your paycheck now. Get over it.
paycheck_department = ACCOUNT_CIV
display_order = JOB_DISPLAY_ORDER_ASSISTANT
diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm
index c0a871b6dd1..4be60ee4c57 100644
--- a/code/modules/jobs/job_types/atmospheric_technician.dm
+++ b/code/modules/jobs/job_types/atmospheric_technician.dm
@@ -14,7 +14,7 @@
outfit = /datum/outfit/job/atmos
plasmaman_outfit = /datum/outfit/plasmaman/atmospherics
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_ENG
liver_traits = list(TRAIT_ENGINEER_METABOLISM)
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
index d546411c0f4..64757d5fd47 100644
--- a/code/modules/jobs/job_types/bartender.dm
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -12,7 +12,7 @@
outfit = /datum/outfit/job/bartender
plasmaman_outfit = /datum/outfit/plasmaman/bar
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_BARTENDER
bounty_types = CIV_JOB_DRINK
diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm
index 451db5322a6..92a9aea6db2 100644
--- a/code/modules/jobs/job_types/botanist.dm
+++ b/code/modules/jobs/job_types/botanist.dm
@@ -12,7 +12,7 @@
outfit = /datum/outfit/job/botanist
plasmaman_outfit = /datum/outfit/plasmaman/botany
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_BOTANIST
bounty_types = CIV_JOB_GROW
diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm
index 36d0ea45147..2064af32f37 100644
--- a/code/modules/jobs/job_types/cargo_technician.dm
+++ b/code/modules/jobs/job_types/cargo_technician.dm
@@ -14,7 +14,7 @@
outfit = /datum/outfit/job/cargo_tech
plasmaman_outfit = /datum/outfit/plasmaman/cargo
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_CAR
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
bounty_types = CIV_JOB_RANDOM
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index 81ad1ecc481..286311b99b8 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -13,7 +13,7 @@
outfit = /datum/outfit/job/chaplain
plasmaman_outfit = /datum/outfit/plasmaman/chaplain
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_CHAPLAIN
diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm
index 859e1394e12..cd7f8696f54 100644
--- a/code/modules/jobs/job_types/chemist.dm
+++ b/code/modules/jobs/job_types/chemist.dm
@@ -15,7 +15,7 @@
outfit = /datum/outfit/job/chemist
plasmaman_outfit = /datum/outfit/plasmaman/chemist
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm
index 647968defe8..50dea0c6593 100644
--- a/code/modules/jobs/job_types/clown.dm
+++ b/code/modules/jobs/job_types/clown.dm
@@ -12,7 +12,7 @@
outfit = /datum/outfit/job/clown
plasmaman_outfit = /datum/outfit/plasmaman/clown
- paycheck = PAYCHECK_MINIMAL
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
liver_traits = list(TRAIT_COMEDY_METABOLISM)
diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm
index b6d78e54d03..1884fa52d96 100644
--- a/code/modules/jobs/job_types/cook.dm
+++ b/code/modules/jobs/job_types/cook.dm
@@ -15,7 +15,7 @@
outfit = /datum/outfit/job/cook
plasmaman_outfit = /datum/outfit/plasmaman/chef
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
liver_traits = list(TRAIT_CULINARY_METABOLISM)
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index 1d48388c5bd..c0a2dda2a54 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -13,7 +13,7 @@
outfit = /datum/outfit/job/curator
plasmaman_outfit = /datum/outfit/plasmaman/curator
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_CURATOR
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index 05b242abc31..785eb9e49e2 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -20,7 +20,7 @@
/datum/job_department/security,
)
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SEC
mind_traits = list(TRAIT_DONUT_LOVER)
diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm
index 4ceb55e97ec..017d71e43cb 100644
--- a/code/modules/jobs/job_types/geneticist.dm
+++ b/code/modules/jobs/job_types/geneticist.dm
@@ -17,7 +17,7 @@
/datum/job_department/science,
)
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SCI
display_order = JOB_DISPLAY_ORDER_GENETICIST
diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm
index 7ef32aacbd4..803620a456f 100644
--- a/code/modules/jobs/job_types/janitor.dm
+++ b/code/modules/jobs/job_types/janitor.dm
@@ -12,7 +12,7 @@
outfit = /datum/outfit/job/janitor
plasmaman_outfit = /datum/outfit/plasmaman/janitor
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_JANITOR
diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm
index 11d7d8e6be8..5f0094604e7 100644
--- a/code/modules/jobs/job_types/lawyer.dm
+++ b/code/modules/jobs/job_types/lawyer.dm
@@ -13,7 +13,7 @@
outfit = /datum/outfit/job/lawyer
plasmaman_outfit = /datum/outfit/plasmaman/bar
- paycheck = PAYCHECK_EASY
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
mind_traits = list(TRAIT_DONUT_LOVER)
diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm
index d1cb6fd6890..77329ff10ee 100644
--- a/code/modules/jobs/job_types/medical_doctor.dm
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -13,7 +13,7 @@
outfit = /datum/outfit/job/doctor
plasmaman_outfit = /datum/outfit/plasmaman/medical
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
index d821b617649..19c0f066e9e 100644
--- a/code/modules/jobs/job_types/mime.dm
+++ b/code/modules/jobs/job_types/mime.dm
@@ -12,7 +12,7 @@
outfit = /datum/outfit/job/mime
plasmaman_outfit = /datum/outfit/plasmaman/mime
- paycheck = PAYCHECK_MINIMAL
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_MIME
diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm
index d04fa51c242..ccf2f9f23e9 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -13,7 +13,7 @@
outfit = /datum/outfit/job/paramedic
plasmaman_outfit = /datum/outfit/plasmaman/paramedic
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm
index 96e6d468b17..90f7d939f3c 100644
--- a/code/modules/jobs/job_types/prisoner.dm
+++ b/code/modules/jobs/job_types/prisoner.dm
@@ -8,7 +8,7 @@
supervisors = "the security team"
selection_color = "#ffe1c3"
exp_granted_type = EXP_TYPE_CREW
- paycheck = PAYCHECK_PRISONER
+ paycheck = PAYCHECK_LOWER
outfit = /datum/outfit/job/prisoner
plasmaman_outfit = /datum/outfit/plasmaman/prisoner
diff --git a/code/modules/jobs/job_types/psychologist.dm b/code/modules/jobs/job_types/psychologist.dm
index ef5f80f5828..93699a9ab79 100644
--- a/code/modules/jobs/job_types/psychologist.dm
+++ b/code/modules/jobs/job_types/psychologist.dm
@@ -13,7 +13,7 @@
outfit = /datum/outfit/job/psychologist
plasmaman_outfit = /datum/outfit/plasmaman/psychologist
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm
index 8c5ec64c47b..6607aa9e985 100644
--- a/code/modules/jobs/job_types/quartermaster.dm
+++ b/code/modules/jobs/job_types/quartermaster.dm
@@ -14,7 +14,7 @@
outfit = /datum/outfit/job/quartermaster
plasmaman_outfit = /datum/outfit/plasmaman/cargo
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_CAR
liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM)
diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm
index cef5b38910a..c6e17839d16 100644
--- a/code/modules/jobs/job_types/roboticist.dm
+++ b/code/modules/jobs/job_types/roboticist.dm
@@ -18,7 +18,7 @@
/datum/job_department/science,
)
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SCI
display_order = JOB_DISPLAY_ORDER_ROBOTICIST
diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm
index 11a31fcfab2..ce2846e831c 100644
--- a/code/modules/jobs/job_types/scientist.dm
+++ b/code/modules/jobs/job_types/scientist.dm
@@ -14,7 +14,7 @@
outfit = /datum/outfit/job/scientist
plasmaman_outfit = /datum/outfit/plasmaman/science
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SCI
display_order = JOB_DISPLAY_ORDER_SCIENTIST
diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm
index 51b1f98dbd7..2202e2b4f7b 100644
--- a/code/modules/jobs/job_types/security_officer.dm
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -17,7 +17,7 @@
outfit = /datum/outfit/job/security
plasmaman_outfit = /datum/outfit/plasmaman/security
- paycheck = PAYCHECK_HARD
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SEC
mind_traits = list(TRAIT_DONUT_LOVER)
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index a319be558de..717195d1f98 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -13,7 +13,7 @@
outfit = /datum/outfit/job/miner
plasmaman_outfit = /datum/outfit/plasmaman/mining
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_CAR
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm
index 43f3670687d..05efd5cc62b 100644
--- a/code/modules/jobs/job_types/station_engineer.dm
+++ b/code/modules/jobs/job_types/station_engineer.dm
@@ -15,7 +15,7 @@
outfit = /datum/outfit/job/engineer
plasmaman_outfit = /datum/outfit/plasmaman/engineering
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_ENG
liver_traits = list(TRAIT_ENGINEER_METABOLISM)
diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm
index 04d2776cca2..db807809762 100644
--- a/code/modules/jobs/job_types/virologist.dm
+++ b/code/modules/jobs/job_types/virologist.dm
@@ -15,7 +15,7 @@
outfit = /datum/outfit/job/virologist
plasmaman_outfit = /datum/outfit/plasmaman/viro
- paycheck = PAYCHECK_MEDIUM
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_MED
liver_traits = list(TRAIT_MEDICAL_METABOLISM)
diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm
index b4cae22ba6e..6906fb39681 100644
--- a/code/modules/jobs/job_types/warden.dm
+++ b/code/modules/jobs/job_types/warden.dm
@@ -18,7 +18,7 @@
outfit = /datum/outfit/job/warden
plasmaman_outfit = /datum/outfit/plasmaman/warden
- paycheck = PAYCHECK_HARD
+ paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SEC
mind_traits = list(TRAIT_DONUT_LOVER)
diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm
index cf2fbaef203..1345c124709 100644
--- a/code/modules/library/skill_learning/skillchip.dm
+++ b/code/modules/library/skill_learning/skillchip.dm
@@ -11,7 +11,7 @@
icon = 'icons/obj/card.dmi'
icon_state = "data_3"
- custom_price = PAYCHECK_MEDIUM * 3
+ custom_price = PAYCHECK_CREW * 3
w_class = WEIGHT_CLASS_SMALL
/// Traits automatically granted by this chip, optional. Lazylist.
diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm
index 2431b41f876..3b4df1446f5 100644
--- a/code/modules/modular_computers/hardware/hard_drive.dm
+++ b/code/modules/modular_computers/hardware/hard_drive.dm
@@ -168,7 +168,7 @@
max_capacity = 64
icon_state = "ssd_mini"
w_class = WEIGHT_CLASS_TINY
- custom_price = PAYCHECK_MEDIUM * 2
+ custom_price = PAYCHECK_CREW * 2
/obj/item/computer_hardware/hard_drive/small/install_default_programs()
. = ..()
diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm
index d2cbde580d8..ede9e5a9b42 100644
--- a/code/modules/photography/camera/camera.dm
+++ b/code/modules/photography/camera/camera.dm
@@ -19,7 +19,7 @@
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_NECK
custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 150)
- custom_price = PAYCHECK_EASY * 2
+ custom_price = PAYCHECK_CREW * 2
var/flash_enabled = TRUE
var/state_on = "camera"
var/state_off = "camera_off"
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 3ae225e4b46..8cca10f28b9 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -403,7 +403,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri
/obj/item/stack/cable_coil
name = "cable coil"
- custom_price = PAYCHECK_PRISONER * 0.8
+ custom_price = PAYCHECK_LOWER * 0.8
gender = NEUTER //That's a cable coil sounds better than that's some cable coils
icon = 'icons/obj/power.dmi'
icon_state = "coil"
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index abc797d7c58..9013ce64fce 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -346,7 +346,7 @@
connector_type = null
custom_materials = null
grown_battery = TRUE //it has the overlays for wires
- custom_premium_price = PAYCHECK_ASSISTANT
+ custom_premium_price = PAYCHECK_CREW
/obj/item/stock_parts/cell/emproof
name = "\improper EMP-proof cell"
diff --git a/code/modules/power/lighting/light_items.dm b/code/modules/power/lighting/light_items.dm
index c9a39ba40fc..efa69fe9c9b 100644
--- a/code/modules/power/lighting/light_items.dm
+++ b/code/modules/power/lighting/light_items.dm
@@ -36,7 +36,7 @@
base_state = "ltube"
inhand_icon_state = "c_tube"
brightness = 8
- custom_price = PAYCHECK_EASY * 0.5
+ custom_price = PAYCHECK_CREW * 0.5
/obj/item/light/tube/broken
status = LIGHT_BROKEN
@@ -50,7 +50,7 @@
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
brightness = 4
- custom_price = PAYCHECK_EASY * 0.4
+ custom_price = PAYCHECK_CREW * 0.4
/obj/item/light/bulb/broken
status = LIGHT_BROKEN
diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm
index 0d78d59e03f..573e3025c9e 100644
--- a/code/modules/power/pipecleaners.dm
+++ b/code/modules/power/pipecleaners.dm
@@ -174,7 +174,7 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/item/stack/pipe_cleaner_coil
name = "pipe cleaner coil"
desc = "A coil of pipe cleaners. Good for arts and crafts, not to build with."
- custom_price = PAYCHECK_ASSISTANT * 0.5
+ custom_price = PAYCHECK_CREW * 0.5
gender = NEUTER //That's a pipe_cleaner coil sounds better than that's some pipe_cleaner coils
icon = 'icons/obj/power.dmi'
icon_state = "pipecleaner"
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 60b73ac09bc..659a3d0aaab 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -8,7 +8,7 @@
possible_transfer_amounts = list(1, 2, 3, 4, 5)
volume = 5
reagent_flags = TRANSPARENT
- custom_price = PAYCHECK_MEDIUM
+ custom_price = PAYCHECK_CREW
/obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index b783a54d2b2..b218b108400 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -114,8 +114,8 @@
reagent_flags = DRAWABLE
flags_1 = null
list_reagents = list(/datum/reagent/medicine/epinephrine = 10, /datum/reagent/toxin/formaldehyde = 3, /datum/reagent/medicine/coagulant = 2)
- custom_price = PAYCHECK_MEDIUM
- custom_premium_price = PAYCHECK_HARD
+ custom_price = PAYCHECK_CREW
+ custom_premium_price = PAYCHECK_COMMAND
/obj/item/reagent_containers/hypospray/medipen/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins to choke on \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
diff --git a/code/modules/reagents/reagent_containers/medigel.dm b/code/modules/reagents/reagent_containers/medigel.dm
index d6709347daf..63068423211 100644
--- a/code/modules/reagents/reagent_containers/medigel.dm
+++ b/code/modules/reagents/reagent_containers/medigel.dm
@@ -23,7 +23,7 @@
var/apply_method = "spray" //the thick gel is sprayed and then dries into patch like film.
var/self_delay = 30
var/squirt_mode = 0
- custom_price = PAYCHECK_MEDIUM * 2
+ custom_price = PAYCHECK_CREW * 2
unique_reskin = list(
"Blue" = "medigel_blue",
"Cyan" = "medigel_cyan",
@@ -98,7 +98,7 @@
icon_state = "synthgel"
current_skin = "synthgel"
list_reagents = list(/datum/reagent/medicine/c2/synthflesh = 60)
- custom_price = PAYCHECK_MEDIUM * 5
+ custom_price = PAYCHECK_CREW * 5
/obj/item/reagent_containers/medigel/sterilizine
name = "sterilizer gel"
@@ -106,4 +106,4 @@
icon_state = "medigel_blue"
current_skin = "medigel_blue"
list_reagents = list(/datum/reagent/space_cleaner/sterilizine = 60)
- custom_price = PAYCHECK_MEDIUM * 2
+ custom_price = PAYCHECK_CREW * 2
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 95591ea39de..20be73c8faa 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -378,7 +378,7 @@
spray_range = 4
stream_range = 2
volume = 100
- custom_premium_price = PAYCHECK_HARD * 2
+ custom_premium_price = PAYCHECK_COMMAND * 2
/obj/item/reagent_containers/spray/syndicate/Initialize(mapload)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 32f01f54a73..f2c19f3e029 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -12,7 +12,7 @@
volume = 15
custom_materials = list(/datum/material/iron=10, /datum/material/glass=20)
reagent_flags = TRANSPARENT
- custom_price = PAYCHECK_EASY * 0.5
+ custom_price = PAYCHECK_CREW * 0.5
sharpness = SHARP_POINTY
/// Flags used by the injection
var/inject_flags = NONE
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 0300c1448f1..39a3de7d311 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -1,3 +1,4 @@
+
/obj/machinery/rnd/production
name = "technology fabricator"
desc = "Makes researched and prototype items with materials and energy."
@@ -28,6 +29,7 @@
cached_designs = list()
update_designs()
materials = AddComponent(/datum/component/remote_materials, "lathe", mapload, mat_container_flags=BREAKDOWN_FLAGS_LATHE)
+ AddComponent(/datum/component/payment, 0, SSeconomy.get_dep_account(payment_department), PAYMENT_CLINICAL, TRUE)
RefreshParts()
update_icon(UPDATE_OVERLAYS)
@@ -131,13 +133,13 @@
/obj/machinery/rnd/production/proc/efficient_with(path)
return !ispath(path, /obj/item/stack/sheet) && !ispath(path, /obj/item/stack/ore/bluespace_crystal)
-/obj/machinery/rnd/production/proc/user_try_print_id(id, amount)
+/obj/machinery/rnd/production/proc/user_try_print_id(id, print_quantity)
if(!id)
return FALSE
- if(istext(amount))
- amount = text2num(amount)
- if(isnull(amount))
- amount = 1
+ if(istext(print_quantity))
+ print_quantity = text2num(print_quantity)
+ if(isnull(print_quantity))
+ print_quantity = 1
var/datum/design/D = stored_research.researched_designs[id] ? SSresearch.techweb_design_by_id(id) : null
if(!istype(D))
return FALSE
@@ -154,32 +156,51 @@
say("Mineral access is on hold, please contact the quartermaster.")
return FALSE
var/power = active_power_usage
- amount = clamp(amount, 1, 50)
+ print_quantity = clamp(print_quantity, 1, 50)
for(var/M in D.materials)
- power += round(D.materials[M] * amount / 35)
+ power += round(D.materials[M] * print_quantity / 35)
power = min(active_power_usage, power)
use_power(power)
var/coeff = efficient_with(D.build_path) ? efficiency_coeff : 1
var/list/efficient_mats = list()
for(var/MAT in D.materials)
efficient_mats[MAT] = D.materials[MAT]/coeff
- if(!materials.mat_container.has_materials(efficient_mats, amount))
- say("Not enough materials to complete prototype[amount > 1? "s" : ""].")
+ if(!materials.mat_container.has_materials(efficient_mats, print_quantity))
+ say("Not enough materials to complete prototype[print_quantity > 1? "s" : ""].")
return FALSE
for(var/R in D.reagents_list)
- if(!reagents.has_reagent(R, D.reagents_list[R]*amount/coeff))
- say("Not enough reagents to complete prototype[amount > 1? "s" : ""].")
+ if(!reagents.has_reagent(R, D.reagents_list[R]*print_quantity/coeff))
+ say("Not enough reagents to complete prototype[print_quantity > 1? "s" : ""].")
return FALSE
- materials.mat_container.use_materials(efficient_mats, amount)
- materials.silo_log(src, "built", -amount, "[D.name]", efficient_mats)
+ var/total_cost = LATHE_TAX
+ if(is_station_level(z) && isliving(usr)) //We don't block purchases off station Z.
+ var/mob/living/user = usr
+ var/obj/item/card/id/card = user.get_idcard(TRUE)
+ if(!card && istype(user.pulling, /obj/item/card/id))
+ card = user.pulling
+ if(card)
+ var/datum/bank_account/our_acc = card.registered_account
+ if(our_acc.account_job && SSeconomy.get_dep_account(our_acc.account_job?.paycheck_department) == SSeconomy.get_dep_account(payment_department))
+ total_cost = 0 //We are not charging crew for printing their own supplies and equipment.
+ if(attempt_charge(src, usr, total_cost) & COMPONENT_OBJ_CANCEL_CHARGE)
+ return FALSE
+
+ if(iscyborg(usr))
+ var/mob/living/silicon/robot/borg = usr
+ if(!borg.cell)
+ return
+ borg.cell.use(SILICON_LATHE_TAX)
+
+ materials.mat_container.use_materials(efficient_mats, print_quantity)
+ materials.silo_log(src, "built", -print_quantity, "[D.name]", efficient_mats)
for(var/R in D.reagents_list)
- reagents.remove_reagent(R, D.reagents_list[R]*amount/coeff)
+ reagents.remove_reagent(R, D.reagents_list[R]*print_quantity/coeff)
busy = TRUE
if(production_animation)
flick(production_animation, src)
var/timecoeff = D.lathe_time_factor / efficiency_coeff
- addtimer(CALLBACK(src, .proc/reset_busy), (30 * timecoeff * amount) ** 0.5)
- addtimer(CALLBACK(src, .proc/do_print, D.build_path, amount, efficient_mats, D.dangerous_construction), (32 * timecoeff * amount) ** 0.8)
+ addtimer(CALLBACK(src, .proc/reset_busy), (30 * timecoeff * print_quantity) ** 0.5)
+ addtimer(CALLBACK(src, .proc/do_print, D.build_path, print_quantity, efficient_mats, D.dangerous_construction), (32 * timecoeff * print_quantity) ** 0.8)
return TRUE
/obj/machinery/rnd/production/proc/search(string)
diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm
index 69c04d16a01..0f50fc71b2e 100644
--- a/code/modules/research/machinery/departmental_circuit_imprinter.dm
+++ b/code/modules/research/machinery/departmental_circuit_imprinter.dm
@@ -9,3 +9,4 @@
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department/science
allowed_department_flags = DEPARTMENTAL_FLAG_SCIENCE
department_tag = "Science"
+ payment_department = ACCOUNT_SCI
diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm
index ae678efaae9..aecc2622b7e 100644
--- a/code/modules/research/machinery/departmental_protolathe.dm
+++ b/code/modules/research/machinery/departmental_protolathe.dm
@@ -10,6 +10,7 @@
department_tag = "Engineering"
circuit = /obj/item/circuitboard/machine/protolathe/department/engineering
stripe_color = "#EFB341"
+ payment_department = ACCOUNT_ENG
/obj/machinery/rnd/production/protolathe/department/service
name = "department protolathe (Service)"
@@ -17,6 +18,7 @@
department_tag = "Service"
circuit = /obj/item/circuitboard/machine/protolathe/department/service
stripe_color = "#83ca41"
+ payment_department = ACCOUNT_SRV
/obj/machinery/rnd/production/protolathe/department/medical
name = "department protolathe (Medical)"
@@ -24,6 +26,7 @@
department_tag = "Medical"
circuit = /obj/item/circuitboard/machine/protolathe/department/medical
stripe_color = "#52B4E9"
+ payment_department = ACCOUNT_MED
/obj/machinery/rnd/production/protolathe/department/cargo
name = "department protolathe (Cargo)"
@@ -31,6 +34,7 @@
department_tag = "Cargo"
circuit = /obj/item/circuitboard/machine/protolathe/department/cargo
stripe_color = "#956929"
+ payment_department = ACCOUNT_CAR
/obj/machinery/rnd/production/protolathe/department/science
name = "department protolathe (Science)"
@@ -38,6 +42,7 @@
department_tag = "Science"
circuit = /obj/item/circuitboard/machine/protolathe/department/science
stripe_color = "#D381C9"
+ payment_department = ACCOUNT_SCI
/obj/machinery/rnd/production/protolathe/department/security
name = "department protolathe (Security)"
@@ -45,3 +50,4 @@
department_tag = "Security"
circuit = /obj/item/circuitboard/machine/protolathe/department/security
stripe_color = "#DE3A3A"
+ payment_department = ACCOUNT_SEC
diff --git a/code/modules/research/machinery/departmental_techfab.dm b/code/modules/research/machinery/departmental_techfab.dm
index 5c252a2dfcb..fc616372e2a 100644
--- a/code/modules/research/machinery/departmental_techfab.dm
+++ b/code/modules/research/machinery/departmental_techfab.dm
@@ -10,6 +10,7 @@
department_tag = "Engineering"
circuit = /obj/item/circuitboard/machine/techfab/department/engineering
stripe_color = "#EFB341"
+ payment_department = ACCOUNT_ENG
/obj/machinery/rnd/production/techfab/department/service
name = "department techfab (Service)"
@@ -17,6 +18,7 @@
department_tag = "Service"
circuit = /obj/item/circuitboard/machine/techfab/department/service
stripe_color = "#83ca41"
+ payment_department = ACCOUNT_SRV
/obj/machinery/rnd/production/techfab/department/medical
name = "department techfab (Medical)"
@@ -24,6 +26,7 @@
department_tag = "Medical"
circuit = /obj/item/circuitboard/machine/techfab/department/medical
stripe_color = "#52B4E9"
+ payment_department = ACCOUNT_MED
/obj/machinery/rnd/production/techfab/department/cargo
name = "department techfab (Cargo)"
@@ -31,6 +34,7 @@
department_tag = "Cargo"
circuit = /obj/item/circuitboard/machine/techfab/department/cargo
stripe_color = "#956929"
+ payment_department = ACCOUNT_CAR
/obj/machinery/rnd/production/techfab/department/science
name = "department techfab (Science)"
@@ -38,6 +42,7 @@
department_tag = "Science"
circuit = /obj/item/circuitboard/machine/techfab/department/science
stripe_color = "#D381C9"
+ payment_department = ACCOUNT_SCI
/obj/machinery/rnd/production/techfab/department/security
name = "department techfab (Security)"
@@ -45,3 +50,4 @@
department_tag = "Security"
circuit = /obj/item/circuitboard/machine/techfab/department/security
stripe_color = "#DE3A3A"
+ payment_department = ACCOUNT_SEC
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index 6831eadda5c..5c0d1aae353 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -360,7 +360,7 @@
attack_verb_continuous = list("shears", "snips")
attack_verb_simple = list("shear", "snip")
sharpness = SHARP_EDGED
- custom_premium_price = PAYCHECK_MEDIUM * 14
+ custom_premium_price = PAYCHECK_CREW * 14
/obj/item/shears/attack(mob/living/amputee, mob/living/user)
if(!iscarbon(amputee) || user.combat_mode)
diff --git a/code/modules/uplink/uplink_items/badass.dm b/code/modules/uplink/uplink_items/badass.dm
index a4d2717191b..1b02566f9d3 100644
--- a/code/modules/uplink/uplink_items/badass.dm
+++ b/code/modules/uplink/uplink_items/badass.dm
@@ -40,7 +40,7 @@
and services at lucrative prices. The briefcase also feels a little heavier to hold; it has been \
manufactured to pack a little bit more of a punch if your client needs some convincing."
item = /obj/item/storage/secure/briefcase/syndie
- cost = 1
+ cost = 5
progression_minimum = 5 MINUTES
restricted = TRUE
illegal_tech = FALSE
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 9f248f6c18f..aa563b6c729 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -774,7 +774,7 @@ GLOBAL_LIST_EMPTY(vending_products)
. = list()
.["onstation"] = onstation
.["department"] = payment_department
- .["jobDiscount"] = VENDING_DISCOUNT
+ .["jobDiscount"] = DEPARTMENT_DISCOUNT
.["product_records"] = list()
for (var/datum/data/vending_product/R in product_records)
var/list/data = list(
@@ -948,7 +948,7 @@ GLOBAL_LIST_EMPTY(vending_products)
return
var/datum/bank_account/account = C.registered_account
if(account.account_job && account.account_job.paycheck_department == payment_department)
- price_to_use = max(round(price_to_use * VENDING_DISCOUNT), 1) //No longer free, but signifigantly cheaper.
+ price_to_use = max(round(price_to_use * DEPARTMENT_DISCOUNT), 1) //No longer free, but signifigantly cheaper.
if(coin_records.Find(R) || hidden_records.Find(R))
price_to_use = R.custom_premium_price ? R.custom_premium_price : extra_price
if(LAZYLEN(R.returned_products))
@@ -1295,14 +1295,14 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/item/vending_refill/custom
machine_name = "Custom Vendor"
icon_state = "refill_custom"
- custom_premium_price = PAYCHECK_ASSISTANT
+ custom_premium_price = PAYCHECK_CREW
/obj/item/price_tagger
name = "price tagger"
desc = "This tool is used to set a price for items used in custom vendors."
icon = 'icons/obj/device.dmi'
icon_state = "pricetagger"
- custom_premium_price = PAYCHECK_ASSISTANT * 0.5
+ custom_premium_price = PAYCHECK_CREW * 0.5
///the price of the item
var/price = 1
diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm
index 018577e5837..2f2a803f0ed 100644
--- a/code/modules/vending/assist.dm
+++ b/code/modules/vending/assist.dm
@@ -31,8 +31,8 @@
refill_canister = /obj/item/vending_refill/assist
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
- default_price = PAYCHECK_ASSISTANT * 0.7 //Default of 35.
- extra_price = PAYCHECK_EASY
+ default_price = PAYCHECK_CREW * 0.7 //Default of 35.
+ extra_price = PAYCHECK_CREW
payment_department = NO_FREEBIES
light_mask = "parts-light-mask"
diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm
index 0129fe02dc7..bf6229aa79f 100644
--- a/code/modules/vending/autodrobe.dm
+++ b/code/modules/vending/autodrobe.dm
@@ -166,8 +166,8 @@
/obj/item/storage/belt/cummerbund = 1
)
refill_canister = /obj/item/vending_refill/autodrobe
- default_price = PAYCHECK_ASSISTANT * 0.8 //Default of 40.
- extra_price = PAYCHECK_HARD
+ default_price = PAYCHECK_CREW * 0.8 //Default of 40.
+ extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SRV
light_mask="theater-light-mask"
diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm
index 48b4b3cbc6a..5a4691de741 100644
--- a/code/modules/vending/boozeomat.dm
+++ b/code/modules/vending/boozeomat.dm
@@ -57,7 +57,7 @@
product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!"
req_access = list(ACCESS_BAR)
refill_canister = /obj/item/vending_refill/boozeomat
- default_price = PAYCHECK_ASSISTANT * 0.9
+ default_price = PAYCHECK_CREW * 0.9
extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SRV
light_mask = "boozeomat-light-mask"
diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm
index 654cb82fb98..13183e5618b 100644
--- a/code/modules/vending/cigarette.dm
+++ b/code/modules/vending/cigarette.dm
@@ -29,8 +29,8 @@
)
refill_canister = /obj/item/vending_refill/cigarette
- default_price = PAYCHECK_ASSISTANT
- extra_price = PAYCHECK_HARD
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SRV
light_mask = "cigs-light-mask"
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index 3a0a3d1c880..ffa61a729e8 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -208,8 +208,8 @@
/obj/item/instrument/piano_synth/headphones/spacepods = 1
)
refill_canister = /obj/item/vending_refill/clothing
- default_price = PAYCHECK_ASSISTANT * 0.7 //Default of
- extra_price = PAYCHECK_HARD
+ default_price = PAYCHECK_CREW * 0.7 //Default of
+ extra_price = PAYCHECK_COMMAND
payment_department = NO_FREEBIES
light_mask = "wardrobe-light-mask"
light_color = LIGHT_COLOR_ELECTRIC_GREEN
diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm
index a5d25619e1c..9a879390a1c 100644
--- a/code/modules/vending/coffee.dm
+++ b/code/modules/vending/coffee.dm
@@ -14,8 +14,8 @@
/obj/item/reagent_containers/food/drinks/ice = 12
)
refill_canister = /obj/item/vending_refill/coffee
- default_price = PAYCHECK_PRISONER
- extra_price = PAYCHECK_ASSISTANT
+ default_price = PAYCHECK_LOWER
+ extra_price = PAYCHECK_CREW
payment_department = ACCOUNT_SRV
light_mask = "coffee-light-mask"
light_color = COLOR_DARK_MODERATE_ORANGE
diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm
index f4f919ec51c..06cd4c4f322 100644
--- a/code/modules/vending/cola.dm
+++ b/code/modules/vending/cola.dm
@@ -30,8 +30,8 @@
/obj/item/reagent_containers/food/drinks/bottle/rootbeer = 1
)
refill_canister = /obj/item/vending_refill/cola
- default_price = PAYCHECK_ASSISTANT * 0.7
- extra_price = PAYCHECK_MEDIUM
+ default_price = PAYCHECK_CREW * 0.7
+ extra_price = PAYCHECK_CREW
payment_department = ACCOUNT_SRV
diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm
index e179bccf696..947d8645d68 100644
--- a/code/modules/vending/drinnerware.dm
+++ b/code/modules/vending/drinnerware.dm
@@ -28,8 +28,8 @@
/obj/item/knife/butcher = 2,
)
refill_canister = /obj/item/vending_refill/dinnerware
- default_price = PAYCHECK_ASSISTANT * 0.8
- extra_price = PAYCHECK_HARD
+ default_price = PAYCHECK_CREW * 0.8
+ extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SRV
light_mask = "dinnerware-light-mask"
diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm
index e96d759b52e..dc8705ddbe5 100644
--- a/code/modules/vending/engineering.dm
+++ b/code/modules/vending/engineering.dm
@@ -31,7 +31,7 @@
/obj/item/stock_parts/manipulator = 5
)
refill_canister = /obj/item/vending_refill/engineering
- default_price = PAYCHECK_EASY
+ default_price = PAYCHECK_CREW
extra_price = PAYCHECK_COMMAND * 1.5
payment_department = ACCOUNT_ENG
light_mask = "engi-light-mask"
diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm
index a17b98e389d..f92935c30d0 100644
--- a/code/modules/vending/engivend.dm
+++ b/code/modules/vending/engivend.dm
@@ -27,7 +27,7 @@
/obj/item/storage/box/smart_metal_foam = 1
)
refill_canister = /obj/item/vending_refill/engivend
- default_price = PAYCHECK_EASY
+ default_price = PAYCHECK_CREW
extra_price = PAYCHECK_COMMAND * 1.5
payment_department = ACCOUNT_ENG
light_mask = "engivend-light-mask"
diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm
index 1a2778966df..6e4b7727022 100644
--- a/code/modules/vending/games.dm
+++ b/code/modules/vending/games.dm
@@ -56,8 +56,8 @@
/obj/item/toy/captainsaid = 1,
)
refill_canister = /obj/item/vending_refill/games
- default_price = PAYCHECK_ASSISTANT
- extra_price = PAYCHECK_HARD * 1.25
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_COMMAND * 1.25
payment_department = ACCOUNT_SRV
light_mask = "games-light-mask"
diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm
index 3bc75718915..6fa86ac40d8 100644
--- a/code/modules/vending/liberation.dm
+++ b/code/modules/vending/liberation.dm
@@ -35,7 +35,7 @@
) //U S A
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
- default_price = PAYCHECK_HARD * 2.5
+ default_price = PAYCHECK_COMMAND * 2.5
extra_price = PAYCHECK_COMMAND * 2.5
payment_department = ACCOUNT_SEC
light_mask = "liberation-light-mask"
diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm
index 03de2e42194..da07477efc9 100644
--- a/code/modules/vending/liberation_toy.dm
+++ b/code/modules/vending/liberation_toy.dm
@@ -30,7 +30,7 @@
armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, FIRE = 100, ACID = 50)
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/vending_refill/donksoft
- default_price = PAYCHECK_HARD
+ default_price = PAYCHECK_COMMAND
extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SRV
light_mask = "donksoft-light-mask"
diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm
index 920054bf81c..5baf3720018 100644
--- a/code/modules/vending/medical.dm
+++ b/code/modules/vending/medical.dm
@@ -32,7 +32,7 @@
/obj/item/storage/organbox = 1
)
refill_canister = /obj/item/vending_refill/medical
- default_price = PAYCHECK_EASY
+ default_price = PAYCHECK_CREW
extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_MED
light_mask = "med-light-mask"
diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm
index dbdf44acf08..ca47032510e 100644
--- a/code/modules/vending/medical_wall.dm
+++ b/code/modules/vending/medical_wall.dm
@@ -22,8 +22,8 @@
/obj/item/storage/box/gum/happiness = 1
)
refill_canister = /obj/item/vending_refill/wallmed
- default_price = PAYCHECK_HARD //Double the medical price due to being meant for public consumption, not player specfic
- extra_price = PAYCHECK_HARD * 1.5
+ default_price = PAYCHECK_COMMAND //Double the medical price due to being meant for public consumption, not player specfic
+ extra_price = PAYCHECK_COMMAND * 1.5
payment_department = ACCOUNT_MED
tiltable = FALSE
light_mask = "wallmed-light-mask"
diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm
index 7d1423e33e2..fcb0004f05c 100644
--- a/code/modules/vending/megaseed.dm
+++ b/code/modules/vending/megaseed.dm
@@ -66,8 +66,8 @@
/obj/item/reagent_containers/spray/waterflower = 1
)
refill_canister = /obj/item/vending_refill/hydroseeds
- default_price = PAYCHECK_PRISONER
- extra_price = PAYCHECK_ASSISTANT
+ default_price = PAYCHECK_LOWER
+ extra_price = PAYCHECK_CREW
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/hydroseeds
diff --git a/code/modules/vending/modularpc.dm b/code/modules/vending/modularpc.dm
index b27b7c53c14..33bde2082ba 100644
--- a/code/modules/vending/modularpc.dm
+++ b/code/modules/vending/modularpc.dm
@@ -29,8 +29,8 @@
/obj/item/computer_hardware/radio_card = 1
)
refill_canister = /obj/item/vending_refill/modularpc
- default_price = PAYCHECK_MEDIUM
- extra_price = PAYCHECK_HARD
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SCI
/obj/item/vending_refill/modularpc
diff --git a/code/modules/vending/nutrimax.dm b/code/modules/vending/nutrimax.dm
index 14914102280..247d734816e 100644
--- a/code/modules/vending/nutrimax.dm
+++ b/code/modules/vending/nutrimax.dm
@@ -24,8 +24,8 @@
/obj/item/reagent_containers/glass/bottle/diethylamine = 5
)
refill_canister = /obj/item/vending_refill/hydronutrients
- default_price = PAYCHECK_ASSISTANT * 0.8
- extra_price = PAYCHECK_HARD * 0.8
+ default_price = PAYCHECK_CREW * 0.8
+ extra_price = PAYCHECK_COMMAND * 0.8
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/hydronutrients
diff --git a/code/modules/vending/plasmaresearch.dm b/code/modules/vending/plasmaresearch.dm
index dfad6d3ffd8..44e33b3601d 100644
--- a/code/modules/vending/plasmaresearch.dm
+++ b/code/modules/vending/plasmaresearch.dm
@@ -13,6 +13,6 @@
/obj/item/assembly/igniter = 6
)
contraband = list(/obj/item/assembly/health = 3)
- default_price = PAYCHECK_ASSISTANT
- extra_price = PAYCHECK_ASSISTANT
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_CREW
payment_department = ACCOUNT_SCI
diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm
index 0cd3f56a79a..8a4145c27ac 100644
--- a/code/modules/vending/robotics.dm
+++ b/code/modules/vending/robotics.dm
@@ -25,7 +25,7 @@
/obj/item/crowbar = 5
)
refill_canister = /obj/item/vending_refill/robotics
- default_price = PAYCHECK_HARD
+ default_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SCI
/obj/item/vending_refill/robotics
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index b61b11417b2..de38e8a46d7 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -31,8 +31,8 @@
/obj/item/watertank/pepperspray = 2
)
refill_canister = /obj/item/vending_refill/security
- default_price = PAYCHECK_MEDIUM
- extra_price = PAYCHECK_HARD * 1.5
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_COMMAND * 1.5
payment_department = ACCOUNT_SEC
/obj/machinery/vending/security/pre_throw(obj/item/I)
diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm
index 45635ae75e3..26a35ba9b60 100644
--- a/code/modules/vending/snack.dm
+++ b/code/modules/vending/snack.dm
@@ -36,8 +36,8 @@
)
refill_canister = /obj/item/vending_refill/snack
canload_access_list = list(ACCESS_KITCHEN)
- default_price = PAYCHECK_ASSISTANT * 0.6
- extra_price = PAYCHECK_EASY
+ default_price = PAYCHECK_CREW * 0.6
+ extra_price = PAYCHECK_CREW
payment_department = ACCOUNT_SRV
input_display_header = "Chef's Food Selection"
diff --git a/code/modules/vending/sovietsoda.dm b/code/modules/vending/sovietsoda.dm
index d52c87d5f11..6ab78fc3dee 100644
--- a/code/modules/vending/sovietsoda.dm
+++ b/code/modules/vending/sovietsoda.dm
@@ -14,7 +14,7 @@
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/vending_refill/sovietsoda
default_price = 1
- extra_price = PAYCHECK_ASSISTANT //One credit for every state of FREEDOM
+ extra_price = PAYCHECK_CREW //One credit for every state of FREEDOM
payment_department = NO_FREEBIES
light_color = COLOR_PALE_ORANGE
diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm
index ed752775691..dbf330b01ec 100644
--- a/code/modules/vending/sustenance.dm
+++ b/code/modules/vending/sustenance.dm
@@ -22,8 +22,8 @@
)
refill_canister = /obj/item/vending_refill/sustenance
- default_price = PAYCHECK_PRISONER
- extra_price = PAYCHECK_PRISONER * 0.6
+ default_price = PAYCHECK_LOWER
+ extra_price = PAYCHECK_LOWER * 0.6
payment_department = NO_FREEBIES
/obj/item/vending_refill/sustenance
diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm
index b4995f1df96..89a82159cf2 100644
--- a/code/modules/vending/toys.dm
+++ b/code/modules/vending/toys.dm
@@ -27,8 +27,8 @@
/obj/item/dualsaber/toy = 5
)
refill_canister = /obj/item/vending_refill/donksoft
- default_price = PAYCHECK_ASSISTANT
- extra_price = PAYCHECK_HARD
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_COMMAND
payment_department = ACCOUNT_SRV
/obj/item/vending_refill/donksoft
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 6b1b61949a0..65ed1c37292 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -2,8 +2,8 @@
icon_state = "refill_clothes"
/obj/machinery/vending/wardrobe
- default_price = PAYCHECK_ASSISTANT
- extra_price = PAYCHECK_HARD
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_COMMAND
payment_department = NO_FREEBIES
input_display_header = "Returned Clothing"
panel_type = "panel19"
@@ -170,7 +170,7 @@
/obj/item/clothing/under/costume/mech_suit = 2,
/obj/item/organ/tongue/robot = 2)
refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe
- extra_price = PAYCHECK_HARD * 1.2
+ extra_price = PAYCHECK_COMMAND * 1.2
payment_department = ACCOUNT_SCI
/obj/item/vending_refill/wardrobe/robo_wardrobe
machine_name = "RoboDrobe"
@@ -279,7 +279,7 @@
premium = list(/obj/item/storage/box/dishdrive = 1)
refill_canister = /obj/item/vending_refill/wardrobe/bar_wardrobe
payment_department = ACCOUNT_SRV
- extra_price = PAYCHECK_HARD
+ extra_price = PAYCHECK_COMMAND
/obj/item/vending_refill/wardrobe/bar_wardrobe
machine_name = "BarDrobe"
@@ -334,8 +334,8 @@
/obj/item/watertank/janitor = 1,
/obj/item/storage/belt/janitor = 2)
refill_canister = /obj/item/vending_refill/wardrobe/jani_wardrobe
- default_price = PAYCHECK_EASY
- extra_price = PAYCHECK_HARD * 0.8
+ default_price = PAYCHECK_CREW
+ extra_price = PAYCHECK_COMMAND * 0.8
payment_department = ACCOUNT_SRV
light_color = COLOR_STRONG_MAGENTA
diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm
index 576ec656a8c..c9f2b46c303 100644
--- a/code/modules/vending/youtool.dm
+++ b/code/modules/vending/youtool.dm
@@ -30,7 +30,7 @@
/obj/item/clothing/gloves/color/yellow = 1
)
refill_canister = /obj/item/vending_refill/youtool
- default_price = PAYCHECK_ASSISTANT
+ default_price = PAYCHECK_CREW
extra_price = PAYCHECK_COMMAND * 1.5
payment_department = ACCOUNT_ENG