Customizing Petit Mates
Use Settings for size and speech on/off controls. This page explains how to add your own remarks by editing text files. You do not need to edit the built-in character images or the app itself.
Choose a file
| File | Purpose | Applying changes |
|---|---|---|
user.toml | Everyday display, counts, speech, and weather | Restart the app |
speech.toml | Remarks and bubble duration | Restart the app |
behavior.toml | Additional animation conditions, reactions, and personality | Use a restart for user-file changes |
params.toml and related files | Detailed movement, timing, and physics values | See behavior parameters for OS-specific paths and watching |
manifest.toml | Sprite and animation definitions | For character asset authors |
User folders for speech.toml and behavior.toml sit below the same folder as user.toml.
| System | Base folder |
|---|---|
| macOS | ~/Library/Application Support/PetitMates/ |
| Windows | %LOCALAPPDATA%\PetitMates\ |
PetitMates/
├── user.toml
├── common/
│ └── speech.toml
└── bearded_dragon/
└── speech.tomlUse common to add remarks for all species, or a species folder to target one. Species folder names are bearded_dragon, pond_turtle, and leopard_gecko. Create the folders and files you need.
Add a remark
- Quit the app and back up any existing user files.
- Open
common/speech.tomlfor all species, orbearded_dragon/speech.tomlfor Bearded Dragons only. - Save the example below. To add it to an existing file, append the complete block starting with
[[speech]]. - Launch the app, enable speech, and wait.
[[speech]]
text_ja = "少し休んでいこうかな"
text_en = "Maybe it is time for a little break."
trigger = "random"
weight = 1.0Your remark joins the built-in candidates. It is not guaranteed to appear immediately after launch; ordinary remarks involve waiting and random selection. If text in the selected language is missing, text in the other language is used as a fallback.
Loading and merging
The order is built-in common → built-in species → user species → user common. [[speech]] blocks are appended, not used to replace built-in remarks. Repeating the same text in multiple files creates duplicate candidates.
For [speech_display], fields specified in later files take precedence. Remarks have no override ID. Files that cannot be parsed as TOML are skipped, so check quotation marks and the spelling of [[speech]] if your text does not appear.
Change bubble duration
[speech_display]
duration_sec = 8.0
fade_out_sec = 1.0
[[speech]]
text_ja = "今日はゆっくりいこう"
text_en = "Taking it slowly today."
trigger = "random"
duration_sec = 10.0The default total duration is 6 seconds, including a 1-second fade at the end. An entry's duration_sec applies only to that remark. Use positive durations and keep the fade shorter than the total display time.
Speech conditions
| Key | Values and meaning |
|---|---|
text_ja, text_en | Japanese and English text. Provide at least one |
trigger | random, time, weather, or state |
weight | Weight in ordinary selection. Defaults to 1.0. Use a positive value |
hours | Array of hours, 0–23 |
weekdays | Mon, Tue, Wed, Thu, Fri, Sat, Sun |
months | Array of months, 1–12 |
seasons | spring, summer, autumn, winter |
weather | sunny, cloudy, rainy, snowy |
temp_min, temp_max | Minimum and maximum temperature in Celsius |
state | Event name for the state trigger: startup, landing, or hour_change |
duration_sec | Display duration for this remark |
oneshot | Name of an asset-defined animation to accompany the remark |
Use trigger = "time" for time conditions. If you specify several conditions, such as day, month, and hour, all must match. Seasons use fixed month ranges: March–May for spring, June–August for summer, September–November for autumn, and December–February for winter.
[[speech]]
text_ja = "そろそろひと息つこう"
text_en = "A good time for a short break."
trigger = "time"
hours = [15, 16]
weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri"]
weight = 1.0This makes the remark a candidate during the 3 p.m. and 4 p.m. hours on weekdays; it is not a notification scheduled for exactly 3 p.m. Time fields on a random entry do not filter candidates in the current implementation.
Use the weather trigger for weather conditions. Candidates require data from weather settings. The state trigger supports the three named events above; it does not monitor arbitrary movement state names. For hour_change, hours can restrict the target hours. Event remarks are chosen separately from ordinary weighted selection.
Personality and additional animations
The [personality] section of behavior.toml influences movement frequency, speed, and rest. These values come from the built-in files; they are not defaults for fields in the settings window.
| Species | restlessness | curiosity | sleepiness | agility |
|---|---|---|---|---|
| Bearded Dragon | 0.60 | 0.50 | 0.25 | 0.65 |
| Japanese Pond Turtle | 0.15 | 0.25 | 0.65 | 0.35 |
| Leopard Gecko | 0.70 | 0.75 | 0.30 | 0.60 |
Values range from 0 to 1 and relate to activity, exploration, sleepiness, and speed. The current implementation recalculates some values from personality after loading parameters. See parameter priority.
User behavior.toml files participate in startup merging, but the live personality watcher uses the Mac asset folder or an EXE-adjacent {species}_behavior.toml on Windows. Reloading after startup may change the personality, so do not treat a user personality override as a fixed setting.
[[behavior]] adds animations triggered by time, weather, or random conditions. [[reaction]] responds to grabbed, dropped, or hovered. Animation names must exist in the asset's manifest.toml; undefined names are ignored. These lists are appended and do not replace the full state machine.
For changes involving assets or code, see state transitions and behavior parameters. Start with adding remarks if you want to keep the scope of your changes easy to follow.