Compare commits

..
21 Commits
Author SHA1 Message Date
shweet 30bfde4182 Held interactions keep their area, new ones start only on click 2026-11-13 01:26:46 -05:00
shweet d51a6b7e63 Mochiy Pop One as the game font, trimmed to Latin 2026-11-13 01:23:47 -05:00
shweet 9172d63b97 Belly churns after gurgles 2026-11-13 01:19:08 -05:00
shweet 430e076b44 Font Awesome taskbar icons with lips for kiss 2026-11-13 01:16:01 -05:00
shweet 9983365f74 Fixed-width taskbar meters 2026-11-13 01:04:37 -05:00
shweet 4e3abaa381 Draw the touch ring in engine instead of a particle 2026-11-13 01:02:25 -05:00
shweet dcd3006f24 Hard black shadow for floating numbers 2026-11-13 00:57:34 -05:00
shweet ee3430d5cb Line trails, ring on impact, colored shadowed numbers, subtler pitch, no digest rumble 2026-11-13 00:54:34 -05:00
shweet 4fac37b7f5 Flatten resources to gfx and sfx folders 2026-11-13 00:48:36 -05:00
shweet fdfea89373 Juice: pitch variation, squash, dust, trails, jiggle, breathing, hit-stop, numbers, stage-up, digest and rare flair 2026-11-13 00:45:55 -05:00
shweet 7e27ffad94 Crumbs from eaten food 2026-11-13 00:21:29 -05:00
shweet 8b343d5a4a No sound on opening a window 2026-11-13 00:16:53 -05:00
shweet 518e2b3cc5 Drop character credits 2026-11-13 00:15:18 -05:00
shweet ee13be56d7 Select screen with a centered preview and a portrait taskbar 2026-11-13 00:11:24 -05:00
shweet e0e43d9285 Close taskbar windows on clicking off them 2026-11-13 00:07:32 -05:00
shweet 7dbb4cc154 Shared character defaults, fixed paths and names, one global font 2026-11-13 00:01:38 -05:00
shweet 4962eac7a8 Toasts in the top right, newest first 2026-11-12 23:36:07 -05:00
shweet eb03fc9d1d Wider taskbar scaled to window, bigger fonts and a cheats button 2026-11-12 23:26:25 -05:00
shweet 37e87f168a Taskbar with icon buttons, stat bars and modal stats, catalog and settings windows 2026-11-12 23:20:18 -05:00
shweet f900a0d01f Dialogue markup and lines, shared common folder, item atlases, ids, seconds and key checks 2026-11-12 22:51:11 -05:00
shweet 3e9a0cbd34 Split play into body, items, interactions, autofeed and camera, with events, commands and literal strings 2026-11-12 22:14:04 -05:00
266 changed files with 10426 additions and 9649 deletions

No files matched your search

