Check if property exists and get its options.
Property options, or null if doesn't exist
Change property configuration (transient/saved, access control).
true if successful, false if access denied or property doesn't exist
Default access control (override in subclasses).
Default implementation allows all operations.
Read-only view of all properties (saved + transient).
Initialize a new property with options.
Pass marshaller: '/lib/persistence/QuantityMarshaller/kg' (or
any registered marshaller path) when the prop holds a rich
value object that needs storage-shape conversion. The binding
persists alongside savedProps, so loaded hosts round-trip
through the same marshaller without redeclaring.
Optionaloptions: PropOptionsInput<T>true if successful, false if property already exists
Check if owner has any masks on property. Owner defaults to the nearest Stuff on the call stack.
true if owner has masks on this property
Add value transformation mask (e.g., stat modifiers, equipment bonuses). Masks are applied during getProp() to transform the returned value.
The owner is the in-world Stuff this mask belongs to — the ring that
grants the bonus, the potion that doubles it, the curse that halves
it. The caller retains the reference so it can later call
unmaskProp(prop, owner) to remove its own masks without touching
others'. Owner is also passed to access control as special.
If owner is omitted, it defaults to the nearest Stuff on the call
stack (the caller of this method, walking down past Api frames).
The common case — Stuff A reaches into Stuff B and adds a mask —
needs no explicit owner. Throws if no Stuff is reachable on the
stack.
Property to mask
Value transformation function
Optionalowner: StuffThe Stuff this mask belongs to (defaults to nearest Stuff caller)
Additional arguments to pass to mask when executed
true if successful, false if property doesn't exist or owner already has a mask
Remove masks by owner. Owner defaults to the nearest Stuff on the
call stack — the same resolution rule as maskProp, so symmetric
pairs need no explicit owner.
true if any masks were removed, false otherwise
Interface for objects with dynamic properties.