Skip to content

CustomGame Home

wezzzyrek1 edited this page Sep 18, 2026 · 1 revision

Custom Maps & Monsters

Two features on one plugin: worlds the client never shipped with, and monsters drawn from your own models. Both are driven from encrypted config files and both can be scripted in Lua, in a sandbox of their own.

What it covers:

  • new playable worlds above the original map range, with their own music
  • your own .bmd models on monsters and NPCs, scaled, tinted and lit
  • per-frame Lua for map scenery: scrolling water, breathing lava, smoke vents
  • per-frame Lua for monsters: extra render passes, attack effects, glows
  • weather written in Lua, and distance fog per map

The worlds themselves are made and edited in MU World Creator, the map tool in the IGCN store - it is also the only way to generate a world's minimap. This plugin is what brings them into the game.

Turning it on

Everything here comes from the Custom Map / Monster / NPC plugin, and custom maps also need their switch in the GameServer's Data\Plugins\PluginSettings.ini:

[Lua]
LuaCustomMapEnable = 1
LuaGameScriptKey =

The GameServer checks the plugin on your licence, reads the switch, and tells the client on connect. Without the plugin the client loads its config files as usual and then ignores them, and no monster script runs. Without the plugin or the switch no map above the original range loads - a missing LuaCustomMapEnable counts as switched off. LuaGameScriptKey is what the encrypted map files and the map and monster scripts (.gsc) are packed with; it can stay empty while you develop with plain files in dev mode.

The config files themselves are optional: a client without CustomMap.xdc or CustomMonster.xdc starts normally, with that half switched off.

Custom monster ids live above the original monster range, up to 2499; with the plugin active the server has room for all of them, nothing to set.

Dev mode

Scripts ship encrypted as .gsc, packed with LuaGameScriptKey in the [Lua] section of PluginSettings.ini, exactly 32 characters. The server hands it to the client with the plugin packet; without it no map or monster script loads. The older keyless .lsc still loads, for sets made before the key existed.

While the server grants LuaDevMode to your account the same folders also load plain .lua, and the Lua console appears with script errors in it. That is the whole difference - the API is identical - so develop in .lua and ship .gsc.

Dev mode is granted per account by the server, exactly as it is for Lua UI.

Two script worlds, not one

Map and monster scripts share one sandboxed Lua state, and it is not the Lua UI one. They are separate interpreters, not namespaces: nothing defined in Scripts\UI\ is visible here and nothing here is visible there. A texture id or a model slot means something different on each side.

Inside this one state, map and monster scripts do see each other's globals - which is why scripts keep their state in file-scope locals and hand over closures instead of defining global entry points.

The running examples

Two things ship as samples, and every page here builds on them rather than inventing a new toy:

Example What it shows
Tarkan Copy, world 160 a copied world, registered, with its scenery and weather scripted
Hydra, monster 2498 a custom model with a second render pass, lights and attack effects

Both can be deleted without breaking anything else.

Pages

Custom maps

  1. Adding a map - files, config, and the whole procedure
  2. Map scripts - handlers, order of execution, the Map API
  3. Object effects and animations - the per-world tables inside Lang.mpr
  4. Fading roofs - opening roofs over the player, from a table or a script
  5. Distance fog - per map fog and the sky behind the terrain

Custom monsters

  1. Adding a monster - config, models, sounds, glow
  2. Monster scripts - handlers, render passes, attacks
  3. Monster skills - player skills on monsters, what the client draws and what a script adds
  4. Render flags - the mask the body is drawn with

Shared

  1. Objects and the sandbox - the object API both kinds use, what the sandbox allows, and the shared Enums / Helpers / Registry files
  2. Encrypting files - configs, scripts and terrain packed for a live client

See Also

  • Lua UI - the other client-side Lua, in its own separate state
  • Encrypting files - configs, scripts and terrain packed for a live client

Clone this wiki locally