+110 -111
View File
@@ -14,13 +14,13 @@ If you'd like a quick primer on how to use the editor, check either of [these](h
The game plays spritesheets, regions, layers, nulls, layer groups, events, trigger sounds, and the position, crop, pivot, scale, rotation, tint, color offset, visibility and easing of keyframes. It doesn't play skew, depth, blur, custom shaders or animation layers. Animation groups (the editor's folders) are fine; the game just looks animations up by name, so keep those unique.
Stage-specific character animations are controlled by `animationSuffix` on each stage in `character.json`. The base stage uses no suffix. Later stages append that stage's suffix.
Stage-specific character animations end with the stage's name. The first stage uses no ending.
Example:
- stage 1: `Look`
- stage 2 with `"animationSuffix": "Stage2"`: `LookStage2`
- stage 5 with `"animationSuffix": "Stage5"`: `LookStage5`
- stage 2: `LookStage2`
- stage 5: `LookStage5`
Animation names in the JSON files should still use just the base name like `Look`, `Neutral`, or `Eat`. The game appends the current stage's suffix automatically.
@@ -28,9 +28,11 @@ Know that despite Anm2Ed supporting sounds for animations, don't expect these to
# Resources
There's two folders inside resources; "characters" and "font".
There's three folders inside resources; "characters", "common" and "font". Each character folder (and "common") holds its JSON files, a "gfx" folder with every graphic (anm2s and their spritesheets side by side) and an "sfx" folder with every sound. There are no deeper folders.
"font" is just a font containing the font used in the selection screen. That's literally it.
"font" holds the one font the whole game uses (Mochiy Pop One, under the SIL Open Font License; see its LICENSE.txt). It is trimmed to Latin letters and common punctuation.
"common" holds files characters share (sounds, particles, the cursor and so on). Whenever a character names a file, the game looks in the character's folder first, then in "common", so a character can use anything there as is, or replace it by having its own file at the same path. This includes the taskbar's icons, `gfx/icons.anm2`: one region per icon, named after its button (`talk`, `mood`, `spawn`, `autofeed`, `home`, `stats`, `catalog`, `settings`, `cheats`, `help`, plus whatever `icon`s the interaction types name). A character with its own `gfx/icons.anm2` gets its own icons.
EVERYTHING ELSE is stored inside character folders in the "characters" folder; one folder per character, named however you like (the folder name is also the name of its save file). This has all data associated with characters. Think of characters more as tailored game experiences rather than literally being just the characters. Not only is there the character graphics, but backgrounds, items, parameters, etc. These are intensely customizable to suit whatever experience you'd like (within the confines of the engine, of course).
@@ -42,48 +44,62 @@ Shweet's Sim uses [JSON](https://en.wikipedia.org/wiki/JSON) files for its data;
`character.json` is required; a folder without one isn't listed. The other two are optional, but most real characters will want both.
Every path in these files is relative to the character's folder (e.g. `"sfx/blip.ogg"` or `"gfx/items/apple.png"`). Paths inside an .anm2 are relative to the .anm2. Anything left out takes its default, so only write what you need. Wherever sounds are listed, one is picked at random each time.
Every path in these files is relative to the character's folder (e.g. `"sfx/blip.ogg"`), looked for there and then in "common". Paths inside an .anm2 are relative to the .anm2, and looked for the same way. Anything left out takes its default, so only write what you need.
If you're making your own character, your best bet would probably be just to copy the Snivy character and edit it based on your needs, just as a helpful start.
Wherever sounds are listed, one is picked at random each time. A list can also be a single path, and a path with a `*` stands for every file it matches, e.g. `"sfx/gurgle*.ogg"`; drop a new variant in the folder and it's included.
Times are in seconds and chances in percent. The game warns (in its log) about keys it doesn't know, which are usually typos, and files it can't find.
If you're making your own character, your best bet would probably be just to copy the Mini character and edit it based on your needs, just as a helpful start.
## Fixed files and names
Some things aren't set in the data, they're always found at the same place or by the same name:
| What | Where |
|---|---|
| The character's anm2 | `gfx/character.anm2` |
| Select screen render and portrait | `gfx/render.png` and `gfx/portrait.png` (both optional) |
| The background | `gfx/area.anm2`, with the world's bounds in its `Bounds` null and where items spawn in its `ItemSpawn` null |
| The cursor | `gfx/cursor.anm2`, with the animations `Default`, `Click`, `Hover` (over an item), `Grab` (an item), `Pan` (with middle mouse), `Zoom` (with the mouse wheel) and `Dispose` (right clicking an item) |
| Stage names | Stages are named `Stage1`, `Stage2` and so on. Past the first, the stage's name is added to every animation's name, and each stage's "How are you feeling?" dialogue is the pool of its name. |
| Dialogue when over capacity | An interaction plays its pool with `Full` added (e.g. `BellyRubFull`) instead, if there is one. |
# character.json
This is the main character file where much of the functionality is stored.
This is the main character file where much of the functionality is stored. It's read over `common/character.json`, which holds the defaults (the body's numbers, sounds, particles, the interaction types and so on), so a character only writes what it changes. Objects merge key by key (e.g. `"blink": {"destination": "Head"}` keeps the default `source`, and `"interactTypes": {"Smack": {"scaleAmplitude": 5}}` keeps the rest of Smack), while lists are replaced whole.
```json
{
"name": "Snivy",
"anm2": "gfx/character/snivy.anm2",
"weight": 8.1,
"stages": [{"weight": 10, "dialoguePool": "Stage2", "animationSuffix": "Stage2"}],
"animations": {"start": "Appear", "idle": "Neutral", "idleFull": "NeutralFull", "stageUp": "StageUp"},
"sounds": {"digest": ["sfx/digest1.ogg"], "gurgle": ["sfx/gurgle1.ogg", "sfx/gurgle2.ogg"]}
"name": "Princess Mini",
"color": [0.188, 0.651, 0.424],
"weight": 40,
"weightMax": 100,
"capacity": 1250,
"stages": [45, 60, 70, 90],
"expandAreas": [{"layer": "Torso", "null": "Belly", "scaleMax": 2.5}],
"interactAreas": [{"type": "Rub", "null": "Head", "dialoguePool": "HeadRub"}]
}
```
| Key | Type | Meaning |
|---|---|---|
| `id` | string | What the character's save is named after. Defaults to the folder name; set it to keep the save when renaming the folder. |
| `name` | string | Name of the character; will appear in dialogue, stats, etc. Defaults to the folder name. |
| `description` | string | A general description of the character; will show in the Select screen. |
| `credits` | string | Credits text shown in the Select screen's Credits tab. |
| `render` | path | Texture for the character's "render" (i.e., a typical full-body display), will show in the Select screen. |
| `portrait` | path | Texture for the character's "portrait" (i.e., a cropped profile view), will show in the Select screen. |
| `anm2` | path | The character's anm2 file; should have all the character's animations. |
| `color` | [r, g, b], 0-1 | UI accent color for the character. |
| `weight` | float, kg | The character's starting weight. |
| `weightMax` | float, kg | Maximum weight the character can reach. |
| `capacity` | float, kcal | The character's starting capacity. |
| `capacityMin`, `capacityMax` | float, kcal | The range capacity stays within. |
| `capacity` | float, kcal | The character's starting capacity, and the least it can go down to. |
| `capacityMax` | float, kcal | The most capacity can grow to. |
| `overstuffedMultiplier` | float | The character can eat past capacity up to capacity times this. |
| `overstuffedDigestBonus` | float | Additional capacity gained on digest when the character was over capacity (scaled by how far over). |
| `caloriesToKilogram` | float | How many kilograms each calorie digested becomes. |
| `digestionRate` | float, %/second | The base digestion rate. |
| `digestionRateMin`, `digestionRateMax` | float, %/second | The range the digestion rate stays within. |
| `digestionTime` | int, ticks | When digesting, the digestion bar will count down, and then when it hits 0, the current calories will be digested. This determines how long this takes. |
| `digestionTime` | float, seconds | When digesting, the digestion bar will count down, and then when it hits 0, the current calories will be digested. This determines how long this takes. |
| `blinkChance` | float, % | Chance each tick to blink. |
| `gurgleChance` | float | How often the character will gurgle (see `sounds`) per tick, scaled by how full they are. |
| `gurgleChance` | float, % | Chance each tick of a gurgle (see `sounds`), scaled by how full the character is. |
| `gurgleCapacityMultiplier` | float | Multiplies the gurgle chance at full capacity. Higher capacity = higher gurgle chance. |
| `dialoguePool` | string | The character's base dialogue pool for "How are you feeling?". This is effectively "Stage 1"'s dialogue; each stage should have its own dialogue pool. |
### alternate
The alternate spritesheet of the character, if applicable (in Pokemon terms, the "shiny").
@@ -96,14 +112,7 @@ The alternate spritesheet of the character, if applicable (in Pokemon terms, the
| `chance` | float, % | Chance of rolling the alternate spritesheet when starting a new game. |
### stages
A "stage" represents each visual change of the character as the weight increases. By default, there's always one stage; each entry in this list adds another.
| Key | Type | Meaning |
|---|---|---|
| `weight` | float, kg | The weight threshold to reach this stage. |
| `dialoguePool` | string | The stage's dialogue pool for "How are you feeling?". |
| `animationSuffix` | string | Suffix appended to base animation names while this stage is active. Usually `Stage2`, `Stage3`, etc. |
| `area` | int | Switches to this area (from `areas.list`) from this stage on. |
A "stage" represents each visual change of the character as the weight increases. There's always a first stage (`Stage1`). This is a list of the weights (in kg) at which each stage after it (`Stage2`, `Stage3`...) is reached.
### animations
The character's animations. Know that a lot of character animations are typically easily played through dialogue; this is just for animations that aren't reliant on that system. These are just the base names.
@@ -141,30 +150,30 @@ The areas which will expand based on how full the character is and their progres
| `null` | The null that will expand. |
| `scaleMax` | The scale (in percent) that will be added at maximum. Know that a scale of 100 is the normal scale of an animation. |
The first expand area is treated as the belly: it breathes, jiggles when smacked, rubbed or fed, churns when it gurgles, and is where stage-up effects and gained weight come from.
### interactTypes, interactAreas
`interactTypes` is an object of interaction types by name (each gets a button in the tools bar), giving each type's defaults. `interactAreas` is a list of the concrete areas on a character which can be interacted with; usually for belly rubs, kisses, etc. Each area names its `type` and takes all of that type's settings, changing whichever it gives itself.
`interactTypes` is an object of interaction types by name, giving each type's defaults. Rub, Smack, Kiss and Turn Around come from common. A type gets a button on the taskbar only if one of the character's areas uses it. `interactAreas` is a list of the concrete areas on a character which can be interacted with; usually for belly rubs, kisses, etc. Each area names its `type` and takes all of that type's settings, changing whichever it gives itself.
| Key | Type | Meaning |
|---|---|---|
| `type` | string | (Areas only) The interaction type to use. |
| `null` | string | (Areas) The null in which the interact area can be triggered. |
| `layer` | string | The layer that the scale effect (e.g. smacks) applies to. |
| `glyph` | string | The icon-font glyph used for this type in the tools bar. |
| `icon` | string | The region of `gfx/icons.anm2` shown on this type's taskbar button. |
| `isHold` | bool | If true, the interaction is held rather than clicked once. |
| `cursorHover` | string | The animation the cursor will play when hovering over the interact area. |
| `cursorActive` | string | The animation the cursor will play when interacting. |
| `animation` | string | A character animation to play on interacting, when the area has no dialogue pool. |
| `idleOnEnd` | string | The idle animation the character uses after interacting (e.g. turning around). |
| `dialoguePool` | string | The dialogue pool which will be drawn from when interacting. |
| `dialoguePoolFull` | string | Dialogue pool used when the character is over capacity. |
| `dialogueCooldown` | int, ticks | Ticks before interacting can start new dialogue again. |
| `dialoguePool` | string | The dialogue pool which will be drawn from when interacting. Over capacity, the same pool with `Full` added is used, if there is one. |
| `dialogueCooldown` | float, seconds | Time before interacting can start new dialogue again. |
| `digestionClick` | float, % | Digestion added each click. |
| `digestionHover` | float, % | Digestion added each tick the cursor moves while held. |
| `digestionHover` | float, %/second | Digestion added while the cursor moves, held. |
| `scaleAmplitude` | float, % | Size of the scale effect on clicking. |
| `scaleCycles` | float | How many oscillations the scale effect performs. Defaults to 1. |
| `scaleTime` | float, ticks | How long the scale effect lasts. Defaults to 20. |
| `scaleTime` | float, seconds | How long the scale effect lasts. Defaults to a third of a second. |
| `sounds` | paths | Sounds played when interacting. |
| `particles` | strings | Particles (see `particles`) spawned when interacting. |
### sounds
| Key | Meaning |
@@ -172,85 +181,68 @@ The areas which will expand based on how full the character is and their progres
| `digest` | Plays when the character begins digesting (digestion bar full). |
| `gurgle` | Ambient sounds that play randomly based on capacity; see `gurgleChance`. |
### areas
"Areas" refers to the backgrounds of the game. Stages can switch between them (see `stages`).
| Key | Type | Meaning |
|---|---|---|
| `anm2` | path | The anm2 the areas use. |
| `boundsNull` | string | The null setting the world's bounds. Defaults to `Bounds`. |
| `spawnNull` | string | The null items spawn at random points within. If omitted or missing, `boundsNull` is used. |
| `list` | list | The areas. Each can set its own `anm2`, its `gravity` (applied to items' velocities per tick), `friction` (applied when items are grounded or hit walls) and `airResistance`. |
### area
How items move in the background (`gfx/area.anm2`): `gravity` (applied to items' velocities per tick), `friction` (applied when items are grounded or hit walls) and `airResistance`.
### cursor
Determines the cursor appearance and behavior. Without one, the system cursor is used.
The cursor's sounds. Its look is `gfx/cursor.anm2` (see "Fixed files and names").
| Key | Meaning |
|---|---|
| `anm2` | The anm2 file the cursor will use. |
| `animations` | `idle`, `click`, `hover` (over an item), `grab` (an item), `pan` (with middle mouse), `zoom` (with the mouse wheel) and `dispose` (right clicking an item). |
| `sounds` | `grab` (grabbing an item), `release` (letting go) and `throw` (letting go while dragging quickly). |
| `particles` | `grab`: particles spawned when grabbing an item. |
### menu
Determines menu and general UI appearance and behavior.
The UI's sounds.
| Key | Meaning |
|---|---|
| `font` | The font the menu will use. |
| `iconsFont` | The font holding the tools bar's glyphs. |
| `rounding` | The rounding of corners the UI will use. |
| `homeGlyph` | The glyph of the tools bar's Home button. |
| `sounds` | `open` and `close` (a sliding panel), `hover` and `select` (a widget), and `cheats` (after entering a special code to activate cheats). |
| `sounds` | `open` and `close` (the taskbar or one of its windows), `hover` and `select` (a widget), and `cheats` (after entering a special code to activate cheats). |
### particles
An object of particles by name, each with the `anm2` and `animation` it plays once where spawned.
### strings
Replaces UI text, by name. See [`src/strings.h`](src/strings.h) for every name and its default, e.g. `"strings": {"MenuTabInventory": "Pantry"}`.
An object of particles by name, each with the `anm2` and `animation` it plays once where spawned. (The ring where something is touched, grabbed or lands hard is drawn by the game, not a particle.)
# items.json
Has all items and their parameters, alongside additional behavior.
Has all items and their parameters, alongside additional behavior. Items share one anm2, whose spritesheet holds every item as a region named after it (pack them in Anm2Ed with "Make Spritesheet Regions"). Each item shows its region in place of whatever the anm2's frames show, with the region's own size and pivot.
```json
{
"anm2": "gfx/items/item.anm2",
"spawnDelay": 600,
"categories": {"Food": "edible", "Tool": "tool"},
"anm2": "gfx/item.anm2",
"spawnDelay": 10,
"rarities": {"Common": {"weight": 1, "sound": "sfx/common.ogg"}},
"items": [
{"name": "Apple", "texture": "gfx/items/apple.png", "category": "Food", "rarity": "Common", "calories": 95}
{"name": "Apple", "category": "Food", "use": "edible", "rarity": "Common", "calories": 95}
]
}
```
| Key | Type | Meaning |
|---|---|---|
| `anm2` | path | The base anm2 file that items will use. |
| `spritesheet` | int | The spritesheet of the anm2 that an item's `texture` replaces. Defaults to 0. |
| `spawnDelay` | int, ticks | Base cooldown before another item can be spawned. |
| `anm2` | path | The anm2 that items use. |
| `spritesheet` | int | The spritesheet of the anm2 holding the items' regions. Defaults to 0. |
| `spawnDelay` | float, seconds | Base cooldown before another item can be spawned. |
| `spawnDelayMultiplier` | float | Multiplies the spawn delay once per character stage. Values below `1.0` make item spawning faster as stage increases. |
| `spawnLimit` | int | Maximum number of items in the world at once. |
| `sounds` | | `bounce` (an item hitting a floor/wall/ceiling), `dispose` (an item disposed of), `summon` (an item spawned) and `newItem` (an item found for the first time). |
| `particles` | | `dispose` and `summon`. |
| `categories` | object | The kinds of items, by name; will appear in Catalog tooltips. Each says how its items are used: `edible` (food that can be eaten) or `tool`. |
| `rarities` | object | Rarities, by name. Each has a `weight` (relative chance of spawning) and a `sound` that plays when one spawns. |
### items
| Key | Type | Meaning |
|---|---|---|
| `name` | string | The name of the item. Saves keep items by name. |
| `name` | string | The name of the item. |
| `id` | string | What saves keep the item by. Defaults to its name; set it to keep saves when renaming the item. |
| `description` | string | Flavor text for the item. |
| `texture` | path | The texture the item uses. |
| `anm2` | path | The item's own anm2, if needed. |
| `category` | string | The item's category. |
| `region` | string | The region of the items' spritesheet it shows. Defaults to its name. |
| `anm2` | path | An anm2 of its own, if it animates differently. |
| `category` | string | The item's category, shown in the Catalog. |
| `use` | string | `edible` (food that can be eaten) or `tool`. |
| `rarity` | string | The item's rarity. |
| `flavor` | string | Flavor text (for food); honestly has no meaning but whatever. |
| `calories` | float | The amount of calories the item has (if food). |
| `capacityBonus` | float | Capacity increase granted as the item is eaten. |
| `digestionBonus` | float, %/second | The digestion rate added as the item is eaten. |
| `gravity` | float | The item's gravity; will use the area's if not given. |
| `gravity` | float | The item's gravity, in pixels per tick (a 60th of a second); will use the area's if not given. |
| `color` | [r, g, b], 0-1 | Optional UI color for the item. |
| `isToggleSpritesheet` | bool | When used as a tool on the character, will toggle the character's spritesheet (in Pokemon terms, toggling normal/shiny palettes). |
@@ -260,18 +252,23 @@ The collection of character dialogue; likely the biggest file, depending on your
```json
{
"delay": 2,
"blipDelay": 2,
"blip": ["sfx/blip.ogg"],
"pauses": {".": {"delay": 5}},
"hooks": {"Start": "Start", "Eat": "Eat"},
"pools": {"Eat": ["Eat1", "Eat2"]},
"speed": 30,
"blipEvery": 2,
"blip": "sfx/blip.ogg",
"pauses": {".": {"delay": 0.08}},
"hooks": {"Start": "Intro"},
"entries": {
"Start": {
"text": "Hey there, human!",
"animation": "Smug",
"choices": [{"text": "Hi!", "next": "Start2"}],
"effects": [{"type": "shake", "start": 4, "end": 9}]
"Intro": {
"isScene": true,
"lines": [
{"animation": "Appear"},
{"text": "Hey there, [shake]human[/shake]!", "animation": "Smug"}
],
"choices": [{"text": "Hi!", "next": "Hello"}]
},
"Eat1": {
"pools": ["Eat"],
"lines": [{"text": "[big]Yum![/big]"}]
}
}
}
@@ -279,35 +276,37 @@ The collection of character dialogue; likely the biggest file, depending on your
| Key | Type | Meaning |
|---|---|---|
| `delay` | int, ticks | How many ticks pass before the next dialogue character is revealed. |
| `blipDelay` | int | How many displayed dialogue characters pass between blip sounds. `3` means every third displayed character. |
| `blip` | paths | Dialogue blip sounds, played periodically while text reveals. |
| `pauses` | object | Extra `delay` (in ticks) after particular characters. With `isSilent`, talking and blips also pause during it. |
| `hooks` | object | Connects gameplay events to a pool (or else an entry) by name. The hook names are `Start`, `End`, `Help`, `StageUp`, `Random`, `Feed`, `FeedFull`, `Eat`, `EatFull`, `Full`, `Throw`, `LowCapacity`, `Digest`, `FoodTaken` and `FoodTakenFull`. `Random` and `Help` add the "Let's chat!" and "Help" buttons. |
| `pools` | object | A "pool" of dialogue is a list of entry labels, one picked at random when used. |
| `speed` | float | How many characters are revealed per second. |
| `blipEvery` | int | How many characters pass between blip sounds. `3` means every third character. |
| `blip` | sounds | Dialogue blip sounds, played periodically while text reveals. |
| `pauses` | object | Extra `delay` (in seconds) after particular characters. With `isSilent`, talking and blips also pause during it. |
| `hooks` | object | Gameplay events play the pool (or else the entry) named after them: `Start`, `End`, `Help`, `StageUp`, `Random`, `Feed`, `FeedFull`, `Eat`, `EatFull`, `Full`, `Throw`, `LowCapacity`, `Digest`, `FoodTaken` and `FoodTakenFull`. Hooks only lists ones that play something else. `Random` and `Help` add the "Let's chat!" and "Help" buttons. |
| `entries` | object | Each bit of dialogue is referred to as an "entry", by its label. |
### entries
An entry is lines played in order, after which it offers its choices or moves on to the next entry.
| Key | Type | Meaning |
|---|---|---|
| `text` | string | The actual dialogue content of the entry. Supports Unicode, provided the font contains the characters. An entry without text just plays its animation. |
| `animation` | string | A character animation that will play at the beginning of the dialogue. Again, just the base name for the animation, no stage numbers. |
| `next` | string | The label of the entry that will follow this one. If no next entry, the text will not continue. Make sure to connect these. |
| `choices` | list | Dialogue can be branching; each choice has its `text` (shown as a button) and the `next` entry it leads to. |
| `effects` | list | Effects over the text, each with a `type`, and a `start` and `end` (the characters it covers, from `start` up to `end`). |
| `lines` | list | Each with its `text` and an `animation` (base name) that plays as it starts. A line without text just plays its animation, moving on once it ends. |
| `choices` | list | Dialogue can be branching; each choice has its `text` (shown as a button after the last line) and the `next` entry it leads to. |
| `next` | string | The entry that follows the last line. With neither choices nor next, the dialogue ends there. |
| `pools` | strings | The pools (lists of entries picked from at random) the entry is in. |
| `isScene` | bool | Hides windows and items and disables interaction until the dialogue reaches the end. A scene started in the middle of another is ignored. |
### effects
| Type | Meaning |
### markup
Effects go right in a line's text, as tags. A tag over part of the text has a closing tag: `[shake]too bad[/shake]`. The rest happen where they stand: `[screenshake]BOOM`. `[[` is a plain `[`.
| Tag | Meaning |
|---|---|
| `color` | Colors the text, by `color` ([r, g, b], 0-1). |
| `big`, `small` | Fixed text scales. |
| `oscillation`, `shake` | Moves the text, with engine defaults. |
| `silent` | Suppresses blips and character talking for its range. |
| `screenshake` | Shakes the screen when its `start` comes up. |
| `sound` | Plays its `sound` (a path) when its `start` comes up. |
| `animation` | Plays its `animation` when its `start` comes up. |
| `delay` | Changes the reveal speed to its `delay` (in ticks) from its `start` on. |
| `scene` | Hides windows and items and disables interaction until the dialogue chain reaches and finishes its last entry. If another scene appears while one is active, it is ignored. |
| `[color=r g b]` | Colors the text (0-1 each), e.g. `[color=1 0.25 0.25]`. |
| `[big]`, `[small]` | Fixed text scales. |
| `[wave]`, `[shake]` | Moves the text, with engine defaults. |
| `[silent]` | Suppresses blips and character talking. |
| `[screenshake]` | Shakes the screen. |
| `[sound=path]` | Plays a sound. |
| `[animation=Name]` | Plays a character animation. |
| `[delay=seconds]` | Changes the reveal speed to one character per this many seconds from here on. |
# Saves
@@ -328,5 +327,5 @@ Stores general game settings and configuration; beyond individual characters.
| `last_character` | The character being played at exit, which the game continues on start. |
| `console` | `1` enables the developer console (the grave key). |
## saves/<character>.txt
A character's progress: their weight, calories, capacity, digestion, totals and playtime, the camera, and the items found (`discovered=` lines) and lying in the world (`item=` lines, as position, velocity, rotation and name).
## saves/<character id>.txt
A character's progress: their weight, calories, capacity, digestion, totals and playtime, the camera, and the items found (`discovered=` lines) and lying in the world (`item=` lines, as position, velocity, rotation and id).
+1 -1
View File
@@ -62,4 +62,4 @@ See [MODDING.md](MODDING.md).
## License
See [LICENSE](LICENSE).
See [LICENSE](LICENSE). The taskbar icons are from [Font Awesome Free](https://fontawesome.com) (CC BY 4.0), with lips by Lorc from [game-icons.net](https://game-icons.net) (CC BY 3.0); see `resources/common/gfx/icons_license.txt`.
+22 -116
View File
@@ -1,129 +1,35 @@
{
"name": "Braixen",
"description": "A fire-wielding, enigmatic Fox Pokémon. You're her apprentice!",
"credits": "Art, Animation, Dialogue: ShweetMagnet Sound Effects: Pokemon, skunkwhoplunks Commissioned by @FatGirIsHMU on Twitter",
"render": "gfx/preview/render.png",
"portrait": "gfx/preview/portrait.png",
"anm2": "gfx/character/braixen.anm2",
"color": [0.901961, 0.156863, 0.160784],
"weight": 32,
"weightMax": 250,
"capacity": 1000,
"capacityMin": 1000,
"capacityMax": 10000,
"overstuffedMultiplier": 1.5,
"overstuffedDigestBonus": 0.2,
"caloriesToKilogram": 0.001,
"digestionRate": 1.5,
"digestionRateMax": 4.5,
"digestionTime": 120,
"blinkChance": 0.5,
"gurgleChance": 0.0005,
"gurgleCapacityMultiplier": 10,
"dialoguePool": "Stage1",
"stages": [
{"weight": 35, "dialoguePool": "Stage2", "animationSuffix": "Stage2"},
{"weight": 45, "dialoguePool": "Stage3", "animationSuffix": "Stage3"},
{"weight": 55, "dialoguePool": "Stage4", "animationSuffix": "Stage4"},
{"weight": 70, "dialoguePool": "Stage5", "animationSuffix": "Stage5"},
{"weight": 95, "dialoguePool": "Stage6", "animationSuffix": "Stage6"},
{"weight": 125, "dialoguePool": "Stage7", "animationSuffix": "Stage7"},
{"weight": 160, "dialoguePool": "Stage8", "animationSuffix": "Stage8"},
{"weight": 200, "dialoguePool": "Stage9", "animationSuffix": "Stage9"},
{"weight": 250, "dialoguePool": "Stage10", "animationSuffix": "Stage10"}
],
"animations": {"start": "Appear", "idle": "Idle", "idleFull": "NeutralFull", "stageUp": "StageUp"},
"talk": {"source": "Talk", "destination": "Mouth"},
"blink": {"source": "Blink", "destination": "Eye"},
"eatAreas": [
{"null": "Mouth", "animation": "Eat", "event": "Eat"}
],
"expandAreas": [
{"layer": "Torso", "null": "Belly", "scaleMax": 1.25}
],
"sounds": {
"digest": ["sfx/digest1.ogg", "sfx/digest2.ogg", "sfx/digest3.ogg"],
"gurgle": ["sfx/gurgle1.ogg", "sfx/gurgle2.ogg", "sfx/gurgle3.ogg", "sfx/gurgle4.ogg", "sfx/gurgle5.ogg"]
},
"interactTypes": {
"Rub": {
"glyph": "2",
"isHold": true,
"cursorHover": "Hover",
"cursorActive": "Rub",
"sounds": ["sfx/rub.ogg"],
"particles": ["Circle"]
},
"Smack": {
"glyph": "3",
"cursorHover": "SmackHover",
"cursorActive": "Smack",
"dialogueCooldown": 300,
"digestionClick": 0.25,
"scaleAmplitude": 1,
"scaleCycles": 3,
"sounds": ["sfx/smack1.ogg", "sfx/smack2.ogg", "sfx/smack3.ogg", "sfx/smack4.ogg", "sfx/smack5.ogg"],
"particles": ["Circle"]
},
"Kiss": {
"glyph": "4",
"cursorHover": "KissHover",
"cursorActive": "Kiss",
"sounds": ["sfx/kiss1.ogg", "sfx/kiss2.ogg", "sfx/kiss3.ogg", "sfx/kiss4.ogg", "sfx/kiss5.ogg"],
"particles": ["Circle"]
},
"Turn Around": {
"glyph": "5",
"sounds": ["sfx/turn.ogg"],
"particles": ["Circle"]
}
},
"stages": [35, 45, 55, 70, 95, 125, 160, 200, 250],
"animations": {"idle": "Idle"},
"expandAreas": [{"layer": "Torso", "null": "Belly", "scaleMax": 1.25}],
"interactTypes": {"Smack": {"dialogueCooldown": 5, "digestionClick": 0.25}},
"interactAreas": [
{"type": "Rub", "null": "Head", "dialoguePool": "HeadRub", "dialoguePoolFull": "HeadRubFull"},
{"type": "Rub", "null": "Belly", "cursorActive": "Grab", "dialoguePool": "BellyRub", "dialoguePoolFull": "BellyRubFull", "digestionHover": 0.1},
{"type": "Kiss", "null": "Mouth", "dialoguePool": "MouthKiss", "dialoguePoolFull": "MouthKiss"},
{"type": "Kiss", "null": "Belly", "dialoguePool": "BellyKiss", "dialoguePoolFull": "BellyKiss"},
{"type": "Smack", "null": "Belly", "layer": "Torso", "dialoguePool": "BellySmack", "dialoguePoolFull": "BellySmack"},
{"type": "Rub", "null": "Head", "dialoguePool": "HeadRub"},
{"type": "Rub", "null": "Belly", "cursorActive": "Grab", "dialoguePool": "BellyRub", "digestionHover": 6},
{"type": "Kiss", "null": "Mouth", "dialoguePool": "MouthKiss"},
{"type": "Kiss", "null": "Belly", "dialoguePool": "BellyKiss"},
{"type": "Smack", "null": "Belly", "layer": "Torso", "dialoguePool": "BellySmack"},
{"type": "Smack", "null": "ButtFront", "layer": "LegFront", "dialoguePool": "ButtSmack"},
{"type": "Smack", "null": "ButtBack", "layer": "LegBack", "idleOnEnd": "IdleBack", "dialoguePool": "ButtSmack"},
{"type": "Turn Around", "null": "FullBody", "animation": "IdleBack", "idleOnEnd": "IdleBack", "cursorHover": "TurnAround"},
{"type": "Turn Around", "null": "FullBodyBack", "animation": "Idle", "idleOnEnd": "Idle", "cursorHover": "TurnAroundBack"}
],
"areas": {
"anm2": "gfx/areas/area.anm2",
"boundsNull": "Bounds",
"spawnNull": "ItemSpawn",
"list": [
{"gravity": 0.95, "friction": 0.75, "airResistance": 0.975}
]
},
"cursor": {
"anm2": "gfx/cursor/cursor.anm2",
"animations": {"idle": "Default", "click": "Click", "hover": "Hover", "grab": "Grab", "pan": "Pan", "zoom": "Zoom", "dispose": "Dispose"},
"sounds": {
"grab": ["sfx/grab.ogg"],
"release": ["sfx/release.ogg"],
"throw": ["sfx/throw.ogg", "sfx/throw2.ogg", "sfx/throw3.ogg"]
{
"type": "Turn Around",
"null": "FullBody",
"animation": "IdleBack",
"idleOnEnd": "IdleBack",
"cursorHover": "TurnAround"
},
"particles": {
"grab": ["Circle"]
{
"type": "Turn Around",
"null": "FullBodyBack",
"animation": "Idle",
"idleOnEnd": "Idle",
"cursorHover": "TurnAroundBack"
}
},
"menu": {
"font": "font/font.ttf",
"iconsFont": "font/icons.ttf",
"rounding": 10.0,
"homeGlyph": "1",
"sounds": {
"open": ["sfx/open.ogg"],
"close": ["sfx/close.ogg"],
"hover": ["sfx/hover.ogg", "sfx/hover2.ogg", "sfx/hover3.ogg"],
"select": ["sfx/select.ogg"],
"cheats": ["sfx/cheatsActivated.ogg"]
}
},
"particles": {
"Circle": {"anm2": "gfx/particle/circle.anm2", "animation": "Main"},
"Puff": {"anm2": "gfx/particle/puff.anm2", "animation": "Main"}
}
]
}
+76 -289
View File
@@ -1,347 +1,134 @@
{
"delay": 2,
"blipDelay": 2,
"speed": 30,
"blipEvery": 2,
"blip": ["sfx/blip.ogg"],
"pauses": {
".": {"delay": 8, "isSilent": true},
",": {"delay": 8, "isSilent": true},
"!": {"delay": 8, "isSilent": true},
"?": {"delay": 8, "isSilent": true}
".": {"delay": 0.1333, "isSilent": true},
",": {"delay": 0.1333, "isSilent": true},
"!": {"delay": 0.1333, "isSilent": true},
"?": {"delay": 0.1333, "isSilent": true}
},
"hooks": {"Start": "StartAppear"},
"pools": {
"ButtSmack": ["ButtSmack", "ButtSmack2", "ButtSmack3", "ButtSmack4", "ButtSmack5", "ButtSmack6", "ButtSmack7", "ButtSmack8", "ButtSmack9", "ButtSmack10"]
},
"entries": {
"StartAppear": {
"animation": "Appear",
"next": "Start",
"effects": [
{"type": "scene"}
]
},
"Start": {
"text": "Lovely, lovely, lovely!! You must be my new apprentice~!",
"animation": "Sweet",
"isScene": true,
"lines": [
{"animation": "Appear"},
{"text": "Lovely, lovely, [wave]lovely[/wave]!! You must be my [wave][color=1 0.25 0.25]new [screenshake][sound=sfx/boom.ogg]apprentice[/color][/wave]~!", "animation": "Sweet"}
],
"choices": [
{"text": "W-wait, huh?!", "next": "StartA-1"},
{"text": "That's me!", "next": "StartB-1"}
],
"effects": [
{"type": "oscillation", "start": 40, "end": 54},
{"type": "oscillation", "start": 16, "end": 22},
{
"type": "color",
"start": 40,
"end": 54,
"color": [1, 0.25, 0.25]
},
{"type": "screenshake", "start": 44, "end": 44},
{"type": "sound", "start": 44, "end": 44, "sound": "sfx/boom.ogg"}
]
},
"StartA-1": {
"text": "I'm not mistaken! My blazing bright eyes can see into your soul! Without a doubt, you are my apprentice!",
"animation": "Surprised",
"next": "StartA-2",
"effects": [
{
"type": "color",
"start": 93,
"end": 103,
"color": [1, 0.25, 0.25]
}
]
"lines": [
{"text": "I'm not mistaken! My blazing bright eyes can see into your soul! Without a doubt, you are my [color=1 0.25 0.25]apprentice[/color]!", "animation": "Surprised"}
],
"next": "StartA-2"
},
"StartB-1": {
"text": "Excellent! You've gotten the message! Splendid! So splendid!",
"animation": "Wicked",
"next": "StartA-2",
"effects": [
{
"type": "color",
"start": 93,
"end": 103,
"color": [1, 0.25, 0.25]
},
{"type": "shake", "start": 51, "end": 59}
]
"lines": [
{"text": "Excellent! You've gotten the message! Splendid! So [shake]splendid[/shake]!", "animation": "Wicked"}
],
"next": "StartA-2"
},
"StartA-2": {
"text": "Of course you would be! You've got a certain...spirit, about you! Your own ember, burning furiously within you!",
"animation": "Wicked",
"next": "StartA-3",
"effects": [
{
"type": "color",
"start": 47,
"end": 53,
"color": [1, 0.25, 0.25]
},
{
"type": "color",
"start": 76,
"end": 81,
"color": [1, 0.25, 0.25]
},
{"type": "shake", "start": 91, "end": 100}
]
},
"StartA-3": {"text": "Now, I must say...my practice isn't perfect yet. I am still a learner in the Art, and my pursuit is...unique.", "animation": "Thinking", "next": "StartA-4"},
"StartA-4": {
"text": "The school I'm enrolled in...encompasses only me. I'm the founder, and the sole teacher and student! Until you came along, that is. Call me Braixen. I shall be your companion!",
"animation": "Smug",
"next": "StartA-5",
"effects": [
{
"type": "color",
"start": 140,
"end": 147,
"color": [1, 0.25, 0.25]
}
]
},
"StartA-5": {"text": "I should tell you about my philosophy, then! What the Art really is! To master the eternal flame, the unyielding ember, one must embrace it...fully!", "animation": "Thinking", "next": "StartA-6"},
"StartA-6": {
"text": "You see, my apprentice, what is more \"embracing\" than using...one's own body for the sake of the Art?! I can't believe no one else has considered such a thing!!",
"animation": "Excited",
"next": "StartA-7",
"effects": [
{
"type": "color",
"start": 62,
"end": 76,
"color": [1, 0.25, 0.25]
},
{"type": "oscillation", "start": 62, "end": 76}
]
},
"StartA-7": {
"text": "Listen closely! Your purpose is to turn my thin, meager body into an splendid host of the Art! My stomach a vast, boiling, bubbling cauldron! My physique abundant with heat and energy!",
"animation": "Stern",
"next": "StartA-8",
"effects": [
{"type": "oscillation", "start": 69, "end": 82}
]
},
"StartA-8": {
"text": "...hard to understand? Fine, then, I'll use more pedestrian language. I want you to make me fat! As fat as possible!",
"animation": "Wicked",
"next": "StartA-9",
"effects": [
{"type": "big", "start": 69, "end": 96},
{
"type": "color",
"start": 92,
"end": 96,
"color": [1, 0.25, 0.25]
},
{
"type": "color",
"start": 101,
"end": 105,
"color": [1, 0.25, 0.25]
},
{"type": "screenshake", "start": 92, "end": 93}
]
},
"StartA-9": {
"text": "Some have called it \"ridiculous\". Unhealthy. Absurd! Well, I call them lost! Fools who will never truly grasp the reality of the Art!",
"animation": "Pout",
"next": "StartA-10",
"effects": [
{"type": "shake", "start": 71, "end": 75}
]
},
"StartA-10": {"text": "Your role now is to serve me well, and rejoice; for you, my apprentice, shall also scale the mountain of awakening through this!", "animation": "Smug", "next": "StartA-11"},
"StartA-11": {
"text": "Journey to faraway lands! Battle fierce opponents! Conquer and claim what foodstuffs you can scrounge to stoke the flame inside of my belly!",
"animation": "Horny",
"next": "StartA-12",
"effects": [
{
"type": "color",
"start": 105,
"end": 121,
"color": [1, 0.25, 0.25]
},
{"type": "shake", "start": 105, "end": 120}
]
},
"StartA-12": {
"text": "It will require dilligence, perserverance and perhaps...sacrifice. But, my student, following the Art shall yield many...rewards.",
"animation": "Horny",
"next": "StartA-13",
"effects": [
{
"type": "color",
"color": [1, 0.25, 0.25]
},
{"type": "shake"},
{"type": "animation", "start": 67, "animation": "Horny"}
]
},
"StartA-13": {
"text": "I shall grace you with permanent authority over my vessel. I do not mind. I trust you. You bare the same ember as I. I know this!",
"animation": "Smug",
"next": "StartA-14",
"effects": [
{
"type": "color",
"color": [1, 0.25, 0.25]
},
{"type": "shake"},
{"type": "animation", "animation": "Horny"},
{
"type": "color",
"start": 105,
"end": 110,
"color": [1, 0.25, 0.25]
}
]
},
"StartA-14": {
"text": "Now, venture forth! Heed thy call! Feed me! FEED ME! ...and do know that I can soothe any urges that may arise from witnessing such splendor.",
"animation": "Wicked",
"effects": [
{"type": "shake", "start": 44, "end": 51},
{
"type": "color",
"start": 53,
"end": 142,
"color": [0.498039, 0.498039, 0.498039]
},
{"type": "small", "start": 53, "end": 142},
{"type": "animation", "start": 5, "animation": "Sweet"}
"lines": [
{"text": "Of course you would be! You've got a certain...[color=1 0.25 0.25]spirit[/color], about you! Your own [color=1 0.25 0.25]ember[/color], burning [shake]furiously[/shake] within you!", "animation": "Wicked"},
{"text": "Now, I must say...my practice isn't perfect yet. I am still a learner in the Art, and my pursuit is...unique.", "animation": "Thinking"},
{"text": "The school I'm enrolled in...encompasses only me. I'm the founder, and the sole teacher and student! Until you came along, that is. Call me [color=1 0.25 0.25]Braixen[/color]. I shall be your companion!", "animation": "Smug"},
{"text": "I should tell you about my philosophy, then! What the Art really is! To master the eternal flame, the unyielding ember, one must embrace it...fully!", "animation": "Thinking"},
{"text": "You see, my apprentice, what is more \"embracing\" than using...[color=1 0.25 0.25][wave]one's own body[/wave][/color] for the sake of the Art?! I can't believe no one else has considered such a thing!!", "animation": "Excited"},
{"text": "Listen closely! Your purpose is to turn my thin, meager body into an [wave]splendid host[/wave] of the Art! My stomach a vast, boiling, bubbling cauldron! My physique abundant with heat and energy!", "animation": "Stern"},
{"text": "...hard to understand? Fine, then, I'll use more pedestrian language.[big] I want you to make me[color=1 0.25 0.25][screenshake] fat[/color][/big]! As[color=1 0.25 0.25] fat[/color] as possible!", "animation": "Wicked"},
{"text": "Some have called it \"ridiculous\". Unhealthy. Absurd! Well, I call them [shake]lost[/shake]! Fools who will never truly grasp the reality of the Art!", "animation": "Pout"},
{"text": "Your role now is to serve me well, and rejoice; for you, my apprentice, shall also scale the mountain of awakening through this!", "animation": "Smug"},
{"text": "Journey to faraway lands! Battle fierce opponents! Conquer and claim what foodstuffs you can scrounge to[color=1 0.25 0.25][shake] stoke the flam[/shake]e[/color] inside of my belly!", "animation": "Horny"},
{"text": "It will require dilligence, perserverance and perhaps...sacrifice. [animation=Horny]But, my student, following the Art shall yield many...rewards.", "animation": "Horny"},
{"text": "[animation=Horny]I shall grace you with permanent authority over my vessel. I do not mind. I trust you. You bare the same [color=1 0.25 0.25]ember[/color] as I. I know this!", "animation": "Smug"},
{"text": "Now, [animation=Sweet]venture forth! Heed thy call! Feed me! [shake]FEED ME[/shake]! [color=0.498 0.498 0.498][small] ...and do know that I can soothe any urges that may arise from witnessing such splendor.[/small][/color]", "animation": "Wicked"}
]
},
"Help": {
"text": "Yes, my dear apprentice! What do you need assistance with?",
"animation": "Curious",
"lines": [
{"text": "Yes,[wave] my dear apprentice[/wave]! What do you need assistance with?", "animation": "Curious"}
],
"choices": [
{"text": "You", "next": "HelpYou"},
{"text": "Choice"}
],
"effects": [
{"type": "oscillation", "start": 4, "end": 23}
]
},
"HelpYou": {"text": "M-Me?! Apprentice, are you...daft? Did you not heed my instructions I spoke to you earlier?", "animation": "Shocked", "next": "HelpYou2"},
"HelpYou2": {
"text": "Your mission is to follow my instructions in the Art! What's the Art?! Bah! Simpleton!",
"animation": "Angry",
"next": "HelpYou3",
"effects": [
{
"type": "color",
"start": 49,
"end": 52,
"color": [1, 0.25, 0.25]
},
{
"type": "color",
"start": 65,
"end": 68,
"color": [1, 0.25, 0.25]
}
]
},
"HelpYou3": {
"text": "Fire! Flames! Heat! Energy! Mass! That's what the Art is! And to sum it up, I need to embrace it by GETTING FAT!!!",
"animation": "Angry",
"effects": [
{"type": "screenshake", "start": 101, "end": 110},
{"type": "shake", "start": 101, "end": 121},
{"type": "sound", "start": 101, "end": 110, "sound": "sfx/boom.ogg"}
"HelpYou": {
"lines": [
{"text": "M-Me?! Apprentice, are you...daft? Did you not heed my instructions I spoke to you earlier?", "animation": "Shocked"},
{"text": "Your mission is to follow my instructions in the [color=1 0.25 0.25]Art[/color]! What's the [color=1 0.25 0.25]Art[/color]?! Bah! Simpleton!", "animation": "Angry"},
{"text": "Fire! Flames! Heat! Energy! Mass! That's what the Art is! And to sum it up, I need to embrace it by [screenshake][shake][sound=sfx/boom.ogg]GETTING FAT!!![/shake]", "animation": "Angry"}
]
},
"HelpYou4": {
"text": "Fire! Flames! Heat! Energy! Mass! That's what the Art is! And to sum it up, I need to embrace it by GETTING FAT!!!",
"animation": "Angry",
"effects": [
{"type": "screenshake", "start": 101, "end": 110},
{"type": "shake", "start": 101, "end": 121},
{"type": "sound", "start": 101, "end": 110, "sound": "sfx/boom.ogg"},
{"type": "animation", "start": 101, "animation": "Horny"}
"lines": [
{"text": "Fire! Flames! Heat! Energy! Mass! That's what the Art is! And to sum it up, I need to embrace it by [screenshake][shake][sound=sfx/boom.ogg][animation=Horny]GETTING FAT!!![/shake]", "animation": "Angry"}
]
},
"ButtSmack": {
"text": "KYAH!!!",
"animation": "SurprisedBack",
"effects": [
{"type": "big", "end": 7},
{"type": "shake", "end": 7},
{"type": "screenshake"},
{"type": "screenshake"}
"pools": ["ButtSmack"],
"lines": [
{"text": "[big][shake][screenshake][screenshake]KYAH!!![/shake][/big]", "animation": "SurprisedBack"}
]
},
"ButtSmack2": {
"text": "UWAH!!",
"animation": "SurprisedBack",
"effects": [
{"type": "big", "end": 6},
{"type": "shake", "end": 6},
{"type": "screenshake"}
"pools": ["ButtSmack"],
"lines": [
{"text": "[big][shake][screenshake]UWAH!![/shake][/big]", "animation": "SurprisedBack"}
]
},
"ButtSmack3": {
"text": "MY REAR END!!",
"animation": "SurprisedBack",
"effects": [
{"type": "big", "end": 13},
{"type": "shake", "end": 13},
{"type": "screenshake"}
"pools": ["ButtSmack"],
"lines": [
{"text": "[big][shake][screenshake]MY REAR END!![/shake][/big]", "animation": "SurprisedBack"}
]
},
"ButtSmack4": {
"text": "H-HEY!!",
"animation": "SurprisedBack",
"effects": [
{"type": "big", "end": 7},
{"type": "shake", "end": 7},
{"type": "screenshake"}
"pools": ["ButtSmack"],
"lines": [
{"text": "[big][shake][screenshake]H-HEY!![/shake][/big]", "animation": "SurprisedBack"}
]
},
"ButtSmack5": {
"text": "O-OUCH!!",
"animation": "SurprisedBack",
"effects": [
{"type": "big", "end": 8},
{"type": "shake", "end": 8},
{"type": "screenshake"}
"pools": ["ButtSmack"],
"lines": [
{"text": "[big][shake][screenshake]O-OUCH!![/shake][/big]", "animation": "SurprisedBack"}
]
},
"ButtSmack6": {
"text": "G-GENTLE!!",
"animation": "SurprisedBack",
"effects": [
{"type": "big", "end": 10},
{"type": "shake", "end": 10},
{"type": "screenshake"}
"pools": ["ButtSmack"],
"lines": [
{"text": "[big][shake][screenshake]G-GENTLE!![/shake][/big]", "animation": "SurprisedBack"}
]
},
"ButtSmack7": {
"text": "WAH!!",
"animation": "SurprisedBack",
"effects": [
{"type": "big", "end": 5},
{"type": "shake", "end": 5},
{"type": "screenshake"}
"pools": ["ButtSmack"],
"lines": [
{"text": "[big][shake][screenshake]WAH!![/shake][/big]", "animation": "SurprisedBack"}
]
},
"ButtSmack8": {
"pools": ["ButtSmack"],
"lines": [
{"text": "G-goodness!", "animation": "SurprisedBack"}
]
},
"ButtSmack8": {"text": "G-goodness!", "animation": "SurprisedBack"},
"ButtSmack9": {
"text": "Eager, are you?!",
"animation": "SurprisedBack",
"effects": [
{"type": "shake", "end": 16}
"pools": ["ButtSmack"],
"lines": [
{"text": "[shake]Eager, are you?![/shake]", "animation": "SurprisedBack"}
]
},
"ButtSmack10": {
"text": "Aren't you bold?!",
"animation": "SurprisedBack",
"effects": [
{"type": "shake", "end": 16}
"pools": ["ButtSmack"],
"lines": [
{"text": "[shake]Aren't you bold?[/shake]!", "animation": "SurprisedBack"}
]
}
}
Binary file not shown.
Binary file not shown.
File renamed without changes.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 373 KiB

After

Width:  |  Height:  |  Size: 373 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,37 +0,0 @@
{
"anm2ed": 1,
"info": {"createdOn": "2025-12-06T23:49:27"},
"spritesheets": [
{
"path": "item_001_poke_puff_basic_sweet.png",
"regions": [
{
"name": "48x48",
"size": [48, 48],
"pivot": [24, 24]
}
]
}
],
"layers": [
{"name": "Main"}
],
"defaultAnimation": "Default",
"animations": {
"Default": {
"root": [
{
"scale": [125, 125]
}
],
"layers": [
{
"layer": 0,
"frames": [
{"region": 0}
]
}
]
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 517 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 732 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 835 B

@@ -1,48 +0,0 @@
{
"anm2ed": 1,
"info": {},
"spritesheets": [
{
"path": "circle.png",
"regions": [
{
"name": "Main",
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
}
]
}
],
"layers": [
{"name": "Main"}
],
"defaultAnimation": "Spawn",
"animations": {
"Spawn": {
"length": 11,
"loop": false,
"root": [
{"delay": 11}
],
"layers": [
{
"layer": 0,
"frames": [
{
"region": 0,
"scale": [10, 10],
"delay": 10,
"interpolation": "linear"
},
{
"region": 0,
"tint": [255, 255, 255, 0],
"interpolation": "linear"
}
]
}
]
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

+34 -35
View File
@@ -1,11 +1,11 @@
{
"anm2": "gfx/items/item.anm2",
"anm2": "gfx/item.anm2",
"spritesheet": 0,
"spawnDelay": 600,
"spawnDelay": 10,
"spawnDelayMultiplier": 0.75,
"spawnLimit": 5,
"sounds": {
"bounce": ["sfx/bounce.ogg", "sfx/bounce2.ogg", "sfx/bounce3.ogg"],
"bounce": "sfx/bounce*.ogg",
"dispose": ["sfx/dispose.ogg"],
"summon": ["sfx/summon.ogg"]
},
@@ -13,7 +13,6 @@
"dispose": ["Puff"],
"summon": ["Puff"]
},
"categories": {"Food": "edible", "Tool": "tool"},
"rarities": {
"Common": {"weight": 1.0, "sound": "sfx/common.ogg"},
"Uncommon": {"weight": 0.75, "sound": "sfx/uncommon.ogg"},
@@ -24,36 +23,36 @@
"Special": {"weight": 0.0, "sound": "sfx/special.ogg"}
},
"items": [
{"name": "Poké Puff (Basic, Sweet)", "description": "A basic sweet Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Sweet", "texture": "gfx/items/item_001_poke_puff_basic_sweet.png", "calories": 100.0},
{"name": "Poké Puff (Basic, Mint)", "description": "A basic minty Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Mint", "texture": "gfx/items/item_002_poke_puff_basic_mint.png", "calories": 100.0},
{"name": "Poké Puff (Basic, Citrus)", "description": "A basic citrusy Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Citrus", "texture": "gfx/items/item_003_poke_puff_basic_citrus.png", "calories": 100.0},
{"name": "Poké Puff (Basic, Mocha)", "description": "A basic mocha Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Mocha", "texture": "gfx/items/item_004_poke_puff_basic_mocha.png", "calories": 100.0},
{"name": "Poké Puff (Basic, Spice)", "description": "A basic spice Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Spice", "texture": "gfx/items/item_005_poke_puff_basic_spice.png", "calories": 100.0},
{"name": "Poké Puff (Frosted, Sweet)", "description": "A frosted sweet Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Sweet", "texture": "gfx/items/item_006_poke_puff_frosted_sweet.png", "calories": 250.0},
{"name": "Poké Puff (Frosted, Mint)", "description": "A frosted minty Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Mint", "texture": "gfx/items/item_007_poke_puff_frosted_mint.png", "calories": 250.0},
{"name": "Poké Puff (Frosted, Citrus)", "description": "A frosted citrusy Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Mint", "texture": "gfx/items/item_008_poke_puff_frosted_citrus.png", "calories": 250.0},
{"name": "Poké Puff (Frosted, Mocha)", "description": "A frosted mocha Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Mocha", "texture": "gfx/items/item_009_poke_puff_frosted_mocha.png", "calories": 250.0},
{"name": "Poké Puff (Frosted, Spice)", "description": "A frosted spice Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Spice", "texture": "gfx/items/item_010_poke_puff_frosted_spice.png", "calories": 250.0},
{"name": "Poké Puff (Fancy, Sweet)", "description": "A fancy sweet Poké Puff, adorned with a cherry.", "category": "Food", "rarity": "Rare", "flavor": "Sweet", "texture": "gfx/items/item_011_poke_puff_fancy_sweet.png", "calories": 500.0},
{"name": "Poké Puff (Fancy, Mint)", "description": "A fancy minty Poké Puff, adorned with a crescent moon-shaped candy.", "category": "Food", "rarity": "Rare", "flavor": "Mint", "texture": "gfx/items/item_012_poke_puff_fancy_mint.png", "calories": 500.0},
{"name": "Poké Puff (Fancy, Citrus)", "description": "A fancy citrus Poké Puff, adorned with an orange slice.", "category": "Food", "rarity": "Rare", "flavor": "Citrus", "texture": "gfx/items/item_013_poke_puff_fancy_citrus.png", "calories": 500.0},
{"name": "Poké Puff (Fancy, Mocha)", "description": "A fancy mocha Poké Puff, adorned with a morsel of white chocolate.", "category": "Food", "rarity": "Rare", "flavor": "Mocha", "texture": "gfx/items/item_014_poke_puff_fancy_mocha.png", "calories": 500.0},
{"name": "Poké Puff (Fancy, Spice)", "description": "A fancy spice Poké Puff, adorned with a morsel of dark chocolate.", "category": "Food", "rarity": "Rare", "flavor": "Spice", "texture": "gfx/items/item_015_poke_puff_fancy_spice.png", "calories": 500.0},
{"name": "Poké Puff (Deluxe, Sweet)", "description": "A deluxe sweet Poké Puff; frosted and adorned with a cherry.", "category": "Food", "rarity": "Epic", "flavor": "Sweet", "texture": "gfx/items/item_016_poke_puff_deluxe_sweet.png", "calories": 1000.0},
{"name": "Poké Puff (Deluxe, Mint)", "description": "A deluxe minty Poké Puff; frosted and adorned with a cinnamon stick.", "category": "Food", "rarity": "Epic", "flavor": "Mint", "texture": "gfx/items/item_017_poke_puff_deluxe_mint.png", "calories": 1000.0},
{"name": "Poké Puff (Deluxe, Citrus)", "description": "A deluxe citrusy Poké Puff; frosted and adorned with an orange slice.", "category": "Food", "rarity": "Epic", "flavor": "Citrus", "texture": "gfx/items/item_018_poke_puff_deluxe_citrus.png", "calories": 1000.0},
{"name": "Poké Puff (Deluxe, Mocha)", "description": "A deluxe mocha Poké Puff; frosted and adorned with a morsel of white chocolate.", "category": "Food", "rarity": "Epic", "flavor": "Mocha", "texture": "gfx/items/item_019_poke_puff_deluxe_mocha.png", "calories": 1000.0},
{"name": "Poké Puff (Deluxe, Spice)", "description": "A deluxe spice Poké Puff; frosted and adorned with a morsel of dark chocolate.", "category": "Food", "rarity": "Epic", "flavor": "Spice", "texture": "gfx/items/item_020_poke_puff_deluxe_spice.png", "calories": 1000.0},
{"name": "Poké Puff (Supreme Spring)", "description": "A supreme Poké Puff that tastes like the sweet cherry blossoms of spring.", "category": "Food", "rarity": "Legendary", "flavor": "Sweet", "texture": "gfx/items/item_021_poke_puff_supreme_spring.png", "calories": 2500.0},
{"name": "Poké Puff (Supreme Summer)", "description": "A supreme Poké Puff that tastes like a tropical summer vacation.", "category": "Food", "rarity": "Legendary", "flavor": "Citrus", "texture": "gfx/items/item_022_poke_puff_supreme_summer.png", "calories": 2500.0},
{"name": "Poké Puff (Supreme Autumn)", "description": "A supreme Poké Puff that tastes like a bountiful autumn harvest.", "category": "Food", "rarity": "Legendary", "flavor": "Citrus", "texture": "gfx/items/item_023_poke_puff_supreme_autumn.png", "calories": 2500.0},
{"name": "Poké Puff (Supreme Winter)", "description": "A supreme Poké Puff that tastes like a frosty winter wonderland.", "category": "Food", "rarity": "Legendary", "flavor": "Spice", "texture": "gfx/items/item_024_poke_puff_supreme_winter.png", "calories": 2500.0},
{"name": "Poké Puff (Supreme Wish)", "description": "A supreme Poké Puff that tastes like a cherished birthday celebration.\nIt also is the biggest calorie nuke ever.\nCan Snivy eat it!?\nAlso, statistically, it might be your birthday today, right?", "category": "Food", "rarity": "???", "flavor": "Spice", "texture": "gfx/items/item_025_poke_puff_supreme_wish.png", "calories": 10000.0},
{"name": "Poké Puff (Supreme Honor)", "description": "A supreme Poké Puff that tastes like a monumental victory.\nYou've earned it...if Braixen can eat it!", "category": "Food", "rarity": "Special", "flavor": "Mocha", "texture": "gfx/items/item_026_poke_puff_supreme_honor.png", "calories": 2500.0, "digestionBonus": 0.75},
{"name": "Cheri Berry", "description": "A spherical red berry that cures paralysis\n...oh, and it also excites one's stomach.", "category": "Food", "rarity": "Uncommon", "flavor": "Spicy", "texture": "gfx/items/item_027_cheri_berry.png", "calories": 25.0, "digestionBonus": 0.04998},
{"name": "Tamato Berry", "description": "A spiny crimson berry that lowers speed and raises friendship.\n...oh, and it also greatly excites one's stomach.", "category": "Food", "rarity": "Rare", "flavor": "Spicy", "texture": "gfx/items/item_028_tamato_berry.png", "calories": 50.0, "digestionBonus": 0.24999},
{"name": "Touga Berry", "description": "An obscure, searing-red berry from faraway lands.\nIt cures confusion...and it'll make one's stomach a burning inferno.", "category": "Food", "rarity": "Epic", "flavor": "Spicy", "texture": "gfx/items/item_029_touga_berry.png", "calories": 100.0, "digestionBonus": 0.4998},
{"name": "Pomeg Berry", "description": "cG9tZWcgYmVycnkgcG9tZWcgYmVycnkgcG9tZWcgYmVycnk=", "category": "Food", "rarity": "???", "flavor": "None", "texture": "gfx/items/item_030_pomeg_berry.png", "calories": -2500.0, "digestionBonus": 6.0, "gravity": 0.05},
{"name": "Shiny Charm", "description": "Can change a Pokémon's color scheme...", "category": "Tool", "rarity": "???", "texture": "gfx/items/item_031_shiny_charm.png", "isToggleSpritesheet": true}
{"name": "Poké Puff (Basic, Sweet)", "description": "A basic sweet Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Sweet", "calories": 100.0, "use": "edible"},
{"name": "Poké Puff (Basic, Mint)", "description": "A basic minty Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Mint", "calories": 100.0, "use": "edible"},
{"name": "Poké Puff (Basic, Citrus)", "description": "A basic citrusy Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Citrus", "calories": 100.0, "use": "edible"},
{"name": "Poké Puff (Basic, Mocha)", "description": "A basic mocha Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Mocha", "calories": 100.0, "use": "edible"},
{"name": "Poké Puff (Basic, Spice)", "description": "A basic spice Poké Puff.", "category": "Food", "rarity": "Common", "flavor": "Spice", "calories": 100.0, "use": "edible"},
{"name": "Poké Puff (Frosted, Sweet)", "description": "A frosted sweet Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Sweet", "calories": 250.0, "use": "edible"},
{"name": "Poké Puff (Frosted, Mint)", "description": "A frosted minty Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Mint", "calories": 250.0, "use": "edible"},
{"name": "Poké Puff (Frosted, Citrus)", "description": "A frosted citrusy Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Mint", "calories": 250.0, "use": "edible"},
{"name": "Poké Puff (Frosted, Mocha)", "description": "A frosted mocha Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Mocha", "calories": 250.0, "use": "edible"},
{"name": "Poké Puff (Frosted, Spice)", "description": "A frosted spice Poké Puff.", "category": "Food", "rarity": "Uncommon", "flavor": "Spice", "calories": 250.0, "use": "edible"},
{"name": "Poké Puff (Fancy, Sweet)", "description": "A fancy sweet Poké Puff, adorned with a cherry.", "category": "Food", "rarity": "Rare", "flavor": "Sweet", "calories": 500.0, "use": "edible"},
{"name": "Poké Puff (Fancy, Mint)", "description": "A fancy minty Poké Puff, adorned with a crescent moon-shaped candy.", "category": "Food", "rarity": "Rare", "flavor": "Mint", "calories": 500.0, "use": "edible"},
{"name": "Poké Puff (Fancy, Citrus)", "description": "A fancy citrus Poké Puff, adorned with an orange slice.", "category": "Food", "rarity": "Rare", "flavor": "Citrus", "calories": 500.0, "use": "edible"},
{"name": "Poké Puff (Fancy, Mocha)", "description": "A fancy mocha Poké Puff, adorned with a morsel of white chocolate.", "category": "Food", "rarity": "Rare", "flavor": "Mocha", "calories": 500.0, "use": "edible"},
{"name": "Poké Puff (Fancy, Spice)", "description": "A fancy spice Poké Puff, adorned with a morsel of dark chocolate.", "category": "Food", "rarity": "Rare", "flavor": "Spice", "calories": 500.0, "use": "edible"},
{"name": "Poké Puff (Deluxe, Sweet)", "description": "A deluxe sweet Poké Puff; frosted and adorned with a cherry.", "category": "Food", "rarity": "Epic", "flavor": "Sweet", "calories": 1000.0, "use": "edible"},
{"name": "Poké Puff (Deluxe, Mint)", "description": "A deluxe minty Poké Puff; frosted and adorned with a cinnamon stick.", "category": "Food", "rarity": "Epic", "flavor": "Mint", "calories": 1000.0, "use": "edible"},
{"name": "Poké Puff (Deluxe, Citrus)", "description": "A deluxe citrusy Poké Puff; frosted and adorned with an orange slice.", "category": "Food", "rarity": "Epic", "flavor": "Citrus", "calories": 1000.0, "use": "edible"},
{"name": "Poké Puff (Deluxe, Mocha)", "description": "A deluxe mocha Poké Puff; frosted and adorned with a morsel of white chocolate.", "category": "Food", "rarity": "Epic", "flavor": "Mocha", "calories": 1000.0, "use": "edible"},
{"name": "Poké Puff (Deluxe, Spice)", "description": "A deluxe spice Poké Puff; frosted and adorned with a morsel of dark chocolate.", "category": "Food", "rarity": "Epic", "flavor": "Spice", "calories": 1000.0, "use": "edible"},
{"name": "Poké Puff (Supreme Spring)", "description": "A supreme Poké Puff that tastes like the sweet cherry blossoms of spring.", "category": "Food", "rarity": "Legendary", "flavor": "Sweet", "calories": 2500.0, "use": "edible"},
{"name": "Poké Puff (Supreme Summer)", "description": "A supreme Poké Puff that tastes like a tropical summer vacation.", "category": "Food", "rarity": "Legendary", "flavor": "Citrus", "calories": 2500.0, "use": "edible"},
{"name": "Poké Puff (Supreme Autumn)", "description": "A supreme Poké Puff that tastes like a bountiful autumn harvest.", "category": "Food", "rarity": "Legendary", "flavor": "Citrus", "calories": 2500.0, "use": "edible"},
{"name": "Poké Puff (Supreme Winter)", "description": "A supreme Poké Puff that tastes like a frosty winter wonderland.", "category": "Food", "rarity": "Legendary", "flavor": "Spice", "calories": 2500.0, "use": "edible"},
{"name": "Poké Puff (Supreme Wish)", "description": "A supreme Poké Puff that tastes like a cherished birthday celebration.\nIt also is the biggest calorie nuke ever.\nCan Snivy eat it!?\nAlso, statistically, it might be your birthday today, right?", "category": "Food", "rarity": "???", "flavor": "Spice", "calories": 10000.0, "use": "edible"},
{"name": "Poké Puff (Supreme Honor)", "description": "A supreme Poké Puff that tastes like a monumental victory.\nYou've earned it...if Braixen can eat it!", "category": "Food", "rarity": "Special", "flavor": "Mocha", "calories": 2500.0, "digestionBonus": 0.75, "use": "edible"},
{"name": "Cheri Berry", "description": "A spherical red berry that cures paralysis\n...oh, and it also excites one's stomach.", "category": "Food", "rarity": "Uncommon", "flavor": "Spicy", "calories": 25.0, "digestionBonus": 0.04998, "use": "edible"},
{"name": "Tamato Berry", "description": "A spiny crimson berry that lowers speed and raises friendship.\n...oh, and it also greatly excites one's stomach.", "category": "Food", "rarity": "Rare", "flavor": "Spicy", "calories": 50.0, "digestionBonus": 0.24999, "use": "edible"},
{"name": "Touga Berry", "description": "An obscure, searing-red berry from faraway lands.\nIt cures confusion...and it'll make one's stomach a burning inferno.", "category": "Food", "rarity": "Epic", "flavor": "Spicy", "calories": 100.0, "digestionBonus": 0.4998, "use": "edible"},
{"name": "Pomeg Berry", "description": "cG9tZWcgYmVycnkgcG9tZWcgYmVycnkgcG9tZWcgYmVycnk=", "category": "Food", "rarity": "???", "flavor": "None", "calories": -2500.0, "digestionBonus": 6.0, "gravity": 0.05, "use": "edible"},
{"name": "Shiny Charm", "description": "Can change a Pokémon's color scheme...", "category": "Tool", "rarity": "???", "isToggleSpritesheet": true, "use": "tool"}
]
}
+9 -106
View File
@@ -1,115 +1,18 @@
{
"name": "Princess Mini",
"description": "A sprightly, pampered, petite princess. Don't call her \"Mint\"!",
"credits": "Art, Animation, Dialogue: ShweetMagnet Character: 2x/MerchantAnon Sound Effects: JC Sounds (CC-BY 4.0), artisticdude (CC0), Kronbits (CC0), Vehicle (CC0), pixabay.org, ShweetMagnet Font: DPComic",
"render": "gfx/preview/render.png",
"portrait": "gfx/preview/portrait.png",
"anm2": "gfx/character/mini.anm2",
"color": [0.188, 0.651, 0.424],
"weight": 40,
"weightMax": 100,
"capacity": 1250,
"capacityMin": 1250,
"capacityMax": 10000,
"overstuffedMultiplier": 1.5,
"overstuffedDigestBonus": 0.2,
"caloriesToKilogram": 0.001,
"digestionRate": 1.5,
"digestionRateMax": 4.5,
"digestionTime": 120,
"blinkChance": 0.5,
"gurgleChance": 0.0005,
"gurgleCapacityMultiplier": 10,
"dialoguePool": "Stage1",
"stages": [
{"weight": 45, "dialoguePool": "Stage2", "animationSuffix": "Stage2"},
{"weight": 60, "dialoguePool": "Stage3", "animationSuffix": "Stage3"},
{"weight": 70, "dialoguePool": "Stage4", "animationSuffix": "Stage4"},
{"weight": 90, "dialoguePool": "Stage5", "animationSuffix": "Stage5"}
],
"animations": {"start": "Appear", "idle": "Neutral", "idleFull": "NeutralFull", "stageUp": "StageUp"},
"talk": {"source": "Talk", "destination": "Mouth"},
"blink": {"source": "Blink", "destination": "Eye"},
"eatAreas": [
{"null": "Mouth", "animation": "Eat", "event": "Eat"}
],
"expandAreas": [
{"layer": "Torso", "null": "Belly", "scaleMax": 2.5}
],
"sounds": {
"digest": ["sfx/digest1.ogg", "sfx/digest2.ogg", "sfx/digest3.ogg"],
"gurgle": ["sfx/gurgle1.ogg", "sfx/gurgle2.ogg", "sfx/gurgle3.ogg", "sfx/gurgle4.ogg", "sfx/gurgle5.ogg"]
},
"interactTypes": {
"Rub": {
"glyph": "2",
"isHold": true,
"cursorHover": "Hover",
"cursorActive": "Rub",
"sounds": ["sfx/rub.ogg"],
"particles": ["Circle"]
},
"Smack": {
"glyph": "3",
"cursorHover": "SmackHover",
"cursorActive": "Smack",
"dialogueCooldown": 40,
"digestionClick": 0.25,
"scaleAmplitude": 1,
"scaleCycles": 3,
"sounds": ["sfx/smack1.ogg", "sfx/smack2.ogg", "sfx/smack3.ogg", "sfx/smack4.ogg", "sfx/smack5.ogg"],
"particles": ["Circle"]
},
"Kiss": {
"glyph": "4",
"cursorHover": "KissHover",
"cursorActive": "Kiss",
"sounds": ["sfx/kiss1.ogg", "sfx/kiss2.ogg", "sfx/kiss3.ogg", "sfx/kiss4.ogg", "sfx/kiss5.ogg"],
"particles": ["Circle"]
}
},
"stages": [45, 60, 70, 90],
"expandAreas": [{"layer": "Torso", "null": "Belly", "scaleMax": 2.5}],
"interactTypes": {"Smack": {"digestionClick": 0.25}},
"interactAreas": [
{"type": "Rub", "null": "Head", "dialoguePool": "HeadRub", "dialoguePoolFull": "HeadRubFull"},
{"type": "Rub", "null": "Belly", "cursorActive": "Grab", "dialoguePool": "BellyRub", "dialoguePoolFull": "BellyRubFull", "digestionHover": 0.1},
{"type": "Kiss", "null": "Mouth", "dialoguePool": "MouthKiss", "dialoguePoolFull": "MouthKiss"},
{"type": "Kiss", "null": "Belly", "dialoguePool": "BellyKiss", "dialoguePoolFull": "BellyKiss"},
{"type": "Smack", "null": "Belly", "layer": "Torso", "dialoguePool": "BellySmack", "dialoguePoolFull": "BellySmack"}
],
"areas": {
"anm2": "gfx/areas/area.anm2",
"boundsNull": "Bounds",
"spawnNull": "ItemSpawn",
"list": [
{"gravity": 0.95, "friction": 0.75, "airResistance": 0.975}
]
},
"cursor": {
"anm2": "gfx/cursor/cursor.anm2",
"animations": {"idle": "Default", "click": "Click", "hover": "Hover", "grab": "Grab", "pan": "Pan", "zoom": "Zoom", "dispose": "Dispose"},
"sounds": {
"grab": ["sfx/grab.ogg"],
"release": ["sfx/release.ogg"],
"throw": ["sfx/throw1.ogg", "sfx/throw2.ogg", "sfx/throw3.ogg"]
},
"particles": {
"grab": ["Circle"]
}
},
"menu": {
"font": "font/font.ttf",
"iconsFont": "font/icons.ttf",
"rounding": 10.0,
"homeGlyph": "1",
"sounds": {
"open": ["sfx/open.ogg"],
"close": ["sfx/close.ogg"],
"hover": ["sfx/hover1.ogg", "sfx/hover2.ogg", "sfx/hover3.ogg"],
"select": ["sfx/select.ogg"],
"cheats": ["sfx/cheatsActivated.ogg"]
}
},
"particles": {
"Circle": {"anm2": "gfx/particle/circle.anm2", "animation": "Main"},
"Puff": {"anm2": "gfx/particle/puff.anm2", "animation": "Main"}
}
{"type": "Rub", "null": "Head", "dialoguePool": "HeadRub"},
{"type": "Rub", "null": "Belly", "cursorActive": "Grab", "dialoguePool": "BellyRub", "digestionHover": 6},
{"type": "Kiss", "null": "Mouth", "dialoguePool": "MouthKiss"},
{"type": "Kiss", "null": "Belly", "dialoguePool": "BellyKiss"},
{"type": "Smack", "null": "Belly", "layer": "Torso", "dialoguePool": "BellySmack"}
]
}
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
File renamed without changes.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

@@ -717,7 +717,7 @@
{"name": "ButtBack", "showRect": true}
],
"events": ["Eat", "Grow", "Groan"],
"sounds": ["../../sfx/eat1.ogg", "../../sfx/eat2.ogg", "../../sfx/eat3.ogg", "../../sfx/grow.ogg", "../../sfx/groan.ogg", "../../sfx/rip.ogg", "../../sfx/step.ogg", "../../sfx/step2.ogg", "../../sfx/rustle.ogg"],
"sounds": ["../sfx/eat1.ogg", "../sfx/eat2.ogg", "../sfx/eat3.ogg", "../sfx/grow.ogg", "../sfx/groan.ogg", "../sfx/rip.ogg", "../sfx/step.ogg", "../sfx/step2.ogg", "../sfx/rustle.ogg"],
"defaultAnimation": "Neutral",
"animations": {
"Appear": {
File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

+125
View File
@@ -0,0 +1,125 @@
{
"anm2ed": 1,
"info": {"createdOn": "2025-12-06T23:49:27"},
"spritesheets": [
{
"path": "items.png",
"regions": [
{
"name": "Peeep",
"crop": [0, 0],
"size": [64, 64],
"pivot": [32, 32]
},
{
"name": "Peeeep",
"crop": [65, 0],
"size": [64, 64],
"pivot": [32, 32]
},
{
"name": "Cool Whipped Cake",
"crop": [130, 0],
"size": [64, 64],
"pivot": [32, 32]
},
{
"name": "Triple Scoop",
"crop": [195, 0],
"size": [64, 64],
"pivot": [32, 32]
},
{
"name": "PB Puffs",
"crop": [260, 0],
"size": [64, 64],
"pivot": [32, 32]
},
{
"name": "PB Jar",
"crop": [325, 0],
"size": [64, 64],
"pivot": [32, 32]
},
{
"name": "Peep",
"crop": [390, 0],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "Mini Egg",
"crop": [439, 0],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "Mini Bnuuy",
"crop": [0, 65],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "Mini Basket",
"crop": [49, 65],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "Creme Cupcake",
"crop": [98, 65],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "Choco Kiss",
"crop": [147, 65],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "Choco Bar",
"crop": [196, 65],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "Choco Taco",
"crop": [245, 65],
"size": [48, 48],
"pivot": [24, 24]
},
{
"name": "PB Cup",
"crop": [294, 65],
"size": [48, 48],
"pivot": [24, 24]
}
]
}
],
"layers": [
{"name": "Main"}
],
"defaultAnimation": "Default",
"animations": {
"Default": {
"root": [
{
"scale": [125, 125]
}
],
"layers": [
{
"layer": 0,
"frames": [
{
"size": [48, 48],
"pivot": [24, 24]
}
]
}
]
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

@@ -1,31 +0,0 @@
{
"anm2ed": 1,
"info": {"createdOn": "2025-12-06T23:49:27"},
"spritesheets": [
{"path": "item_001_peep.png"}
],
"layers": [
{"name": "Main"}
],
"defaultAnimation": "Default",
"animations": {
"Default": {
"root": [
{
"scale": [125, 125]
}
],
"layers": [
{
"layer": 0,
"frames": [
{
"size": [48, 48],
"pivot": [24, 24]
}
]
}
]
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 929 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1001 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 760 B

@@ -1,31 +0,0 @@
{
"anm2ed": 1,
"info": {"createdOn": "2025-12-06T23:49:27"},
"spritesheets": [
{"path": "item_015_pb_jar.png"}
],
"layers": [
{"name": "Main"}
],
"defaultAnimation": "Default",
"animations": {
"Default": {
"root": [
{
"scale": [125, 125]
}
],
"layers": [
{
"layer": 0,
"frames": [
{
"size": [64, 64],
"pivot": [32, 32]
}
]
}
]
}
}
}
File renamed without changes.

Before

Width:  |  Height:  |  Size: 215 KiB

After

Width:  |  Height:  |  Size: 215 KiB

@@ -1,48 +0,0 @@
{
"anm2ed": 1,
"info": {},
"spritesheets": [
{
"path": "circle.png",
"regions": [
{
"name": "Main",
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
}
]
}
],
"layers": [
{"name": "Main"}
],
"defaultAnimation": "Spawn",
"animations": {
"Spawn": {
"length": 11,
"loop": false,
"root": [
{"delay": 11}
],
"layers": [
{
"layer": 0,
"frames": [
{
"region": 0,
"scale": [10, 10],
"delay": 10,
"interpolation": "linear"
},
{
"region": 0,
"tint": [255, 255, 255, 0],
"interpolation": "linear"
}
]
}
]
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

@@ -1,99 +0,0 @@
{
"anm2ed": 1,
"info": {},
"spritesheets": [
{
"path": "puff.png",
"regions": [
{
"name": "1",
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
},
{
"name": "2",
"crop": [128, 0],
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
},
{
"name": "3",
"crop": [256, 0],
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
},
{
"name": "4",
"crop": [384, 0],
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
},
{
"name": "5",
"crop": [512, 0],
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
},
{
"name": "6",
"crop": [640, 0],
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
},
{
"name": "7",
"crop": [768, 0],
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
},
{
"name": "8",
"crop": [896, 0],
"size": [128, 128],
"pivot": [64, 64],
"origin": "center"
}
]
}
],
"layers": [
{"name": "Main"}
],
"defaultAnimation": "Main",
"animations": {
"Main": {
"length": 16,
"loop": false,
"root": [
{"delay": 15, "interpolation": "linear"},
{
"pos": [0, -5],
"tint": [255, 255, 255, 32],
"interpolation": "linear"
}
],
"layers": [
{
"layer": 0,
"frames": [
{"region": 0, "delay": 2, "interpolation": "linear"},
{"region": 1, "delay": 2, "interpolation": "linear"},
{"region": 2, "delay": 2, "interpolation": "linear"},
{"region": 3, "delay": 2, "interpolation": "linear"},
{"region": 4, "delay": 2, "interpolation": "linear"},
{"region": 5, "delay": 2, "interpolation": "linear"},
{"region": 6, "delay": 2, "interpolation": "linear"},
{"region": 7, "delay": 2, "interpolation": "linear"}
]
}
]
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

+33 -40
View File
@@ -1,11 +1,11 @@
{
"anm2": "gfx/items/item.anm2",
"anm2": "gfx/item.anm2",
"spritesheet": 0,
"spawnDelay": 600,
"spawnDelay": 10,
"spawnDelayMultiplier": 0.75,
"spawnLimit": 5,
"sounds": {
"bounce": ["sfx/bounce1.ogg", "sfx/bounce2.ogg", "sfx/bounce3.ogg"],
"bounce": "sfx/bounce*.ogg",
"dispose": ["sfx/dispose.ogg"],
"summon": ["sfx/summon.ogg"]
},
@@ -13,7 +13,6 @@
"dispose": ["Puff"],
"summon": ["Puff"]
},
"categories": {"Food": "edible", "Tool": "tool"},
"rarities": {
"Common": {"weight": 1.0, "sound": "sfx/common.ogg"},
"Uncommon": {"weight": 0.5, "sound": "sfx/uncommon.ogg"},
@@ -26,9 +25,9 @@
"category": "Food",
"rarity": "Common",
"flavor": "Peep",
"texture": "gfx/items/item_001_peep.png",
"color": [0.98, 0.506, 0.612],
"calories": 250.0
"calories": 250.0,
"use": "edible"
},
{
"name": "Peeep",
@@ -36,10 +35,9 @@
"category": "Food",
"rarity": "Uncommon",
"flavor": "Peep",
"texture": "gfx/items/item_002_peeep.png",
"anm2": "gfx/items/item_big.anm2",
"color": [0.98, 0.506, 0.612],
"calories": 650.0
"calories": 650.0,
"use": "edible"
},
{
"name": "Peeeep",
@@ -47,10 +45,9 @@
"category": "Food",
"rarity": "Rare",
"flavor": "Peep",
"texture": "gfx/items/item_003_peeeep.png",
"anm2": "gfx/items/item_big.anm2",
"color": [0.98, 0.506, 0.612],
"calories": 1400.0
"calories": 1400.0,
"use": "edible"
},
{
"name": "Mini Egg",
@@ -58,9 +55,9 @@
"category": "Food",
"rarity": "Common",
"flavor": "Mini",
"texture": "gfx/items/item_004_mini_egg.png",
"color": [0.188, 0.651, 0.424],
"calories": 75.0
"calories": 75.0,
"use": "edible"
},
{
"name": "Mini Bnuuy",
@@ -68,9 +65,9 @@
"category": "Food",
"rarity": "Uncommon",
"flavor": "Mini",
"texture": "gfx/items/item_005_mini_bnuuy.png",
"color": [0.188, 0.651, 0.424],
"calories": 175.0
"calories": 175.0,
"use": "edible"
},
{
"name": "Mini Basket",
@@ -78,9 +75,9 @@
"category": "Food",
"rarity": "Rare",
"flavor": "Mini",
"texture": "gfx/items/item_006_mini_basket.png",
"color": [0.188, 0.651, 0.424],
"calories": 350.0
"calories": 350.0,
"use": "edible"
},
{
"name": "Creme Cupcake",
@@ -88,10 +85,10 @@
"category": "Food",
"rarity": "Common",
"flavor": "Creme",
"texture": "gfx/items/item_007_creme_cupcake.png",
"color": [0.808, 0.776, 0.302],
"calories": 100.0,
"digestionBonus": 0.075
"digestionBonus": 0.075,
"use": "edible"
},
{
"name": "Cool Whipped Cake",
@@ -99,11 +96,10 @@
"category": "Food",
"rarity": "Uncommon",
"flavor": "Creme",
"texture": "gfx/items/item_008_cool_whipped_cake.png",
"anm2": "gfx/items/item_big.anm2",
"color": [0.808, 0.776, 0.302],
"calories": 250.0,
"digestionBonus": 0.15
"digestionBonus": 0.15,
"use": "edible"
},
{
"name": "Triple Scoop",
@@ -111,11 +107,10 @@
"category": "Food",
"rarity": "Rare",
"flavor": "Creme",
"texture": "gfx/items/item_009_triple_scoop.png",
"anm2": "gfx/items/item_big.anm2",
"color": [0.808, 0.776, 0.302],
"calories": 500.0,
"digestionBonus": 0.3
"digestionBonus": 0.3,
"use": "edible"
},
{
"name": "Choco Kiss",
@@ -123,10 +118,10 @@
"category": "Food",
"rarity": "Common",
"flavor": "Chocolate",
"texture": "gfx/items/item_010_choco_kiss.png",
"color": [0.282, 0.141, 0],
"calories": 100.0,
"capacityBonus": 15.0
"capacityBonus": 15.0,
"use": "edible"
},
{
"name": "Choco Bar",
@@ -134,10 +129,10 @@
"category": "Food",
"rarity": "Uncommon",
"flavor": "Chocolate",
"texture": "gfx/items/item_011_choco_bar.png",
"color": [0.282, 0.141, 0],
"calories": 250.0,
"capacityBonus": 35.0
"capacityBonus": 35.0,
"use": "edible"
},
{
"name": "Choco Taco",
@@ -145,10 +140,10 @@
"category": "Food",
"rarity": "Rare",
"flavor": "Chocolate",
"texture": "gfx/items/item_012_choco_taco.png",
"color": [0.282, 0.141, 0],
"calories": 500.0,
"capacityBonus": 70.0
"capacityBonus": 70.0,
"use": "edible"
},
{
"name": "PB Cup",
@@ -156,9 +151,9 @@
"category": "Food",
"rarity": "Common",
"flavor": "Peanut Butter",
"texture": "gfx/items/item_013_pb_cup.png",
"color": [0.847, 0.686, 0.055],
"calories": 100.0
"calories": 100.0,
"use": "edible"
},
{
"name": "PB Puffs",
@@ -166,10 +161,9 @@
"category": "Food",
"rarity": "Uncommon",
"flavor": "Peanut Butter",
"texture": "gfx/items/item_014_pb_puffs.png",
"anm2": "gfx/items/item_big.anm2",
"color": [0.847, 0.686, 0.055],
"calories": 250.0
"calories": 250.0,
"use": "edible"
},
{
"name": "PB Jar",
@@ -177,10 +171,9 @@
"category": "Food",
"rarity": "Rare",
"flavor": "Peanut Butter",
"texture": "gfx/items/item_015_pb_jar.png",
"anm2": "gfx/items/item_big.anm2",
"color": [0.847, 0.686, 0.055],
"calories": 2000.0
"calories": 2000.0,
"use": "edible"
}
]
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+35 -121
View File
@@ -1,134 +1,48 @@
{
"name": "Snivy",
"description": "A Grass Snake Pokémon with rather large ambitions.",
"credits": "Art, Animation, Dialogue: ShweetMagnet Character - Pokémon Sound Effects - Pokémon; ShweetMagnet",
"render": "gfx/preview/render.png",
"portrait": "gfx/preview/portrait.png",
"anm2": "gfx/character/snivy.anm2",
"color": [0.12, 0.515, 0.115],
"weight": 8.1,
"weightMax": 200,
"capacity": 300,
"capacityMin": 300,
"capacityMax": 10000,
"overstuffedMultiplier": 1.5,
"overstuffedDigestBonus": 0.25,
"caloriesToKilogram": 0.0005,
"digestionRate": 1.5,
"digestionRateMax": 4.5,
"digestionTime": 120,
"blinkChance": 0.5,
"gurgleChance": 0.0005,
"gurgleCapacityMultiplier": 10,
"dialoguePool": "Stage1",
"alternate": {"texture": "gfx/character/snivy_alt.png", "sound": "sfx/shiny.ogg", "chance": 0.001},
"stages": [
{"weight": 10, "dialoguePool": "Stage2", "animationSuffix": "Stage2"},
{"weight": 12.5, "dialoguePool": "Stage3", "animationSuffix": "Stage3"},
{"weight": 17.5, "dialoguePool": "Stage4", "animationSuffix": "Stage4"},
{"weight": 27.5, "dialoguePool": "Stage5", "animationSuffix": "Stage5"},
{"weight": 40, "dialoguePool": "Stage6", "animationSuffix": "Stage6"},
{"weight": 55, "dialoguePool": "Stage7", "animationSuffix": "Stage7"},
{"weight": 75, "dialoguePool": "Stage8", "animationSuffix": "Stage8"},
{"weight": 100, "dialoguePool": "Stage9", "animationSuffix": "Stage9"},
{"weight": 130, "dialoguePool": "Stage10", "animationSuffix": "Stage10"}
],
"animations": {"start": "Appear", "idle": "Neutral", "idleFull": "NeutralFull", "stageUp": "StageUp"},
"talk": {"source": "Talk", "destination": "Mouth"},
"blink": {"source": "Blink", "destination": "Head"},
"eatAreas": [
{"null": "Mouth", "animation": "Eat", "event": "Eat"}
],
"expandAreas": [
{"layer": "Torso", "null": "Belly", "scaleMax": 7.5},
{"layer": "Tail", "null": "Tail", "scaleMax": 7.5}
],
"sounds": {
"digest": ["sfx/digest1.ogg", "sfx/digest2.ogg", "sfx/digest3.ogg"],
"gurgle": ["sfx/gurgle1.ogg", "sfx/gurgle2.ogg", "sfx/gurgle3.ogg", "sfx/gurgle4.ogg", "sfx/gurgle5.ogg"]
},
"interactTypes": {
"Rub": {
"glyph": "2",
"isHold": true,
"cursorHover": "Hover",
"cursorActive": "Rub",
"sounds": ["sfx/rub.ogg"],
"particles": ["Circle"]
},
"Smack": {
"glyph": "3",
"cursorHover": "SmackHover",
"cursorActive": "Smack",
"dialogueCooldown": 40,
"scaleAmplitude": 5,
"scaleCycles": 3,
"sounds": ["sfx/smack1.ogg", "sfx/smack2.ogg", "sfx/smack3.ogg", "sfx/smack4.ogg", "sfx/smack5.ogg"],
"particles": ["Circle"]
},
"Kiss": {
"glyph": "4",
"cursorHover": "KissHover",
"cursorActive": "Kiss",
"sounds": ["sfx/kiss1.ogg", "sfx/kiss2.ogg", "sfx/kiss3.ogg", "sfx/kiss4.ogg", "sfx/kiss5.ogg"],
"particles": ["Circle"]
},
"Turn Around": {
"glyph": "5",
"sounds": ["sfx/turn.ogg"],
"particles": ["Circle"]
}
},
"alternate": {"texture": "gfx/snivy_alt.png", "sound": "sfx/shiny.ogg", "chance": 0.001},
"stages": [10, 12.5, 17.5, 27.5, 40, 55, 75, 100, 130],
"blink": {"destination": "Head"},
"expandAreas": [{"layer": "Torso", "null": "Belly", "scaleMax": 7.5}, {"layer": "Tail", "null": "Tail", "scaleMax": 7.5}],
"interactTypes": {"Smack": {"scaleAmplitude": 5}},
"interactAreas": [
{"type": "Rub", "null": "Head", "dialoguePool": "HeadRub", "dialoguePoolFull": "HeadRubFull"},
{"type": "Rub", "null": "HeadBack", "idleOnEnd": "NeutralBack", "dialoguePool": "HeadRubBack", "dialoguePoolFull": "HeadRubBackFull"},
{"type": "Rub", "null": "Belly", "cursorActive": "Grab", "dialoguePool": "BellyRub", "dialoguePoolFull": "BellyRubFull", "digestionHover": 0.1},
{"type": "Rub", "null": "Tail", "cursorActive": "Grab", "dialoguePool": "TailRub", "dialoguePoolFull": "TailRubFull"},
{"type": "Rub", "null": "TailBack", "idleOnEnd": "NeutralBack", "cursorActive": "Grab", "dialoguePool": "TailRubBack", "dialoguePoolFull": "TailRubBackFull"},
{"type": "Kiss", "null": "Mouth", "dialoguePool": "MouthKiss", "dialoguePoolFull": "MouthKiss"},
{"type": "Kiss", "null": "Belly", "dialoguePool": "BellyKiss", "dialoguePoolFull": "BellyKiss"},
{"type": "Kiss", "null": "Tail", "dialoguePool": "TailKiss", "dialoguePoolFull": "TailKiss"},
{"type": "Smack", "null": "Belly", "layer": "Torso", "dialoguePool": "BellySmack", "dialoguePoolFull": "BellySmack", "digestionClick": 0.25},
{"type": "Smack", "null": "Tail", "layer": "Tail", "dialoguePool": "TailSmack", "dialoguePoolFull": "TailSmack"},
{"type": "Smack", "null": "TailBack", "layer": "Tail", "idleOnEnd": "NeutralBack", "dialoguePool": "TailSmackBack", "dialoguePoolFull": "TailSmackBack"},
{"type": "Turn Around", "null": "FullBody", "animation": "NeutralBack", "idleOnEnd": "NeutralBack", "cursorHover": "TurnAround"},
{"type": "Turn Around", "null": "FullBodyBack", "animation": "Neutral", "idleOnEnd": "Neutral", "cursorHover": "TurnAroundBack"}
],
"areas": {
"anm2": "gfx/areas/area.anm2",
"boundsNull": "Bounds",
"spawnNull": "ItemSpawn",
"list": [
{"gravity": 0.95, "friction": 0.75, "airResistance": 0.975}
]
},
"cursor": {
"anm2": "gfx/cursor/cursor.anm2",
"animations": {"idle": "Default", "click": "Click", "hover": "Hover", "grab": "Grab", "pan": "Pan", "zoom": "Zoom", "dispose": "Dispose"},
"sounds": {
"grab": ["sfx/grab.ogg"],
"release": ["sfx/release.ogg"],
"throw": ["sfx/throw.ogg", "sfx/throw2.ogg", "sfx/throw3.ogg"]
{"type": "Rub", "null": "Head", "dialoguePool": "HeadRub"},
{"type": "Rub", "null": "HeadBack", "idleOnEnd": "NeutralBack", "dialoguePool": "HeadRubBack"},
{"type": "Rub", "null": "Belly", "cursorActive": "Grab", "dialoguePool": "BellyRub", "digestionHover": 6},
{"type": "Rub", "null": "Tail", "cursorActive": "Grab", "dialoguePool": "TailRub"},
{
"type": "Rub",
"null": "TailBack",
"idleOnEnd": "NeutralBack",
"cursorActive": "Grab",
"dialoguePool": "TailRubBack"
},
"particles": {
"grab": ["Circle"]
{"type": "Kiss", "null": "Mouth", "dialoguePool": "MouthKiss"},
{"type": "Kiss", "null": "Belly", "dialoguePool": "BellyKiss"},
{"type": "Kiss", "null": "Tail", "dialoguePool": "TailKiss"},
{"type": "Smack", "null": "Belly", "layer": "Torso", "dialoguePool": "BellySmack", "digestionClick": 0.25},
{"type": "Smack", "null": "Tail", "layer": "Tail", "dialoguePool": "TailSmack"},
{"type": "Smack", "null": "TailBack", "layer": "Tail", "idleOnEnd": "NeutralBack", "dialoguePool": "TailSmackBack"},
{
"type": "Turn Around",
"null": "FullBody",
"animation": "NeutralBack",
"idleOnEnd": "NeutralBack",
"cursorHover": "TurnAround"
},
{
"type": "Turn Around",
"null": "FullBodyBack",
"animation": "Neutral",
"idleOnEnd": "Neutral",
"cursorHover": "TurnAroundBack"
}
},
"menu": {
"font": "font/font.ttf",
"iconsFont": "font/icons.ttf",
"rounding": 10.0,
"homeGlyph": "1",
"sounds": {
"open": ["sfx/open.ogg"],
"close": ["sfx/close.ogg"],
"hover": ["sfx/hover.ogg", "sfx/hover2.ogg", "sfx/hover3.ogg"],
"select": ["sfx/select.ogg"],
"cheats": ["sfx/cheatsActivated.ogg"]
}
},
"particles": {
"Circle": {"anm2": "gfx/particle/circle.anm2", "animation": "Main"},
"Puff": {"anm2": "gfx/particle/puff.anm2", "animation": "Main"}
}
]
}
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
File renamed without changes.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Loaded 100 of 266 files, more files were not shown because too many files have changed in this diff. Show more