Skip to content

Commit 9cff9e7

Browse files
authored
Merge pull request #39 from squirelworks/claude/project-thread-rw1tge-500
graal-5.00r7-G3D22067: 0.0.1 rebuild of the 5.00r7 client
2 parents 5ae1725 + f66176d commit 9cff9e7

11 files changed

Lines changed: 5526 additions & 0 deletions

File tree

‎graal-5.00r7-G3D22067/README.md‎

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Graal 5.00 rev 7 (G3D22067)
2+
3+
The first rebuild of the Graal 5.00 rev 7 client, in Delphi (Object
4+
Pascal). The original is a Windows program from 2007; this rebuild runs on
5+
Linux and Windows. It is an early version: most of the game (NPCs, items,
6+
weapons, scripts, the scripted login screens, the 3D mode) is not there
7+
yet.
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+
These zips hold no original Graal code, graphics, sounds or levels. The
14+
program carries small original default graphics and a starter level of its
15+
own, so it runs as it is. Put it in the root of a 5.00r7 install you own
16+
(or point it at one with `--data DIR`) and the install's tiles, ganis,
17+
heads and bodies take their place. The shared `graal-assets/` folder next
18+
to the program works too (`graal-assets/5.00r7/`, then
19+
`graal-assets/common/`).
20+
21+
## Downloads
22+
23+
| Zip | Runs on | Window |
24+
|---|---|---|
25+
| `…-linux.zip` | Linux x86-64 | X11 |
26+
| `…-windows.zip` | Windows, 32-bit | GDI |
27+
28+
Each zip has `Graal500` (the client), `Test500` (its test suite) and the
29+
build's README.
30+
31+
## What works
32+
33+
- The start screen: nick name, Training, Start. Start fetches the server
34+
list from `listserver.txt` next to the program, or else
35+
`listserver.graal.in` on port 14922. Then account, password and Connect.
36+
- Login with `G3D22067`, the platform `win` and three empty machine
37+
fields; the language in its own frame; no tamper check.
38+
- The Login server: a server reached by its address alone is called
39+
Login, and there the level is drawn but no characters, until the server
40+
moves the client on with a server warp. A server picked from the list
41+
plays at once.
42+
- Server warps: the client logs in again to the named host and port, under
43+
the new name.
44+
- The first props with `win` as the system name; movement sent every tick
45+
in whole pixels.
46+
- The board, the player and other players drawn from the install's tiles
47+
and ganis; walking and collision; level links; gmaps and their edges.
48+
- A headless mode for stress runs, with JSON stats.
49+
50+
## Not yet
51+
52+
NPCs, baddies, items and weapons; scripts (class, weapon and gani scripts
53+
and their cache); the scripted server list and account screens; chat;
54+
layered levels; update packages; the 3D mode. See the build's README for
55+
the full list.
56+
57+
## Checks behind this release
58+
59+
The test suite (94 checks) runs with range and overflow checks and the heap
60+
tracer, and must end with no unfreed memory. CI also logs two of these
61+
clients into seihai-gserver, has the second see the first, and walks one
62+
through a level link.

0 commit comments

Comments
 (0)