Skip to content

Commit 270c4cd

Browse files
authored
Merge pull request #47 from squirelworks/claude/project-thread-rw1tge-601
graal-6.01r1-G3D0108A: 0.0.1 rebuild of the 6.01r1 Linux client
2 parents 21f0824 + be6b16d commit 270c4cd

12 files changed

Lines changed: 5659 additions & 0 deletions

File tree

‎graal-6.01r1-G3D0108A/README.md‎

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Graal 6.01 rev 1 for Linux (`G3D0108A`)
2+
3+
The 6.01r1 client, rebuilt. The original is the Linux build of September
4+
2011 (x64 and x86): one native C++ program, no launcher and no engine
5+
library. On the wire it keeps the gen-5 codec with its own token, no
6+
tamper check, no listserver and no licence file. This folder starts from
7+
`graal-6.03r7-G3D0511C` and changes what the 6.x notes say differs. 6.01r1
8+
was never run in the lab; where its behaviour is not read from the binary,
9+
the 6.03r7 lab run is taken to hold. This is the 0.0.1 reproduction: hit
10+
or miss.
11+
12+
> **Not affiliated.** graal-delphi is an independent fan project. It is not
13+
> affiliated with, endorsed by, or connected to GraalOnline or
14+
> graalonline.com, Cyberjoueurs, or Stéphane Portha ("unixmad").
15+
16+
## Sources
17+
18+
From [graal_analysis](https://github.com/squirelworks/graal_analysis), not
19+
from decompiled code:
20+
21+
| Area | Notes |
22+
|---|---|
23+
| Token, login line, framing, ids both ways | `protocol/v6x-clients.md` |
24+
| Login mode, server warp, play (Windows 6.03r7, standing in) | `protocol/v5v6-lab-play.md` |
25+
| Everything carried over | `../graal-6.03r7-G3D0511C/README.md`, `../graal-5.00r7-G3D22067/README.md` |
26+
27+
## What differs from the 6.03r7 rebuild
28+
29+
| | 6.03r7 Linux | 6.01r1 Linux (this folder) |
30+
|---|---|---|
31+
| Game token | `G3D0511C` | `G3D0108A` |
32+
| Server ids handled | 92 | 91: no 111 (`creationtime.dat`) |
33+
34+
Everything else is 6.03r7's: the login line ends with `linux` and four
35+
machine fields (sent as `""`), Login mode draws no tiles and no characters
36+
(taken from the 6.03r7 lab run), long frames, the flush at 0x1000 bytes,
37+
OSTYPE `linux`. 6.01r1 also does not send 160 (folder delete), which the
38+
rebuild never sends anyway.
39+
40+
seihai-core has no profile for `G3D0108A`, so `scripts/loopback.sh` now
41+
adds the build's own token to the test world's allowed versions.
42+
43+
## Units
44+
45+
As in 6.03r7, with the suffix `601`: `Protocol601`, `GraalClient`,
46+
`Adventure`, `Graal601.dpr`, `ListServer601`, `StartScreen601`, `RunMode`.
47+
48+
## Running it
49+
50+
Put `Graal601` in the root of a 6.01r1 install and start it with no
51+
arguments for the start screen. It finds the install's files from there,
52+
or from `graal-assets/6.01r1/` and `graal-assets/common/` next to it.
53+
54+
Start asks a Seihai listserver for the server list (`listserver.txt` next
55+
to the program, else `listserver.graal.in` on 14922), since the rebuild
56+
cannot show the Login server's scripted list. The picked server's name
57+
becomes the client's server name, as if the Login server had already
58+
warped there, so the level and the player are drawn.
59+
60+
```
61+
GRAAL_PW=... Graal601 --server HOST:PORT --account NAME # as Login
62+
GRAAL_PW=... Graal601 --server HOST:PORT --account NAME --server-name Classic
63+
Graal601 --level some.nw # offline
64+
```
65+
66+
With `--server` and no `--server-name` the server is `Login`: no tiles and
67+
no characters are drawn until the server sends a 178.
68+
69+
## Files it opens
70+
71+
From the program's folder (or `--data`), then `graal-assets/6.01r1/`, then
72+
`graal-assets/common/`:
73+
74+
- `pics1.png` (or `pics1.gif`) at the top or in `levels/tiles/`, where a
75+
5.x/6.x install keeps it; `arrays.dat` (a 5.x/6.x install has none, so
76+
the built-in tile types are used)
77+
- `levels/` for levels, ganis and images; `levels/heads/`, `levels/bodies/`,
78+
`levels/swords/`, `levels/shields/`, `levels/hats/`, `levels/images/`,
79+
`levels/tiles/` and `levels/images/downloads/` (where the install keeps
80+
`sprites.png`)
81+
- `levels/offlinetutorial_b-2.nw` (or `.graal`) for Training, else `start.nw`
82+
(a 5.x/6.x install has no offline tutorial, so Training plays `start.nw`)
83+
- `listserver.txt` (optional)
84+
85+
## Not yet, or not known
86+
87+
- Whether 6.01r1 draws tiles in Login mode: not recorded; 6.03r7's "no" is
88+
used.
89+
- The Login server's scripted GUI and GS2: 140 and 197 (scripts and the
90+
`GRESCR01` cache), 195 (gani scripts) and 190 are accepted and ignored.
91+
- 109 (probably a file redirect) and 198 are accepted and ignored.
92+
- 46 (ENTERLEVEL) on level entry, 162 (the ping answer), the base-file
93+
requests and the keep-alive 24 are not sent.
94+
- `GR-V1.05` levels and `GRPKG001` update packages.
95+
- The chat font (Tempus Sans ITC 24) and nickname colours by AP.
96+
- Whether 6.01r1 plays offline at all is not traced; Training keeps 3.153's.
97+
- No side-by-side run against the real 6.01r1; that is 0.0.2 work.
98+
- Everything still missing from the 6.03r7 rebuild.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Graal 6.01 rev 1 for Linux (G3D0108A)
2+
3+
The first rebuild of the Graal 6.01 rev 1 Linux client, in Delphi (Object
4+
Pascal). The original is a Linux program from 2011; 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) is not there yet.
7+
8+
> **Not affiliated.** graal-delphi is an independent fan project. It is not
9+
> affiliated with, endorsed by, or connected to GraalOnline or
10+
> graalonline.com, Cyberjoueurs, or Stéphane Portha ("unixmad").
11+
12+
These zips hold no original Graal code, graphics, sounds or levels. The
13+
program carries small original default graphics and a starter level of its
14+
own, so it runs as it is. Put it in the root of a 6.01r1 install you own
15+
(or point it at one with `--data DIR`) and the install's tiles, ganis,
16+
heads and bodies take their place. The shared `graal-assets/` folder next
17+
to the program works too (`graal-assets/6.01r1/`, then
18+
`graal-assets/common/`).
19+
20+
## Downloads
21+
22+
| Zip | Runs on | Window |
23+
|---|---|---|
24+
| `…-linux.zip` | Linux x86-64 | X11 |
25+
| `…-windows.zip` | Windows, 32-bit | GDI |
26+
27+
Each zip has `Graal601` (the client), `Test601` (its test suite) and the
28+
build's README.
29+
30+
## What works
31+
32+
- The start screen: nick name, Training, Start. Start fetches the server
33+
list from `listserver.txt` next to the program, or else
34+
`listserver.graal.in` on port 14922. Then account, password and Connect.
35+
- Login with `G3D0108A`, the platform `linux` and four empty machine
36+
fields; the language in its own frame; no tamper check.
37+
- The Login server: a server reached by its address alone is called
38+
Login, and there neither the tiles nor any characters are drawn, until
39+
the server moves the client on with a server warp. A server picked from
40+
the list plays at once.
41+
- Server warps: the client logs in again to the named host and port, under
42+
the new name.
43+
- Long frames (64 KB and more) both ways.
44+
- The first props with `linux` as the system name; movement sent every
45+
tick 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 and their cache; the scripted
53+
server list and account screens; chat and its font; layered levels; update
54+
packages. See the build's README for the full list.
55+
56+
## Checks behind this release
57+
58+
The test suite (97 checks) runs with range and overflow checks and the heap
59+
tracer, and must end with no unfreed memory. CI also logs two of these
60+
clients into seihai-gserver, has the second see the first, and walks one
61+
through a level link.

0 commit comments

Comments
 (0)