6 Commits

Author SHA1 Message Date
Bloop 183c5af2e4 Adds flag for virtual areas, fixes being able to send funds from virtualspace to real accounts (#94071)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/90641
Fixes https://github.com/tgstation/tgstation/issues/88366

Eliminates worries over virtualspace currency being sent to real
accounts.

When I was looking into why there were no flags for bitrunning areas.
Then I saw this mess:

<img width="929" height="889" alt="Code_2we2QjDyFp"
src="https://github.com/user-attachments/assets/8a807bfe-b566-4057-a8ea-2b306325687d"
/>

Not having enough space / being too lazy to refactor this is a silly
reason to not include flags for something like these virtual areas where
it can be quite helpful. Fortunately I am not too lazy ~~in this
moment~~ so here we go:

It was fairly logical to move over some of these to a separate flag,
which I've called `area_flags_mapping` since they pertain to maploading
things and terrain generation mostly. `area_flags` stays reserved for
general properties and now has more room than it did before for you
people to fill it with.

In doing this it's also neatened up the code quit a bit, as UNIQUE_AREA
was kind of everywhere and now that it's implied by default less areas
need to have it defined (or explicitly un-defined).

<details> <summary> Working as intended </summary>

<img width="787" height="448" alt="dreamseeker_p0Qts36tG1"
src="https://github.com/user-attachments/assets/25056f34-8d43-4be2-a293-e53df7a7d1db"
/>

<img width="383" height="59" alt="dreamseeker_Ek7TXCcpbA"
src="https://github.com/user-attachments/assets/89622974-9467-4cdb-8345-d684f7c9004b"
/>

</details>

## Why It's Good For The Game

Fixes an exploit, improves the area flags situation slightly.

## Changelog

🆑
fix: you can no longer send money from virtualspace to a real account
code: adds a flag for virtual areas so they can easily be checked, as
well as an easy helper proc, 'is_area_virtual(your_area)'
/🆑
2025-11-22 12:24:41 -07:00
GoldenAlpharex 234eb80c94 Adds Biomes to the Cave Generator, for all of your procedurally-placed cave biome needs! (#83138)
## About The Pull Request
Implements biomes into the Cave Generator, using some adapted code from
the biomes feature of the Jungle Generator. It's there as a tool for
whomever would want to implement it on /tg/, I simply don't have the
sprites, mobs and motivation to add biomes to anything at this current
point in time, even though I'm fully open to helping anyone that would
be interested in doing so.

Here's how it works:
You supply a 2D list of biomes based on the two arbitrary criteria
'heat' and 'humidity', you can treat these as simply two independent
variables that would affect your biome distribution. There's three
levels of each, `LOW`, `MEDIUM` and `HIGH`, take a look at
`possible_biomes` for a good example of it. Here's what it looks like by
default (yes, that's the default on the jungle generator as well, except
here we use 3x3 instead of 4x4):

![image](https://github.com/tgstation/tgstation/assets/58045821/2c53b46b-f4f9-497f-9647-efc2cc118805)


On the `/datum/biome`, you have three important stats, split into two
each: flora, features and fauna. They are evaluated in this order, so if
a flora spawns, no feature nor fauna will spawn. If a feature spawns, no
fauna will spawn, and if fauna spawns, then that's cool. Each of these
stats have a corresponding `density` (i.e. `flora_density`), which is
simply the probability for that thing to be spawned if it's eligible,
and a `types` list (i.e. `flora_types`), which is a weighted list that
then gets expanded at runtime in order to make the `pick()` operation
faster.

The areas you want to have the biomes in also need to have their
`area_flags` set up to include `FLORA_ALLOWED` for both flora and
features, and `MOB_SPAWN_ALLOWED` for fauna to spawn.

The fauna currently does just about every check that is done in
`cave_generator`'s `populate_terrain()`, except for handling megafauna
differently, or taking megafauna into account. If that's desired, it can
be added easily, I simply chose not to add it because it felt like
wasted processor time over something that would probably not be
pertinent in the majority of cases.

I've run a few tests, and keeping in mind that I've got a high-specs
computer, generating the caves with biomes takes about 1 second for an
entire z-level covered in biomes. For comparison, I compile the repo in
about 36 seconds. ~~It may increase the amount of time spent
initializing the atoms subsystem, however, I'll need to compare that,
I'd really appreciate some help optimizing that if anyone knows how
to.~~ It didn't seem to have an effect, I just had seen things a bit
weird. I optimized things by moving rust-g calls outside of the for
loop, and we gained about 0.3-0.4 seconds, which is pretty nice.

## Why It's Good For The Game
Biomes are cool, and since we use mainly cave generators for z-level
generation, I decided to add biomes to that, so that the biome code
added by floyd lives on.

Here's an example of ice box with jungle caves, just as a proof of
concept, to prove that it works:

![image](https://github.com/tgstation/tgstation/assets/58045821/33b348db-513b-4a2e-b11f-907e80b65177)

## Changelog

🆑 GoldenAlpharex
add: Added Biomes capabilities to the Cave Generator, to allow for
procedurally-placed biomes to be introduced in cave generation. This
feature is not currently used on any map, but the tools are all there
for anyone with the motivation to add biomes to any cave-generating
area, like Lavaland and Ice Box.
code: Biomes can now affect features (which are usually structures), on
top of flora and fauna.
/🆑
2024-06-04 12:33:40 -07:00
DragonTrance 89650214fd [MDB Ignore] Refactoring Flora code (#66978)
* organizing flora file and icon states, & flags

Changes the typepath for a lot of flora, and adds new paths depending on the amount of icon states the flora had, for better modularization on mappers. Also adds flags to the flora depending on what type it was, instead of 3 bools

* Getting ready to attempt to modularize flora

Moving most vars and procs from ash flora into the normal flora type path, as a general preparation to add more here

* Weighted products & Region Messages

Rewrites flora code so a flora's produced items can be initialized with a weighted list. Also has some improvements, relating to item stacks.

Adds an option via variables to separate 3 messages into 3 possible regions, or the old method where the message changes when the value is exactly the same as the low or high harvest value

* organizing + documentation on procs

* Documentation, Organization & Modularization

(DOMing) yeah, I dom
Gives variables for tools that can harvest flora, a blacklist of them, and modularizes variables a bit.

Retypes the stump to be a subtype of a tree, which just deletes after being harvested

* Adds the ability to uproot flora with a shovel

* added eswords to the list of things that can cut

* ausbush junk

* code review appreciation + changing drag_slowdown

* more code review appreciation

* kirbyplants ComponentInitialize() -> Initialize()

* forgot glob.
2022-05-16 00:00:54 -07:00
LemonInTheDark 0e904f7032 [MDB IGNORE] Moves non floor turfs off /floor. You can put lattices on lavaland edition (#65504)
About The Pull Request

Alternative to #65354

Ok so like, there was a lot of not floor types on /floor. They didn't actually want any of their parent type's functionality, except maybe reacting to breaking (which was easy to move down) and some other minor stuff.
Part of what we don't want them to have is "plateable" logic.
I should not be able to put floor tiles on the snow and be fine. It's dumb.

Instead, I've moved all non floor types down to a new type, called /misc.

It holds very little logic. Mostly allowing pipes and wires and preventing blob stuff.
It also supports lattice based construction, which is one of the major changes here. I think it makes more sense, and it fixes an assumption in shuttle code that assumed you couldn't place "a new tile" by just hitting some snow with a floor tile.
Oh and lattices don't smooth with asteroid tiles anymore, this looks nicer I think.

Moving on to commits, and minor changes

Changes clf3 to try and burn any turfs it's exposed to, instead of just floors
Moves break_tile down to the turf definition, alongside burn_tile
If you're in basic buildmode and click on anything that's not handled in a targeted way, you just build plating
FUNCTION CHANGE: you can't use cult pylons to convert misc tiles over anymore
Generalizes building floors on top of something into two helper procs on /turf/open, reducing copypasta
Adds a new turf flag, IS_SOLID, that describes if a turf is tangible or not.
Uses this alongside a carpet and open check to replace plating and floor checks in carpet code. This does mean that non iron tiles can be carpeted, but I think that's fine

Moves the /floor update_icon -> update_visuals call to /open
This change is horrificly old, dating back to 8e112f6 but that commit describes nothing about why it was done. Choosing to believe it was a newfriend mistake. Uncomfortable nuking it though, because of just how old it is. Moving down instead

Create a buildable "misc" type off open, moves /dirt onto it
Basically, we want a type we can use to make something support
construction, since that can be a messy bit of logic. Also enough
structure to set things up sanely.

I'm planning on moving most misc turfs onto it, if only because
constructing on a dirt tile with rods should be possible, and the same
applies to most things

Murders captain planet, disentangles /turf/open/floor/grass/snow/basalt

Adds a diggable component that applies the behavior of "digging"
something out from a turf.

Uses it to free the above pain typepath into something a bit more
sensible

The typepaths that aren't actually used by floor tiles are moved onto
/misc

The others are given names that better describe them, and kept in
fancy_floor

Oh and snowshoes don't work on basalt anymore, sorry

Snowed over platings now actually have broken/burned icon states, fixing black holes to nowhere

Misc turfs no longer smooth as floors, so lattices will ignore them

Placing a lattice will no longer scrape the tile it's on

Ok this is a really old one.
I believe this logic is a holdover from kor's baseturf pr
(97990c9)
It used to be that turfs didn't have a concept of "beneath" and instead
just decided what should be under them by induction. This logic of "if
it's being latticed scapeaway to space" made sense then, but has since
been somewhat distorted

We do want to scape away on lattice spawn sometimes, mostly when we're
being destroyed, but not always. We especially don't want to scape away
if someone is just placing a rod, that's dumb.

Adds a path updating script for this change

I've done my best to find all the errors this repathing will pull out, but I may have missed some. I'm sorry.
Why It's Good For The Game

Very old code made better, more consistent turfs for lavaland and icebox, better visuals, minor fix to snowed plating, demon banishment in lattice placement, fixes the icebox mining shuttle not being repairable
Changelog

cl
add: Rather then being tileable with just floor tiles, lavaland turfs, asteroid and snow (among other things) now support lattice -> floor tile construction
fix: Because of the above, you can now properly fix the icebox mining shuttle
refactor: Non floor turfs are no longer typed as floor. This may break things, please yell at me if it does
/cl
2022-03-16 15:55:56 +13:00
TiviPlus 9fb0c73f63 Grep for proc(var/bad) (#54848) 2020-11-09 08:44:35 -03:00
Qustinnus 11a00bd3c7 Implements jungle generation and area map generator datums (#51082) 2020-08-29 03:18:19 -07:00