Code Monkey home page Code Monkey logo

satisfactorio's People

Contributors

astorin avatar pfqniet avatar timvroom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

satisfactorio's Issues

Refactor Omnilab

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.

Fixes enemies despawning

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.

Enemies get distracted by empty cars

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.

Craft Bench

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.

  • Basic entity that requires no power and can craft/smelt
  • Add GUI for craft button and enable/disable based on it being pressed.
  • Equipment Workshop - basically the same thing

Rework EEI to be continuous

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.

Blackout

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!

  • Track power and react to excessive usage
  • Create blackout entity
  • Add GUI to generators to allow resetting power

The Hub

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.

  • HUB building
  • Auto-place additional components on construction, and remove on deconstruct (make sure to give the player/spill anything in the storage chest!)
  • Terminal: milestone selection GUI
  • Terminal: accept items
  • Terminal: complete milestone + unlock new stuff
  • Craft Bench: #4
  • Storage Chest
  • Biomass Burner(s)
  • Freighter - basically a rocket silo that launches free rockets purely for the animation
  • Cooldown on use, except for Tier 0

Enemies / Weapons

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

Resource spawning

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.

  • Remove vanilla ore spawning
  • Add custom ore spawning
  • Make ore spawning respond to map settings
  • Remove sulfuric acid as a requirement for Uranium (it will be part of refining instead)
  • Scale resources according to starting area size - coal shouldn't be too far, oil beyond that, caterium/quartz/sulfur after that, uranium/bauxite far out
  • Spawn some enemies near resources, except for starting area

Foundation snapping

Snap foundations to nearby foundations, or to a foundation ghost if present. This should make it easier to build in straight lines.

Miners

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

Mod portal

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.

Move HUB/SE item overflow handling to submission-time

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).

Smelter

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.

  • Basic building
  • Loaders

Foundation

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.

  • Foundation construction
  • Deconstruction
  • If the player attempts to deconstruct it but is standing on it and the hidden_tile is a water-tile, abort deconstruction

UI improvements for multi-component entities

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.

Remove vanilla stuff

A lot of stuff in vanilla Factorio won't be here. They need to be removed.

  • Inserters (replaced with built-in loaders on buildings)
  • Default assembly machines
  • Default furnaces
  • Lab / science packs / research in general (although this could be repurposed for the M.A.M.)
  • Default guns
  • Oil refinery, chem plant, rocket silo, etc.
  • Do actual removal of all unused entites!

True build gun

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!

Resource deposits/trees

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.

  • Rocks become Resource Deposits
  • Trees yield extra stuff
  • Add chainsaw
  • Grass (flowers?)

Coal power

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.

  • Coal Power Plant
  • Accept other fuels, ie. pet-coke

Hover Pack

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.

Corpse tracker

When the player dies, add a tracking ping to point to their corpse.

Extendable jetpack flight?

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.

Power changes

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!

Improve self-driving AI

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.

Update 4

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.

Newer stuff

Experimental build brings some new features, let's get those in:

  • Packager (unlocked in Tier 5: Alternative Fluid Transport, takes over for the Refinery doing packaging/unpacking fluids)
  • Valve (unlocked in Tier 6: Expanded Power Infrastructure, allows configuring a set max flow rate and for the pipe - so basically a configurable pump)
  • Pipeline Mk. 2 (Unlocked in Tier 7: Bauxite Refinement, a pipe with increased flow rate and a pump to go with it, should allow double the flow over 50 pipe length)
  • Adjustable jump pad range

Alternative alt recipes

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.

M.A.M.

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.

  • Building
  • Research as technologies
  • GUI to show what items are needed for the selected technology, and submission system
  • Invisible lab to do the real researching

Custom entity GUI auto-close

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.

  • Smart/Programmable Splitters
  • Small Biter pets
  • Valve
  • Crash Sites
  • Beacons

Space Elevator

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.

  • Building
  • GUI for what items are needed
  • "Pack" and "Send" buttons
  • Update max tier available in HUB on successful launch

Refinery

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.

  • Refinery

Lizard Doggo

Tameable creatures!

  • Start wandering
  • If player approaches, be wary
  • If there's a Paleberry on the ground, approach and eat it, becoming tamed (unit registered)
  • Follows its master around
  • GUI has a slot for collecting found items, as well as a button to instruct it to "stay"
  • If the owner moves too far away, it will start wandering instead - this also applies if a "stay" command is given, or if the player dies
  • Approaching a wandering pet will have it start following you again

Radiation improvements

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.

MAM tech items

  • Rebar Gun
  • Blade Runners
  • Smart Splitter
  • Programmable Splitter
  • Geothermal generator
  • Explorer
  • Rifle
  • Nobelisks

Resource wells

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.

Splitter/Merger

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.

  • Conveyor Splitter
  • Conveyor Merger
  • Smart Splitter
  • Programmable Splitter
  • Overflow
  • Any Undefined

Build gun + power pole

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!

HUB collision checks

When adding new entities to the HUB, it should check for collision with characters and units and bump them out as needed.

Drones

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".

Constructor etc.

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.

  • Constructor
  • Assembler
  • Manufacturer
  • Foundry

Optimise script-driven entities

Entities that should be processed once per X ticks currently just exist in one big table. This should be spread out over buckets instead.

  • Valve
  • Fuel Generator
  • Train Station
  • Truck Station

Crash Sites

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.

  • Crash Site
  • Get Hard Drive
  • Put Hard Drive in MAM
  • Present options for reward (or refund Hard Drive)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.