Skip to content

Releases: jskz/golem

v0.4

27 Feb 13:51
Compare
Choose a tag to compare

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 and get/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 and group 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, and reset
  • 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 in config.json.example

v0.4-alpha-20211212

12 Dec 23:49
Compare
Choose a tag to compare
v0.4-alpha-20211212 Pre-release
Pre-release

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 for QuadTree.Insert and QuadTree.Remove
  • Adds scan command for players and uses QuadTree.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

27 Nov 03:43
Compare
Choose a tag to compare
v0.3 Pre-release
Pre-release

New features:

  • Defines and implements another case for "planes", layered 2D grids stored in binary blobs under the planes.source_value column for planes of blob source_type; allow editing and saving the blob from in-game JavaScript REPL
  • Update the do_goto command with more flexibility for gotoing any character in the global characters list, add a WIP goto 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 a Character.CreatePlaneMap method to render the character's view from within a map-based plane; output this as an ellipse of ANSI-coloured terrain glyphs in do_look if in a room flagged ROOM_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

18 Nov 04:33
Compare
Choose a tag to compare
v0.3-alpha-20211117 Pre-release
Pre-release

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 with drop 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

07 Nov 23:03
Compare
Choose a tag to compare
v0.3-alpha-20211107 Pre-release
Pre-release
  • 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

31 Oct 21:10
2886337
Compare
Choose a tag to compare
v0.3-alpha-20211031 Pre-release
Pre-release
  • Adds a string table for object flags and an ObjectInstance.GetDisplayFlags utility method to display an object's flag1 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's ConnectionHandler 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 and Remove 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

27 Oct 23:29
668f923
Compare
Choose a tag to compare
v0.2 Pre-release
Pre-release
  • Export and JSON tag most fields on game objects for the scripting engine

v0.2-alpha-20211024

24 Oct 20:34
Compare
Choose a tag to compare
v0.2-alpha-20211024 Pre-release
Pre-release
  • 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

24 Oct 01:34
Compare
Choose a tag to compare
v0.2-alpha-20211023 Pre-release
Pre-release
  • 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

23 Oct 03:24
Compare
Choose a tag to compare
v0.2-alpha-20211022 Pre-release
Pre-release
Remove plane-script relations for now