Skip to content

Commit 860b10c

Browse files
Rewrite README with authoritative scope and MIT license
1 parent 690b873 commit 860b10c

1 file changed

Lines changed: 61 additions & 45 deletions

File tree

README.md

Lines changed: 61 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,85 @@
11
# LegendaryCore
22

3+
LegendaryCore is a minimal, engine-agnostic foundation for deterministic legendary encounters in Hytale.
34

5+
LegendaryCore aims to provide a small, deterministic encounter foundation with conservative, fail-closed behavior when required platform information is unavailable.
46

5-
A minimal, engine-agnostic foundation for deterministic legendary encounters in Hytale.
7+
---
68

9+
## Deterministic Lifecycle Semantics
710

8-
LegendaryCore aims to provide a small, deterministic encounter foundation with conservative, fail-closed behavior when required platform information is unavailable.
11+
LegendaryCore enforces strict lifecycle determinism:
912

10-
### Lifecycle determinism
11-
- Start is emitted **once** when an encounter transitions from CREATED → RUNNING.
12-
- End is emitted **once** when an encounter transitions to ENDED.
13-
- Leave is **idempotent** and removes players from participants/spectators without changing encounter state.
13+
- **Start** is emitted once when an encounter transitions from `CREATED → RUNNING`
14+
- **End** is emitted once when an encounter transitions to `ENDED`
15+
- **Leave** is idempotent and removes players from participants or spectators without mutating encounter state
1416

15-
### Join and spectator behavior
16-
- Capacity is enforced for both participants and spectators.
17-
- Spectator gating is enforced via SpectatorPolicy:
18-
- DISALLOW denies spectator joins.
19-
- View-only spectator joins are treated as passive viewing and do not start an encounter.
17+
These guarantees exist to prevent duplicate execution, partial teardown, and inconsistent encounter outcomes.
2018

21-
### Access policy behavior
22-
- PUBLIC participation is allowed by policy.
23-
- PARTY_ONLY participation is **fail-closed** when party context or party directory information is unavailable.
24-
- INVITE_ONLY is not implemented in the reference policy and denies by default.
19+
---
2520

26-
### Non-goals (unless gameplay requires)
27-
- No additional time/clock refactors.
28-
- No invite/matchmaking system without a clear gameplay requirement.
29-
- No persistence guarantees (in-memory reference implementation only).
21+
## Join and Spectator Behavior
3022

23+
- Capacity limits are enforced for both participants and spectators
24+
- Spectator access is governed by `SpectatorPolicy`:
25+
- `DISALLOW` denies all spectator joins
26+
- View-only spectators are treated as passive observers and do **not** start encounters
3127

32-
LegendaryCore is a shared foundation library for Legendary mods built for Hytale.
28+
---
29+
30+
## Access Policy Behavior
31+
32+
LegendaryCore defines conservative access semantics:
33+
34+
- `PUBLIC` participation is allowed by policy
35+
- `PARTY_ONLY` participation is **fail-closed** when party context or party directory information is unavailable
36+
- `INVITE_ONLY` is not implemented in the reference policy and denies by default
37+
38+
---
39+
40+
## Explicit Non-Goals (Unless Gameplay Requires)
41+
42+
LegendaryCore intentionally avoids:
3343

34-
Its purpose is to provide stable, reusable primitives that multiple Legendary mods can depend on,
35-
without embedding gameplay logic or design assumptions into the core itself.
44+
- Additional time or clock refactors
45+
- Matchmaking or invite systems without a clear gameplay requirement
46+
- Persistence guarantees (reference implementation is in-memory only)
3647

3748
---
3849

3950
## Purpose
4051

52+
LegendaryCore is a shared foundation library for Legendary mods built for Hytale.
53+
54+
Its purpose is to provide stable, reusable primitives that multiple Legendary mods can depend on, without embedding gameplay logic or design assumptions into the core itself.
55+
4156
LegendaryCore exists to:
4257

4358
- Reduce duplication across Legendary mods
4459
- Provide consistent patterns for common mod concerns
4560
- Establish a stable internal ecosystem for Legendary content
4661

