Skip to content

hhrhhr/LuaELEX

Repository files navigation

Demands

Get map tiles

map example

if not exist .\map_dds mkdir .\map_dds
lua pak_unpack_map.lua path_to\c_1_na.pak .\map_dds

algo:

  • the script looks for a file 0_na_img\w_img_0_na.csv in c_1_na.pak
  • reads it for matching hashes to file names (w_img_0_na_98ca6197.rom -> Map_0000_0057_0029 for example)
  • converts the name into a z-y-x tile format (-> elex-5-57-29)
  • copies the tiles in the dds format with new names to the specified .\map_dds directory

Most of .dds is in DX11 format with BC7 compression. For mass conversion I used detex:

if not exist .\map_png mkdir .\map_png
for /r .\map_dds %i in (*.dds) do @detex-convert -o RGB8 "%i" ".\map_png\%~ni.png"

For a web-map tiles with the size 256x256 px are pretty small, so you can combine them into tiles 512x512 px by using ImageMagick and the script 256_to_512.lua:

about merge

rem Make filelist
dir /b /s .\map_png\*.png > .\map_png\filelist.txt

if not exist .\map_512 mkdir .\map_512
lua 256_to_512.lua .\map_png\filelist.txt .\map_512 > convert.cmd

rem Running the resulting batch-file
convert.cmd

After that, instead of 1983 pieces of original tiles gets only 540.

To customize the output format, you need to edit the variable magick4 and tile in 256_to_512.lua.

Now the received tiles can be used, for example, in a Leaflet-based map (low quality, only 4 levels).

Parse World_Teleporter.sec

First, you need to generate a hash table of all the strings in the file (...\ELEX\system\ELEX.exe). Using *nix-utilities do this is very simple:

strings -3 ELEX.exe | grep "^[A-Za-z][0-9a-zA-Z _<>*-]\+$" | LANG=C sort | uniq > strings.txt

Second, language table must be extracted (see #Localization). Then create a strings2.txt file (for manually added values), and after that it is required to generate a hash table for further use:

lua generate_hash.lua > names.lua

also you can use precompiled names_%PLAT%.luac from repo

Beforehand, you need to unpack some .rom file, for example, to find the coordinates of teleports you need ...\0_na_sec\0\9\w_sec_0_na_935f1e52.rom. The correspondence of the hexadecimal code of the file name can be found in ...\0_na_sec\w_sec_0_na.csv, in this case, the name of the file is World_Teleporter.sec.

Now everything is ready to run a fairly universal gar5_parser.lua:

lua gar5_parser.lua World_Teleporter.sec

A file World_Teleporter.sec.lua appears next to the file World_Teleporter.sec. Use another script to get coordinates and descriptions of teleports:

lua parse_teleports.lua World_Teleporter.sec.lua language.lua teleport.js

The resulting file contains a JS script that can be connected to the LeafJet based map.

Patch unpacker

Show the list of files in the archive or unpack them all:

lua pXX_unpack.lua <path_to.p00> [output_dir]

Localization

Convert \localization\w_strings.bin to Lua table:

lua w_strings.lua <w_strings.bin> <output.lua> [lang]

lang — language code, 0...7 is main table, 8...15 is comments (in patch 1.1).

About

Lua utils for ELEX

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages