tarinai/index.html
2026-06-27 19:22:38 +09:00

329 lines
21 KiB
HTML

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>たりない観察</title>
<link rel="icon" type="image/png" href="assets/ui/favicon.png?v=16.07.17" />
<link rel="apple-touch-icon" href="assets/ui/apple-touch-icon.png?v=16.07.17" />
<link rel="shortcut icon" href="favicon.ico?v=16.07.17" />
<link rel="stylesheet" href="css/base.css?v=39.15.18" />
<link rel="stylesheet" href="css/layout.css?v=39.15.18" />
<link rel="stylesheet" href="css/panel.css?v=39.15.18" />
<link rel="stylesheet" href="css/components.css?v=39.15.18" />
<link rel="stylesheet" href="css/mobile.css?v=39.15.18" />
</head>
<body>
<div id="loadingScreen" class="loading-screen" aria-live="polite">
<div class="loading-panel">
<div class="loading-kicker">たりない観察</div>
<h1 class="loading-title">&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x4E2D;&#x2026;</h1>
<p id="loadingText" class="loading-text">&#x6E96;&#x5099;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p>
<div id="loadingSpriteStrip" class="loading-sprite-strip" aria-hidden="true"></div>
<div class="loading-progress-track"><div id="loadingBar" class="loading-progress-bar" style="width:0%"></div></div>
<div class="loading-progress-meta"><span>&#x9032;&#x884C;&#x72B6;&#x6CC1;</span><strong id="loadingPercent">0%</strong></div>
</div>
</div>
<div id="app">
<header class="topbar">
<div class="top-left">
<a class="btn room-link" href="https://host.nishi.boats/~333/">333&#x306E;&#x90E8;&#x5C4B;&#x306B;&#x79FB;&#x52D5;</a>
<div class="brand">
<h1>たりない観察</h1>
</div>
</div>
<div class="top-actions">
<button id="pauseBtn" class="btn primary">&#x4E00;&#x6642;&#x505C;&#x6B62;</button>
<button id="speedBtn" class="btn">&#x901F;&#x5EA6; x1</button>
<button id="ecologyBtn" class="btn">たりないの生態</button>
<div id="soundMenu" class="sound-menu">
<button id="soundBtn" class="btn sound-menu-btn" type="button" aria-haspopup="true" aria-expanded="false">&#x97F3;&#x8A2D;&#x5B9A; ON</button>
<div id="soundPanel" class="sound-panel hidden" role="menu" aria-label="&#x52B9;&#x679C;&#x97F3;&#x8A2D;&#x5B9A;">
<label class="sound-master"><input id="soundMasterToggle" type="checkbox" checked><span>&#x52B9;&#x679C;&#x97F3;</span></label>
<div class="sound-panel-divider"></div>
<label><input type="checkbox" data-sound-category="voice"><span>個体&#x306E;&#x58F0;</span></label>
<label><input type="checkbox" data-sound-category="notify" checked><span>&#x901A;&#x77E5;</span></label>
<label><input type="checkbox" data-sound-category="ops" checked><span>&#x64CD;&#x4F5C;</span></label>
</div>
</div>
<button id="creditsBtn" class="btn">&#x30AF;&#x30EC;&#x30B8;&#x30C3;&#x30C8;</button>
<button id="saveBtn" class="btn">&#x30BB;&#x30FC;&#x30D6;</button>
<button id="resetBtn" class="btn danger">&#x30EA;&#x30BB;&#x30C3;&#x30C8;</button>
</div>
</header>
<main class="layout">
<section class="stage-wrap">
<canvas id="gameCanvas" aria-label="たりない観察キャンバス"></canvas>
<div id="mobileModeControls" class="mobile-mode-controls" aria-label="&#x30B9;&#x30DE;&#x30DB;&#x64CD;&#x4F5C;&#x30E2;&#x30FC;&#x30C9;">
<button type="button" data-mobile-mode="auto" class="active">&#x81EA;&#x52D5;</button>
<button type="button" data-mobile-mode="camera">&#x30AB;&#x30E1;&#x30E9;</button>
<button type="button" data-mobile-mode="tool">&#x9053;&#x5177;</button>
<button type="button" data-mobile-mode="family">&#x5BB6;&#x7CFB;&#x56F3;</button>
</div>
<div id="toast" class="toast hidden"></div>
</section>
<aside class="panel">
<nav id="panelQuickTabs" class="panel-quick-tabs" aria-label="右メニューのタブ">
<button type="button" data-panel-tab="selected">たりないデータ</button>
<button type="button" data-panel-tab="tools">道具</button>
<button type="button" data-panel-tab="colony">コロニー</button>
<button type="button" data-panel-tab="events">イベント</button>
</nav>
<section id="selectedCard" class="card selected-card hidden">
<div class="selected-head">
<h2>たりないデータ</h2>
<button id="selectedCloseBtn" class="selected-close" type="button" aria-label="&#x89B3;&#x5BDF;&#x3092;&#x3084;&#x3081;&#x308B;">&times;</button>
</div>
<div id="selectedInfo" class="selected-info empty">&#x672A;&#x9078;&#x629E;</div>
</section>
<section id="toolCard" class="card tool-card collapsible-card" data-card-key="tools">
<button class="panel-card-toggle" type="button" aria-expanded="true"><span class="panel-card-title">&#x9053;&#x5177;</span><span class="panel-card-state">&#x6298;&#x308A;&#x7573;&#x307F;</span></button>
<div class="panel-card-body">
<div class="tool-body">
<div id="toolPalette" class="tool-palette" aria-live="polite"></div>
</div>
</div>
</section>
<section class="card colony-card collapsible-card" data-card-key="colony">
<button class="panel-card-toggle" type="button" aria-expanded="true"><span class="panel-card-title">&#x30B3;&#x30ED;&#x30CB;&#x30FC;</span><span class="panel-card-state">&#x6298;&#x308A;&#x7573;&#x307F;</span></button>
<div class="panel-card-body">
<div class="stats colony-stats">
<div class="stat"><span>個体</span><strong id="statPop">0</strong></div>
<div class="stat"><span>死亡</span><strong id="statDead">0</strong></div>
<div class="stat"><span>状態</span><strong id="statColonyMood">安定</strong></div>
<div class="stat ground-stat" data-ground-toggle role="button" tabindex="0"><span>地面</span><button id="groundTypeBtn" class="ground-type-btn" type="button" data-ground-toggle aria-label="地面&#x3092;&#x304D;&#x308A;&#x304B;&#x3048;&#x308B;"><strong id="statGroundType"></strong></button></div>
</div>
<div id="colonyChartTabs" class="chart-tabs"><button data-chart="population" class="active">個体数</button><button data-chart="life">欲求</button><button data-chart="objects"></button></div>
<div id="colonyChartLegend" class="colony-chart-legend"></div>
<div id="colonyChart" class="colony-chart" aria-label="&#x30B3;&#x30ED;&#x30CB;&#x30FC;&#x306E;&#x63A8;&#x79FB;&#x30B0;&#x30E9;&#x30D5;" role="img"></div>
</div>
</section>
<section class="card log-card collapsible-card" data-card-key="events">
<button class="panel-card-toggle" type="button" aria-expanded="true"><span class="panel-card-title">&#x30A4;&#x30D9;&#x30F3;&#x30C8;</span><span class="panel-card-state">&#x6298;&#x308A;&#x7573;&#x307F;</span></button>
<div class="panel-card-body">
<div id="log" class="log"></div>
<div class="log-push-controls" id="logPushControls" aria-label="&#x30D7;&#x30C3;&#x30B7;&#x30E5;&#x901A;&#x77E5;&#x8A2D;&#x5B9A;">
<label class="push-master"><input id="logPushEnabled" type="checkbox"> &#x30D7;&#x30C3;&#x30B7;&#x30E5;&#x901A;&#x77E5;</label>
<div class="push-kind-grid">
<label><input type="checkbox" data-push-kind="death" checked> &#x6B7B;&#x4EA1;</label>
<label><input type="checkbox" data-push-kind="accident" checked> &#x4E8B;&#x6545;</label>
<label><input type="checkbox" data-push-kind="birth" checked> &#x8A95;&#x751F;</label>
<label><input type="checkbox" data-push-kind="fight"> &#x55A7;&#x5629;</label>
<label><input type="checkbox" data-push-kind="food"> &#x98DF;&#x4E8B;</label>
<label><input type="checkbox" data-push-kind="weather"> &#x5929;&#x6C17;</label>
<label><input type="checkbox" data-push-kind="grass"> &#x8349;</label>
<label><input type="checkbox" data-push-kind="relation"> &#x95A2;&#x4FC2;</label>
</div>
</div>
</div>
</section>
</aside>
</main>
<section class="card lineage-main-card">
<div class="lineage-head">
<h2>&#x5BB6;&#x7CFB;&#x56F3;</h2>
<div class="lineage-actions">
<button id="archiveUpdateToggleBtn" class="btn" type="button" aria-pressed="false">&#x66F4;&#x65B0; OFF</button>
<button id="archiveResetBtn" class="btn danger" type="button">&#x5BB6;&#x7CFB;&#x56F3;&#x3092;&#x30EA;&#x30BB;&#x30C3;&#x30C8;</button>
</div>
</div>
<div id="archiveContent" class="archive-content lineage-main-content"></div>
</section>
</div>
<div id="fieldDialog" class="field-dialog hidden" role="dialog" aria-modal="true" aria-labelledby="fieldDialogTitle">
<div class="field-dialog-panel">
<h2 id="fieldDialogTitle">&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x3092;&#x9078;&#x629E;</h2>
<div class="field-choice-grid">
<button class="field-choice" data-field-type="park" type="button"><strong>&#x516C;&#x5712;</strong><span>&#x5927;</span></button>
<button class="field-choice" data-field-type="garden" type="button"><strong>&#x5EAD;</strong><span>&#x4E2D;</span></button>
<button class="field-choice" data-field-type="cage" type="button"><strong>&#x30B1;&#x30FC;&#x30B8;</strong><span>&#x5C0F;</span></button>
</div>
<div class="field-dialog-actions">
<button id="fieldCancelBtn" class="btn" type="button">&#x30AD;&#x30E3;&#x30F3;&#x30BB;&#x30EB;</button>
</div>
</div>
</div>
<div id="creditsDialog" class="field-dialog hidden" role="dialog" aria-modal="true" aria-labelledby="creditsDialogTitle">
<div class="field-dialog-panel credits-dialog-panel">
<h2 id="creditsDialogTitle">&#x30AF;&#x30EC;&#x30B8;&#x30C3;&#x30C8;</h2>
<div class="credits-content">
<p><strong>&#x88FD;&#x4F5C;:</strong> 333</p>
<p><strong>イラスト:</strong> むらさき氏 / いらすとや: <a href="https://www.irasutoya.com/" target="_blank" rel="noopener">https://www.irasutoya.com/</a></p>
<p><strong>&#x52B9;&#x679C;&#x97F3;:</strong> VOICEVOX: &#x305A;&#x3093;&#x3060;&#x3082;&#x3093;&#x3000;&#x52B9;&#x679C;&#x97F3;&#x30E9;&#x30DC;: <a href="https://soundeffect-lab.info/" target="_blank" rel="noopener">https://soundeffect-lab.info/</a></p>
</div>
<div class="field-dialog-actions credits-actions">
<button id="creditsCloseBtn" class="btn" type="button">&#x9589;&#x3058;&#x308B;</button>
</div>
</div>
</div>
<div id="archiveResetDialog" class="field-dialog hidden" role="dialog" aria-modal="true" aria-labelledby="archiveResetDialogTitle">
<div class="field-dialog-panel archive-reset-dialog-panel">
<h2 id="archiveResetDialogTitle">&#x5BB6;&#x7CFB;&#x56F3;&#x3092;&#x30EA;&#x30BB;&#x30C3;&#x30C8;&#x3057;&#x307E;&#x3059;&#x304B;&#xFF1F;</h2>
<p class="hint">&#x73FE;&#x5728;&#x306E;&#x89AA;&#x5B50;&#x95A2;&#x4FC2;&#x3068;&#x4E16;&#x4EE3;&#x60C5;&#x5831;&#x3092;&#x6D88;&#x53BB;&#x3057;&#x307E;&#x3059;&#x3002;&#x500B;&#x4F53;&#x305D;&#x306E;&#x3082;&#x306E;&#x3084;&#x5EAD;&#x306E;&#x72B6;&#x614B;&#x306F;&#x6D88;&#x3048;&#x307E;&#x305B;&#x3093;&#x3002;</p>
<div class="field-dialog-actions archive-reset-actions">
<button id="archiveResetCancelBtn" class="btn" type="button">&#x30AD;&#x30E3;&#x30F3;&#x30BB;&#x30EB;</button>
<button id="archiveResetConfirmBtn" class="btn danger" type="button">&#x30EA;&#x30BB;&#x30C3;&#x30C8;&#x3059;&#x308B;</button>
</div>
</div>
</div>
<div id="ecologyDialog" class="field-dialog hidden" role="dialog" aria-modal="true" aria-labelledby="ecologyDialogTitle">
<div class="field-dialog-panel ecology-dialog-panel">
<h2 id="ecologyDialogTitle">たりないの生態</h2>
<div id="ecologyGrid" class="ecology-grid"></div>
<div class="field-dialog-actions">
<button id="ecologyCloseBtn" class="btn" type="button">&#x9589;&#x3058;&#x308B;</button>
</div>
</div>
</div>
<div id="logPushOverlay" class="log-push-overlay" aria-live="polite" aria-atomic="false"></div>
<script src="js/version.js?v=39.15.18" defer></script>
<script src="js/event_bus.js?v=39.15.18" defer></script>
<script src="js/registry_base.js?v=39.15.18" defer></script>
<script src="js/disease_registry.js?v=39.15.18" defer></script>
<script src="js/sound_pack.js?v=39.15.18" defer></script>
<script src="js/item_registry.js?v=39.15.18" defer></script>
<script src="js/data.js?v=39.15.18" defer></script>
<script src="js/ground_types.js?v=39.15.18" defer></script>
<script src="js/input_mode_manager.js?v=39.15.18" defer></script>
<script src="js/math.js?v=39.15.18" defer></script>
<script src="js/physics_helpers.js?v=39.15.18" defer></script>
<script src="js/collision_footprint_system.js?v=39.15.18" defer></script>
<script src="js/mechanical_system.js?v=39.15.18" defer></script>
<script src="js/constraint_system.js?v=39.15.18" defer></script>
<script src="js/physics_world_system.js?v=39.15.18" defer></script>
<script src="js/assets.js?v=39.15.18" defer></script>
<script src="js/audio.js?v=39.15.18" defer></script>
<script src="js/perf_profiler.js?v=39.15.18" defer></script>
<script src="js/render.js?v=39.15.18" defer></script>
<script src="js/sim_core.js?v=39.15.18" defer></script>
<script src="js/tarinai_seed_factory.js?v=39.15.18" defer></script>
<script src="js/structures.js?v=39.15.18" defer></script>
<script src="js/items.js?v=39.15.18" defer></script>
<script src="js/item_type_initializers.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_support.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_runtime.js?v=39.15.18" defer></script>
<script src="js/item_update_policy.js?v=39.15.18" defer></script>
<script src="js/item_dynamic_tool_system.js?v=39.15.18" defer></script>
<script src="js/item_dynamic_ball_system.js?v=39.15.18" defer></script>
<script src="js/item_dynamic_duplicator_system.js?v=39.15.18" defer></script>
<script src="js/item_dynamic_pin_system.js?v=39.15.18" defer></script>
<script src="js/item_dynamic_zunchi_system.js?v=39.15.18" defer></script>
<script src="js/item_dynamic_system.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_decay_system.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_growth_system.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_step_frame.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_step_decay.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_step_dynamic.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_step_growth.js?v=39.15.18" defer></script>
<script src="js/item_lifecycle_pipeline.js?v=39.15.18" defer></script>
<script src="js/item_runtime.js?v=39.15.18" defer></script>
<script src="js/structure_lifecycle.js?v=39.15.18" defer></script>
<script src="js/item_render_runtime.js?v=39.15.18" defer></script>
<script src="js/ants.js?v=39.15.18" defer></script>
<script src="js/health.js?v=39.15.18" defer></script>
<script src="js/tarinai.js?v=39.15.18" defer></script>
<script src="js/tarinai_action_spec.js?v=39.15.18" defer></script>
<script src="js/tarinai_behavior_state.js?v=39.15.18" defer></script>
<script src="js/tarinai_identity_social.js?v=39.15.18" defer></script>
<script src="js/tarinai_action_state.js?v=39.15.18" defer></script>
<script src="js/tarinai_disease_nest.js?v=39.15.18" defer></script>
<script src="js/tarinai_item_effects.js?v=39.15.18" defer></script>
<script src="js/tarinai_needs_core.js?v=39.15.18" defer></script>
<script src="js/tarinai_behavior_text.js?v=39.15.18" defer></script>
<script src="js/tarinai_forced_behavior.js?v=39.15.18" defer></script>
<script src="js/tarinai_item_targeting.js?v=39.15.18" defer></script>
<script src="js/tarinai_consumable_behavior.js?v=39.15.18" defer></script>
<script src="js/tarinai_social_action_runtime.js?v=39.15.18" defer></script>
<script src="js/tarinai_building_behavior.js?v=39.15.18" defer></script>
<script src="js/tarinai_action_definitions.js?v=39.15.18" defer></script>
<script src="js/tarinai_needs_items.js?v=39.15.18" defer></script>
<script src="js/tarinai_forced_action_planner_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_action_planner_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_need_planner_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_item_interaction_context.js?v=39.15.18" defer></script>
<script src="js/tarinai_food_interaction_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_contact_item_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_item_interaction_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_sunbath_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_cursor_care_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_local_environment_system.js?v=39.15.18" defer></script>
<script src="js/tarinai_social_move_life.js?v=39.15.18" defer></script>
<script src="js/tarinai_update_step_frame.js?v=39.15.18" defer></script>
<script src="js/tarinai_update_step_ai.js?v=39.15.18" defer></script>
<script src="js/tarinai_update_step_environment.js?v=39.15.18" defer></script>
<script src="js/tarinai_update_step_movement.js?v=39.15.18" defer></script>
<script src="js/tarinai_update_step_health.js?v=39.15.18" defer></script>
<script src="js/tarinai_update_pipeline.js?v=39.15.18" defer></script>
<script src="js/tarinai_runtime.js?v=39.15.18" defer></script>
<script src="js/tarinai_render.js?v=39.15.18" defer></script>
<script src="js/world.js?v=39.15.18" defer></script>
<script src="js/world_view.js?v=39.15.18" defer></script>
<script src="js/family_graph.js?v=39.15.18" defer></script>
<script src="js/world_family_social.js?v=39.15.18" defer></script>
<script src="js/world_combat_effects.js?v=39.15.18" defer></script>
<script src="js/world_environment.js?v=39.15.18" defer></script>
<script src="js/world_spatial_budget.js?v=39.15.18" defer></script>
<script src="js/world_ants_system.js?v=39.15.18" defer></script>
<script src="js/weather_system.js?v=39.15.18" defer></script>
<script src="js/item_update_scheduler.js?v=39.15.18" defer></script>
<script src="js/simulation_runtime_helpers.js?v=39.15.18" defer></script>
<script src="js/tarinai_update_policy.js?v=39.15.18" defer></script>
<script src="js/simulation_environment_system.js?v=39.15.18" defer></script>
<script src="js/simulation_item_ant_system.js?v=39.15.18" defer></script>
<script src="js/simulation_effects_system.js?v=39.15.18" defer></script>
<script src="js/simulation_creature_system.js?v=39.15.18" defer></script>
<script src="js/simulation_maintenance_system.js?v=39.15.18" defer></script>
<script src="js/simulation_ambient_system.js?v=39.15.18" defer></script>
<script src="js/simulation_systems.js?v=39.15.18" defer></script>
<script src="js/world_update_phases.js?v=39.15.18" defer></script>
<script src="js/system_order.js?v=39.15.18" defer></script>
<script src="js/simulation.js?v=39.15.18" defer></script>
<script src="js/world_update.js?v=39.15.18" defer></script>
<script src="js/world_tool_actions.js?v=39.15.18" defer></script>
<script src="js/world_placement_log.js?v=39.15.18" defer></script>
<script src="js/world_event_effects.js?v=39.15.18" defer></script>
<script src="js/command_dispatcher.js?v=39.15.18" defer></script>
<script src="js/text_catalog.js?v=39.15.18" defer></script>
<script src="js/ui.js?v=39.15.18" defer></script>
<script src="js/ui_log.js?v=39.15.18" defer></script>
<script src="js/ui_helpers.js?v=39.15.18" defer></script>
<script src="js/ui_selected.js?v=39.15.18" defer></script>
<script src="js/save_schema.js?v=39.15.18" defer></script>
<script src="js/snapshot_system.js?v=39.15.18" defer></script>
<script src="js/restore_coordinator.js?v=39.15.18" defer></script>
<script src="js/history_system.js?v=39.15.18" defer></script>
<script src="js/save_codec.js?v=39.15.18" defer></script>
<script src="js/save_storage.js?v=39.15.18" defer></script>
<script src="js/save_system.js?v=39.15.18" defer></script>
<script src="js/patch_helpers.js?v=39.15.18" defer></script>
<script src="js/ui_tooltips.js?v=39.15.18" defer></script>
<script src="js/ui_layout_dialogs.js?v=39.15.18" defer></script>
<script src="js/ui_ground.js?v=39.15.18" defer></script>
<script src="js/ui_tools.js?v=39.15.18" defer></script>
<script src="js/ui_input_shared.js?v=39.15.18" defer></script>
<script src="js/ui_input_touch.js?v=39.15.18" defer></script>
<script src="js/ui_input_mouse.js?v=39.15.18" defer></script>
<script src="js/ui_bind.js?v=39.15.18" defer></script>
<script src="js/ui_charts.js?v=39.15.18" defer></script>
<script src="js/ui_family_data.js?v=39.15.18" defer></script>
<script src="js/ui_family_async.js?v=39.15.18" defer></script>
<script src="js/ui_family_layout.js?v=39.15.18" defer></script>
<script src="js/ui_family_paths.js?v=39.15.18" defer></script>
<script src="js/ui_family_render.js?v=39.15.18" defer></script>
<script src="js/main.js?v=39.15.18" defer></script>
<script src="js/debug_tools.js?v=39.15.18" defer></script>
</body>
</html>