User blocking / thread blocking feature Added Spirituality/Philosophy and Sexuality forums Surveys post type IMPORTANT: How the community feedback model works
Roleplaying Video Games Entertainment & Media Politics & World
General Spirituality & Philosophy Worldbuilding Creative Forum
The Sports Center Science, Math, & Technology The Nostalgia Forum Sexuality
Community feedback needed: Should GTX0 be geared towards kids or adults? add_comment New add_comment New request


Shatterlooop general checklists

Posted Over 1 Year ago by Riven

Turning this post into this since moving the other posts while preserving timestamps is tricky.

There are 12 Replies

Old Bases checklist

  • Make sure you can only place fixtures in the current room you're in, and not anywhere around the border (solids, doors). Otherwise give an error.

    Old Potions Checklist

  • Lootable ingredients should really be reflective of the ones in the world 90% of the time, but that is a much later project.

  • Maybe palettize the lootable ingredients instead -- would offer a larger selection but would still promote learning.

  • Saving successful recipes for later use. Delaying this because it's more of a polishing thing really.

    Old Manaflute Checklist

  • Make sure mana cracks don't conflict with other things that have been built. This is going to be a problem I'll need to solve for several systems, just making sure I'm not forgetting about it.

    Old Structures checklist

  • On active ruin load, deload previous alpha_dungeons in build{} if any. Hopefully won't affect the early alpha but you never know.

  • Over 1 Year ago

    Tricky Fixes

  • crafting shouldn't unselect the radio unless there are none left -- Tricky, requires fetching all the values initially (if there are any) and setting them up conditionally

  • be able to see what you can extract from an item before buying it. Route this code through an endpoint too. (i_props.extract makes sense) -- Seems to be tricky -- inventory items and shop items aren't stored the same way but the i_props function needs to have its variable in common with both. Once that's done though, the "extract" property gives you the type and you can route that and the item name through extract.get_types()

  • grappling ropes don't seem to gen what the crafting menu says -- probably related to the propgen-splitting update. Keep in mind there's an itemgen.twine() now.

  • crafting > back & notes should be displayed together and bigger -- This is going to take its own checklist -- ties into both crafting{} and notes{}

  • cave resource colors should be more spread out -- The right way to do this is with colors.HSV functions, which would be useful elsewhere. Spectrum-splitting functions would also make the home dimension's 5 colors better so they're not explicitly the same five colors over and over.
  • Second blockade bug (old seed isn't working anymore) -- this is a bit more complicated to fix than expected though I have some code already in rooms.build_wall()

  • Precious metals and gashrooms are visible outside of torchlight. Desatting their symcolors would be neat. A tricky fix -- requires rerouting light{} so that the explicit color isn't rendered there so its return can be used elsewhere in the table{} code.
  • Starshards are impacting <td> heights. Probably crystals as well. Looks like a complex fix. There's not even a simple way of fixing the CSS.

  • Envoidened doors in towns are still rendered -- Houses{} store their data internally, so there is a ghost entry. I need to think this one through a little more -- should I erase houses internally on the aleph naught verb? or in town alt? or should I just change the "get" function? This could affect things like "repairing voided structures" over time.

  • The Aleph conduit in the home dimension is going to function a bit different. There are lore/story consequences as well. These need to be explored when everything else is done. -- This is less relevant now but needs a review

  • set X palette closes menu -- Should be covered under the base coloring menus update

  • When Lockpick Jamming, if there are any actions that target all but it (if jam 1) or all but it and another (if jam 2), then that tumbler can't be jammed. -- Both versions of this are hard to do -- jam 1 requires going through every single action to see if it targets all but that tumbler, and jam 2 has more possibilities in addition to the problem of the "2" variable not being known anywhere

  • 11 Months ago

    Maps v0 Checklist

    I combined all the maps points into this.

    Basic stuff

  • Alter notes{} so that there's hooks for nonad-based notes

  • Fullscreen infrastructure (pull from the equipment submenu and generalize)

  • Give the province map a fullscreen option.

    Map Notes

  • Make it so that each cell of the map is clickable. Clicking it should open up a menu at the bottom that says the name of the thing there, coordinates, and opens a textarea/submit for notes.

  • Hook these back into the notes{} function.

  • The coordinates should be a link. Clicking it should point you in that direction and give you a distance.

    Mark Map

  • Have an input area and button to mark current location as something.

  • This should do something with notes{} to store it. and then rerender the map.

  • In the map rerender function, create links for these stored notes.

  • Clicking them will point you in that direction, highlight the nonad, and give a distance.

  • They should also have an "x". This deletes it from the notes{} and rerenders the map.

  • 11 Months ago

    Base Coloring System Checklist

  • The menus need to be fixed -- there's a lot of "Back" action and controls that aren't hiding anything.

  • Changing back and forth between solid and floor palette changing in the palette improving menu causes the lists to show up weirdly.

    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.

  • 9 Months ago

    Aleph Naught Tier 4 Bugs

  • You can envoiden the same town structure over and over.

  • The town structure that's envoidened needs to be town specific -- right now envoidening [0,0] will envoiden the 0,0 of every town. Need to make sure this is still a bug, I may have fixed it already.

  • 8 Months ago

    Post-updates bugfixes

  • Aleph conduits aren't filtering out the dimension you're currently in from the list of active ones -- probably another encoding issue.

  • Things crafted from nonunique materials nonetheless have material names (like "Gashrooms Gashroom Bomb").

  • There's an events.materials hook and also something in houses{} that references 'materials','extract' that needs to be updated. This is affecting shop services so it's easy to test. This also looks more complex than expected.

  • Labs need to be available even if the research tab isn't open -- they also need to be indicated that you've opened a lab in the research menu.

  • Placing a Lab should blur the select box so moving doesn't change it.

  • Placed repulsor portals don't seem to work.

  • Various tabs are opening over and over in planes/etc contexts. Need to fix these individually (dungeons and bases with multiple doors) but also some functionality to prevent duplicates.

  • If you're already in a base, don't enter a base again even if you go into another door.

  • 8 Months ago

    Bases Update 4/6

    This update will get the inventory limits and Backpacks system in place. Additionally, it will build out the Crystechs system in bases, which will enable Base Storage.

    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.

    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.

    Crystechs Update

    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.

    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.

    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.


    This is a pretty large update, but it does have three separate features in it. This will get the inventory limits sytem in place, add in the Backpacks functionality, as well as get the Base Storage system in place. I made a few adjustments to my notes during this process to simplify things from a UX perspective.

    Still to do: 2 updates

    Update 5/6: Recipes/Industry

  • Will probably get to the materials update soon, so it's very important that I separate out the available-materials-fetching functions from this system in general. I have some thoughts on alternate dimension resources as well.

  • I need notes for the procedurally-generated recipes and industry system. These are pretty close to done at this point.

  • Fixtures alterations 2/2 (crafting/itemization; some should legitimately be free -- these have no amt and don't require crafting).

  • Procgen recipes system -- spec item or a universal material (like quartzshards) or both.

  • Research ties into this new system as well -- it makes a bit more sense than just having aether unlocks over and over (though aether is still required).

    Update 6/6: Miscellaneous

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

  • Portals 2/2 -- actual portals changes + transdim stuff + base portal

  • Atomizer Update 2/2 (bunch of misc stuff I'll do at the end)

  • Rechecking my notes (there's bound to be stuff I've missed)

  • 7 Months ago

    Early Alpha 3 Playthrough Round 1
    Didn't get all the way through this by any means -- will try to do that probably tomorrow though. Still hit some bugs and issues as usual:

  • can't atomize equipped items. same deal with dropping? (idk will need to check my scripting on that)
  • labs via portals say "unlock event" -- should have diff names for diff types of unlocks
  • don't allow houses to have too similar colors to the floor (stumu bottom-right). I think this is already on one of my lists.

  • houses have way too many floors (should be 1 or 2 with 3 rare and 4 rarer still, and nothing past that)
  • shops > sell all doesn't work now
  • altar can't immediately pushpull without clicking back
  • bottom right of Tsopiap has second blockade bug
  • dungeon hints aren't showing cardinal (nsew) directions, only diagonals
  • Combat has the back button -- need to rethink the auto functionality here in general.

  • 7 Months ago

    Early Alpha 3 Playthrough 2

  • rub srecup due east has spacing bug
  • towns are spawning mobs
  • cant sell potion ingredients at the alchemist
  • asher's house has second blockade bug (nexus --> east entrance --> directly sw bladesmith second floor)
  • equipment's refuel menu isn't working right (the cave one is still fine)
  • unequipping a torch doesn't reset the internal torch settings
  • atomizer menus aren't mutually exclusive
  • manaflute isn't working after an error is given
  • time tethers can overwrite void cores
  • fire song isn't working right with correct amt of aether (still subtracting it too)
  • shift flying isn't working right (can't unfly)

    UX Issues

  • indicate dungeons you've already gotten the tetradshard for a little differently in asher's menu
  • entropic plane / quantum plane shouldn't spawn mobs
  • precious metal is generating way way too often ([65,-665] floor 10)
  • can't reup worldlock if already worldlocked (this would improve quantum planes v1 a lot)
  • zilchifying ore veins should zilchify precious metals too

  • key items shouldn't have a craft all
  • need a debug function to switch dimensions easily
  • and one to go home

  • containers when extracted should tell you what you actually got.

  • Same deal with potion ingredients (which isn't immediately obvious).

    More misc stuff
  • The itemgen select box seems to be missing.

  • Changing equipment should update the inventory rendering (test via the ability to atomize)

  • Activated nexuses don't work anymore (probably due to fixing the trade routes bug)

  • Refresh map (or update position automatically)

  • Aleph conduit warping is no longer warping to the aleph conduit of the corresponding dimension

  • The quantum plane shouldn't have a void sea.

  • 7 Months ago

    Prop Splitting checklist

    Originally a single UX point, but needs its own checklist.

  • Implement a "formula" datapoint in a recipe that gets split to recipe and props datapoints.

  • Alter the grappling rope recipe accordingly

  • Alter it again so it splits this way: (rope_type goes to rocks/bones, rope_value goes to twine, durability/max goes to the scales)

  • Get these properties split out correctly in a crafting.init() function -- hook this into the main init.

  • Find the correct endpoint for property splitting. Propgen{}? Crafting{}? Hard to tell.

  • Get the property list hooked into there.

  • Split according to this list and the ingredients used. May be tricky and may require its own checklist.

  • Make sure wisdom-based property splitting works right as well.

  • 6 Months ago

    Additional Towns v1 stuff

    This list are some ideas I came up with while working on the towns v1 finishing project + some of the stuff in there that fits better on this list.

    Furniture v2

  • Anything that pulls out a random type of furniture should refer to furniture.random() or something like that so I can change the way the definitions appear easily.

  • Get rid of the open/closed/alcoves system and test.

  • Instead, switch over to categorical furniture, along with generalized furniture that corresponds to the various shop types.

  • Distribute this furniture into shops appropriately so different shop types have more flavor.

    Stuff from the list above that's better off here

  • Comb through the integrity.furniture_loot() list, distributing those functions into the furniture as needed.

  • Comb over the furniture loot list and make some items appear more than once in furniture (like extractables, dyes, potion ingredients)

    Money distribution

  • Distribute small_money, med_money and big_money.

  • Create rand_money that will give a random money of the three, with small_money more likely

  • Distribute this across areas where money would likely appear

    Furniture Theft improvements

  • Make sure there's a distinction between house furniture and anything else that uses that system (I think that's fishing containers maybe).

  • If you're stealing items from house furniture, tag them with the house and region you stole them from (the house coord is probably the upper-left coordinate).

  • Make it so that you're unable to sell items you've stolen from the house you're in to the shopkeeper there. Should prevent the buy button rather than preventing you from seeing the item in the list.

    Melange cabinets

  • Somewhere in the province generation, create 3 melange cabinets with some kind of naming accordingly. Don't do this on the home dimension.

  • Melange cabinets should additionally look like A-Z and should have furniture properties assigned randomly from itemgen functions.

  • Furniture selection can also pull from melange cabinets if they exist. The likelihood is rare.

  • 1 Month ago

    Get one of each type of shop appearing in the starting province Checklist

    Need a full checklist for this because it's a bit tricky.

  • Create an "all" index in inside.init()

  • In towngen.gen(), pull the premade_types variables back out into the object and hook back in. Might be tricky with the random one. I hope I don't need yet another checklist.

  • Find the hook for how many houses are in a town max and make that also accessible in a similar way.

  • In province.init(), run province.assign_houses() right before the loop: run a function that distributes the inside.index.all[] into nationgen.index.all[], forming a new variable called "distributed_houses" that assigns the nonad kee to the house types -- this should be stored in province{} directly.

  • Don't assign houses if you're not in region 0.

  • Also in province.assign_houses(), make sure the maximums for the #/houses in a town and the premade types are respected during distribution.

  • In towngen.gen(), append province.distributed_houses{} to the premade_types via the nonad kee.

    That should ensure that the starting province has one shop of every type.

  • 1 Month ago

    Reply to: Shatterlooop general checklists