47-
It is not intended to be a gameplay mod on its own.
62+
It is **not** intended to be a gameplay mod on its own.
4863

4964
---
5065

5166
## What LegendaryCore Provides
5267

53-
LegendaryCore focuses on **infrastructure**, not content. Intended responsibilities include:
68+
LegendaryCore focuses on infrastructure, not content. Intended responsibilities include:
5469

55-
- Plugin lifecycle utilities and common bootstrap patterns
56-
- Shared logging and diagnostics helpers
57-
- Configuration loading and validation primitives
58-
- Serialization and data-format helpers
59-
- Registration and discovery patterns for mod-declared systems
60-
- Common constants, naming conventions, and utilities
70+
- Deterministic encounter lifecycle coordination
71+
- Identity and namespacing primitives
72+
- Deterministic registries and discovery mechanisms
73+
- Access gating and policy contracts
74+
- Event abstractions (mechanics only)
75+
- Encounter models, states, and outcomes
76+
- Stable service exposure patterns
6177

62-
All provided functionality is designed to be broadly reusable across multiple mods.
78+
All provided functionality is designed to be broadly reusable across multiple Legendary mods.
6379

6480
---
6581

66-
## What LegendaryCore Does *Not* Provide
82+
## What LegendaryCore Does Not Provide
6783

6884
LegendaryCore intentionally avoids:
6985

@@ -73,56 +89,56 @@ LegendaryCore intentionally avoids:
7389
- Hard-coded content, tuning, or progression systems
7490
- Assumptions about how individual Legendary mods should behave
7591

76-
Anything that expresses *what a mod does* belongs in that mod — not in LegendaryCore.
92+
Anything that expresses what a mod does belongs in that mod — not in LegendaryCore.
7793

7894
---
7995

8096
## API Stability
8197

8298
LegendaryCore distinguishes between:
8399

84-
- **Public API** (`core.api.*`): intended for use by other mods and kept stable
85-
- **Internal code** (`core.internal.*`): subject to change without notice
100+
- **Public API** (`core.api.*`) intended for use by other mods and kept stable
101+
- **Internal code** (`core.internal.*`) subject to change without notice
86102

87103
Only the public API should be relied upon by other Legendary mods.
88104

105+
For detailed stability and versioning guarantees, see `API_STABILITY.md`.
106+
89107
---
90108

91109
## Core vs Platform Responsibility
92110

93111
LegendaryCore is intentionally platform-agnostic.
94112

95-
It defines shared **mechanisms and contracts**, not game runtime behavior.
113+
It defines shared mechanisms and contracts, not game runtime behavior.
96114

97115
### LegendaryCore Responsibilities
116+
98117
- Identity and namespacing primitives
99118
- Deterministic registries and discovery
100119
- Lifecycle coordination and service exposure
101120
- Event abstractions (mechanics only)
102-
- Encounter *models* and policies (interfaces, states, outcomes)
121+
- Encounter contracts and policies
103122

104123
### Platform Responsibilities (e.g. Hytale)
124+
105125
- Game event listeners and hooks
106126
- Player, world, and entity interaction
107127
- Threading, scheduling, and tick integration
108128
- Runtime execution of encounters
109129
- Translation between platform concepts and core APIs
110130

111-
Platform-specific code is expected to live in internal adapter layers and must not
112-
leak into the public LegendaryCore API.
113-
114-
For detailed stability and versioning guarantees, see `API_STABILITY.md`.
131+
Platform-specific code must live in adapter layers and must not leak into the public LegendaryCore API.
115132

116133
---
117134

118135
## Status
119136

120-
LegendaryCore is under active development and its public API surface is still being defined.
121-
122-
Breaking changes may occur until an initial stability baseline is declared.
137+
LegendaryCore is under active development.
138+
Breaking changes may occur until an initial API stability baseline is declared.
123139

124140
---
125141

126142
## License
127143

128-
(TBD)
144+
MIT License. See `LICENSE`.

0 commit comments

Comments
 (0)