Commit Graph
42 Commits
Author SHA1 Message Date
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
ArcaneMusicandGitHub 3248f9b4e8 Plasma is once again not affected by elasticity. (#94394)
## About The Pull Request

With the changes to elasticity in #93235, elasticity was reworked.
However, whether intentional or not, plasma had it's k_elasticity of 0
removed, meaning that plasma sheets were made elastic. Plasma is unique,
in that it's intended to have a static export value grandfathered in
from the old days ™️, as well as since it's not sold on the GMM,
there's less of a point of having it be affected by elasticity.

This PR Reimplements it's immunity to elasticity.

## Why It's Good For The Game

This is old, old precedent and I think got roped into the elasticity
rework without having the context that it's always been immune to
elasticity.

In addition, it makes sense that the plasma research station would be
the ones setting the price on their unique, rare material. I understand
that cargo isn't hurting for ways to make more money than god right now,
but I'm confident in locking this down as precedent.

## Changelog

🆑
fix: Plasma sheets are once again immune to market elasticity, selling
for a static 80 credits each yet again.
/🆑
2025-12-09 21:50:29 +01:00
749643cddb Reworks cargo market elasticity (#93235)
## About The Pull Request
What it says on the tin. Cargo now has new math for market elasticity,
each parameter and what it does is explained below

**1. Refactor**
1. **k_elasticity**: This is the elasticity as before applied on all
exports except now this is a floating-point value that swings from
`0->1` instead of 10e-10 like is the current case. This in laymen terms
is the percentile of an items actual cost that is sold on cargo [0 means
you get no credits, 0.5 means you get 50% of the items cost, 1 means you
get 100% of the items cost]. Whenever an item is sold on cargo this
value decreases by an amount that is determined by the next variable

2. **k_hit_percentile(default 5%)**: This is the value by which an
export `k_elasticity` decreases whenever an export is successful for
every unit of an item sold. The real formulae by which the exports
elasticity decreases is dependent on the total amount sold and is as
follows
<pre>k_elasticity -= amount sold (1 for most cases except stacks) *
k_hit_percentile</pre>
So subsequent exports yield lesser profits cause the elasticity
decreases. Now the rate at which the elasticity recovers is as follows

3. **k_recovery_time(default 10 minutes)**: This is the time (minimum
unit should be seconds) it takes for the elasticity to rebound back to
100% after it has reached full 0 but recovery process starts immediately
if it decreases at any point. So if elasticity becomes say 50% it means
it would take 5 minutes to reach 100% again

**2. Some Balance changes**
1. Profits earned from exporting gas is linear per mole sold so the more
gas you put in the more profits you get HOWEVER the max number of
credits you can make per canister is 15000 cr
2. Selling fish yields higher prices because it's no longer subject to
the old elasticity formula
3. Selling 50 sheets of anything will decrease future sale price by 10%
and will take 8 minutes to rebound back to 100% if it reaches 0

**3. Improvements:**
- `SSProcessing` subsystem no longer processes more than 180+ export
datums from round start itself but now starts out empty. It instead
processes only those exports whose elasticity has been impacted and
later cancels it after elasticity has reached 100% so performance of
this subsystem has been drastically improved
- export datums now respect `abstract_type` meaning they won't be
created and can be used as a skeleton body for subtypes. So datums like
`datum/material` & `datum/material/market` are not created anymore but
only their subtypes are so we save processing power & memory
 - Shaved of a lot of dead exports that went unused

## Changelog
🆑
balance: cargo exports now have different prices with applied elasticity
code: Improved performance of export code
qol: stock blocks can be recycled for materials & show up as stock
blocks in order console sold items
refactor: refactored cargo export code in whole. Report bugs on GitHub
/🆑

---------

Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
2025-10-18 04:36:09 -04:00
SyncIt21andGitHub bd2edb30f2 GMM material export respects apply_elastic parameter (#91998)
## About The Pull Request
- Fixes #90544
- Fixes #91093

## Changelog
🆑
fix: stock blocks created via GMM have the correct export value every
time & won't apply price elasticity
/🆑
2025-07-12 16:18:00 -04:00
ArcaneMusicandGitHub 498baeecd1 Hotfix for Stock Market Exploit. (#90060)
## About The Pull Request

So when I made #89674, I made a miiiinor slight basic error when it came
to the quantity assigned to sheets of materials when they're sold, using
the quantity as referenced by an export report. That quantity was then
brought over to the export value, for gathering the cost.

Cost when sold in an export report is reported as the units of material
in those sheets, while stock blocks actually care about the sheet
quantity, making the value actually 100x larger than it should be. I
caught this super fast while playing a round last night, but I needed to
just quality check to make sure there's no other weird inconsistencies.

Such as the stack of 50 uranium I added for debug and testing purposes
actually only holding 25 sheets. Things like that.

Stock blocks will now actually fluidly recalc their market price after
going fluid, because as it turns out, the fluid var isn't used in price
calculation, which was an easy fix.

## Why It's Good For The Game

🐛 💥 Killing some fairly egregious oversights on the stock market sales
side of things. Thank you for your patience.

## Changelog

🆑
fix: Stock blocks that have gone liquid should properly recalculate
their cost when possible.
fix: Spawned sheets of uranium now actually hold 50 sheets.
/🆑
2025-03-16 17:19:00 +01:00
ArcaneMusicandGitHub eca216288b Material market sales now are subject to elasticity. (#89674)
## About The Pull Request

This PR serves as an alternative to #89638.

For this proposal, stocks are now subject to market elasticity, similar
to most other standard exports in-game. As a result, the value of a
stock is going to scale downward through the quantity that they're sold
at, whether as a stack of material or as a stock block at a given export
rate. A material's new, elastically modified price can then be
reassessed by scanning it with an export scanner.

There was a good bit of behind the scenes work that came with making
this work properly, but the short version of it is as follows:

Stock blocks are no longer their own datum export, and stock blocks are
now dynamically sorted into their appropriate export datum so that the
`datum/export` `cost` variable can properly track elasticity whether
between the sheet of the block form of the item.

`Get_cost()` now calculates the cost based on the non-elastic form when
saving to the block, and then when assessed for sale elasticity is
applied on the block sale instead so as to not apply elasticity twice
and make them worthless.

I axed the `MARKET_PROFIT_MODIFIER` define and removed it from
calculation. Originally it was meant as a crude alternative to a
floodgate and sales factor that would change how much a stock block is
worth in Lou of an actual elastic modifier, but with this implemented I
feel confident in removing this. The wording of this is also reflected
in the instructions tab of the stock market as well.

Lastly, there are three minor things but they came up during testing and
felt appropriate to tweak, but otherwise I'm happy to atomize out
because I was just kinda on a roll:

* I added a small light to the material market when on and powered, as
50% of the sprite is a big hologram light and it only makes sense that
it would emit some light to the surroundings, albeit not a high range.
* The material market now requires power to create stock blocks.
* Refined Bluespace crystals
(`/obj/item/stack/ore/bluespace_crystal/refined`) and other similar
stacks of ore will now throw a warning if the amount or value is less
than 1 in either case, preventing you from making a functionally useless
stock block.

## Why It's Good For The Game

Technically fixes #79978 ?

This solution still enables for the stock market to exist in a
meaningful way, prevents it from being an insanely powerful method of
getting far too many credits too quickly by basically implementing a
soft cooldown system respective to each material export type, and means
that in avoiding that system, requires for cargo to alternate between a
few different types of materials, which should *hopefully* allow for
cargo to also be incentivized to actually deposit some of it's purchased
materials into the station's resources respectively.

The QOL and fix changes mentioned at the bottom of the first section
allow for there to be fewer edge cases situations where the crew is
unable to sell items that would functionally have zero value without
some rather cheesy implementations of how stock blocks currently work by
preventing otherwise invalid stock blocks from being made, as well as to
make it behave in a way more fitting of a standard machine on the
station.

Also just in general enables a bit less duplicate code by relying a bit
more on `export_items_and_contents()` to gather quantities and values
for then redistributing back into the stock blocks, either for sale or
for storage.

## Changelog

🆑
balance: Sheets of material and stock blocks are now subject to elastic
price changes. AKA, if you sell materials, their price will go down
after sale and will return after some time.
fix: Stock blocks can no longer be made with no value or with a quantity
of zero material.
fix: The GMM Machine can now no longer create stock blocks when
unpowered.
qol: The GMM machine now lights up when powered.
/🆑
2025-03-14 15:48:54 +11:00
SyncIt21andGitHub c4adbf877e Clamps material market quantities & prices during cargo operations (#82338)
## About The Pull Request
- Fixes #82329

Cargo operations means buying & selling materials on the market. Now
both their prices & quantities are clamped during these operations

Also increased the width of materials market UI so large numbers don't
overflow to the next line.

## Changelog
🆑
fix: buying & selling huge quantities of materials on the market won't
cause their prices & quantities to go beyond bounds.
/🆑
2024-04-02 19:38:59 +02:00
SyncIt21andGitHub d36a5af64f Removes material breakdown flags, traits & miscellaneous fixes. (#80389)
## About The Pull Request
1. Removes material breakdown flags i.e. all flags with the format
`BREAKDOWN_XXX`. These flags do nothing, there are no special checks to
transform materials based on these flags, they are passed around just
because certain procs require them for syntax purposes only.

Apparently there were plans to make these flags do something special
from the comment

https://github.com/tgstation/tgstation/blob/302247c0d1e980478f59d9c497169290ee259887/code/__DEFINES/construction/material.dm#L43
But nobody got any ideas for years now. The only special thing we can do
with them now is remove them and reduce code clutter, so let's do that
    
The only flag that ever did something was the
`BREAKDOWN_INCLUDE_ALCHEMY` flag. This only worked when coupled together
with `TRAIT_MAT_TRANSMUTED` trait(which is only used by the reagent
metalgen) and when both this trait & flag are combined together... they
still do nothing

https://github.com/tgstation/tgstation/blob/302247c0d1e980478f59d9c497169290ee259887/code/game/atom/atom_materials.dm#L41-L42
Yup they cancel out each other to prevent returning an empty list, the
traits only job was to prevent materials from being recycled (like why?
what's the benefit of that? nothing) and the flag was meant to bypass
this restriction so both the trait & the flag cancel out each other
therefore doing nothing meaningful. Best remove them both and call it a
day.

2. Fixes an error in displaying number of sheets inserted into a mat
container when that sheet is made up of alloy materials. it would count
as 2 or more because it would take the sum of total material amount
inserted and not the actual sheets. That's fixed now.

3. Remote materials now properly respect the `MATCONTAINER_NO_INSERT`
flag

4. Adds helper proc to insert materials via the remote material
component with proper context

## Changelog
🆑
fix: mat container displays correct number of sheets inserted for alloy
materials.
fix: remote materials now properly respect the `MATCONTAINER_NO_INSERT`
flag.
code: removes material breakdown flags and related traits.
code: adds helper proc to insert materials via the remote material
component with proper context.
/🆑
2023-12-25 02:29:26 +01:00
SyncIt21andGitHub b39953ebce Fixes material market prices going negative & runtime when buying materials (#79732)
## About The Pull Request
- Fixes #79114
- Fixes #79245

The hope is that it should fix these 2 issues because looking at the
math is seems solid. This PR ensures 2 things
- If the current market price of a material is 0 then neither the market
quantity nor its price is changed because the material is worthless at
that point so adding more is just meaningless
- Corrects the formulae to calculate the new price so we get the right
rate of change

For more details on how this bug occurs refer to
https://github.com/tgstation/tgstation/issues/79114#issuecomment-1790757814

Mentioning @Iajret in the changelog cause credits(no pun intended) goes
to them for discovering said bug

This also corrects a runtime that went unresolved in
- #79307

I could not get my code suggestion there in time so i'm just carrying it
over here

## Changelog
SyncIt21, Iajret
🆑
fix: selling large amount of mats in cargo should not give you infinite
credits
fix: runtime when adjusting material market after buying 
/🆑
2023-11-18 23:19:35 +01:00
lizardqueenlexiandGitHub 0378b25b8e The Galactic Materials Market no longer runtimes on opening or ordering. (#78729)
## About The Pull Request

The Galactic Materials Market, currently, runtimes while attempting to
open the UI. This is due to attempting to load various fields from
un-initialized material datums. Through liberal application of
`initial()`, these runtimes have been removed, and it is now possible to
use the market at all (though it has some other issues that I'll make
bug reports for...).

Also gives priority to `greyscale_colors` over `color` when choosing
colors for the UI, to make the correct colors appear.
## Why It's Good For The Game

The Materials Market is rather important as the only source of minerals
on rounds without any miners. So... it's good if it actually loads.
## Changelog
🆑
fix: The Galactic Materials Market now offers things for sale as it
should.
/🆑
2023-10-04 19:43:28 -04:00
9073290d8a ArCargo: Adds the Galactic Materials Stock Market V1.2 (Free Market Edition) (#78500)
## About The Pull Request

**This PR is a rerelease of #78164, with some bells and whistles.** As
such, most of the core functionality is the same, but with some tweaks
to balance the gameplay and prevent bike levels of profit. I've tried to
bold the new additions to make it easier to read for those coming back
for the second pass.


![image](https://github.com/tgstation/tgstation/assets/41715314/ff9bf038-524d-44fc-81bb-c6ff97fef6dd)
This PR adds a new machine that can be bought called the **Galactic
Mineral Market** (GMM). The Galactic Mineral Market (GMM) allows you to
buy and sell minerals wholesale from the market machine. It goes
something like this:

### 1. Getting the Machine:
The GMM can be bought as an un-assembled machine for 600 credits from
cargo. It's a low cost, but its not mapped in standard, so if you're
confident in your miners, you shouldn't necessarily need one for the
department. Otherwise, it's available for other crewmembers to buy for
cost.

The cargo pack comes will all supplies necessary to finish the machine.
Tools not included.

### 2. Buying Low
Using the machine's UI, you can see all traded minerals and their
associated prices. Buy prices are played straight, and can be bought for
material price, times the quantity. The order is then instantly placed
on the cargo shuttle, and will be deducted from the buyer's account on
shuttle send. **A single order can only have 10 different stacks of
materials in it. So, that can be 100 sheets of iron and 1 of everything
else, or 500 sheets of iron. After that you're blocked from buying more
sheets until you've sent the order.**

Cargo staff with standard cargo access may toggle the machine to order
directly from the cargo budget. Otherwise, materials are only purchased
from private accounts.

All purchases are treated as private and must be opened by the recipient
like private orders.

### 3. Selling High

It's stocks time. To sell minerals on the market, simply insert any
relevant metal stock into the machine. This produces a totally original
and not-a-bounty-cube stock block, which can be sold on the cargo
shuttle for cargo funds. Stock blocks can also be price-tagged as well
following their standard process.

**Stock blocks start out a bright pink and are worth the value of that
material at that time, but over time their color will degrade. After a
full 5 minutes, stock blocks will switch over to a purple hue, and their
value will once again become liquid, subject to the current market
value. This encourages players to be a bit more fast on their feet than
before instead of just waiting forever for all of their investments to
arrive at the perfect value, before the inevitable "rest of the game"
tries to upend your investing.**

Sold cargo stocks are subject at a 20% processing fee as part of the
galactic mineral market.
### 4. Outside Factors

**In-game events like the Crab-17 or the Market crash event will cause
stocks to bottom out completely, and for the market to become
unavailable until the market stabilizes. Thankfully, once the market has
crashed, typically stocks will recovery and gain back some value,
allowing for fast acting market movers to capitalize on rough markets.**

**Additionally, low value materials like iron and glass have an extra
stipulation, as their value goes all the way down to 0 credits. In that
case, you are unable to buy them at that value as a market protection.
Be careful that you don't see a reset or crash when you're planning on
selling your horde of iron and glass stocks!**

Additionally, market events can occur during the round that can more
sharply adjust a single stock's price and completely rebound it's
trajectory. These events are always mentioned in the station
announcement's economics report.

### Other notes:
The market does not cover all minerals, partially for consistency
purposes as well as for balance reasons. Plasma, being a unique material
that only Nanotrasen has their hands on, is the sole exporter of plasma
in the system, so it stands to reason that it's not on the market, and
remains a solo export. Bananium, as it has a rare and expensive
conversion rate, works the opposite way, and as such isn't listed on the
market either, with the sole source being single cargo sales. All others
just don't make much sense to include into the market at this second, so
I left them out for now.

**Alright now below I'm going to cover the math and shit so if that's
not what you care about then please scroll past.**
<details>
  <summary>Warning: Arcane is about to talk about the math</summary>
Alright.
So this adds a new stock_market subsystem, which fires once every 20
seconds. I'm still fairly new to subsystem design so I'm probably going
to need some feedback on cleaning this up to make it look nicer and run
smoother.

So we have 4 associated lists, each attached to the relevant traded
datum; this tracks prices, market trends, how long that trend is going
to last in SS fires, and market quantity.

Prices fluctuate between 0.5x and 3x the material's single sheet value.
This could be tweaked even farther in the future, but for now I'm
keeping it at this nice clean margin. Prices fluctuate based on a
gaussian normal distribution that is centered on different points based
on their **trend**. Upward trending materials are centered in such a way
that they'll almost certainly go upwards, but being that it's based on a
random chance, not always. Vis versa, downward trends should tend to
lose value at about the same rate. We also change our rounding based on
this trend data, in order to prevent low price values like iron and
glass from getting stuck in the same value or freefall drop over time
just because of rounding down. Similarly, neutral trending materials
will not change nearly as much, and will generally stay at around the
same amount.

When buying or selling a material, the quantity of that material will
change on the market. The magnitude of that change depends on how much
of that material currently exists on the market. Buying a low quantity
material like diamond for example will tangibly increase that material's
cost, while buying stacks and stacks of iron and glass won't do much
damage to the price of iron as there's usually around 500 full stacks on
the market to start with. It's applied at a relative percentage of
(qty_changed / new_total_on_market) * price of goods bought/sold at.

In addition to that, there are random "market events" that can occur
randomly, which you might miss if you don't follow the newscaster
economy news. These three events are fairly barebones now, but in
general they have a 1% chance of happening per material, and can more
dramatically increase, decrease, or fully reset the value of a material
on the market back to it's standard value. This opens up for doing more
with it in the future, but that's a later problem.
</details>


## Why It's Good For The Game

This independently resolves some issues related to #78040, that being
that lowpop stations, or shifts with few miners would have a new way to
be able to still get some access to minerals in a given round. This also
provides a unique minigame and alternative way to acquire money in a
given shift, using minerals.

**"But Arcane,** I hear you ask. **"Isn't this just the same thing you
tried doing way back when and then reverted in #50537?**
Well, fuck man, how you doing I haven't see you around in forever also
no you're completely wrong and here's why

**This PR is no longer contingent on the rest of ArcMining in it's
current iteration.** I have introduced some extra factors into the
gameplay as well to try and curb the creation of bikes within gameplay.
This also provides a massive benefit to round progression and gives the
QM and the cargo members the ability to prevent round progress from
stalling by buying round-critical resources.

Not to mention, as the GMM is not cargo required, more cargo integrated,
it also functions as economy content for the rest of the crew.

## Changelog
🆑
add: A new export has arrived in the imports section, the Galactic
Materials Market! You can use this to buy and sell minerals for profit
or cost, as well as stock your station when you don't have any miners.
add: Insert sheets of minerals into the Galactic Materials Market to
convert them into a stock block, allowing you to lock in your price for
5 minutes. Wait too long and it'll be subject to market value again!
add: Minerals can be bought on the market either using the station's
cargo budget by cargo crew, or privately by everyone else.
del: Any material stacks that can be bought and sold on the market
before have been removed from the cargo catalog.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-30 08:58:56 -04:00
Helg2andGitHub 8a2e6f0eb8 Autolathe, protolathe, mech fab and comp printer now use defines for matter bins values. Also some production ui do. (#76020)
Changed hardcoded matter bins values to use defined
`SHEET_MATERIAL_AMOUNT` for following stuff: autolathe, protolathe, mech
fabricator and component printer.

`Material Access Bar` and `MaterialIcon` used for protolathes, circuit
printers and etc. now also use defined `SHEET_MATERIAL_AMOUNT`, via
static ui data, to prevent same issues in future.

Also changed some notes in /// parts just because why not.
2023-06-21 01:08:51 +00:00
ArcaneMusicandGitHub f2fd69a49a Minerals have been refactored so costs and minerals in items are now in terms of mineral defines. (#75052)
Ladies, Gentlemen, Gamers. You're probably wondering why I've called you
all here (through the automatic reviewer request system). So, mineral
balance! Mineral balance is less a balance and more of a nervous white
dude juggling spinning plates on a high-wire on his first day. The fact
it hasn't failed after going on this long is a miracle in and of itself.

This PR does not change mineral balance. What this does is moves over
every individual cost, both in crafting recipes attached to an object
over to a define based system. We have 3 defines:

`sheet_material_amount=2000` . Stock standard mineral sheet. This being
our central mineral unit, this is used for all costs 2000+.
`half_sheet_material_amount=1000` . Same as above, but using iron rods
as our inbetween for costs of 1000-1999.
`small_material_amount=100` . This hits 1-999. This covers... a
startlingly large amount of the codebase. It's feast or famine out here
in terms of mineral costs as a result, items are either sheets upon
sheets, or some fraction of small mats.

Shout out to riot darts for being the worst material cost in the game. I
will not elaborate.

Regardless, this has no functional change, but it sets the groundwork
for making future changes to material costs much, MUCH easier, and moves
over to a single, standardized set of units to help enforce coding
standards on new items, and will bring up lots of uncomfortable balance
questions down the line.

For now though, this serves as some rough boundaries on how items costs
are related, and will make adjusting these values easier going forward.

Except for foam darts.

I did round up foam darts.

Adjusting mineral balance on the macro scale will be as simple as
changing the aforementioned mineral defines, where the alternative is a
rats nest of magic number defines. ~~No seriously, 11.25 iron for a foam
dart are you kidding me what is the POINT WHY NOT JUST MAKE IT 11~~

Items individual numbers have not been adjusted yet, but we can
standardize how the conversation can be held and actually GET SOMEWHERE
on material balance as opposed to throwing our hands up or ignoring it
for another 10 years.
2023-05-03 14:44:51 +00:00
GhomandGitHub 234ed722ed Fixed material exports reporting 1/2000th of the amount of material exported. (#57526) 2021-03-08 16:27:49 -08:00
FikouandGitHub f6dfc68360 repaths plasteel tiles to iron (#56644)
Repaths plasteel tiles and turfs to iron. We're in too deep to back out now
2021-02-06 13:53:08 -08:00
FikouandGitHub 8d586a7cb0 Rename metal sheets to iron sheets (#56643)
It's a specific type of metal, it shouldnt just be called generic "metal".
The reagent, ore and material datum are already called iron.
2021-02-05 15:48:00 +00:00
TemporalOroborosandGitHub 976c1fcb8c [READY] Bespoke Datum Mats (#55296)
* Bespoke Material Backend

- Adds support for bespoke materials:
  - Reimplements [/datum/material/var/id]
  - Ports GetIdFromArguments from SSdcs
  - Adds a wrapper define for GetMaterialRef
  - Adds [MATERIAL_INIT_BESPOKE]
  - Adds [/datum/material/proc/Initialize]
- Does not actually add any bespoke materials

- [ ] TODO: Code docs
- [ ] TODO: Actually adding bespoke materials

* Some has_material procs and cleaning up some spaghetti

- Adds a pair of has_material procs for use in checking whether a given atom has a given material

* Adds meat

- Adds bespoke meat variants
  - Does not make them accessible
- Shuts up the linter

* Implements bespoke meat

- Makes the material container preserve bespoke materials
- Makes the sheetifier accept bespoke materials
- Makes the autolathe accept bespoke materials
- Makes the gibber produce bespoke meats

* Makes butchering produce bespoke meats

This is jank and really needs to be folded into a unified butchering and gibbing system

* Material documentation

- Adds, fixes, and touches up some documentation

* Material container insertion callback

- Changes the proc used to expand the material container's material list ot a proc used to check whether a material fits into a material container
- Instantiating new materials is no longer O(n) relative to the number of autolathes in existence.

* Makes processing meat conserve materials

- Makes bespoke meat carry over into meatballs

* Makes preserving custom materials an option

- Implements the ability to turn preserving custom materials _off_ for processor recipes

* Fixes all bespoke materials of the same type using the same singleton

- We use ids now, not just types.

* Makes the fat sucker produce bespoke meats

- Because consistency is good.

* Fixes autolathes merging bespoke stacks into normal stacks.

* Makes the callback to test materials for holdibility optional

- @Floyd

* GetMaterialRef -> GET_MATERIAL_REF

- We capitalize macros.

* Removes an extraneous callback

- Makes the sheetifier use functionality I didn't notice I implemented a few commits ago.

* Makes mob and species meat null compatible

* Fixes the ore silo

- The ore silo had really snowflake material handling that has been brought in line with the rest.
- The materials should show up in the correct order.

* Fixes minor lathe bugs

- Fixes stack_traces caused when lathes tried to fetch materials using reagent typepaths
- Fixed the selective reagent disposal topic. I have no idea how long this has been broken.

* Various documentation fixes

- Clarified a couple comments
- Removes an extraneous ?. operator
- Fixed mat floor tiles having bugged reagent temperatures

* More fixes

-/datum/material/meat/mob -> /datum/material/meat/mob_meat
- Adds atom typecheck to material containers.

* Fixes old typepaths
2021-01-15 23:39:58 -08:00
interestingusernam3andGitHub b0c53ce37c Metalic hydrogen export datum now assigns message instead of unit_name (#55990)
Centcom's cargo division no longer calls metallic hydrogen "developer's tears".
2021-01-07 15:11:27 -08:00
ArcaneMusicandGitHub e09a9032da Crates and bountes are now defined by crate's value and paygrades. Civilian bounty payout is higher and uncheesable. (#55413)
Does a value-wise refactor of crates and bounties in order to scale the value of these imports and exports to the value of crate exports (500 credits each). Then, I have adjusted the value of crate exports to 200 credits down from 500 to place the most standard unit of profit within cargo to a scale within that of roundstart paygrades currently on station. (350-1400 credits).

This effectively balances one of the biggest disparities left within the in-game economy, which is that cargo's price scales have really never been re-balanced with the considerations of on station prices, and have been still to the same scale as when they were based on cargo points 3 years ago. While admittedly some prices in vendors were scale to those original cargo values, so many of them weren't that it warranted a massive rebalance PR in order to places the scale of these items within an appropriate range of their intended user's cost values.
2020-12-10 23:43:46 +00:00
TemporalOroborosandGitHub e9f9ad1e34 Makes Metalgen Unrecycleable (#55417) 2020-12-09 23:34:27 -08:00
GhilkerandGitHub 9532dbd2a8 Hydrogen Gas (#50510)
* new PR no tgui bundle build yet

* tgui bundle built

* atmos.dmi conflict fix 2

* balancing

* tgui bundle fix
2020-04-20 14:47:22 -03:00
GhilkerandGitHub e7a22853f7 Addition of Freon (no removal, no fire) (#49821)
* Just freon addition, no removal nor fire. Maybe unbalanced

* fixes

* material properties addition, removed from the object itself

* added admin and game logging to hot ice

* Typos

* made the component more generic

* other typos, some fixes

* typos and balancing

* better code readability

* dunno

* merge error and travis build errors fixes

* asked changes, fixes and balancing
2020-03-20 19:08:50 -03:00
Emmett Gaines ab3a127295 Makes the global materials lookup lazily initialized 2020-02-03 10:17:13 -05:00
Qustinnusandmoo b11d0a6c13 fix (#46999) 2019-10-09 20:00:28 -04:00
QustinnusandEmmett Gaines a394ccdc2b Material datum chairs & tables and applies materials to all items (Now with less pain for mining & RnD) (#46525)
removes materials list from items, uses custom_materials instead. This might introduce some bugs so we should testmerge this for a while (and Ill test stuff locally as much as I can)

this also adds material crafting to sheets. Test case being chairs. In the future we can add stuff like tables, walls, doors etc.

also applies materials to everything, with fixes, which can close #46299
2019-10-08 11:06:02 -04:00
FikouandShizCalev ec4280f597 fixes antag token vendor sprite and kinda fixes cargo exports text (#46616)
* ye

* oop
2019-09-20 02:07:30 -04:00
FikouandEmmett Gaines 730d96ad06 bunch of datum mats stuff mostly related to coins (#46289)
adamantine and mythril are now datum mats (mythril still admin only), adamantine has 1.5 strength buff to whatever is made out of it, mythril adds rpg loot elements to whatever is made out of it
you can now put plastic, adamantine and mythril in the autolathe and coin mint
you can now put titanium in coin mint
switches a bunch of stuff in cargo exports, including mythril and plastic being worth cash money
coin code has been changed to datum mats, the custom sprites have been lost except for antag token
2019-09-17 10:50:32 -04:00
QustinnusandEmmett Gaines b33d1c49a3 [READY] Floydmats (Datum materials) & custom toolboxes (#45118)
* Initial work

* more

* ass

* wsedfwedff

* asss

* test

* stuff

* fuck

* sss

a

* kms

* asdadwedwdfwefwef

* start

* test

* dwwdew

* ewefwfef

* Redemption machine (#8)

* Redemption machine

* Removes debug messages

* changes

* fuckmyshitup

* coin mint works with new material shenanigans (#10)

* Auto stash before merge of "materials" and "origin/materials"

* woops

* furnace (#11)

* autolathe manufacturing of toolboxes

* eggs in a basket

* some small changes

* matcolors

* documentation

* more documentation and effects

* done

* Color man bad (#12)

* fixes designs

* ass

* more fixes

* fuck me

* firestacks adder

* epic fixes

* fixes designs

* DONE DIDDILY DOO

* removes category macro

* ch-ch-ch-changes

* fixes some stuff

* Fixes display of ore values (#9)

* Redemption machine

* Removes debug messages

* Re-adds value display

* Replaces the fire stacking component with an element instead (#13)

* fixes examine

* fixes ligma bugs

* double ligma boofus

* fix

* misses some defines

* fixes ORM

* Update code/datums/components/material_container.dm

Co-Authored-By: Emmett Gaines <ninjanomnom@gmail.com>

* fixes

* Makes glass objects weaker (#14)

* Makes glass objects weaker

* uses correct proc

* fixes shit

* honk honk

* better

* oh shit oh fuck

* fixes

* fuck ORMs

* fixes the biogen

* documentation

* ass (#15)

* component

* changes

* ass

* ass

* doc

* Auto stash before merge of "materials-plasmacomponent" and "origin/materials-plasmacomponent"

* fixes rounding

* fixed
2019-07-24 11:27:01 -04:00
pubbyandoranges 9ca6661140 [ready] cargo bounties (#37833)
* Cargo Bounties

* Rebalance and merge exports into bounties.

* Tweak and add bounties.

* Fix spelling errors + tweak mech prices.

* Last minute bugfix

* Add bounty consoles to maps.

* Naksu changes

* save 500 cycles woooooooooooooooooooooooooo

* One last price tweak

* Nerf addy and alien sheets
2018-05-20 18:44:11 +12:00
vuonojenmustaturskaandAnturK c4fd8715a5 Return of ore stacking, various changes to lavaland bombs to facilitate reduced lag (#35291)
* Ore Stacking

* honk

* honk

* component memes

* honk2

* fix overlay off-by-1, sheet singular names

* Give the ores more descriptive names since sheets also have

* whoops debug memes

* atom editor memes

* fixes

* snowdin fix
2018-02-05 22:27:35 +01:00
Kyle Spier-SwensonandGitHub 8c4885cf6e Revert "Ore Stacking (#33062)"
This reverts commit 8e1ac5720d.
2017-11-28 22:56:54 -08:00
kevinz000andEmmett Gaines 8e1ac5720d Ore Stacking (#33062) 2017-11-28 21:27:34 -05:00
KorPhaeronandGitHub d42b43c18d Revert "Removes material exports" 2017-11-25 16:40:26 -06:00
KorPhaeron 11e08a6252 Removes material exports 2017-11-19 22:48:56 -06:00
Jordan BrownandLeo af4d9a85c9 Repaths /obj/item/weapon to /obj/item (#29929) 2017-08-16 10:38:51 -03:00
nicbnandLeo 77a2d3f5cd Replaces "istype"s with is_helpers macros (#28676) 2017-06-22 15:03:19 -03:00
Pigeons b1534b1ee8 Nerfs plasma cost 2017-05-23 14:28:17 -04:00
Iamgoofballandoranges 448d3bc89e Balances Exports finally (#27099)
* Balances Exports finally

Exports have a basic sense of maximum amount, lowering by 1% in value for every sale, raising in 0.1% every 2 ticks up to it's max

* Update exports.dm

* Adds consistent marginal cost function (with decreasing marginal returns) and its associated antiderivative for total cost

* Tweaks get_cost procs and other properties in accordance with the new cost function

* Removes undefined vars causing errors

* Tweaks crates cost property

* I hate MINERAL_MATERIAL_AMOUNT AKA minor snowflake refactor

* Fixes price elasticity comments

* Changes var kelasticity to k_elasticity for better readablity

* Removes meme math obfuscation
2017-05-14 00:19:05 +12:00
Robustinandduncathan salt f90b87ae99 The least surprising nerf: Null Crates & Emagged Plasma Export Bonus (#26670)
* You knew this was coming

* No
2017-04-29 16:04:55 -06:00
bgobanditandAnturK 7ddfe7d65b Bluespace polycrystals and plastitanium are in the exports list now. (#25635) 2017-03-31 20:18:07 +02:00
bawhoppenandoranges 7830992c11 Makes shuttles superficially buildable (#18974)
Added two new materials, Titanium and plastitanium. Titanium is naturally occuring, and plastitanium is an alloy made of plasma and titanium.
These materials can be used to build shuttle walls and floors, though this serves no current purpose.

Before you yell "SNOWFLAKE" about the materials, I have definite planned purposes for them, not to mention what else they could be potentially used for (mechs, R&D, etc.)
You can use titanium to make white shuttle walls that smooth (like the ones of the escape shuttle), and plastitanium to make the grey syndie shuttle walls. You can also make floor tiles out of each material for the different shuttle floors. This PR itself doesn't change any of the paths on the map to use smoothed shuttlewalls and I'll save that for a seperate PR.

Also this PR makes ORM code better and allows people to easily add new alloys

Sprites by WJ
2016-07-14 21:25:49 +12:00
c0 04f1aafa78 Exports 2016-04-13 06:01:40 +03:00