Add independent Rust engine, deterministic mod API and asset pipeline

This commit is contained in:
raptorreplica committed 2026-10-10 12:17:43 +11:00
1 parent f2cce6f51b
commit dbb1d4596b
53 files changed
+18314 -56

No files matched your search

+11
View File
@@ -0,0 +1,11 @@
fn on_pickup(event, state, random) {
let recovered = if state.contains("recovered") { state.recovered + 1 } else { 1 };
#{ commands: [#{ op: "credits", amount: 25 }], state: #{ recovered: recovered } }
}
// A selected repair cell can also be consumed with the special-action button.
fn on_use(event, state, random) {
let used = if state.contains("used") { state.used + 1 } else { 1 };
state.used = used;
#{ commands: [#{ op: "objective", key: "aurora:repairs_used", value: used }], state: state }
}
+16
View File
@@ -0,0 +1,16 @@
fn on_spawn(event, state, random) {
#{ commands: [], state: state }
}
fn on_tick(event, state, random) {
// on_tick may be queued on the same step as on_death; do not command a retired entity.
if event.health <= 0 { return #{ commands: [], state: state }; }
let sideways = if (event.tick / 24) % 2 == 0 { 1 } else { -1 };
#{ commands: [#{ op: "velocity", entity: event.entity, vx: sideways, vy: 1 }], state: state }
}
fn on_death(event, state, random) {
let destroyed = if state.contains("destroyed") { state.destroyed + 1 } else { 1 };
#{ commands: [#{ op: "objective", key: "aurora:destroyed", value: destroyed }],
state: #{ destroyed: destroyed } }
}
+10
View File
@@ -0,0 +1,10 @@
fn on_mission_start(event, state, random) {
#{ commands: [
#{ op: "give_item", item: "aurora:pulse_cannon", count: 1 },
#{ op: "objective", key: "aurora:destroyed", value: 0 }
], state: state }
}
fn on_mission_end(event, state, random) {
#{ commands: [#{ op: "objective", key: "aurora:trial_finished", value: 1 }], state: state }
}
+13
View File
@@ -0,0 +1,13 @@
// The normal centre projectile is emitted by the engine. Add two angled pulses.
fn on_fire(event, state, random) {
let shots = if state.contains("shots") { state.shots + 1 } else { 1 };
let spread = 1 + random[0] % 2;
#{ commands: [
#{ op: "projectile", weapon: "aurora:pulse_projectile", x: event.x - 6, y: event.y, vx: -spread, vy: -8 },
#{ op: "projectile", weapon: "aurora:pulse_projectile", x: event.x + 6, y: event.y, vx: spread, vy: -8 }
], state: #{ shots: shots } }
}
fn on_hit(event, state, random) {
#{ commands: [#{ op: "effect", x: event.x, y: event.y }], state: state }
}