From bd342a45a636bc39f0a98c0d91ba65978e6f200e Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 06:27:38 -0600 Subject: [PATCH 01/20] Update README.md --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3d4a0ba..33b96d9 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Your most recent save will load automatically. To Load a save, you must talk wi ## About -This is a pure React javascript application that loads static text files as the starting state and then presumes your game state overrides the default data. Interactions in the world issue DOM events scoped to the targets, and the React components carry out the operation and let reactivity update the game map. There is no state architecture beyond useState(), as a proof that the size of the code doesn't have to double just to track state information. +This is a pure React javascript application that loads static text files as the starting state and then presumes your game state overrides the default data. Interactions in the world issue DOM events scoped to the targets, and the React components carry out the operation and let reactivity update the game map. There is no state architecture beyond useState(), as a proof that the size of the code doesn't HAVE to double to write all the mutation bloat. We're trusting naive DOM events here to bus our data, but hackability is kind of the point. If you can throw events from the console, you might be able to make the game do stuff, and I hope that's fun to experience. The main map files are basically text art, with a table of special coordinates and sprite names. Using these hints, the game parses the flat map into solid, passable, and interactable layers, and then draws it like a TI-83 Plus with ASM-style greyscale might. Because of this conceit, the coordinate system from top to bottom is in row-column format. As a happy accident, this means your text editor's cursor position is always the actual coordinate you're editing, making interactive tiles easy to identify. @@ -70,14 +70,17 @@ Still tweaking things but the working examples are the templates I expand. - Equipment templates only supply a weapon class and sprite. Templates have no rarity, power, or value assigned until they are referenced in an inventory list that relates that information. - [public/interactions/{npcClass}/{npcId}.txt](https://github.com/tiliv/fm/tree/main/public/interactions) - Interactions are usually NPCs, but in the game core, fancy coordinates with events attached become interactions too. Interaction tiles become full text files here to get the full set of actions, like Buy/Sell, which have custom formats that don't fit in the #key=value schema available to pure map tiles. For example, the `Fight` block allows for current hp thresholds to activate different movement strategies, `Buy` determines an inventory list, and `Sell` determines which categories of items you can sell to that NPC. - - Note that there is currently no net loss of currency when you buy an item and sell it back (if you can sell it back, that is). + - There is currently no net loss of currency when you buy an item and sell it back (if you can sell it back, that is). + - Action block names prefixed by `?` incidate a reactive event, i.e., they catch YOUR event with that name and hijack the response. This may put you into a conversation state with someone you have not bumped against for typical interactions. - [public/overlays/{overlayId}.txt](https://github.com/tiliv/fm/tree/main/public/overlays) - Overlays can be referenced in world files, either as a global default, or at specific [r1, c1, r2, c2] rectangles, and with an offset animation sequence that loops forever. The text files are just the full overlay art to be tiled and scrolled over the world display. The world file supplies the colors and animation. - [public/world/{worldId}.txt](https://github.com/tiliv/fm/tree/main/public/world) - Worlds use a YAML-like multi-doc marker to separate the map art from the coordinate definitions. - Overlays are designated with their animation loop (if any), applicable area (or else implicitly global), color, and probability of triggering a different overlay as a replacement. When overlay zones overlap, the most specific one should be last (i.e., global first, smallest last) - - Note that NPCs are baked into the static image and then selected by their coordinate. - - Objects on the map can have idle animations, which includes setting idle animation patterns on NPCs that still have their own separate text file for hp threshold behavior once the mundane "idle" state likely ends from taking damage. - - Objects can have custom actions, which trigger events named after them. Nothing responds to most events yet (but the classifier model will help soon!), but the "Climb" (`Climb.player`) event was added to prove that only a coordinate and an event name + text is required to create dynamic interactivity. + - NPCs are baked into the static map art, and then that coordinate is used to associate an NPC data file with its menu actions. + - Objects can have idle animations, including specific movements for various ai states the NPC can be in. + - Objects can have custom actions defined inline without (or in addition to) a text file. All (most) menu actions dispatch an event named after them, with their menu data as context. Nothing responds to most events yet (but the classifier model will help soon!), but the "Climb" (`Climb.player`) event was added to prove that only a coordinate and event name + message text are required to create dynamic interactivity. + - Objects with names prefixed with `~` are considered "short", allowing them to act as pass-through tiles for talking to npcs across the other side. In addition, you can climb short tiles. - Doors declare a second coordinate. If a door has a `key` attribute, you need to be wearing that key as an equipped "ring" to bypass the lockout. - World Doors are just doors that also provide a new map id, meaning that the destination coordinate it gives should be in the row-column space of that new map. + From 6f5fd205a84ce9fe3488d54e7384cf2c98669cbe Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 06:29:33 -0600 Subject: [PATCH 02/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 33b96d9..5fe1b51 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Your most recent save will load automatically. To Load a save, you must talk wi This is a pure React javascript application that loads static text files as the starting state and then presumes your game state overrides the default data. Interactions in the world issue DOM events scoped to the targets, and the React components carry out the operation and let reactivity update the game map. There is no state architecture beyond useState(), as a proof that the size of the code doesn't HAVE to double to write all the mutation bloat. We're trusting naive DOM events here to bus our data, but hackability is kind of the point. If you can throw events from the console, you might be able to make the game do stuff, and I hope that's fun to experience. -The main map files are basically text art, with a table of special coordinates and sprite names. Using these hints, the game parses the flat map into solid, passable, and interactable layers, and then draws it like a TI-83 Plus with ASM-style greyscale might. Because of this conceit, the coordinate system from top to bottom is in row-column format. As a happy accident, this means your text editor's cursor position is always the actual coordinate you're editing, making interactive tiles easy to identify. +The main map files are basically text art, with a table of special coordinates and sprite names. Using these hints, the game parses the flat map into solid, passable, and interactable layers, and then draws it like a TI-83 Plus with ASM-style greyscale might. Because of this conceit, the coordinate system from top to bottom is in row-column format. As a happy accident, this means your text editor's cursor position is always the actual coordinate you're editing, making interactive tiles easy to reference in the world files. Future goals: From b877fe62e6cc0f283e48d43a18d3c9abfaa9ea33 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 06:30:56 -0600 Subject: [PATCH 03/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5fe1b51..fc6cad8 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The current font is not a full clone of the TI-83 Plus, but it is easy to load a NPCs can offer a "Save" option and some flavor text, which uses localstorage on the character's name (Hero by default, but will appear `null` until saved). -Your most recent save will load automatically. To Load a save, you must talk with a Bard specifically, so good luck with that intentional game design. +Your most recent save will load automatically. To Load some other save, you must talk with a Bard specifically, so good luck with that intentional game design. ## About From 523b8a4ec1fd8304d500feec1053d0f972b42213 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 06:37:54 -0600 Subject: [PATCH 04/20] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc6cad8..4d6fb01 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,11 @@ The main map files are basically text art, with a table of special coordinates a Future goals: - Magic skills cost HP -- No max HP, but the quality of the bed you use determines your HP when you wake up. (This already works, but isn't widely deployed.) +- No max HP, but the quality of the bed you use determines your HP when you wake up (This already works, but isn't widely deployed) - Do better with the fight mode. Right now it's a flattened horizontal view of the same space but there aren't attack options, and fighting a moving enemy is like chasing a caribou through a shopping mall. +- Add spells and targeting. Magic is enabled by rings, which you can wear plenty of, but there are no spells yet +- Make the map visualizer editable locally, so that it becomes its own map builder - Chests that contain items -- Magic targeting. Magic is enabled by rings, which you can wear plenty of, but there are no spells yet. - Story - MULTIPLAYER??? DO I HAVE YOUR ATTENTION? Let me know. From fb67df12bbddeb1fead6d1e03c974aabbd37665b Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 06:40:47 -0600 Subject: [PATCH 05/20] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4d6fb01..41ba03b 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ The main map files are basically text art, with a table of special coordinates a Future goals: +- Memoize components - Magic skills cost HP - No max HP, but the quality of the bed you use determines your HP when you wake up (This already works, but isn't widely deployed) - Do better with the fight mode. Right now it's a flattened horizontal view of the same space but there aren't attack options, and fighting a moving enemy is like chasing a caribou through a shopping mall. From 3ab5621c701e938d60cb820b2d954296be391cc0 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 06:57:30 -0600 Subject: [PATCH 06/20] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 41ba03b..00df5ff 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,14 @@ Your most recent save will load automatically. To Load some other save, you mus ## About -This is a pure React javascript application that loads static text files as the starting state and then presumes your game state overrides the default data. Interactions in the world issue DOM events scoped to the targets, and the React components carry out the operation and let reactivity update the game map. There is no state architecture beyond useState(), as a proof that the size of the code doesn't HAVE to double to write all the mutation bloat. We're trusting naive DOM events here to bus our data, but hackability is kind of the point. If you can throw events from the console, you might be able to make the game do stuff, and I hope that's fun to experience. +This is a pure React javascript application that loads static text files as the starting state and then presumes your game state overrides the default data. Interactions in the world issue DOM events scoped to the targets, and the React components carry out the operation and let reactivity update the game map. There is no state architecture beyond `useState()`, somewhat as a proof that state management is about designing to your task, and may not require selector/mutation bloat to express itself in the clearest way. We're trusting naive DOM events here to bus our data, but hackability is kind of the point. If you can throw events from the console, you might be able to make the game do stuff, and I hope that's fun to experience. The main map files are basically text art, with a table of special coordinates and sprite names. Using these hints, the game parses the flat map into solid, passable, and interactable layers, and then draws it like a TI-83 Plus with ASM-style greyscale might. Because of this conceit, the coordinate system from top to bottom is in row-column format. As a happy accident, this means your text editor's cursor position is always the actual coordinate you're editing, making interactive tiles easy to reference in the world files. Future goals: +- This code was [https://7c0h.com/blog/new/write_only_code.html]("write-only"), suited to no one's brain but mine at the time, and not much longer. I'm happy with my ideas but they must be re-expressed with tests, tasteful typing, and more comments that matter. +- Learn why [https://github.com/welldone-software/why-did-you-render](@welldone-software/why-did-you-render) got hard to use with my vite config - Memoize components - Magic skills cost HP - No max HP, but the quality of the bed you use determines your HP when you wake up (This already works, but isn't widely deployed) @@ -30,6 +32,8 @@ Future goals: - Chests that contain items - Story - MULTIPLAYER??? DO I HAVE YOUR ATTENTION? Let me know. +- It's not lost on me that for as many buttons as there are to push, it might map to a controller without hassle. +- I 'unno the first thing about talking to a TI calculator on modern hardware anymore, but it would be funny if I could push these game screens to the device and you use the calc hardware for the OG tactile experience. The calculator has enough buttons on offer that it can switch between active screens. ## Game There are 3 displays, and all are active at all times, and have their own select/cancel mechanisms: @@ -37,6 +41,7 @@ There are 3 displays, and all are active at all times, and have their own select 1. Status area (wasd, spacebar, escape) 2. World area (arrows, bumping into things selects, moving away implicitly deselects) 3. Menu area (jk, paging, enter, backspace) +4. (The bottom of this graphic features the inert message bar that will be re-enabled for communication with the classifier model soon. If you want to picture what it's for, imagine the old Ultima games and you'll be on the right track.) Three displays: status, world, menu From 0a0bb9debdf70101a3ae5dcff0a16cbaed7fc025 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 06:59:26 -0600 Subject: [PATCH 07/20] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 00df5ff..6c73627 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ The main map files are basically text art, with a table of special coordinates a Future goals: -- This code was [https://7c0h.com/blog/new/write_only_code.html]("write-only"), suited to no one's brain but mine at the time, and not much longer. I'm happy with my ideas but they must be re-expressed with tests, tasteful typing, and more comments that matter. -- Learn why [https://github.com/welldone-software/why-did-you-render](@welldone-software/why-did-you-render) got hard to use with my vite config +- This code was ["write-only"](https://7c0h.com/blog/new/write_only_code.html), suited to no one's brain but mine at the time, and not much longer. I'm happy with my ideas but they must be re-expressed with tests, tasteful typing, and more comments that matter. +- Learn why [@welldone-software/why-did-you-render](https://github.com/welldone-software/why-did-you-render) got hard to use with my vite config - Memoize components - Magic skills cost HP - No max HP, but the quality of the bed you use determines your HP when you wake up (This already works, but isn't widely deployed) From 5a34eae4c6863987c2f348b6b6ace7f387108fe9 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 07:04:54 -0600 Subject: [PATCH 08/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c73627..0db4804 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ There are 3 displays, and all are active at all times, and have their own select 1. Status area (wasd, spacebar, escape) 2. World area (arrows, bumping into things selects, moving away implicitly deselects) -3. Menu area (jk, paging, enter, backspace) +3. Menu area (jk, numbers, paging, enter, backspace) 4. (The bottom of this graphic features the inert message bar that will be re-enabled for communication with the classifier model soon. If you want to picture what it's for, imagine the old Ultima games and you'll be on the right track.) Three displays: status, world, menu From f53d050d5eb456544083d214b79eebfbbccfab73 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 07:07:21 -0600 Subject: [PATCH 09/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0db4804..b84e99b 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Your most recent save will load automatically. To Load some other save, you mus ## About -This is a pure React javascript application that loads static text files as the starting state and then presumes your game state overrides the default data. Interactions in the world issue DOM events scoped to the targets, and the React components carry out the operation and let reactivity update the game map. There is no state architecture beyond `useState()`, somewhat as a proof that state management is about designing to your task, and may not require selector/mutation bloat to express itself in the clearest way. We're trusting naive DOM events here to bus our data, but hackability is kind of the point. If you can throw events from the console, you might be able to make the game do stuff, and I hope that's fun to experience. +This is a pure React javascript application that loads static text files as the starting state and then presumes your game state overrides the default data. Interactions in the world issue DOM events scoped to the targets, and the React components carry out the operation and let reactivity update the game map. There is no state architecture beyond `useState()`, somewhat as a proof that state management is about designing to your task, and may not require selector/mutation bloat to express itself in the clearest way. We're trusting naive DOM events here to bus our data, but hackability is the proximate cause of what lies below the fold. If you can throw events from the console, you might be able to make the game do stuff, and I hope that's fun to experience. The main map files are basically text art, with a table of special coordinates and sprite names. Using these hints, the game parses the flat map into solid, passable, and interactable layers, and then draws it like a TI-83 Plus with ASM-style greyscale might. Because of this conceit, the coordinate system from top to bottom is in row-column format. As a happy accident, this means your text editor's cursor position is always the actual coordinate you're editing, making interactive tiles easy to reference in the world files. From 70639b6ae771e251f78d368ab95dd4743504c6ce Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 07:09:19 -0600 Subject: [PATCH 10/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b84e99b..dc1ae9f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Freedom Of Movement -A nostalgic romp through TI-83 Plus UI and a classifier model for open-ended gameplay. +A nostalgic romp through TI-83 Plus UI and a classifier model for open-ended gameplay. Play via localstorage [https://tiliv.github.io/fm/](https://tiliv.github.io/fm/) The in-memory classifier model is loaded but not currently receiving queries. Before it can be enabled for any use, the classifier labels need to be honed in order to raise the model's clarity on intended effects: From 6c8a39a07424834b55c976d4fdad38f179b56208 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 07:09:32 -0600 Subject: [PATCH 11/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc1ae9f..1f2f143 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Freedom Of Movement -A nostalgic romp through TI-83 Plus UI and a classifier model for open-ended gameplay. Play via localstorage [https://tiliv.github.io/fm/](https://tiliv.github.io/fm/) +A nostalgic romp through TI-83 Plus UI and a classifier model for open-ended gameplay. Play via localstorage on [https://tiliv.github.io/fm/](https://tiliv.github.io/fm/). The in-memory classifier model is loaded but not currently receiving queries. Before it can be enabled for any use, the classifier labels need to be honed in order to raise the model's clarity on intended effects: From 3fa24b6bc5bd21fad39e081f839bc81348ba31b7 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 07:17:16 -0600 Subject: [PATCH 12/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f2f143..20bd9eb 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ The main map files are basically text art, with a table of special coordinates a Future goals: -- This code was ["write-only"](https://7c0h.com/blog/new/write_only_code.html), suited to no one's brain but mine at the time, and not much longer. I'm happy with my ideas but they must be re-expressed with tests, tasteful typing, and more comments that matter. +- The display buffer code was ["write-only"](https://7c0h.com/blog/new/write_only_code.html), suited to no one's brain but mine at the time, and not much longer. I'm happy with my ideas but they must be re-expressed with tests, tasteful typing, and more comments that matter. - Learn why [@welldone-software/why-did-you-render](https://github.com/welldone-software/why-did-you-render) got hard to use with my vite config - Memoize components - Magic skills cost HP From 9d5624e2f584072361a190c17a27a997a4c6f5bc Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 07:18:43 -0600 Subject: [PATCH 13/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20bd9eb..5e3dfaf 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Future goals: - Memoize components - Magic skills cost HP - No max HP, but the quality of the bed you use determines your HP when you wake up (This already works, but isn't widely deployed) -- Do better with the fight mode. Right now it's a flattened horizontal view of the same space but there aren't attack options, and fighting a moving enemy is like chasing a caribou through a shopping mall. +- Do better with the fight mode. Right now it's a flattened eye-level view of the same space with contextual background, but there aren't attack options, and fighting a moving enemy is like chasing a caribou through a shopping mall. - Add spells and targeting. Magic is enabled by rings, which you can wear plenty of, but there are no spells yet - Make the map visualizer editable locally, so that it becomes its own map builder - Chests that contain items From eaf4a7b1a2ebd3255c0015223b19f558a40ea9b2 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 07:21:10 -0600 Subject: [PATCH 14/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e3dfaf..85f80a5 100644 --- a/README.md +++ b/README.md @@ -24,13 +24,13 @@ Future goals: - The display buffer code was ["write-only"](https://7c0h.com/blog/new/write_only_code.html), suited to no one's brain but mine at the time, and not much longer. I'm happy with my ideas but they must be re-expressed with tests, tasteful typing, and more comments that matter. - Learn why [@welldone-software/why-did-you-render](https://github.com/welldone-software/why-did-you-render) got hard to use with my vite config - Memoize components +- Maps and Story - Magic skills cost HP - No max HP, but the quality of the bed you use determines your HP when you wake up (This already works, but isn't widely deployed) - Do better with the fight mode. Right now it's a flattened eye-level view of the same space with contextual background, but there aren't attack options, and fighting a moving enemy is like chasing a caribou through a shopping mall. - Add spells and targeting. Magic is enabled by rings, which you can wear plenty of, but there are no spells yet - Make the map visualizer editable locally, so that it becomes its own map builder - Chests that contain items -- Story - MULTIPLAYER??? DO I HAVE YOUR ATTENTION? Let me know. - It's not lost on me that for as many buttons as there are to push, it might map to a controller without hassle. - I 'unno the first thing about talking to a TI calculator on modern hardware anymore, but it would be funny if I could push these game screens to the device and you use the calc hardware for the OG tactile experience. The calculator has enough buttons on offer that it can switch between active screens. From 345ae4d284d722890c011d26cec56a80f7a5b1c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:38:07 +0000 Subject: [PATCH 15/20] Bump vite from 5.2.9 to 5.2.14 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.2.9 to 5.2.14. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.2.14/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.2.14/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6fd69a6..7ff1351 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,6 @@ "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", - "vite": "^5.2.0" + "vite": "^5.2.14" } } diff --git a/yarn.lock b/yarn.lock index 16cac4e..5383ed8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2763,10 +2763,10 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -vite@^5.2.0: - version "5.2.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.9.tgz#cd9a356c6ff5f7456c09c5ce74068ffa8df743d9" - integrity sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw== +vite@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.14.tgz#fd5f60facf6b5f90ec7da6323c467a365d380c3d" + integrity sha512-TFQLuwWLPms+NBNlh0D9LZQ+HXW471COABxw/9TEUBrjuHMo9BrYBPrN/SYAwIuVL+rLerycxiLT41t4f5MZpA== dependencies: esbuild "^0.20.1" postcss "^8.4.38" From 3b659362793a6af6c078cd5c4cd911140170a734 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:39:54 +0000 Subject: [PATCH 16/20] Bump rollup from 4.14.3 to 4.22.4 Bumps [rollup](https://github.com/rollup/rollup) from 4.14.3 to 4.22.4. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.14.3...v4.22.4) --- updated-dependencies: - dependency-name: rollup dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 196 +++++++++++++++++++++++++++--------------------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5383ed8..1741e8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -491,85 +491,85 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@rollup/rollup-android-arm-eabi@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz#bddf05c3387d02fac04b6b86b3a779337edfed75" - integrity sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g== - -"@rollup/rollup-android-arm64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz#b26bd09de58704c0a45e3375b76796f6eda825e4" - integrity sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ== - -"@rollup/rollup-darwin-arm64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz#c5f3fd1aa285b6d33dda6e3f3ca395f8c37fd5ca" - integrity sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA== - -"@rollup/rollup-darwin-x64@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz#8e4673734d7dc9d68f6d48e81246055cda0e840f" - integrity sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw== - -"@rollup/rollup-linux-arm-gnueabihf@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz#53ed38eb13b58ababdb55a7f66f0538a7f85dcba" - integrity sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw== - -"@rollup/rollup-linux-arm-musleabihf@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz#0706ee38330e267a5c9326956820f009cfb21fcd" - integrity sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw== - -"@rollup/rollup-linux-arm64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz#426fce7b8b242ac5abd48a10a5020f5a468c6cb4" - integrity sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA== - -"@rollup/rollup-linux-arm64-musl@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz#65bf944530d759b50d7ffd00dfbdf4125a43406f" - integrity sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz#494ba3b31095e9a45df9c3f646d21400fb631a95" - integrity sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw== - -"@rollup/rollup-linux-riscv64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz#8b88ed0a40724cce04aa15374ebe5ba4092d679f" - integrity sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ== - -"@rollup/rollup-linux-s390x-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz#09c9e5ec57a0f6ec3551272c860bb9a04b96d70f" - integrity sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg== - -"@rollup/rollup-linux-x64-gnu@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz#197f27fd481ad9c861021d5cbbf21793922a631c" - integrity sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA== - -"@rollup/rollup-linux-x64-musl@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz#5cc0522f4942f2df625e9bfb6fb02c6580ffbce6" - integrity sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg== - -"@rollup/rollup-win32-arm64-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz#a648122389d23a7543b261fba082e65fefefe4f6" - integrity sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg== - -"@rollup/rollup-win32-ia32-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz#34727b5c7953c35fc6e1ae4f770ad3a2025f8e03" - integrity sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw== - -"@rollup/rollup-win32-x64-msvc@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz#5b2fb4d8cd44c05deef8a7b0e6deb9ccb8939d18" - integrity sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA== +"@rollup/rollup-android-arm-eabi@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz#8b613b9725e8f9479d142970b106b6ae878610d5" + integrity sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w== + +"@rollup/rollup-android-arm64@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz#654ca1049189132ff602bfcf8df14c18da1f15fb" + integrity sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA== + +"@rollup/rollup-darwin-arm64@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz#6d241d099d1518ef0c2205d96b3fa52e0fe1954b" + integrity sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q== + +"@rollup/rollup-darwin-x64@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz#42bd19d292a57ee11734c980c4650de26b457791" + integrity sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw== + +"@rollup/rollup-linux-arm-gnueabihf@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz#f23555ee3d8fe941c5c5fd458cd22b65eb1c2232" + integrity sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ== + +"@rollup/rollup-linux-arm-musleabihf@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz#f3bbd1ae2420f5539d40ac1fde2b38da67779baa" + integrity sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg== + +"@rollup/rollup-linux-arm64-gnu@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz#7abe900120113e08a1f90afb84c7c28774054d15" + integrity sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw== + +"@rollup/rollup-linux-arm64-musl@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz#9e655285c8175cd44f57d6a1e8e5dedfbba1d820" + integrity sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz#9a79ae6c9e9d8fe83d49e2712ecf4302db5bef5e" + integrity sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg== + +"@rollup/rollup-linux-riscv64-gnu@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz#67ac70eca4ace8e2942fabca95164e8874ab8128" + integrity sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA== + +"@rollup/rollup-linux-s390x-gnu@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz#9f883a7440f51a22ed7f99e1d070bd84ea5005fc" + integrity sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q== + +"@rollup/rollup-linux-x64-gnu@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz#70116ae6c577fe367f58559e2cffb5641a1dd9d0" + integrity sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg== + +"@rollup/rollup-linux-x64-musl@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz#f473f88219feb07b0b98b53a7923be716d1d182f" + integrity sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g== + +"@rollup/rollup-win32-arm64-msvc@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz#4349482d17f5d1c58604d1c8900540d676f420e0" + integrity sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw== + +"@rollup/rollup-win32-ia32-msvc@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz#a6fc39a15db618040ec3c2a24c1e26cb5f4d7422" + integrity sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g== + +"@rollup/rollup-win32-x64-msvc@4.22.4": + version "4.22.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz#3dd5d53e900df2a40841882c02e56f866c04d202" + integrity sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q== "@types/babel__core@^7.20.5": version "7.20.5" @@ -2357,28 +2357,28 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@^4.13.0: - version "4.14.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.14.3.tgz#bcbb7784b35826d3164346fa6d5aac95190d8ba9" - integrity sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw== + version "4.22.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.22.4.tgz#4135a6446671cd2a2453e1ad42a45d5973ec3a0f" + integrity sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.14.3" - "@rollup/rollup-android-arm64" "4.14.3" - "@rollup/rollup-darwin-arm64" "4.14.3" - "@rollup/rollup-darwin-x64" "4.14.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.14.3" - "@rollup/rollup-linux-arm-musleabihf" "4.14.3" - "@rollup/rollup-linux-arm64-gnu" "4.14.3" - "@rollup/rollup-linux-arm64-musl" "4.14.3" - "@rollup/rollup-linux-powerpc64le-gnu" "4.14.3" - "@rollup/rollup-linux-riscv64-gnu" "4.14.3" - "@rollup/rollup-linux-s390x-gnu" "4.14.3" - "@rollup/rollup-linux-x64-gnu" "4.14.3" - "@rollup/rollup-linux-x64-musl" "4.14.3" - "@rollup/rollup-win32-arm64-msvc" "4.14.3" - "@rollup/rollup-win32-ia32-msvc" "4.14.3" - "@rollup/rollup-win32-x64-msvc" "4.14.3" + "@rollup/rollup-android-arm-eabi" "4.22.4" + "@rollup/rollup-android-arm64" "4.22.4" + "@rollup/rollup-darwin-arm64" "4.22.4" + "@rollup/rollup-darwin-x64" "4.22.4" + "@rollup/rollup-linux-arm-gnueabihf" "4.22.4" + "@rollup/rollup-linux-arm-musleabihf" "4.22.4" + "@rollup/rollup-linux-arm64-gnu" "4.22.4" + "@rollup/rollup-linux-arm64-musl" "4.22.4" + "@rollup/rollup-linux-powerpc64le-gnu" "4.22.4" + "@rollup/rollup-linux-riscv64-gnu" "4.22.4" + "@rollup/rollup-linux-s390x-gnu" "4.22.4" + "@rollup/rollup-linux-x64-gnu" "4.22.4" + "@rollup/rollup-linux-x64-musl" "4.22.4" + "@rollup/rollup-win32-arm64-msvc" "4.22.4" + "@rollup/rollup-win32-ia32-msvc" "4.22.4" + "@rollup/rollup-win32-x64-msvc" "4.22.4" fsevents "~2.3.2" run-parallel@^1.1.9: From 6ef2bfe74e7b3b7b49e1674dc03111963f12d510 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 08:01:06 -0600 Subject: [PATCH 17/20] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 85f80a5..9fafc83 100644 --- a/README.md +++ b/README.md @@ -91,3 +91,8 @@ Still tweaking things but the working examples are the templates I expand. - Doors declare a second coordinate. If a door has a `key` attribute, you need to be wearing that key as an equipped "ring" to bypass the lockout. - World Doors are just doors that also provide a new map id, meaning that the destination coordinate it gives should be in the row-column space of that new map. +## Who? + +I'm Autumn, and I don't know why I do anything but I know when I'm having fun. + +Hire me to write better code than this with you. My address is all over these commits. From cd23620c2bc28a9cf35831d10e718d12a9a12c4a Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 08:11:21 -0600 Subject: [PATCH 18/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9fafc83..5224bbf 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ Still tweaking things but the working examples are the templates I expand. - [public/world/{worldId}.txt](https://github.com/tiliv/fm/tree/main/public/world) - Worlds use a YAML-like multi-doc marker to separate the map art from the coordinate definitions. - Overlays are designated with their animation loop (if any), applicable area (or else implicitly global), color, and probability of triggering a different overlay as a replacement. When overlay zones overlap, the most specific one should be last (i.e., global first, smallest last) - - NPCs are baked into the static map art, and then that coordinate is used to associate an NPC data file with its menu actions. + - NPCs are baked into the static map art, and then that coordinate is used to associate an NPC data file containing its menu actions. - Objects can have idle animations, including specific movements for various ai states the NPC can be in. - Objects can have custom actions defined inline without (or in addition to) a text file. All (most) menu actions dispatch an event named after them, with their menu data as context. Nothing responds to most events yet (but the classifier model will help soon!), but the "Climb" (`Climb.player`) event was added to prove that only a coordinate and event name + message text are required to create dynamic interactivity. - Objects with names prefixed with `~` are considered "short", allowing them to act as pass-through tiles for talking to npcs across the other side. In addition, you can climb short tiles. From a193fd54ed96abcca933cd34ab6f8ed75681dae0 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 08:13:25 -0600 Subject: [PATCH 19/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5224bbf..0131e90 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Still tweaking things but the working examples are the templates I expand. - [public/interactions/{npcClass}/{npcId}.txt](https://github.com/tiliv/fm/tree/main/public/interactions) - Interactions are usually NPCs, but in the game core, fancy coordinates with events attached become interactions too. Interaction tiles become full text files here to get the full set of actions, like Buy/Sell, which have custom formats that don't fit in the #key=value schema available to pure map tiles. For example, the `Fight` block allows for current hp thresholds to activate different movement strategies, `Buy` determines an inventory list, and `Sell` determines which categories of items you can sell to that NPC. - There is currently no net loss of currency when you buy an item and sell it back (if you can sell it back, that is). - - Action block names prefixed by `?` incidate a reactive event, i.e., they catch YOUR event with that name and hijack the response. This may put you into a conversation state with someone you have not bumped against for typical interactions. + - Action block names that are prefixed by `?` incidate a reactive event, i.e., they catch YOUR event with that name and hijack the response. This may put you into a conversation state with someone you have not bumped against for typical interactions. - [public/overlays/{overlayId}.txt](https://github.com/tiliv/fm/tree/main/public/overlays) - Overlays can be referenced in world files, either as a global default, or at specific [r1, c1, r2, c2] rectangles, and with an offset animation sequence that loops forever. The text files are just the full overlay art to be tiled and scrolled over the world display. The world file supplies the colors and animation. - [public/world/{worldId}.txt](https://github.com/tiliv/fm/tree/main/public/world) From c09d72e58f4206019c30cd32a5664565aeaca778 Mon Sep 17 00:00:00 2001 From: Autumn Date: Wed, 25 Sep 2024 08:14:43 -0600 Subject: [PATCH 20/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0131e90..82ac1b5 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ Still tweaking things but the working examples are the templates I expand. - NPCs are baked into the static map art, and then that coordinate is used to associate an NPC data file containing its menu actions. - Objects can have idle animations, including specific movements for various ai states the NPC can be in. - Objects can have custom actions defined inline without (or in addition to) a text file. All (most) menu actions dispatch an event named after them, with their menu data as context. Nothing responds to most events yet (but the classifier model will help soon!), but the "Climb" (`Climb.player`) event was added to prove that only a coordinate and event name + message text are required to create dynamic interactivity. - - Objects with names prefixed with `~` are considered "short", allowing them to act as pass-through tiles for talking to npcs across the other side. In addition, you can climb short tiles. + - Objects with names prefixed by `~` are considered "short", allowing them to act as pass-through tiles for talking to npcs across the other side. In addition, you can climb short tiles. - Doors declare a second coordinate. If a door has a `key` attribute, you need to be wearing that key as an equipped "ring" to bypass the lockout. - World Doors are just doors that also provide a new map id, meaning that the destination coordinate it gives should be in the row-column space of that new map.