Skip to content

Hucaru/Valhalla

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Alt text

Actions Status Visit our Discord channel

What is this?

This project exists to preserve and archive an early version of the game (v28 of global)

Client modifications

A DLL which will auto hook the functions to make a localhost and window mode can be found here

Features

General:

  • Simulated latency with jitter (set in config) to make dev environment simulate a real world connections when within network

Login server:

  • Login user
  • Auto-register (optional feature to automatically create accounts on first login attempt)
  • Show EULA on first login
  • Pin
  • Display world ribbons
  • Display world messages
  • Display world status (e.g. overpopulated)
  • World selection
  • Channel selection
  • Create character
  • Delete character
  • Delete character informs world servers
  • Migrate to channel server
  • Show worlds, channels, world status etc from information sent from world server
  • Prevent players from accessing dead channel
  • Server resets login status upon restart for dangling users

World server:

  • Keep track of player count
  • Send information to login server
  • Send IP, port to channel for change channel requests
  • Forward player connects to channels
  • Forward player leaves game to channels
  • Broadcast buddy events
  • Broadcast party events
  • Broadcast guild events
  • Forward whisphers
  • Allow gm command to actiavate exp/drop changes accross all channels
  • Allow gm commands to update information displayed at login
  • Propagate character deletion to channels
  • Party sync when channel or world server are restarted
  • Guild sync when channel or world server are restarted

Cashshop server:

  • List items
  • Allow purchases via different currencies

Channel server:

  • GM commands
  • Players can see each other
  • Player can change channel
  • Players can see other movement
  • Player chat
  • player use portal
  • Player allocate skill points
  • Player stats
  • Player use skills
  • Player skill logic (haste etc)
  • Player inventory (needs a re-write)
  • Player use item (scrolls, potions etc
  • Player use cash item (super megaphones, etc)
  • Player drop item(s)
  • Player pets
  • NPC visible
  • NPC movement
  • NPC basic chat
  • NPC shops
  • NPC stylist
  • NPC storage
  • Load scripts from folder (incl. hot loading)
  • Map instancing
  • Mob visible
  • Mob movement
  • Mob attack
  • Mob skills that cause stat changes or summon other mobs (not on death)
  • Mob death
  • Mob respawn
  • Mob spawns mob(s) on death
  • Mob drops
  • Mob boss HP bar
  • Minigames
  • Whisphers
  • Find / Map in buddy window
  • Buddy list
  • Buddy chat
  • Party creation
  • Party invite
  • Party accept/reject
  • Party expel
  • Party chat
  • Party HP bar
  • Guild creation/disband
  • Guild invite
  • Guild join/leave
  • Guild emblem
  • Guild chat
  • Guild points update
  • Guild rank titles change
  • Guild rank update
  • Guild notice update
  • Guild expel
  • Guild member online notice
  • Kerning PQ
  • Ludi PQ
  • Balrog boat invasion
  • Deleted character removes from guild
  • Deleted character removes from party
  • Trade
  • Communication Window
  • Quests
  • Reactors
  • Server resets login status upon restart for dangling characters

Metrics:

  • Channel population
  • Server thread count (OS and Go)
  • Server memory usage (heap and stack)
  • Monster kill rate
  • Ongoing trades
  • Ongoing minigames
  • Ongoing npc script interactions
  • Number of parties

See screenshots section for an example Grafana dashboard

Acknowledgements

  • Sunnyboy for providing a list of idbs for which this project would not have started
  • The following projects were used to help reverse packet structures that were not clearly shown in the idb
  • NX file format (see acknowledgements at link)

Getting Started

Valhalla supports multiple deployment methods. Choose the one that best fits your needs:

📚 Installation Guide - Start here! Covers Data.wz conversion and client setup

Quick Links by Deployment Method

Configuration

⚙️ Configuration Guide - Complete reference for all configuration options

All server types support both TOML configuration files and environment variables. See the Configuration Guide for details on:

  • Command line flags (-type, -config, -metrics-port)
  • Database settings
  • Server-specific options (login, world, channel, cashshop)
  • Network configuration
  • Performance tuning

Advanced Topics

NPC Scripting

NPCs are scripted in JavaScript powered by goja. For detailed NPC chat formatting codes and scripting information, see the scripts directory and existing NPC implementations.

For NPC chat display formatting reference, see the NPC Chat Formatting section below.

Production Deployments

  • Kubernetes - Production-ready deployment with Helm, ingress, scaling, and monitoring
  • Docker - Containerized deployment with Docker Compose

NPC Chat Formatting

When scripting NPCs in JavaScript, use these formatting codes:

  • #b - Blue text
  • #c[itemid]# - Shows how many [itemid] the player has in inventory
  • #d - Purple text
  • #e - Bold text
  • #f[imagelocation]# - Shows an image from .wz files
  • #g - Green text
  • #h # - Shows the player's name
  • #i[itemid]# - Shows a picture of the item
  • #k - Black text
  • #l - Selection close
  • #m[mapid]# - Shows the name of the map
  • #n - Normal text (removes bold)
  • #o[mobid]# - Shows the name of the mob
  • #p[npcid]# - Shows the name of the NPC
  • #q[skillid]# - Shows the name of the skill
  • #r - Red text
  • #s[skillid]# - Shows the image of the skill
  • #t[itemid]# - Shows the name of the item
  • #v[itemid]# - Shows a picture of the item
  • #x - Returns "0%" (usage varies)
  • #z[itemid]# - Shows the name of the item
  • #B[%]# - Shows a progress bar
  • #F[imagelocation]# - Shows an image from .wz files
  • #L[number]# - Selection open
  • \r\n - Moves down a line
  • \r - Return carriage
  • \n - New line
  • \t - Tab (4 spaces)
  • \b - Backwards

Reference from RageZone forums