Releases: jskz/golem
Releases · jskz/golem
v0.4
New features:
- Added
Client.Delayto 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_PARALYSISstatus effect to limit input during its duration for a stun skill, paralysis spell, other impairment abilities - Added new
Visiblemethods for rooms, characters and objects - Added
ROOM_DARKflag and light-source presence checking logic (Room.ActiveLightSourcePresent) - Added
AFFECT_BLINDNESSstatus effect to limit all character, room and object visibility - Unit test for a battery of
OneArgumentcases dropandget/takecommands now accept an "all" argument in all use cases- Add
ITEM_CLOSED,ITEM_CLOSEABLEflags which allow for containers to be closed and opened; items cannot be taken from or placed within a closed object - Add a
putcommand for placing objects within open containers, respecting the capacity limit on that container - Several new skills and spells, including
chain lightningandgroup healwith some party mechanics - The
Golem.RegisterPlayerCommandmethod 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.GetStatmethod, 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
OneArgumentutility 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
passwordcorrectly 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
quadtreebranch and includes unit tests forQuadTree.InsertandQuadTree.Remove - Adds
scancommand for players and usesQuadTree.QueryRectto 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.Removethat was collapsing too aggressively and eliminating nodes - Fixed typo in
Plane.MaterializeRoomcausing 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_valuecolumn for planes ofblobsource_type; allow editing and saving the blob from in-game JavaScript REPL - Update the
do_gotocommand with more flexibility forgotoing 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.CreatePlaneMapmethod to render the character's view from within a map-based plane; output this as an ellipse of ANSI-coloured terrain glyphs indo_lookif in a room flaggedROOM_PLANAR - Alternative dodge-like
acrobaticsskill for thieves - Add a hero-level
amazementspell 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_examplecommand 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
equipmentcommand output - A
Character.GetArmorValuesutility 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 playersyntax and dropped withdrop 5 goldsyntax
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.findObjectOnSelfmethod, 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.StringEditorwhich 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
webhookcommand - Support for listing and editing script source using the
Golem.StringEditorutility - try to hot reload the script changes on completion - Support for NPC shops and a
CHAR_SHOPKEEPERflag 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.GetDisplayFlagsutility method to display an object'sflag1 flag2 flag3friendly-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.Interpretby setting their client'sConnectionHandlerfield, 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
InsertandRemovein 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
listObjectsso 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