Releases: jskz/golem
Releases · jskz/golem
v0.4
New features:
- Added
Client.Delay
to delay a single client's input handling on a timer for gameplay purposes, e.g.: using a skill that forces a two second delay on any further input, spam protection for commands - When a skill or spell is invoked, its script handler now has access to the proficiency % of the invoking character, allowing for factoring proficiency into damage calculation or other skill-based behaviours
- Jobs and races now each have primary attributes for stat-rolling and future gameplay mechanics
- Added
AFFECT_PARALYSIS
status effect to limit input during its duration for a stun skill, paralysis spell, other impairment abilities - Added new
Visible
methods for rooms, characters and objects - Added
ROOM_DARK
flag and light-source presence checking logic (Room.ActiveLightSourcePresent
) - Added
AFFECT_BLINDNESS
status effect to limit all character, room and object visibility - Unit test for a battery of
OneArgument
cases drop
andget
/take
commands now accept an "all" argument in all use cases- Add
ITEM_CLOSED
,ITEM_CLOSEABLE
flags which allow for containers to be closed and opened; items cannot be taken from or placed within a closed object - Add a
put
command for placing objects within open containers, respecting the capacity limit on that container - Several new skills and spells, including
chain lightning
andgroup heal
with some party mechanics - The
Golem.RegisterPlayerCommand
method now accepts an additional minimum level parameter - OLC commands for editing/saving game content:
redit
,medit
,oedit
,zedit
,xedit
, andreset
- Indexed lookup on characters and objects:
get 2.potion
,kill 3.slime
- Stat rolling mechanic during character creation with ranges based on job and race primary attributes
Changes:
- Stats are no longer individual fields on a character but an array with constant indices; they are accessed now using a
Character.GetStat
method, allowing for effects to modify stats - QuadTree unit test points are now randomized on each run
- Aggressive NPCs now ignore staff-level characters
- Staff characters now pass through closed doors on movement
Fixes:
- Scripted string editor cursor value no longer being casted to a string and breaking assumptions about the number of lines to be modified in editor commands
- Fix off-by-one error in
OneArgument
utility method - Objects stored within other objects now preserve their "containedness" across character inventory save/load
- Admin user included in seed data now has default password
password
correctly hashed + bcrypted with the example salt included inconfig.json.example
v0.4-alpha-20211212
New features:
- Adds plane observers, a scripting API for registering entry/exit callback listeners on rectangular regions of game maps
- Merges the
quadtree
branch and includes unit tests forQuadTree.Insert
andQuadTree.Remove
- Adds
scan
command for players and usesQuadTree.QueryRect
to retrieve neighbouring characters, excluding those outside of the FOV ellipse, and indicating their degree bearing & direction to the player - Start keeping five room pointers worth of a "trail" for a character on move
- Adds districts, which are "biomes" for planes; they can set per-terrain room names regionally and register scripts to be invoked on the zone update interval; the intended use of a district is for populating map areas: use the character atlas to query the boundary rect and if under a capacity, generate some new NPCs within that boundary
Changes:
- Harsher penalties for player characters on death: same as NPCs, all loot and gold dropped
Fixes:
- Fixed bug in
QuadTree.Remove
that was collapsing too aggressively and eliminating nodes - Fixed typo in
Plane.MaterializeRoom
causing the character lists for map atlas rooms to be emptied
v0.3
New features:
- Defines and implements another case for "planes", layered 2D grids stored in binary blobs under the
planes.source_value
column for planes ofblob
source_type
; allow editing and saving the blob from in-game JavaScript REPL - Update the
do_goto
command with more flexibility forgoto
ing any character in the global characters list, add a WIPgoto plane <id>
argument that as of yet does not allow specifying coordinates - Start defining plane utility methods for working with grid primitives:
Plane.GetTerrainRect(x, y, z, w, h)
, create aCharacter.CreatePlaneMap
method to render the character's view from within a map-based plane; output this as an ellipse of ANSI-coloured terrain glyphs indo_look
if in a room flaggedROOM_PLANAR
- Alternative dodge-like
acrobatics
skill for thieves - Add a hero-level
amazement
spell for mages which, if there is no exit down in the current room, invokes the maze generation algorithm with a shallow depth and links the entrance of the resulting maze to the current room. It's like a basement, but a maze!
Changes:
- Tidied scripts' directory structure
- Remove stub
do_example
command from included scripts
Fixes:
- Fixed edge case around interacting with doors to nowhere: if an exit's room pointer or reverse direction exit pointer is nil, abort early
0.3-planar-map-update.mp4
v0.3-alpha-20211117
New features:
- The armor class values of equipped objects are collected and totaled in the
equipment
command output - A
Character.GetArmorValues
utility method retrieves these per-damage type totals; these armor values are now used to subtract damage during combat damage calculation time - Effects and affected by types allow a tighter API for scripted spells and mechanics to create effects that modify character attributes or set affected by flags
- Some gameplay spells to demonstrate the effects system: sanctuary, haste, detect magic, fireshield; sanctuary halves the affected character's damage received in combat, haste adds an extra attack to their combat round, detect magic allows them to see affects on others by looking at them; fireshield reactively causes some exotic damage to any attacker
- Gold can be given with
give 5 gold player
syntax and dropped withdrop 5 gold
syntax
Changes:
- Create a global object instance reference list and introduce an object tick; strategy likely to further change
- Move object decay from zone reset to object updates allowing objects to expire outside of zones (i.e., in a dungeon/maze)
- In the developer testing dungeon, prevent enemies from spawning on the entrance tile - this is a safe room
- Module dependency updates
- Remove uuid package
- Instead of separate currency instances, if a container object decays gold into the room or a character drops gold into the room, try to first merge with any existing currency stack
- Can now target others with curative spells:
cast 'cure light' otherperson
Fixes:
- Do not allow equipped objects to be found by the
Character.findObjectOnSelf
method, fixing strange behaviour like giving equipped objects to another player and overriding their equipment - Validation of giving and dropping gold amounts
- Combat sessions are being disposed again, preventing "extra" combat rounds for characters who end up participating in multiple combat sessions
- Delay instantiating player inventory until after character enters the world to prevent memory leak from discarded sessions
v0.3-alpha-20211107
- Adds a reusable line editor to the scripting API,
Golem.StringEditor
which allows hijacking a client's interpreter with a stateful editor that invokes a provided callback with the "edited" string on completion - Support for loading/saving a webhook structure and connecting to script entities in-game with the
webhook
command - Support for listing and editing script source using the
Golem.StringEditor
utility - try to hot reload the script changes on completion - Support for NPC shops and a
CHAR_SHOPKEEPER
flag indicating a mobile can sell items - Several new seed data items for the shop in the developer area
- Several small bug fixes in formatting found in a gameplay test session
- Fixes an edge case where followers' output paging could overflow causing a panic, preventing the group leader from being placed in the destination room
v0.3-alpha-20211031
- Adds a string table for object flags and an
ObjectInstance.GetDisplayFlags
utility method to display an object'sflag1 flag2 flag3
friendly-named flags - Show an object's flags when you look at it (in
Character.examineObject
) - Add glow, hum object flags
- Allow scripting API to set an override callback handler to prevent normal
Character.Interpret
by setting their client'sConnectionHandler
field, i.e.:
function do_example(ch, args) {
ch.client.connectionHandler = function(input) {
this.character.send("Unsetting connection input handler after input: " + input);
this.connectionHandler = null;
};
}
immediately hijacks the input handler with a temporary scripted handler who echoes back the next line of input and then unsets this handler for successive input.
- Simplify linked list
Insert
andRemove
in sorting out a dangling pointer issue debugged with the help of Tnega - Make the generated enemies peppered throughout the default limbo mazes more difficult for each floor deeper they are within the dungeon
- Add extra string output section to the who command and indicate here if a player is fighting or not
- Fix a bug preventing more than one decaying object from decaying per zone tick
v0.2
v0.2-alpha-20211024
- Fix typos preventing rounds of combat with somebody who has dodge skill (making it inadvertently too effective!)
- Prevent a panic case around a possible nil pointer when removing self from a group
- Add Sentry SDK for Go for reporting panic details; set context on player input with character/room/input
- Unset casting on death, set mana and stamina to 1
- Fix oversight where on session resume, the existing character's client pointer was being immediately hijacked by the connecting user (thanks, Tnega!)
- Add purposefully vague location to the who command
- Add health feedback when looking at a creature
v0.2-alpha-20211023
- Modest effort towards consistent field and method names, cases, and JSON field mappings for scripting engine
- Progress on equipment gameplay mechanic: wear and remove commands implemented, saving wear locations of worn equipment between sessions, seeing occupied equipment slots when looking at a creature
- Switched peek output to use
listObjects
so that equipment is hidden and duplicate objects are grouped - Allow scripts to be associated with planes, invoke exported callback handlers if defined for events on maze generation and completion of maze generation
- Refactored to allow for moving the previously hardcoded "link the developer test maze dungeon to limbo" logic to a script associated with that specific plane/maze
- Once the previous behaviour had been ported to JavaScript, enhanced that maze script to scatter hostile NPCs in the maze with a 10% spawn rate
v0.2-alpha-20211022
Remove plane-script relations for now