Foundation

Remixer! for Foundation

Released (updated ago). Ranked 182 of 298 with 530 (0 today) downloads

Published by GarranPlum (mod ID: 1176829)

remixer_media_size_banner.png

remixer full width banner

Remixer!

Remix any parts from the base game, from any other mod, and from your own .fbx files to make your own mod in minutes. Powered by GPS 3, the low-code modding system for Foundation.

See a published mod made with Remixer!... Detailer by SkunkMonkey


New in Version 1.0

  • Quickly create your own mod from any combination of building parts in the base game.
  • Add your favorite mods as dependencies and use any parts from any mod.
  • Unlock the full power of GPS 3 with your own custom parts and .fbx files.
  • Bring together parts you like from different buildings and mods, all in one place.
  • Use the low-code GPS system to quickly add any part with a single line of code!
  • Organize all your parts into custom categories, regardless of where they came from.
  • Show your parts in any custom order in the build menu.
  • Includes 18 sample parts from the base game, from Barrel O'Fish, and from the included .fbx file.
  • Includes 3 sample mixes with base game parts, dependency parts, and your .fbx file parts.
  • Change up your mix without restarting Foundation with hot reload.
  • Save any number of mix configs and load any saved config with a single line of code.
  • Makes any remixed part free of costs and resource requirements.
  • Makes any remixed part moveable.
  • Add low-code workplaces, custom paths, attach points, and more.
  • 100% compatible with traditional Foundation modding. Remix your buildings, then customize.


Creating Your First Mix

  • Read the mod.lua header for a quick start with the three sample mixes.
  • See the Barrel O'Fish mod page for additional information on advanced configurations.


Why I Created This Mod

This is a more portable version of Barrel O'Fish which includes the latest version of GPS.

  • GPS 3 includes an ultra low-code syntax for quick remixing of vanilla and dependency parts.
  • GPS 3 supports multiple config files with selectable config and hot reload.
  • GPS 3 supports the full config syntax of GPS 2 (BoF) for workplaces, jobs, paths, attach points, etc.
  • GPS 3 includes many diagnostic and debugging features for your own mods.
  • GPS 3 includes many Lua utilities, including table serialization to a disk file.


Why I Created GPS

  • Popular Foundation mods and examples use the imperative style of programming, a to-do list written in order.
  • Imperative programming peaked in the 1960's and introduces a number of issues that are avoided in today's good practices.
  • One such concept is DRY or "Don't Repeat Yourself," meaning don't write the same code repeatedly. Imperative programming just does that.
  • A quick inspection of any traditional Foundation mod will show hundreds of lines of repeated code.
  • Repeated code introduces a copy-paste style of programming which leads to errors that are hard to find and fix.
  • When changes are needed, they must be made to every place you've pasted code.
  • Copy-paste code leads to spaghetti code that's hard for you, the copy-paster to understand. (It's called copy pasta for this reason.)

  • Foundation mods contain a huge number of magic words or string literals in quotes. This is also bad practice.
  • Magic words encourage typos and are extremely difficult to debug, as the IDE cannot detect or suggest them.
  • Magic words also have the same problems as repeated code when changes are desired.
  • Magic words reduce our understanding of a program. They're secret incantations with no rationale given for when or where they're used.

  • Finally, on its own, Foundation modding contains no configuration or tooling help. This means every mod must start from scratch or become a copy-paste of another mod.
  • When developing BoF, I quickly went from wanting one fish to six, along with several categories of other parts in a certain order.
  • Without configuration or tooling, adding those things to BoF would be huge slog through all of the bad practices I just mentioned.
  • If such tooling existed, it could move away from imperative programming and its unavoidable baggage.
  • Writing and using such tooling would lead to a deep understanding of Foundation modding.
  • Thus, GPS was born.


GPS Programming Features

  • GPS demonstrates many best practices in functional style and declarative programming.
  • GPS code is well-documented with explanatory function signatures and liberal full line comments.
  • GPS contains no global variables and does not pollute the global namespace.
  • GPS contains no magic words or string literals except in a dedicated magic words function.
  • GPS code is well-organized with simply named files, folders, functions, and variables.
  • GPS code is beautifully and consistently formatted throughout.
  • GPS uses tail recursion to run quickly and with low memory and stack impact.
  • GPS is 100% dependency-free pure Lua and requires no external tools or programs.
  • GPS is 100% original, handcrafted code and contains no copy paste code from any source.
  • GPS is rigorously tested with over 2,600 downloads and only one bug report, a typo in the UI.
  • GPS uses standard Foundation API calls without tricks or hacks.
  • GPS buildings and their properties can be changed with standard Foundation modding code after they're registered.
  • GPS-registered parts and standard Foundation registered parts can live together in the same mod.
  • GPS can be loaded without registering any buildings to give access to all of its functions in your custom mod.


Known Side Effects

  • Any parts you remix will be free of costs and resource requirements and moveable everywhere.

Credits & Acknowledgements

  • Thank you to SkunkMonkey for many suggestions which improved GPS!

Preview the Latest Version of GPS

GitHub Repo


Releases

FilenameSizeVersionAddedOptions
remixer2.zip1.2mb2.0.0

remixer1.1.1.zip1.19mb1.1.1

remixer.1.zip1.17mb1.0.0

Comments

Join the community or sign in with your gaming account to join the conversation: