update
This commit is contained in:
parent
5b5848f1dc
commit
2501a4c975
5 changed files with 1019 additions and 153 deletions
47
README.md
47
README.md
|
|
@ -67,3 +67,50 @@ Open `index.html` in a modern browser. No build step or third-party dependency i
|
|||
- Night rendering is darker.
|
||||
- Object picking now uses sprite-sized, per-opaque-pixel hit testing, so transparent pixels are not clickable.
|
||||
- The CSS font stack now tries `3x5 MT Pixel Font` first. The font file itself is not bundled.
|
||||
|
||||
## Phase 5 changes
|
||||
|
||||
- Editor schema is now 7.
|
||||
- Fixed the Advanced Draw depth controls so `Depth / High / Low / Clear` wrap inside the drawer instead of overflowing to the right.
|
||||
- Added Phase 5 guardrails in the Data tab:
|
||||
- local asset/object volume counters,
|
||||
- duplicate-content count,
|
||||
- orphan placement checks,
|
||||
- terrain compatibility checks,
|
||||
- hidden/report counters.
|
||||
- Added `Validate world` export for pre-server integrity checks.
|
||||
- Added local object reporting from the selection bubble. Reported objects are hidden locally and stored in a local moderation report log.
|
||||
- Added `Export moderation report` for review/debug data.
|
||||
- Added `Clear reports` to clear local report logs without un-hiding already hidden objects.
|
||||
- Added soft local guardrail limits: 160 assets and 220 world objects. Existing objects can still be moved; new saves/placements are blocked when the local cap is reached.
|
||||
|
||||
## Phase 5 follow-up changes
|
||||
|
||||
- Static sprites now anchor closer to the center of their tile instead of the front corner.
|
||||
- Object selection is pixel-accurate: transparent sprite cells no longer select the object, and tile inspection does not select hidden/transparent areas.
|
||||
- Right-clicking the map clears selection silently.
|
||||
- Hidden panel now lists both hidden library assets and hidden map objects. Objects hidden by Report appear there and can be restored with Show again.
|
||||
- Report now opens a reason dialog with Cancel and Report + Hide actions.
|
||||
- Library cards include Place/Move, which makes dynamic human assets easier to reposition.
|
||||
- Default bundled pixel art was replaced with a new set: Hill Cottage, Pine Cluster, Shell Rock, Wave Skiff, Fisher Kid, Moss Cat, Koi Fish, and Cloud Gull.
|
||||
- Added a static Ship role/subtype. Ships can be placed on water, float subtly, and periodically emit ring ripples.
|
||||
- Local storage key was bumped to load the new default set in this prototype build.
|
||||
|
||||
## Phase 5 polish
|
||||
|
||||
- Night lights now draw after the darkness overlay and use fixed bright cores/halos, so lamp pixels visually ignore the night darkening pass.
|
||||
- The sky color now transitions quickly around dawn and dusk. Day and night remain mostly stable instead of drifting continuously.
|
||||
|
||||
|
||||
## Phase 5 Effects
|
||||
- Nearby objects receive a faint surface glow from adjacent light sources.
|
||||
- Light cores are less dazzling, while night ambient darkness is lifted slightly.
|
||||
- Land-moving dynamic sprites emit small terrain-colored step particles.
|
||||
|
||||
|
||||
## Visual FX follow-up
|
||||
- Step particles now vary in hue / saturation / lightness around the terrain color.
|
||||
- Nature assets shed tiny drifting leaf/petal dots.
|
||||
- Coast foam uses two slow-rotating porous bluish-white layers.
|
||||
- Depth now affects phase-aware sprite shading for sun/moon exposure.
|
||||
- Added toggles for lights, particles, and the day-night cycle.
|
||||
|
|
|
|||
46
index.html
46
index.html
|
|
@ -71,6 +71,7 @@
|
|||
<option value="animal">Animal</option>
|
||||
<option value="nature" selected>Nature</option>
|
||||
<option value="building">Building</option>
|
||||
<option value="ship">Ship</option>
|
||||
<option value="other">Other</option>
|
||||
</select>
|
||||
</label>
|
||||
|
|
@ -155,7 +156,7 @@
|
|||
</div>
|
||||
<p class="hint">Click an asset to select it and jump to it on the map. Copy Edit creates a new derivative.</p>
|
||||
<div id="hiddenAssetPanel" class="hiddenAssetPanel" hidden>
|
||||
<div class="cardTitle">Hidden assets</div>
|
||||
<div class="cardTitle">Hidden</div>
|
||||
<div id="hiddenAssetList" class="assetList compactAssetList"></div>
|
||||
</div>
|
||||
<div id="assetList" class="assetList"></div>
|
||||
|
|
@ -177,6 +178,28 @@
|
|||
<div id="syncStats" class="syncStats"></div>
|
||||
<textarea id="dataBox" rows="10" placeholder="Exported JSON appears here."></textarea>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card stack">
|
||||
<div class="cardTitle">Visual settings</div>
|
||||
<p class="hint">Turn major visual systems on or off.</p>
|
||||
<div class="toggleList">
|
||||
<label class="checkRow"><input id="settingLights" type="checkbox" checked /> <span>Lights & glow</span></label>
|
||||
<label class="checkRow"><input id="settingParticles" type="checkbox" checked /> <span>Particles & ambient FX</span></label>
|
||||
<label class="checkRow"><input id="settingDayNight" type="checkbox" checked /> <span>Day / night cycle</span></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card stack">
|
||||
<div class="cardTitle">Phase 5 guardrails</div>
|
||||
<p class="hint">Local pre-server checks for object volume, orphaned placements, terrain compatibility, hidden objects, and report logs.</p>
|
||||
<div id="guardrailStats" class="syncStats"></div>
|
||||
<div class="actionRow wrap">
|
||||
<button id="validateWorld" type="button">Validate world</button>
|
||||
<button id="exportModerationReport" type="button">Export moderation report</button>
|
||||
<button id="clearReports" class="danger" type="button">Clear reports</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -193,10 +216,31 @@
|
|||
</div>
|
||||
<div class="bubbleActions">
|
||||
<button id="bubbleRemix" type="button">Remix</button>
|
||||
<button id="bubbleReport" type="button">Report</button>
|
||||
<button id="bubbleHide" type="button" hidden>Hide</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="toast" class="toast" hidden></div>
|
||||
|
||||
<div id="reportDialog" class="reportDialog" hidden>
|
||||
<div class="reportCard" role="dialog" aria-modal="true" aria-labelledby="reportTitle">
|
||||
<div id="reportTitle" class="cardTitle">Report object</div>
|
||||
<p class="hint">Select a reason for reporting <strong id="reportObjectName">this object</strong>.</p>
|
||||
<label class="field">Reason
|
||||
<select id="reportReason">
|
||||
<option value="inappropriate">Inappropriate / sexual</option>
|
||||
<option value="harassment">Harassment / hate</option>
|
||||
<option value="spam">Spam / flooding</option>
|
||||
<option value="copyright">Copyright / stolen work</option>
|
||||
<option value="other">Other</option>
|
||||
</select>
|
||||
</label>
|
||||
<div class="actionRow wrap reportActions">
|
||||
<button id="reportSubmit" class="danger" type="button">Report + Hide</button>
|
||||
<button id="reportCancel" type="button">Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="./js/editor-actions.js"></script>
|
||||
|
|
|
|||
|
|
@ -203,6 +203,9 @@
|
|||
assetVotes: state.assetVotes || {},
|
||||
hiddenAssets: state.hiddenAssets || {},
|
||||
hiddenObjects: state.hiddenObjects || {},
|
||||
moderationReports: Array.isArray(state.moderationReports) ? state.moderationReports : [],
|
||||
guardrails: state.guardrails || null,
|
||||
settings: state.settings || null,
|
||||
eventLog: Array.isArray(state.eventLog) ? state.eventLog.slice(-EVENT_LOG_LIMIT) : [],
|
||||
sync: state.sync || { lastEventId: null }
|
||||
};
|
||||
|
|
@ -220,6 +223,9 @@
|
|||
assetVotes: input.assetVotes || {},
|
||||
hiddenAssets: input.hiddenAssets || {},
|
||||
hiddenObjects: input.hiddenObjects || {},
|
||||
moderationReports: Array.isArray(input.moderationReports) ? input.moderationReports : [],
|
||||
guardrails: input.guardrails || null,
|
||||
settings: input.settings || null,
|
||||
eventLog: Array.isArray(input.eventLog) ? input.eventLog.slice(-EVENT_LOG_LIMIT) : [],
|
||||
sync: input.sync || { lastEventId: null }
|
||||
};
|
||||
|
|
|
|||
69
styles.css
69
styles.css
|
|
@ -899,3 +899,72 @@ body, button, input, select, textarea {
|
|||
font-size: 12px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
/* Phase 5: keep advanced depth controls inside the drawer. */
|
||||
.advancedRow {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
.advancedRow .tool {
|
||||
flex: 0 1 auto;
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
padding: 7px 7px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#advancedHint {
|
||||
flex: 1 0 100%;
|
||||
min-width: 0;
|
||||
}
|
||||
#guardrailStats {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.bubbleActions {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
.bubbleActions button:only-child,
|
||||
.bubbleActions button:nth-child(3):last-child {
|
||||
grid-column: span 2;
|
||||
}
|
||||
|
||||
/* Phase 5 follow-up: object hidden list + report dialog + font priority. */
|
||||
body, button, input, select, textarea {
|
||||
font-family: "3x5 MT Pixel Font", "Press Start 2P", "PixelMplus10", "DotGothic16", "MS Gothic", "Osaka-Mono", "Courier New", ui-monospace, monospace;
|
||||
}
|
||||
.hiddenSectionTitle {
|
||||
margin: 8px 0 6px;
|
||||
padding: 5px 7px;
|
||||
background: #ffe6f0;
|
||||
border: 2px solid var(--line);
|
||||
font-size: 11px;
|
||||
font-weight: 900;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.reportDialog {
|
||||
position: absolute;
|
||||
z-index: 20;
|
||||
inset: 0;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
background: rgba(20, 25, 34, .34);
|
||||
}
|
||||
.reportDialog[hidden] { display: none; }
|
||||
.reportCard {
|
||||
width: min(360px, calc(100vw - 28px));
|
||||
background: #fffdf5;
|
||||
border: 3px solid var(--line);
|
||||
box-shadow: 8px 8px 0 rgba(36,48,68,.25);
|
||||
padding: 14px;
|
||||
}
|
||||
.reportCard .hint { margin: 8px 0 10px; }
|
||||
.reportActions button { min-width: 0; }
|
||||
.assetActions button { min-width: 0; }
|
||||
|
||||
|
||||
.toggleList { display:flex; flex-direction:column; gap:10px; }
|
||||
.checkRow { display:flex; align-items:center; gap:10px; font-size:13px; color:#243044; }
|
||||
.checkRow input { width:16px; height:16px; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue