|
| 1 | +# Graal 5.00 rev 7 (`G3D22067`) |
| 2 | + |
| 3 | +The 5.00r7 client, rebuilt. The original is the Windows build of July |
| 4 | +2007: a Delphi launcher over a C++ engine library. On the wire it keeps the |
| 5 | +gen-5 codec of 2.22 to 4.20, with its own token, no tamper check and no |
| 6 | +listserver. This folder starts from `graal-3.153-G3D28015` and changes what |
| 7 | +the 5.x notes say differs. This is the 0.0.1 reproduction: hit or miss. |
| 8 | + |
| 9 | +> **Not affiliated.** graal-delphi is an independent fan project. It is not |
| 10 | +> affiliated with, endorsed by, or connected to GraalOnline or |
| 11 | +> graalonline.com, Cyberjoueurs, or Stéphane Portha ("unixmad"). |
| 12 | +
|
| 13 | +## Sources |
| 14 | + |
| 15 | +From [graal_analysis](https://github.com/squirelworks/graal_analysis), not |
| 16 | +from decompiled code: |
| 17 | + |
| 18 | +| Area | Notes | |
| 19 | +|---|---| |
| 20 | +| Token, login line, ids handled, Login server | `protocol/v5x-clients.md` | |
| 21 | +| Ids, props, login fields in table form | `version-profiles/5.00-6.03.toml` | |
| 22 | +| Login mode, server warp, movement, timings | `version-profiles/lab-v5-2026-10-30.md` | |
| 23 | +| What the server sends and the client answers | `protocol/v5v6-lab-play.md` | |
| 24 | +| Everything carried over | `../graal-3.153-G3D28015/README.md`, `../graal-2.22-GNW03014/README.md` | |
| 25 | + |
| 26 | +## What differs from the 3.153 rebuild |
| 27 | + |
| 28 | +| | 3.153 | 5.00r7 (this folder) | |
| 29 | +|---|---|---| |
| 30 | +| Game token | `G3D28015` | `G3D22067` | |
| 31 | +| Login line | ends at the password | then `win,"","",""` (platform and three machine fields) | |
| 32 | +| First frame | 5, 37, 34 bigmap, 34 minimap | 5 alone; 37 in its own gen-5 frame | |
| 33 | +| Listserver | `G3D30123newmain` | none: the first server is a game server named `Login` | |
| 34 | +| Login mode | no | while the server's name starts with "login", no characters are drawn | |
| 35 | +| Server warp (178) | comma text | split on commas only; the name becomes the server's name | |
| 36 | +| Server ids handled | 88 | 100: adds 105-107, 140, 170, 182, 183, 190, 191, 193-195, 197 | |
| 37 | +| First props | 0, 18, 31, 33, 52, 75 `mac`, 76 | 0, 13, 52, 75 `win`, then X2 and Y2 | |
| 38 | +| Movement | X and Y every other tick | X2 / Y2 (78, 79), pixels, every tick, only what changed | |
| 39 | +| Process list (182) | not handled | answered with 44 | |
| 40 | + |
| 41 | +The machine fields are MD5 hashes of the Windows product id, the adapter |
| 42 | +MAC and the `C:` volume serial on the original. The rebuild reads none of |
| 43 | +them and sends each as `""`, which is what the real 5.00r7 sent for its MAC |
| 44 | +field in the lab. Its answer to 182 names only its own game window (the |
| 45 | +server's name), not the processes on the machine. |
| 46 | + |
| 47 | +## Units |
| 48 | + |
| 49 | +As in 3.153, with the suffix `500`: `Protocol500`, `GraalClient`, |
| 50 | +`Adventure`, `Graal500.dpr`, `ListServer500`, `StartScreen500`, `RunMode`. |
| 51 | + |
| 52 | +## Running it |
| 53 | + |
| 54 | +Put `Graal500` in the root of a 5.00r7 install and start it with no |
| 55 | +arguments for the start screen. It finds the install's files from there, |
| 56 | +or from `graal-assets/5.00r7/` and `graal-assets/common/` next to it. |
| 57 | + |
| 58 | +Start asks a Seihai listserver for the server list (`listserver.txt` next |
| 59 | +to the program, else `listserver.graal.in` on 14922), since the rebuild |
| 60 | +cannot show the Login server's scripted list. The picked server's name |
| 61 | +becomes the client's server name, as if the Login server had already |
| 62 | +warped there, so the player is drawn. |
| 63 | + |
| 64 | +``` |
| 65 | +GRAAL_PW=... Graal500 --server HOST:PORT --account NAME # as Login |
| 66 | +GRAAL_PW=... Graal500 --server HOST:PORT --account NAME --server-name Classic |
| 67 | +Graal500 --level some.nw # offline |
| 68 | +``` |
| 69 | + |
| 70 | +With `--server` and no `--server-name` the server is `Login`: the level is |
| 71 | +drawn, characters are not, until the server sends a 178. |
| 72 | + |
| 73 | +## Files it opens |
| 74 | + |
| 75 | +From the program's folder (or `--data`), then `graal-assets/5.00r7/`, then |
| 76 | +`graal-assets/common/`: |
| 77 | + |
| 78 | +- `pics1.png` (or `pics1.gif`), `arrays.dat` |
| 79 | +- `levels/` for levels, ganis and images; `levels/heads/`, `levels/bodies/`, |
| 80 | + `levels/swords/`, `levels/shields/`, `levels/hats/`, `levels/images/` |
| 81 | +- `levels/offlinetutorial_b-2.nw` (or `.graal`) for Training, else `start.nw` |
| 82 | +- `listserver.txt` (optional) |
| 83 | + |
| 84 | +## Not yet, or not known |
| 85 | + |
| 86 | +- The Login server's scripted GUI (server list, accounts) and GS2 in |
| 87 | + general: 140 and 197 (class and weapon scripts, the `GRESCR01` cache), |
| 88 | + 195 (gani scripts) and 190 (`onServerListerConnect`) are accepted and |
| 89 | + ignored. |
| 90 | +- `GR-V1.05` levels (tile layers) and `GRPKG001` update packages. |
| 91 | +- The base-file requests after the language (`basepackage.gupd` by 47 or 23). |
| 92 | +- The keep-alive 24 the lab saw every 5 s: its payload was not recorded. |
| 93 | +- 183 ("is this process running?") is accepted and not answered. |
| 94 | +- Whether 5.00r7 plays offline at all is not traced; Training keeps 3.153's. |
| 95 | +- The 3D mode (Torque, `Graal3DEngine.dll`, protocol 24). |
| 96 | +- No side-by-side run against the real 5.00r7; that is 0.0.2 work. |
| 97 | +- Everything still missing from the 3.153 rebuild. |
0 commit comments