NIFE Updates Shatterloop Game Projects Shatterloop Updates
Other Projects Blog    


III. Bases Checklist

Posted 6 Months ago by Xhin

Storing the checklists in here.

Page 1
  • Base Coloring System
  • Pylons Misc
  • 1. Inventory Limits
  • 2. Backpacks
  • 3. General Crystechs
  • 4. Specialized Crystechs
  • 5. Crystechs Retrieval

    Page 2
  • More Misc
  • Minor Rework -- Should really do this first

  • There are 9 Replies

    Base Coloring System Checklist

    Other edit menu

  • Have an area where you can "tag" colors -- should reference the prebuilt functions and use auto-dupe selects and --New-- inputs. All this should happen automatically without saving.

    Edit Color Integration

  • Hook the actual dyes that are rendered into which dyes you have materials for.

  • Show the amounts you have next to the name.

  • Max the amounts out based on how many you have (or 5 if it's higher than 5).

  • When confirmed, remove the appropriate amount of dyes. Then .render_dye_table().

  • If there are no dyes in place, tell you as much and don't let you do anything in this menu.

  • If you have no dyes, don't give you the "Dye Color" option at all in the previous menu.

    Combining Menu

  • The two colors should appear at the top, and the preview should also appear (should just be a 50/50 average of the two by default).

  • Have 8 selectable links with 50% at c.sel. Store logic internally and bind links.

  • These links should use the appropriate colors function to alter the preview based on the two base colors.

  • Have an "Add Color" button. This should remove 10 aether, give an error if not enough, do the internal stuff, and then run .created_colors().

  • Make sure the created_colors area gets reset when you reopen the menu.


    These alter the improve palette colors list.

  • filter_none() -- Just renders everything.

  • filter_tags(tag) -- based on the internal tags dataset.

  • filter_natural() -- runs the entire list through a filter of whether it's colors.near() gen.solid or gen.get_floors (or whatever that endpoint was). This should use an internal "color_closeness" variable which I guess I'll set to 20 for now.

  • filter_similar(name) -- Filters based on the idealized colors in .dyes and the "color_closeness" variable.

    Dying Base Fixtures

  • If you have any Dye in your inventory, when opening a base fixture have a "Dye Base Fixture" button.

  • This menu should show the symcolor and xcolor (probably just white) in a really big display.

  • You can pick either the "Font Color" (xcolor) or "Background color" (symcolor).

  • A dye table will render below. Generalizing the dye table code makes sense here.

  • The preview will affect the xcolor and symcolor of the giant object.

  • Saving the changes will subtract the appropriate amount of dye, leave the menu, alter the actual fixture and then re-render the map.


    This is my next project. Since I'm going to be making changes to Bases anyway, this system will make it a bit more enjoyable. It also looks like everything in here is fairly easy to set up.

  • 6 Months ago
    Sky's the limit

    Pylons Misc

  • Pylons need to let you place other Pylons near them.

  • Pylons could let you access your base inventory remotely.

  • You need a way of moving pylons to other dimensions.

  • 6 Months ago
    Sky's the limit

    New Bases Checklist

    Rewiring this since it's the next project.

    New Bases Update 1

    Backpacks Update

    Inventory Limits Framework

  • I guess for now, add a .cat_limit property in inventory{}. A straight number, maybe 10 or so for now.

  • Go through list{} and add more handcrafted "limit" properties to any category that makes sense -- having less weapons or more raw materials makes sense.

  • Also add a datapoint is_heavy{}.

  • Also have a .cat_total{} property.

  • When you add some quantity of an item, update the .cat_total to reflect the total number of items in that category.

  • Same deal if you remove an item.

  • Check for other hooks as well.

  • Check for lists.item_cats[cat].limit or failing that the internal cat_limit -- if the total is over that, set is_heavy[cat] to true. If it's below it, delete that datapoint.

    Inventory Limits Functionality

  • Each inventory category in the display should show a total, the slash and the max. Use the above datapoints to get that.

  • If you're above capacity, put the numbers here in red and larger and also say that you're "encumbered" and need to drop items. Mention backpacks.

  • If you've unlocked the atomizer bypass, tell you that you can also atomize unwanted items.

  • Change is_heavy to an object list.

  • On the move event, check the obj_size of is_heavy. If it's not zero, put a big red "Encumbered by X,Y,Z" under your stats. Give you only a 33% chance of moving.

  • Encumbered item categories in the main screen should be vaguely red so you know what the exact problem is.

  • Add a _no_heavy debug tool that bypasses these limits.

  • 6 Months ago
    Sky's the limit

    New Bases Update 2

    Backpacks Framework

  • Create a "Prefab" material. This can be constructed from a large variety of things.

  • Alter "Bags" to "Backpacks" and change all instances.

  • Add a "Backpacks" recipe to Miscellaneous I guess. Maybe rename that category to Tools or something. Backpacks are crafted from a prefab and a unit of twine.

  • The backpacks recipe should use the itemgen.

  • The name should be based on the category -- look for a cat_X where X is the cat in the proc list, and if it doesn't exist just use a deslugged cat itself, but this will add some optional flavor at least. I should add a few alternates here.

  • The name should also be some kind of bag or backpack -- do some wiki browsing again.

  • Propgen a random category and a random magnitude from 5 to 30. 5 to 10 should happen 75% of the time and 10-30 25% of the time.

  • Make sure both the ingredients-based propgen and the itemgen are working -- could potentially be tricky but I need both the name and the propgen somehow and can hook them together whichever way I want for loot handling.


  • Add a "Wear" tab. For now, always available and fairly early on. Might move it to the "Use" menu later.

  • Add a backpacks{} object with a .data{} datapoint.

  • Add an upgrade(cat,amt) function that adds that cat if it doesn't exist and increments it by the amt otherwise.

  • When you open the backpacks menu, list all backpacks in a table that shows their name, what they upgrade (and by how much) and a "Wear" button.

  • When you click that button, use the upgrade function, take the appropriate backpack and then reopen the menu. This should automatically refresh the inventory correctly, but make sure, ideally with the appropriate category encumbered and opened.

  • Add the backpack upgrades to your overall limits in inventory{}.

  • Allow you to starseed backpacks directly in here somewhere. Actually starseeding seems like a useful feature in general with ropes or weapons or w/e. Maybe should come up with some notes for it.

  • Clothiers should always sell backpacks. Maybe other shopkeepers can too.

  • 6 Months ago
    Sky's the limit

    New Bases Update 3

    Crystechs Menu

  • List the three types and their description. Indicate that specialized and aggregate require activation prior to use. Have buttons to place them -- this is free at least.

  • Mouse events and placement functions should place something fairly rectangular and maybe 3x as tall as wide. Universal are white, specialized are a med-dark gray (555 maybe), Aggregate are black.

  • Store crystechs internally and their type and an activated state of false (via the region, world_type, world_floor and key similar to pylons). Universal have an automatic activated state of true.

    Crystechs Activation

  • Specialized require 3x quartzdshards or starshards -- I guess just give the appropriate buttons based on which ones you have enough of or show a message otherwise.

  • The buttons should take the appropriate items and change the activated state to true.

  • Aggregate require 200 Aether. Have the appropriate button or message like the above so this can all fit into one endpoint.

    Specialized Crystechs Menu

  • The menus from here on out should be based on the type of crystech -- should probably have separate internal functions as well as separate hidden menus.

  • Specialized Crystechs should have an internal "cat" variable. If they don't have one, let you pick a pmlike backpack (which should already tell you what type of category they are via the name).

  • Add a .cats_placed{} datapoint.

  • This function should alter the fixture's color to reflect the color of the category (gameseed-specific for now I guess). Update the cats_placed[cat] datapoint to +1 or set it to 1 if there are none.

  • It should take the appropriate backpack and store it internally like how pylons work with jewelry. Then refresh the menu.

  • If they have an internal cat, let you "Retrieve Backpack".

  • This should put the backpack back in your inventory, erase that datapoint (and the cat) from the crystech and change its color back to gray. Storing the specific gray color internally makes sense at this stage of things since it's in use twice.

  • Decrement the .cats_placed[cat], or delete it if it hits 0.

  • 6 Months ago
    Sky's the limit

    New Bases Update 4

    Specialized Crystech Reseeding

  • Hook in a crystech.init() to the game init. This function should rearrange all item categories in a random order and store them internally.

  • Show the item category name down below the "Retrieve backpack" thing. Have a button to reseed -- should indicate 3 quartzshards and also which category it turns into via the sequential thing above and its modulo above.

  • Run the functionality appropriately, showing an error message if it doesn't work. This should also alter the cat of the stored backpack.

    This has an unintentional effect of being a way of modifying backpacks, which is pretty cool so I'll be keeping it in as a feature.

    Aggregate Crystechs Linking

  • Have a "Cats" text list up at the top, or N/A if there aren't any. This should reflect the fixture's linked_cats[] datapoint. Have a button to change these.

  • That should open a little submenu that lets you pick up to 5 types based on the .cats_placed datapoint. Idk what the UI for this will be yet -- probably a pmlike thing with colored sels like potions.

  • The save button should then save the .linked_cats internally, close this submenu. Make sure it's reflected in the list above.

    Crystechs Storage Functionality

  • Have a button up at the top of wherever the actual storage mechanism is (something common to all activated crystech menus) called "Activate Storage Mode".

  • This should change the button to "Deactivate storage mode" and set some internal variable here or in inventory{}

  • Deactivate storage mode should do the opposite.

  • Either way, when storage mode is on, have a button in your inventory that lets you "Store" items.

  • This should use the appropriate base_storage{} function on it.

  • 6 Months ago
    Sky's the limit

    New Bases Update 5

    Crystechs Listing/Retrieval Functionality

  • Have a crystechs.list([cats]) function.

  • Take the cats, and run it through the base_storage{} object to get the appropriate base inventory.

  • Take this data, and put the item name, quantity, and color in a table, along with a button for "Take" and one for "Atomize" (with the appropriate amount).

  • Universal crystechs set cats to '__all', which should just pull out the whole datapoint somehow.

  • Specialized crystechs use their internal cat variable.

  • Aggregate crystechs use their .linked_cats datapoint.

  • Atomize should do what you expect to atomize one. Refresh this menu. I think I need new functionality here since atomize probably only works on the inventory and not an object.

  • Take should also do what you expect via base_storage to take one. Refresh this menu.

  • Have "All" buttons next to take and atomize that take_all or atomize_all respectively. "Take All" and "Atomize All" might make more sense or might be burdensome.

    Universal Crystechs Limit

  • Alter base_storage{} so add, remove, add_all, remove_all will alter a .total_quantity datapoint based on the amts.

  • Add an internal .universal_limit datapoint, set to 50 for now.

  • On a universal crystech, indicate these numbers (and a slash) above the list. Make red and big if you've hit or exceeded the limit.

  • On [store], if you're activating via a universal crystech and your limit is too high, deactivate storage mode and tell you as much in the top of your inventory somewhere with a short message. Give a similar message instead of the "Store" button. However in this one, tell you to take or atomize items or to build specialized crystechs.

  • 6 Months ago
    Sky's the limit

    More Misc

  • I need a generalized function for being able to search the player and base inventories simultaneously. This could potentially get complicated if i_filter{} is in use anywhere in bases. If not though, doing cat and name searches should be easy to build out.

  • Pylon jewelry lists should access either.

  • I need to look at all fixtures and make sure this is happening across the board there as well.

  • Myriads will probably be essential to creating the Attractors for transdimensional portals. Attracting to the home dimension should be free though, which makes sense both from a gameplay perspective and from the lore.

  • 6 Months ago
    Sky's the limit

    Minor Rework

  • Kill base_inventory{} and all references, assuming it exists. Purge notes.

  • Clone the inventory object inside inventory the way gem genie does it.

  • Import the inventory-trading functions and make sure they work.

  • 3 Weeks ago
    Sky's the limit

    Reply to: III. Bases Checklist