add blog to website
This commit is contained in:
39
docs/design/actor_use_cases.md
Normal file
39
docs/design/actor_use_cases.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Actor Use Cases for Prosperon
|
||||||
|
|
||||||
|
Confirmed implementation targets. These are the concrete reasons actors add value beyond basic frame scheduling.
|
||||||
|
|
||||||
|
## 1. P2P Networking (Lockstep + Input Streaming)
|
||||||
|
|
||||||
|
Actor security model enables safe P2P:
|
||||||
|
- **Lockstep**: Both peers run the same actor with the same inputs. Actors are deterministic (same messages in = same state). Synchronize input streams.
|
||||||
|
- **Input streaming** (GGPO-style): Each peer sends inputs to the other. Actors only see inputs, not internal state, so cheaters can't fabricate state — only send inputs that the other peer validates by running the simulation.
|
||||||
|
- Security-first actor system makes this safe by design.
|
||||||
|
|
||||||
|
## 2. Game Sharing (DS Download Play Style)
|
||||||
|
|
||||||
|
Send entire cell packages over the network. Receiver runs the game in a sandboxed actor.
|
||||||
|
- A cell program/game sends its entire package (code + assets) using the cell package system.
|
||||||
|
- The other person runs it in a sandboxed actor — can't touch host filesystem, can't read save data, can only draw sprites and send messages through the allowed interface.
|
||||||
|
- Same trust model as mod sandboxing but for complete games.
|
||||||
|
|
||||||
|
## 3. Mod Sandboxing
|
||||||
|
|
||||||
|
Untrusted code runs in its own actor, communicates through a controlled message interface.
|
||||||
|
- Mods can't corrupt game state.
|
||||||
|
- Related to game sharing — same isolation model.
|
||||||
|
|
||||||
|
## 4. Background Asset Loading
|
||||||
|
|
||||||
|
Refactor the resource manager (currently single-threaded) into an actor:
|
||||||
|
- Game sends: `{type: 'load', kind: 'image', path: 'player'}`
|
||||||
|
- Resources replies: `{type: 'loaded', path: 'player', data: <blob>}`
|
||||||
|
- Game never blocks. Request assets, keep running, handle them when they arrive.
|
||||||
|
- Sprites show placeholder until real texture lands.
|
||||||
|
- This is the natural actor pattern: send a message, get a message back.
|
||||||
|
|
||||||
|
## 5. Editor <-> Game Isolation
|
||||||
|
|
||||||
|
Editor runs as a separate actor, sends commands to the game actor.
|
||||||
|
- Can't corrupt game state.
|
||||||
|
- Clean separation of concerns.
|
||||||
|
- Editor can inspect/modify game state only through the message interface.
|
||||||
4
website/content/blog/_index.md
Normal file
4
website/content/blog/_index.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: "Blog"
|
||||||
|
type: blog
|
||||||
|
---
|
||||||
@@ -24,6 +24,10 @@ theme = 'prosperon'
|
|||||||
name = 'Get Started'
|
name = 'Get Started'
|
||||||
pageRef = '/start/'
|
pageRef = '/start/'
|
||||||
weight = 30
|
weight = 30
|
||||||
|
[[menus.main]]
|
||||||
|
name = 'Blog'
|
||||||
|
pageRef = '/blog/'
|
||||||
|
weight = 35
|
||||||
[[menus.main]]
|
[[menus.main]]
|
||||||
name = 'Changelog'
|
name = 'Changelog'
|
||||||
pageRef = '/changelog/'
|
pageRef = '/changelog/'
|
||||||
|
|||||||
22
website/themes/prosperon/layouts/blog/list.html
Normal file
22
website/themes/prosperon/layouts/blog/list.html
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<div class="page-wrapper no-sidebar">
|
||||||
|
<div class="main-content">
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
{{ .Content }}
|
||||||
|
|
||||||
|
<div class="blog-list">
|
||||||
|
{{ range .Pages.ByDate.Reverse }}
|
||||||
|
<article class="blog-entry">
|
||||||
|
<div class="blog-header">
|
||||||
|
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||||
|
<span class="blog-date">{{ .Date.Format "January 2, 2006" }}</span>
|
||||||
|
</div>
|
||||||
|
{{ if .Summary }}
|
||||||
|
<p>{{ .Summary }}</p>
|
||||||
|
{{ end }}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
12
website/themes/prosperon/layouts/blog/single.html
Normal file
12
website/themes/prosperon/layouts/blog/single.html
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<div class="page-wrapper no-sidebar">
|
||||||
|
<div class="main-content">
|
||||||
|
<div class="blog-post-header">
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
<span class="blog-date">{{ .Date.Format "January 2, 2006" }}</span>
|
||||||
|
</div>
|
||||||
|
{{ .Content }}
|
||||||
|
<p class="blog-back"><a href="/blog/">← All posts</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
@@ -411,6 +411,57 @@ th {
|
|||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* =========================================
|
||||||
|
Blog
|
||||||
|
========================================= */
|
||||||
|
.blog-list {
|
||||||
|
margin-top: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-entry {
|
||||||
|
margin-bottom: 2em;
|
||||||
|
padding-bottom: 1.5em;
|
||||||
|
border-bottom: 1px solid rgba(255, 214, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-entry:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
gap: 15px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-header h2 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1.4em;
|
||||||
|
border-bottom: none;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-date {
|
||||||
|
color: rgba(255, 214, 0, 0.7);
|
||||||
|
font-size: 0.9em;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-post-header {
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-post-header h1 {
|
||||||
|
margin-bottom: 0.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-back {
|
||||||
|
margin-top: 3em;
|
||||||
|
padding-top: 1em;
|
||||||
|
border-top: 1px solid rgba(255, 214, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
/* =========================================
|
/* =========================================
|
||||||
Docs Layout
|
Docs Layout
|
||||||
========================================= */
|
========================================= */
|
||||||
|
|||||||
Reference in New Issue
Block a user