|
| 1 | +# Graal 6.03 rev 7 for Linux (`G3D0511C`) |
| 2 | + |
| 3 | +The 6.03r7 client, rebuilt. The original read for this folder is the Linux |
| 4 | +x64 build of November 2012: one native C++ program, no launcher and no |
| 5 | +engine library. On the wire it keeps the gen-5 codec with its own token, |
| 6 | +no tamper check, no listserver and no licence file. This folder starts |
| 7 | +from `graal-5.00r7-G3D22067` and changes what the 6.x notes say differs. |
| 8 | +This is the 0.0.1 reproduction: hit or miss. |
| 9 | + |
| 10 | +The Windows 6.03r7 is the same release with its own token (`G3D0311C`) and |
| 11 | +`win` in its login line. It is not this folder. |
| 12 | + |
| 13 | +> **Not affiliated.** graal-delphi is an independent fan project. It is not |
| 14 | +> affiliated with, endorsed by, or connected to GraalOnline or |
| 15 | +> graalonline.com, Cyberjoueurs, or Stéphane Portha ("unixmad"). |
| 16 | +
|
| 17 | +## Sources |
| 18 | + |
| 19 | +From [graal_analysis](https://github.com/squirelworks/graal_analysis), not |
| 20 | +from decompiled code: |
| 21 | + |
| 22 | +| Area | Notes | |
| 23 | +|---|---| |
| 24 | +| Token, login line, framing, ids both ways | `protocol/v6x-clients.md` | |
| 25 | +| Ids in table form | `version-profiles/5.00-6.03.toml` | |
| 26 | +| Login mode, server warp, play (Windows 6.03r7 in the lab) | `protocol/v5v6-lab-play.md` | |
| 27 | +| Everything carried over | `../graal-5.00r7-G3D22067/README.md`, `../graal-3.153-G3D28015/README.md` | |
| 28 | + |
| 29 | +## What differs from the 5.00r7 rebuild |
| 30 | + |
| 31 | +| | 5.00r7 | 6.03r7 Linux (this folder) | |
| 32 | +|---|---|---| |
| 33 | +| Game token | `G3D22067` | `G3D0511C` | |
| 34 | +| Login line tail | `win` and three machine fields | `linux` and four machine fields | |
| 35 | +| Login mode | level drawn, no characters | no tiles and no characters (chests and image NPCs only) | |
| 36 | +| Long frames | none | 0xFFFF bytes or more: length 0xFFFF, then a u32be length | |
| 37 | +| Early flush | not traced (60000 bytes) | at 0x1000 bytes | |
| 38 | +| Server ids handled | 100 | 92: drops 41, 75, 132, 133, 165, 169, 171, 175, 181, 184, 193; adds 109, 111, 198 | |
| 39 | +| OSTYPE prop | `win` | `linux` (assumed from the login line) | |
| 40 | + |
| 41 | +The machine ids are, on the original, MD5 hashes of the `eth0` MAC and of |
| 42 | +the inode of `/etc`, an empty field, and the kernel release and version. |
| 43 | +The rebuild reads none of them and sends each as `""`. |
| 44 | + |
| 45 | +## Units |
| 46 | + |
| 47 | +As in 5.00r7, with the suffix `603`: `Protocol603`, `GraalClient`, |
| 48 | +`Adventure`, `Graal603.dpr`, `ListServer603`, `StartScreen603`, `RunMode`. |
| 49 | + |
| 50 | +## Running it |
| 51 | + |
| 52 | +Put `Graal603` in the root of a 6.03r7 install and start it with no |
| 53 | +arguments for the start screen. It finds the install's files from there, |
| 54 | +or from `graal-assets/6.03r7/` and `graal-assets/common/` next to it. |
| 55 | + |
| 56 | +Start asks a Seihai listserver for the server list (`listserver.txt` next |
| 57 | +to the program, else `listserver.graal.in` on 14922), since the rebuild |
| 58 | +cannot show the Login server's scripted list. The picked server's name |
| 59 | +becomes the client's server name, as if the Login server had already |
| 60 | +warped there, so the level and the player are drawn. |
| 61 | + |
| 62 | +``` |
| 63 | +GRAAL_PW=... Graal603 --server HOST:PORT --account NAME # as Login |
| 64 | +GRAAL_PW=... Graal603 --server HOST:PORT --account NAME --server-name Classic |
| 65 | +Graal603 --level some.nw # offline |
| 66 | +``` |
| 67 | + |
| 68 | +With `--server` and no `--server-name` the server is `Login`: no tiles and |
| 69 | +no characters are drawn until the server sends a 178. |
| 70 | + |
| 71 | +## Files it opens |
| 72 | + |
| 73 | +From the program's folder (or `--data`), then `graal-assets/6.03r7/`, then |
| 74 | +`graal-assets/common/`: |
| 75 | + |
| 76 | +- `pics1.png` (or `pics1.gif`) at the top or in `levels/tiles/`, where a |
| 77 | + 5.x/6.x install keeps it; `arrays.dat` (a 5.x/6.x install has none, so |
| 78 | + the built-in tile types are used) |
| 79 | +- `levels/` for levels, ganis and images; `levels/heads/`, `levels/bodies/`, |
| 80 | + `levels/swords/`, `levels/shields/`, `levels/hats/`, `levels/images/`, |
| 81 | + `levels/tiles/` and `levels/images/downloads/` (where the install keeps |
| 82 | + `sprites.png`) |
| 83 | +- `levels/offlinetutorial_b-2.nw` (or `.graal`) for Training, else `start.nw` |
| 84 | + (a 5.x/6.x install has no offline tutorial, so Training plays `start.nw`) |
| 85 | +- `listserver.txt` (optional) |
| 86 | + |
| 87 | +## Not yet, or not known |
| 88 | + |
| 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), 111 (`creationtime.dat`) and 198 are |
| 92 | + accepted and ignored; the rebuild writes no `creationtime.dat`. |
| 93 | +- 46 (ENTERLEVEL) on level entry, 162 (the ping answer), the base-file |
| 94 | + requests and the keep-alive 24 are not sent. |
| 95 | +- `GR-V1.05` levels and `GRPKG001` update packages. |
| 96 | +- The chat font (Tempus Sans ITC 24) and nickname colours by AP. |
| 97 | +- Whether 6.03r7 plays offline at all is not traced; Training keeps 3.153's. |
| 98 | +- No side-by-side run against the real 6.03r7; that is 0.0.2 work. |
| 99 | +- Everything still missing from the 5.00r7 rebuild. |
0 commit comments