pfqniet / satisfactorio Goto Github PK
View Code? Open in Web Editor NEWFactorio mod that brings Satisfactory mechanics
License: GNU General Public License v3.0
Factorio mod that brings Satisfactory mechanics
License: GNU General Public License v3.0
Currently the active state of the output belt/pump is used to determine if a truck stop or freight platform, which is not ideal. It should instead be stored as a property of the global object so it can be toggled.
The omnilab currently gets built with the HUB and receives all the HUB/Space Elevator placeholder items when really it just needs the MAM ones. This also makes it crash when you use Creative mode to build a MAM without first building a HUB. This should be fixed by making the Omnilab work with the MAM instead.
Vehicles should be destructible (but can resist everything 100%). Then, when damage is taken, they can propagate it to passengers within.
Biters appear to despawn after some time of inactivity. This is probably fine in vanilla since the base will just spawn more of them, but when only a limited number are spawning it's an issue.
Possible fix: when enemies are spawned, assign them to a unit group and poll them to keep them patrolling their point-of-interest. This should also help them return to spawn when the player runs away.
Need to find some way of getting enemies to stop fixating on cars. One idea might be "if a car takes damage from an enemy, tell the enemy to knock it off", which should force a re-target.
eg. Storage Container
The to-do list is supposed to count down one but it doesn't.
Handcrafting will be restricted to turning materials into buildings for placement - and deconstructing buildings will return the components used to build it. This means more traditional handcrafting will be done in the Craft Bench.
The Craft Bench will be a manual assembling machine, possibly with custom GUI "Craft" button that must be held down to power it. It's basically the complete opposite of automation!
It cannot be used to craft Space Elevator items, recipes involving fluids, or alt-recipes.
It can, however, be used for "smelting" recipes. So you can hand-smelt iron ore into ingots, cuz that makes sense!
Multiplayer note: Satis prevents opening the GUI if another player is using the Bench - I don't think this matters here because two people pressing the Craft button won't make it craft any faster! But it may be possible to implement anyway.
Currently various EEIs use a large energy buffer, followed by script "deleting" energy to consume it. It should, instead, use a small buffer and just set its consumption appropriately based on how often the building is pinged and how much power it needs to consume over that time.
When power demand exceeds production, rather than just scaling down, the entire network should trip out.
To this end, each "generator" should track its power production to see if it maxes out at any point. If it does, it should be disabled.
The API doesn't appear to give easy access to "max power output", but it can be worked out:
entity.energy_generated_last_tick
entity.fluidbox[1].temperature
game.entity_prototypes[entity.name].fluid_usage_per_tick
game.fluid_prototypes[entity.fluidbox[1].name].default_temperature
game.fluid_prototypes[entity.fluidbox[1].name].heat_capacity
energy_generated_last_tick should not exceed (or get too close to) capacity * (temp - default_temp) * fluid_per_tick, or else it triggers a blackout.
This can be checked every nth-tick, and possibly optimised by keeping a list of power networks that have already been checked so we don't bother checking multiple generators in the same network. Alternatively, do! The player may disconnect networks while the power is down, and in this case should reset each network independently.
Keep a global table of "tripped power networks". When opening the GUI of a generator, if it is part of a tripped network, present an additional GUI to reset the fuse. This will disable the "blackout" interfaces on the network, to be checked again next nth-tick event. Note this means the generator has to have an openable GUI, so for multi-entity structures make sure this works!
The Crash Site is to be replaced with the Drop Pod. When deconstructed, it gives HUB Materials that are then used to craft and build the HUB.
The HUB has a few extra bits attached, with more added throughout Tier 0. To start with, it just has Terminal and Craft Bench.
Craft Bench is basically a manually-fed assembly machine. Potentially can be made to have a "Craft" button that must be held down for the machine to work. Cannot be used to craft Space Elevator recipes, or recipes requiring fluids, or Alt-recipes.
Terminal could be a storage chest with ~4 slots (filtered? is that possible?) and a custom GUI for Milestone selection. When the slots are filled with the appropriate amount of items, the button can be pushed to complete the Milestone and unlock more stuff.
Personal storage is a simple chest with 25 slots.
Biomass Burner is a burner power source. The HUB version is smaller but has less capacity than the standalone version. Two of these get added throughout Tier 0.
Enemies no longer have spawners. Instead they spawn around points of interest, such as resource nodes.
Combat is more melee-focused, with ammo-based weapons being mid-to-late game and very expensive compared to vanilla.
Enemies can be reskinned to their Satisfactory counterparts.
Note for Flying Crabs: they need to bounce off the player after landing a hit. This can be done by calling "entity damaged" with a flying crab as the cause, and giving that crab a "run away" command for a little while. Similar behaviour may be helpful for when an enemy is damaged by impact damage (ie. from a car), have them flee.
Xeno-zapper (default weapon)
Xeno-basher (upgraded weapon range/damage)
Rebar gun
Rifle
Nobelisk
Biters > Hogs
Spitters > Spitters
Flying crabs
Duplicate biters > Crawlers
Arachnophobia mode for Crawlers
Worms > Spore Flowers / gas rocks, one or the other for a given "base"
Alpha Hogs
Alpha Spitters (red)
Alpha Spitters (green)
Bigger Crawlers
Resources will be spawned as individual, infinite tiles. Each "node" will be a 3x3 square, and nodes can come in "fields" of several nearby nodes. Starting area will have Iron, Copper and Limestone - other resources will spawn elsewhere. Nodes will then be guarded by enemies.
Ore spawning can borrow ideas from RSO, and will be modified by world settings. Frequency works as normal, Size refers to number of nodes in a cluster, and Richness modifies the chances of impure/normal/pure nodes.
Snap foundations to nearby foundations, or to a foundation ghost if present. This should make it easier to build in straight lines.
There will be two types of miners:
Portable Miner is a 1x1 entity with attached 1-slot inventory that its mining results go into. It requires no power, but cannot output anything automatically.
Miner Mk.1-3 are 5x3 entities that only have a 1x1 mining area - this allows the player to place them anywhere on the resource node, but only one of them. They require electricity. Each tier has double the mining speed of the last, at 1, 2, 4 per second respectively.
Miner Mk.1
Portable Miner
Miner Mk.2 & 3
First of all: amazing idea, i was also thinking of implementing such a mod never started doing so ❤️
Are there any plans to bring this mod to the mod-portal? i am quite sure there is a lot of interest in your mod and it would definetly increase visibility.
Currently items are spilled around the assembler when the GUI updates, which is just... messy. It's especially bad for the Space Elevator as input may be fully automated and would just result in a build-up of spilled items.
Instead, leave the items in the building and "spill" them into the player that clicks the Submit button (or on the ground around them if it doesn't fit).
Smelters take one input and one output, so the built-in Furnace can work just fine as a base. Although that would allow mixed belts to be smelted through one furnace, that's probably fine. If you really want to do mixed smelting, who am I to judge? Apparently one furnace-type building is required to exist otherwise the game crashes, so might as well do that.
Smelters - and all automated buildings - will have Loaders attached to them. In this case, one input and one output. They will have basically infinite speed as they should never be the limiting factor. The input belt determines input speed, craft time determines craft speed, and output belt determines output speed. Loaders conveniently work exactly like Satisfactory already, shovelling a full stack of items into the building before stopping. Loaders should be set to Not Operable.
So completing this task will also lay the groundwork for Constructors, Assemblers and so on.
Foundation can be implemented as a pseudo-entity that is 4x4 (for scale with machines) that, when placed, also sets the tiles underneath itself to be stone bricks. When deconstructed, it uses the hidden_tile
property of the tiles to reconstruct what was underneath them.
Some entities have more than one part to them, namely truck stations (and their fuel container), drone ports (input/output/fuel) and possibly other entities that could benefit from custom UI.
It might be worth looking into adding a tab list to the relative
gui for these entities to make them more coherent as individual units.
A lot of stuff in vanilla Factorio won't be here. They need to be removed.
Change up how crafting works so that beginning to craft a building places a ghost in hand. Placing a ghost will pull ingredients from your inventory to build it. Mining a building restores the items (if possible - Factorissimo buildings can't be disassembled)
Keep the various "undo" recipes but don't unlock them. They can be used to quickly lookup if a mined entity has an undo recipe, rather than searching all recipes for a match.
It may be needed to have buildings be "only in cursor" items, so that real buildings get placed. On placement, take items from the inventory and put another building in the cursor. This allows reviving ghosts from a copy-paste.
Be sure to add a fancy GUI showing the items needed to build along with how many you have in your inventory!
Rework Rocks into Resource Deposits, which can yield any resource (although probability is based on distance from starting area so you don't get too much endgame resources really early). Uranium deposits are extremely rare, but can appear as a hazard around points of interest further out.
Trees can be mined but a Chainsaw makes it much easier. When mined they yield wood as well as leaves, and possibly other stuff too.
Add in grass that can be gathered for biomass, but don't impede building/movement like trees do. Could do flowers as well.
Unlocked as part of Tier 3, Coal Power uses a power plant to convert coal and water into power, giving the player access to automated power generation.
It's basically like a jetpack but has an EEI following you around that consumes 100MW with a wide area for "finding" a connection. Separately it draws a beam to the nearest power pole for the visual effect. If power runs out, it drops you.
When the player dies, add a tracking ping to point to their corpse.
Pressing Enter while in Jetpack flight currently consumes another 2 fuel and refills the bar. This either needs to be patched out, or improved into an actual feature.
If made into a feature, it might be best to have it inject 1 fuel into the jetpack to give another 3 seconds of flight.
May need to rework the power trip system, since using accumulators may not be feasible with the addition of batteries to Satisfactory.
Also, generators should constantly produce at 100% output, except for Biomass Burners. This may be possible by replacing the power-trip detection entities with energy voids, and if the energy void isn't getting power then trigger blackout. Again, this may need wrangling with energy priorities, and may not even be possible since they would need to have lower priority than batteries to avoid discharging them. Alternatively, have two separate entities for battery charge/discharge, and the power-trip logic can first check for batteries to use, flipping them to the other mode as appropriate. This way, factory buildings can have primary
status (normally reserved for active defence ie. laser turrets), batteries can be secondary
, and the power-trip detectors can remain tertiary
. This flip can also trigger some GUI notification so that the player is aware of discharge occurring.
Geothermal generators would be made more interesting with variable power generation. Since these can only be built in limited numbers (on a suitable resource node), this can be updated basically realtime without any actual issues. It's not like you're gonna be building a thousand geothermal generators!
AI has been improved to allow the car to just pass through waypoints that have no wait time, provided the car isn't steering (ie. it's going straight through).
The waypoint system itself should be reworked to record a path rather than require manual waypoint markers. When recording, driving straight doesn't place waypoints but turning does at intervals based on speed, so you can drive slowly to get close-together waypoints or round corners fast to get just a few points added.
This should hopefully make recording paths more intuitive, and UI can just be limited to "record, pause here, end recording" -- although to end a recording, you need to be within a short distance of the start point.
Satisfactory is expected to release Update 4 in early February. This is expected to overhaul Tier 7 and extend it further, likely meaning more new content is coming.
As this is so near in the future, it doesn't make too much sense to release Satisfactorio right now, only to have it become potentially incompatible with Update 4. For this reason, release is deferred until Update 4 is implemented here.
Experimental build brings some new features, let's get those in:
When Crash Sites are disabled on the map generator, make Hard Drives available from the Awesome Shop so that alt recipes can still be accessed. They should be expensive, maybe 10 a pop.
This will allow players to play without the crash sites, as they are permanent obstacles that cannot be removed by any means.
The M.A.M. is basically the new Lab. Or rather, it's the interface into the secret hidden invisible lab that does the real research.
If possible, disable the player's permission to control/start research, so the mod takes over managing it via this building. Even better would be to disable the permission while research is in progress, and re-enable it when research is complete, so I can use the tech tree GUI for research selection and the M.A.M. for ingredient collection.
The GUI shows the items needed to begin the selected research. Once submitted, the "secret" lab begins its process until it is complete.
"Hard Drive" can be an infinite tech, with special handling to select a reward from the three given. This unlocks alt-recipes.
When a pipe/pipe-to-ground/pump/storage-tank is opened, add a bit of GUI to track fluid flow.
Some entities use a custom GUI that replaces player.opened
. However, they don't auto-close when the player walks away from the entity. This is especially awkward given that entities require you to be close enough in the first place.
Kinda like the HUB terminal really, except it has loaders to receive items automatically. (Not that I've ever used them, I just carry stuff there manually!) Unlocks further tiers when complete.
The Refinery takes one solid and one liquid input, and produces one solid and one liquid output. This will necessitate the use of fluid boxes.
Tameable creatures!
Radiation is by far the most UPS-costly feature, and mostly because of the cost of checking conveyor belts for radioactive items.
One way of improving this would be do decrease the frequency of updates. Stationary entities don't change much, if at all, and even transport belts moving items around don't change all that often - either they're carrying radioactive stuff or they're not, and the amount is usually fairly fixed. Vehicles, however, may travel long distances in short times, carrying radioactive materials with them. Vehicles tend to be much fewer in number, compared to belts that can easily be in the tens to hundreds of thousands.
It might be a good idea to rework radiation to track stationary entities and vehicles separately, updating the radiation in a chunk whenever a vehicle crosses boundaries. It's worth noting that with player interaction, vehicle contents can "teleport" across chunk borders if the player transfers items into/out of the vehicle from over the border. So a naive solution won't necessarily work here.
Instead, tracked vehicles would need to keep track of their current radiation levels. Then when the chunk updates (or when the vehicle crosses a border) then its value is added to the background radiation total.
There is code to ensure that resource nodes near (0,0) aren't too heavily guarded. This should tie in with the "starting area size" map setting.
Some resources will be available in "resource wells", that are done in two parts. First, place a pressuriser on the node itself. This activates the surrounding nodes. The pressuriser is where modules can be placed.
Detecting the addition of modules to update the surrounding points might be tricky, but might be doable if the machine is checked when the player fast-transfers a stack (ie. places modules in from the overworld) or closes the GUI (a bit delayed but better than nothing). Worst-case, add some custom GUI for the machine.
Conveyor Splitters/Mergers can be implemented as a box with inputs and outputs around it. To prevent the box from being filled with a full stack, the input(s) are wired with circuits to only be enabled when the box is empty.
Smart Splitter has a UI to set one filter on each output. Programmable Splitter allows up to 5 (Factorio's limit).
Any Undefined can just negate whatever filters are set, up to a limit of 5 (UI should show a warning that it won't work if this limit is exceeded between the other two outputs)
Overflow can be implemented by wiring the output inserter to the other ones, reading the other hand contents and activating if all other inserters are full of stuff.
When building a pole by dragging, the "on_pre_build" function is called even when a pole isn't built. This needs to be fixed!
When adding new entities to the HUB, it should check for collision with characters and units and bump them out as needed.
Drones can be implemented using Spidertrons, grabbing some stuff from Companion Drones mod to allow them to fly around rather than using legs.
They are powered by batteries. The Drone Port is basically a copy of the Truck Station but it has two separate cargo containers - one for import, one for export. A drone will pick up batteries and up to 9 stacks from the export container, then travel to its destination. On arrival it deposits items in the import container, waiting until there is room if necessary - and also waiting its turn if there are more than a single drone arriving simultaneously. Once its cargo is empty, it can pick up from the export and return to its starting position.
Rather than picking up a full stack of batteries, try to calculate how many batteries are needed for a round trip - plus some safety margin - and only pick up that many.
Drones should fly quite quickly (250kmh), but docking/undocking takes 25s each.
The port holds 18 stacks on each side. A drone holds 9 stacks.
Building the UI is gonna be... "fun".
The Constructor, Assembler and Manufacturer are three tiers of machine that convert 1, 2, (3/4) ingredients respectively into 1 output.
The Foundry is basically an Assembler but for smelting-type recipes.
These can use the Loaders implemented in #6 for their inputs/output.
Entities that should be processed once per X ticks currently just exist in one big table. This should be spread out over buckets instead.
When adding items from the Recipe Browser to the To-Do List, add support for right-clicking the button to add 5, or shift-click for a full stack of the item.
Would be nice if it were mappable to the actual controls as well.
Crash Sites take a certain item in a certain amount, and/or some power. Once opened they yield one Hard Drive, which can then be put into the MAM to unlock an alt recipe.
If no alt recipes are available, either due to being behind later milestones or just all being done, then the Hard Drive is refunded.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.