diff --git a/docs/plans/M52_CHIBI_HAND_DRAWN_MOBILE_DIRECTION.md b/docs/plans/M52_CHIBI_HAND_DRAWN_MOBILE_DIRECTION.md index 83976ebe..afa28d64 100644 --- a/docs/plans/M52_CHIBI_HAND_DRAWN_MOBILE_DIRECTION.md +++ b/docs/plans/M52_CHIBI_HAND_DRAWN_MOBILE_DIRECTION.md @@ -114,6 +114,14 @@ angular content destination plate so it reads as a button at play size instead of floating text. Current-worktree Contract, Guild and Market focused attempts pass with strict diagnostics `0`. +Character identity slice (working tree, 2026-09-09): a four-cell Q company +sheet was generated from the approved calibration board and deterministically +chroma-sliced into shield idle/wave and mage idle/wave assets. The first visible +MVP profession IDs now use the Q shield pair (PF-B01/PF-B02) and Q mage idle +(PF-B06) through `InitialCompanyArt`; existing profession semantics and IDs are +unchanged. Current-worktree Market and Contract captures pass. The sheet is an +identity slice, not a claim that all twelve base professions are complete. + Title affordance follow-up (`fcb2eb3`, 2026-09-09): the four Title actions now use the shared icon vocabulary (`confirm`, `inspect`, `settings`, `help`) with reserved icon slots and text bounds. The focused responsive check and clean diff --git a/docs/runtime/M52_QSTYLE_RUNTIME_REVIEW.md b/docs/runtime/M52_QSTYLE_RUNTIME_REVIEW.md index d357b7ff..8e002d34 100644 --- a/docs/runtime/M52_QSTYLE_RUNTIME_REVIEW.md +++ b/docs/runtime/M52_QSTYLE_RUNTIME_REVIEW.md @@ -31,21 +31,21 @@ passed their focused capture markers with strict diagnostics `0`: - `imported`: Godot import completed for the new backgrounds. - `integrated`: Title, Guild, Contract and Market reference the new assets. - `runtime_seen`: current captures show the assets in the real View paths. -- `agent_visual_reviewed`: yes, at the 760x360 fixture above. +- `agent_visual_reviewed`: yes, at the 760x360 fixture above and on the + identity-locked Q company sprite sheet used by the current Market capture. - `human_reviewed`: owner approved the calibration board; complete runtime flow remains open for review. - `device_verified` / `release_accepted`: not claimed. ## Earliest failed boundary and next falsifying test -The earliest remaining failure is character identity consistency in the -interactive Company/Market surfaces: those portraits still use the earlier -medium-proportion assets while the environments now follow the approved compact -Q direction. Contract is temporarily using the authored Q figures in its route -master. The next bounded task is one identity-locked Q/chibi company sprite set, -integrated into Guild and Market (and later Contract) and re-captured at the -same fixtures. Do not expand content or add decorative motion until that set -passes play-size silhouette and crop review. +The first identity slice is now integrated for the visible MVP profession IDs, +but remaining professions still use historical portraits. Contract temporarily +uses the authored Q figures in its route master. The next bounded task is to +extend this same identity-locked family to the remaining roles, then add a +small idle/breathing loop after the static silhouettes pass play-size review. +Do not expand content or add decorative motion until the role coverage and +anchor policy are stable. Gate: OPEN (environment slice integrated; full Q-style character presentation not yet accepted). diff --git a/docs/runtime/m52_q_company_sprite_sheet_prompt.txt b/docs/runtime/m52_q_company_sprite_sheet_prompt.txt new file mode 100644 index 00000000..85aa57e3 --- /dev/null +++ b/docs/runtime/m52_q_company_sprite_sheet_prompt.txt @@ -0,0 +1,28 @@ +Create ONE REGULAR 2x2 GRID with FOUR EQUAL CELLS and clear fixed boundaries. +This is a transparent-ready 2D game character sheet, not a scene. +Use a solid bright magenta #FF00FF background across the whole canvas. +Every subject is fully inside its cell with generous padding and must not cross +cell boundaries. No text, labels, UI, scenery, ground, shadows or extra figures. + +Use the attached approved Q-style calibration board only to match its compact +Japanese hand-drawn mobile RPG language: super-deformed proportions, large +expressive face, short body, clean dark ink contour, warm cel shading, bright +painted colors, friendly readable silhouette at small size. Do not copy any +character or layout from the reference. + +TOP-LEFT: canonical chibi shield guardian idle, front three-quarter view, +navy-and-cream armor, round shield with a small gold four-point crest, short +brown hair, cheerful confident expression, complete body from head to boots. +TOP-RIGHT: canonical chibi wind mage idle, front three-quarter view, navy and +lavender robe, oversized soft witch hat, small wooden staff, light silver hair, +cheerful confident expression, complete body from head to boots. +BOTTOM-LEFT: the EXACT SAME shield guardian identity as TOP-LEFT, friendly +recruit-card pose with shield lowered and one hand raised, same outfit, colors, +face, proportions and outline. +BOTTOM-RIGHT: the EXACT SAME wind mage identity as TOP-RIGHT, friendly +recruit-card pose with staff angled outward and one hand raised, same outfit, +colors, face, proportions and outline. + +Keep all four figures compact and consistently scaled, with feet aligned to a +shared visual baseline inside each cell. No pixel art, no 3D render, no realism, +no gradients that erase the ink contour, no duplicate limbs, no cropped anatomy. diff --git a/docs/runtime/m52_q_company_sprite_sheet_report.json b/docs/runtime/m52_q_company_sprite_sheet_report.json new file mode 100644 index 00000000..b9579db2 --- /dev/null +++ b/docs/runtime/m52_q_company_sprite_sheet_report.json @@ -0,0 +1,17 @@ +{ + "mode": "execute", + "model": "gpt-image-2", + "size": "1:1", + "resolution": "2k", + "output": "runtime/assets/entry/recruit_stickers/m52_q_company_sprite_sheet_raw.png", + "local_references": [ + "docs/runtime/m52_qstyle_calibration.png" + ], + "remote_reference_count": 0, + "prompt_chars": 1790, + "task_id": "task_01M2250YF7KJP9S7S5D8ZJX0P0", + "status": "completed", + "bytes": 5165875, + "cost": 0.014, + "credits_cost": 0.14 +} diff --git a/runtime/assets/entry/recruit_stickers/m52_q_company/mage_idle.png b/runtime/assets/entry/recruit_stickers/m52_q_company/mage_idle.png new file mode 100644 index 00000000..0cbff6ae Binary files /dev/null and b/runtime/assets/entry/recruit_stickers/m52_q_company/mage_idle.png differ diff --git a/runtime/assets/entry/recruit_stickers/m52_q_company/mage_wave.png b/runtime/assets/entry/recruit_stickers/m52_q_company/mage_wave.png new file mode 100644 index 00000000..bab1078d Binary files /dev/null and b/runtime/assets/entry/recruit_stickers/m52_q_company/mage_wave.png differ diff --git a/runtime/assets/entry/recruit_stickers/m52_q_company/shield_idle.png b/runtime/assets/entry/recruit_stickers/m52_q_company/shield_idle.png new file mode 100644 index 00000000..185d051c Binary files /dev/null and b/runtime/assets/entry/recruit_stickers/m52_q_company/shield_idle.png differ diff --git a/runtime/assets/entry/recruit_stickers/m52_q_company/shield_wave.png b/runtime/assets/entry/recruit_stickers/m52_q_company/shield_wave.png new file mode 100644 index 00000000..cc99a26f Binary files /dev/null and b/runtime/assets/entry/recruit_stickers/m52_q_company/shield_wave.png differ diff --git a/runtime/assets/entry/recruit_stickers/m52_q_company_sprite_sheet_raw.png b/runtime/assets/entry/recruit_stickers/m52_q_company_sprite_sheet_raw.png new file mode 100644 index 00000000..dc3b8cda Binary files /dev/null and b/runtime/assets/entry/recruit_stickers/m52_q_company_sprite_sheet_raw.png differ diff --git a/runtime/entry/initial_company_art.gd b/runtime/entry/initial_company_art.gd index 59a3c946..d9d03f77 100644 --- a/runtime/entry/initial_company_art.gd +++ b/runtime/entry/initial_company_art.gd @@ -13,14 +13,21 @@ const TINKER = preload("res://assets/entry/recruit_stickers/pf_b09-512.png") const HEXER = preload("res://assets/entry/recruit_stickers/pf_b10-512.png") const CONDUCTOR = preload("res://assets/entry/recruit_stickers/pf_b11-512.png") const QUARTERMASTER = preload("res://assets/entry/recruit_stickers/pf_b12-512.png") +const Q_SHIELD_IDLE = preload("res://assets/entry/recruit_stickers/m52_q_company/shield_idle.png") +const Q_SHIELD_WAVE = preload("res://assets/entry/recruit_stickers/m52_q_company/shield_wave.png") +const Q_MAGE_IDLE = preload("res://assets/entry/recruit_stickers/m52_q_company/mage_idle.png") +const Q_MAGE_WAVE = preload("res://assets/entry/recruit_stickers/m52_q_company/mage_wave.png") const PROFESSION_TEXTURES := { - "PF-B01": HEARTHGUARD, - "PF-B02": BLADE, + # M52 MVP identity slice: the first visible Company roles use the approved + # Q/chibi pair. Remaining professions stay on their historical assets until + # their own identity-locked sprite rows are produced. + "PF-B01": Q_SHIELD_IDLE, + "PF-B02": Q_SHIELD_WAVE, "PF-B03": SPEAR, "PF-B04": WAYRUNNER, "PF-B05": FARSTRING, - "PF-B06": MAGUS, + "PF-B06": Q_MAGE_IDLE, "PF-B07": KINDHAND, "PF-B08": WARD, "PF-B09": TINKER,