tarinai/js/text_catalog.js
2026-06-23 22:39:20 +09:00

150 lines
8.5 KiB
JavaScript

"use strict";
const TEXT_CATALOG = {
toolTips: toolTipsFromDefinitions(),
ecologyCards: [
{
title: "\u305f\u308a\u306a\u3044\u3068\u306f",
image: "assets/sprites/tarinai_01_smile.webp",
text: "\u5ead\u3067\u66ae\u3089\u3059\u5c0f\u3055\u306a\u751f\u304d\u7269\u3002\u7a7a\u8179\u3001\u7720\u6c17\u3001\u6c17\u5206\u3001\u30b9\u30c8\u30ec\u30b9\u3001\u4f53\u529b\u3067\u884c\u52d5\u304c\u5909\u308f\u308b\u3002",
},
{
title: "\u4f53\u529b\u3068\u30b9\u30c8\u30ec\u30b9",
image: "assets/ui/ecology_hp_stress.webp",
text: "\u30d0\u30fc\u306f\u4e0a\u304c\u4f53\u529b\u3001\u4e0b\u304c\u30b9\u30c8\u30ec\u30b9\u3002\u4f53\u529b\u306f\u3051\u304c\u3084\u4e8b\u6545\u3067\u6e1b\u308a\u30010\u3067\u6b7b\u4ea1\u3002\u30b9\u30c8\u30ec\u30b9\u306f\u6050\u6016\u3001\u6df7\u96d1\u3001\u6c5a\u308c\u3001\u3051\u3093\u304b\u3067\u5897\u3048\u3001\u9ad8\u3044\u3068\u884c\u52d5\u304c\u4e71\u308c\u308b\u3002",
},
{
title: "\u66ae\u3089\u3057\u3068\u6b32\u6c42",
image: "assets/sprites/tarinai_05_drool.webp",
text: "\u98df\u3079\u7269\u3001\u6c34\u3001\u5bdd\u5e8a\u3001\u5de3\u7bb1\u3001\u4ef2\u9593\u3092\u63a2\u3057\u3066\u52d5\u304f\u3002\u96e8\u3001\u6c17\u6e29\u3001\u8349\u3001\u6c5a\u308c\u3001\u9053\u5177\u3082\u72b6\u614b\u306b\u5f71\u97ff\u3059\u308b\u3002",
},
{
title: "\u6027\u683c\u3068\u500b\u6027",
image: "assets/sprites/tarinai_21_normal_happy.webp",
text: "\u653b\u6483\u6027\u3001\u958b\u653e\u6027\u3001\u793e\u4ea4\u6027\u3001\u795e\u7d4c\u8cea\u6027\u304c\u7d4c\u9a13\u3067\u5c11\u3057\u305a\u3064\u5909\u308f\u308b\u3002\u95be\u5024\u3092\u8d85\u3048\u308b\u3068\u6027\u683c\u30bf\u30b0\u3068\u884c\u52d5\u5dee\u306b\u51fa\u308b\u3002",
},
{
title: "\u5bb6\u65cf\u3068\u95a2\u4fc2",
image: "assets/sprites/tarinai_27_birth_ritual.webp",
text: "\u89aa\u5b50\u3001\u5171\u540c\u89aa\u3001\u53cb\u9054\u3001\u6575\u5bfe\u3001\u6050\u6016\u3092\u8a18\u9332\u3059\u308b\u3002\u5b50\u306f\u89aa\u306e\u73fe\u5728\u6027\u683c\u3092\u53d7\u3051\u7d99\u304e\u3001\u5bb6\u7cfb\u56f3\u306b\u4e16\u4ee3\u304c\u6b8b\u308b\u3002",
},
{
title: "\u75c5\u6c17\u3068\u6cbb\u7642",
image: "assets/sprites/tarinai_24_stress_dizzy.webp",
text: "\u305a\u3093\u3061\u75c5\u3001\u306d\u3080\u308a\u75c5\u3001\u7206\u767a\u75c5\u3001\u304d\u305a\u3064\u304d\u75c5\u304c\u3042\u308b\u3002\u75c5\u6c17\u3054\u3068\u306b\u6c34\u3084\u305a\u3093\u3060\u9905\u306a\u3069\u3092\u6c42\u3081\u308b\u3002",
},
{
title: "\u3051\u3093\u304b\u3068\u4e8b\u6545",
image: "assets/sprites/tarinai_26_intimidate.webp",
text: "\u5a01\u5687\u3001\u6d41\u8840\u3001\u7206\u7af9\u3001\u30dc\u30fc\u30eb\u3001\u843d\u4e0b\u7269\u3067\u50b7\u3064\u304f\u3002\u6b7b\u56e0\u306f\u3051\u3093\u304b\u3001\u98e2\u9913\u3001\u75c5\u6c17\u3001\u4e8b\u6545\u306a\u3069\u306b\u5206\u304b\u308c\u308b\u3002",
},
{
title: "\u9053\u5177\u3068\u4ecb\u5165",
image: "assets/sprites/tarinai_18_fear.webp",
text: "\u3064\u3064\u304f\u3001\u3064\u307e\u3080\u3001\u9905\u3001\u6c34\u3001\u6d17\u6d44\u3001\u5de3\u7bb1\u3001\u67f5\u3001\u7206\u7af9\u306a\u3069\u3067\u74b0\u5883\u3092\u4f5c\u308b\u3002\u52a9\u3051\u306b\u3082\u5371\u967a\u306b\u3082\u306a\u308b\u3002",
},
{
title: "\u89b3\u5bdf\u306e\u65b9\u6cd5",
image: "assets/sprites/tarinai_11_weak.webp",
text: "\u89b3\u5bdf\u30c4\u30fc\u30eb\u3001\u661f\u30de\u30fc\u30af\u3001\u89b3\u5bdf\u30ed\u30b0\u3001\u5bb6\u7cfb\u56f3\u3001\u6b7b\u56e0\u7d71\u8a08\u304b\u3089\u500b\u4f53\u306e\u5909\u5316\u3092\u8ffd\u3048\u308b\u3002",
},
],
};
TEXT_CATALOG.stateLabels = Object.freeze({
idle: "待機",
seek_food: "食べ物へ向かう",
seek_bed: "寝床へ向かう",
play_ball: "ボール遊び",
seek_water: "水を探す",
zunchi_sick: "ずんち病",
fight_sick: "きずつき病",
system: "ずんち病",
seek_friend: "仲間を探す",
follow_parent: "親についていく",
cursor_friend: "カーソルについていく",
cursor_enemy: "カーソルを避ける",
fight: "喧嘩中",
sleep: "睡眠中",
eat: "食事中",
panic: "パニック",
intimidate: "威嚇中",
birth_ritual: "誕生前",
sunbath: "日光浴中",
ant_attack: "アリ攻撃中",
ant_intimidate: "アリ威嚇中",
frozen: "冷凍中",
});
TEXT_CATALOG.targetLabelOverrides = Object.freeze({
system: "ずんち病",
zunchi_sick: "ずんち病",
fight_sick: "きずつき病",
});
// Backward-compatible alias. Tool/item labels come from TOOL_DEFINITIONS via toolLabel().
TEXT_CATALOG.targetLabels = TEXT_CATALOG.targetLabelOverrides;
TEXT_CATALOG.stateLabel = function stateLabelFromCatalog(s) {
return TEXT_CATALOG.stateLabels?.[s] || s || "";
};
TEXT_CATALOG.targetLabel = function targetLabelFromCatalog(target) {
if (!target) return "なし";
if (target.name) return target.name;
if (target.kind === "queen") return "女王アリ";
if (target.kind === "worker") return "働きアリ";
if (target.type) {
const type = String(target.type || "");
if (TEXT_CATALOG.targetLabelOverrides?.[type]) return TEXT_CATALOG.targetLabelOverrides[type];
const label = typeof toolLabel === "function" ? toolLabel(type) : "";
return label || type;
}
if (Number.isFinite(target.x) && Number.isFinite(target.y)) return "位置";
return "不明";
};
TEXT_CATALOG.reasonLabel = function reasonLabelFromCatalog(t) {
if (!t) return "なし";
if ((t.pinchThoughtTimer || 0) > 0) return "つままれている";
const behaviorText = typeof activeBehaviorText === "function" ? activeBehaviorText(t) : String(t.activeBehavior?.presentText || t.activeBehavior?.reasonText || "").trim();
if (behaviorText) return behaviorText;
const target = TEXT_CATALOG.targetLabel(t.target);
if (t.state === "eat") return target !== "なし" ? `${target}を食べている` : "食べている";
if (t.state === "sleep") return t.target?.type === "nest_box" ? "巣箱の中で体力を回復している" : "体力を回復している";
if (t.state === "panic") return t.target ? `${target}から逃げている` : "怖がっている";
if (t.state === "intimidate") return target !== "なし" ? `${target}を威嚇している` : "相手を威嚇している";
if (t.state === "ant_intimidate") return "アリを威嚇している";
if (t.state === "ant_attack") return "アリを攻撃している";
if (t.state === "birth_ritual") return t.target?.name ? `${t.target.name}と繁殖の前ぶれをしている` : "繁殖の前ぶれをしている";
if (t.state === "sunbath") return "晴れた日なたでストレスを下げている";
if (t.state === "frozen") return "フィールド外で冷凍保存されている";
if (t.state === "seek_food") return target !== "なし" ? `${target}を探している` : "お腹がすいている";
if (t.state === "seek_water") return t.explosionDisease ? "爆発病で水を探している" : "ずんち病で水を探している";
if (t.state === "seek_bed") return target !== "なし" ? `${target}へ向かっている` : "眠る場所を探している";
if (t.state === "play_ball") return "ボールが気になっている";
if (t.state === "seek_friend" && t.intent?.actionId === "approach_mate") return t.target?.name ? `${t.target.name}に繁殖のため近づいている` : "繁殖できる相手を探している";
if (t.state === "seek_friend") return "仲間を探している";
if (t.state === "follow_parent") return "親についていく";
if (t.state === "cursor_friend") return "カーソルについていく";
if (t.state === "cursor_enemy") return "カーソルを避けている";
if (t.state === "fight") return target !== "なし" ? `${target}と喧嘩している` : "喧嘩している";
if (t.state === "fight_sick") return "きずつき病で当てもなく彷徨っている";
if (t.state === "zunchi_sick" || t.state === "system") return "ずんち病で調子が悪い";
if ((t.hurtTimer || 0) > 0.08) return "痛みで混乱している";
if ((t.fearTimer || 0) > 0.08) return "怖がっている";
if ((t.grassEatTimer || 0) > 0.04) return "草を食べている";
const thought = String(t.thought || "").trim();
if (thought) return thought;
return "周囲を見ている";
};
function stateLabel(s) { return TEXT_CATALOG.stateLabel(s); }
function targetLabel(target) { return TEXT_CATALOG.targetLabel(target); }
function reasonLabel(t) { return TEXT_CATALOG.reasonLabel(t); }
window.stateLabel = stateLabel;
window.targetLabel = targetLabel;
window.reasonLabel = reasonLabel;
window.TEXT_CATALOG = TEXT_CATALOG;