From 71d2c220282d81b8ce448a1b3daed188d6171d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sat, 23 Oct 2010 04:02:15 +0200 Subject: [PATCH] doc: Add the documentation for most of the commands reviewed so far. --- doc/protocol/README | 1 + doc/protocol/commands.txt | 418 +++++++++++++++++++++++++++++++++ doc/protocol/commands/010b.txt | 30 +++ doc/protocol/commands/0111.txt | 32 +++ doc/protocol/commands/0115.txt | 40 ++++ doc/protocol/commands/0117.txt | 26 ++ doc/protocol/commands/0200.txt | 26 ++ doc/protocol/commands/0202.txt | 25 ++ doc/protocol/commands/0203.txt | 19 ++ doc/protocol/commands/0204.txt | 23 ++ doc/protocol/commands/0205.txt | 30 +++ doc/protocol/commands/0208.txt | 19 ++ doc/protocol/commands/020b.txt | 20 ++ doc/protocol/commands/020c.txt | 16 ++ doc/protocol/commands/020d.txt | 20 ++ doc/protocol/commands/020e.txt | 21 ++ doc/protocol/commands/020f.txt | 20 ++ doc/protocol/commands/0210.txt | 19 ++ doc/protocol/commands/0215.txt | 19 ++ doc/protocol/commands/0216.txt | 22 ++ doc/protocol/commands/0217.txt | 16 ++ doc/protocol/commands/0219.txt | 21 ++ doc/protocol/commands/021b.txt | 17 ++ doc/protocol/commands/021c.txt | 17 ++ doc/protocol/commands/021d.txt | 18 ++ doc/protocol/commands/021e.txt | 28 +++ doc/protocol/commands/021f.txt | 20 ++ doc/protocol/commands/0222.txt | 27 +++ doc/protocol/commands/0223.txt | 33 +++ doc/protocol/commands/0225.txt | 23 ++ doc/protocol/commands/0226.txt | 19 ++ doc/protocol/commands/0227.txt | 18 ++ doc/protocol/commands/0228.txt | 24 ++ doc/protocol/commands/0230.txt | 15 ++ doc/protocol/commands/0231.txt | 21 ++ doc/protocol/commands/0236.txt | 17 ++ doc/protocol/commands/023f.txt | 3 + doc/protocol/commands/0304.txt | 49 ++++ doc/protocol/commands/0806.txt | 20 ++ doc/protocol/commands/0807.txt | 25 ++ doc/protocol/commands/0808.txt | 18 ++ doc/protocol/commands/080d.txt | 17 ++ doc/protocol/commands/080e.txt | 34 +++ doc/protocol/commands/080f.txt | 17 ++ doc/protocol/commands/0811.txt | 23 ++ doc/protocol/commands/0812.txt | 17 ++ doc/protocol/commands/0813.txt | 19 ++ doc/protocol/commands/0814.txt | 16 ++ doc/protocol/commands/0815.txt | 16 ++ doc/protocol/commands/0818.txt | 22 ++ doc/protocol/commands/0a05.txt | 17 ++ doc/protocol/commands/0a06.txt | 21 ++ doc/protocol/commands/0a10.txt | 17 ++ doc/protocol/commands/0a11.txt | 22 ++ doc/protocol/commands/0c00.txt | 28 +++ doc/protocol/commands/0c01.txt | 18 ++ doc/protocol/commands/0c05.txt | 18 ++ doc/protocol/commands/0c06.txt | 23 ++ doc/protocol/commands/0c07.txt | 20 ++ doc/protocol/commands/0c08.txt | 19 ++ doc/protocol/commands/0c0d.txt | 17 ++ doc/protocol/commands/0c0e.txt | 16 ++ doc/protocol/commands/0c0f.txt | 18 ++ doc/protocol/commands/0c10.txt | 26 ++ doc/protocol/commands/0d02.txt | 19 ++ doc/protocol/commands/0d05.txt | 22 ++ doc/protocol/commands/0d06.txt | 16 ++ doc/protocol/commands/0d07.txt | 22 ++ doc/protocol/commands/1006.txt | 37 +++ doc/protocol/commands/1007.txt | 18 ++ doc/protocol/commands/100e.txt | 32 +++ doc/protocol/commands/1020.txt | 17 ++ doc/protocol/commands/1022.txt | 19 ++ doc/protocol/commands/1204.txt | 27 +++ doc/protocol/commands/1500.txt | 27 +++ doc/protocol/commands/1705.txt | 17 ++ doc/protocol/commands/1707.txt | 18 ++ doc/protocol/commands/1709.txt | 17 ++ doc/protocol/commands/170b.txt | 17 ++ doc/protocol/commands/1710.txt | 18 ++ doc/protocol/commands/1711.txt | 30 +++ doc/protocol/commands/1a01.txt | 52 ++++ doc/protocol/commands/1a02.txt | 30 +++ doc/protocol/commands/1a03.txt | 26 ++ doc/protocol/commands/1a07.txt | 25 ++ doc/protocol/glossary.txt | 97 ++++++++ 86 files changed, 2359 insertions(+) create mode 100644 doc/protocol/README create mode 100644 doc/protocol/commands.txt create mode 100644 doc/protocol/commands/010b.txt create mode 100644 doc/protocol/commands/0111.txt create mode 100644 doc/protocol/commands/0115.txt create mode 100644 doc/protocol/commands/0117.txt create mode 100644 doc/protocol/commands/0200.txt create mode 100644 doc/protocol/commands/0202.txt create mode 100644 doc/protocol/commands/0203.txt create mode 100644 doc/protocol/commands/0204.txt create mode 100644 doc/protocol/commands/0205.txt create mode 100644 doc/protocol/commands/0208.txt create mode 100644 doc/protocol/commands/020b.txt create mode 100644 doc/protocol/commands/020c.txt create mode 100644 doc/protocol/commands/020d.txt create mode 100644 doc/protocol/commands/020e.txt create mode 100644 doc/protocol/commands/020f.txt create mode 100644 doc/protocol/commands/0210.txt create mode 100644 doc/protocol/commands/0215.txt create mode 100644 doc/protocol/commands/0216.txt create mode 100644 doc/protocol/commands/0217.txt create mode 100644 doc/protocol/commands/0219.txt create mode 100644 doc/protocol/commands/021b.txt create mode 100644 doc/protocol/commands/021c.txt create mode 100644 doc/protocol/commands/021d.txt create mode 100644 doc/protocol/commands/021e.txt create mode 100644 doc/protocol/commands/021f.txt create mode 100644 doc/protocol/commands/0222.txt create mode 100644 doc/protocol/commands/0223.txt create mode 100644 doc/protocol/commands/0225.txt create mode 100644 doc/protocol/commands/0226.txt create mode 100644 doc/protocol/commands/0227.txt create mode 100644 doc/protocol/commands/0228.txt create mode 100644 doc/protocol/commands/0230.txt create mode 100644 doc/protocol/commands/0231.txt create mode 100644 doc/protocol/commands/0236.txt create mode 100644 doc/protocol/commands/023f.txt create mode 100644 doc/protocol/commands/0304.txt create mode 100644 doc/protocol/commands/0806.txt create mode 100644 doc/protocol/commands/0807.txt create mode 100644 doc/protocol/commands/0808.txt create mode 100644 doc/protocol/commands/080d.txt create mode 100644 doc/protocol/commands/080e.txt create mode 100644 doc/protocol/commands/080f.txt create mode 100644 doc/protocol/commands/0811.txt create mode 100644 doc/protocol/commands/0812.txt create mode 100644 doc/protocol/commands/0813.txt create mode 100644 doc/protocol/commands/0814.txt create mode 100644 doc/protocol/commands/0815.txt create mode 100644 doc/protocol/commands/0818.txt create mode 100644 doc/protocol/commands/0a05.txt create mode 100644 doc/protocol/commands/0a06.txt create mode 100644 doc/protocol/commands/0a10.txt create mode 100644 doc/protocol/commands/0a11.txt create mode 100644 doc/protocol/commands/0c00.txt create mode 100644 doc/protocol/commands/0c01.txt create mode 100644 doc/protocol/commands/0c05.txt create mode 100644 doc/protocol/commands/0c06.txt create mode 100644 doc/protocol/commands/0c07.txt create mode 100644 doc/protocol/commands/0c08.txt create mode 100644 doc/protocol/commands/0c0d.txt create mode 100644 doc/protocol/commands/0c0e.txt create mode 100644 doc/protocol/commands/0c0f.txt create mode 100644 doc/protocol/commands/0c10.txt create mode 100644 doc/protocol/commands/0d02.txt create mode 100644 doc/protocol/commands/0d05.txt create mode 100644 doc/protocol/commands/0d06.txt create mode 100644 doc/protocol/commands/0d07.txt create mode 100644 doc/protocol/commands/1006.txt create mode 100644 doc/protocol/commands/1007.txt create mode 100644 doc/protocol/commands/100e.txt create mode 100644 doc/protocol/commands/1020.txt create mode 100644 doc/protocol/commands/1022.txt create mode 100644 doc/protocol/commands/1204.txt create mode 100644 doc/protocol/commands/1500.txt create mode 100644 doc/protocol/commands/1705.txt create mode 100644 doc/protocol/commands/1707.txt create mode 100644 doc/protocol/commands/1709.txt create mode 100644 doc/protocol/commands/170b.txt create mode 100644 doc/protocol/commands/1710.txt create mode 100644 doc/protocol/commands/1711.txt create mode 100644 doc/protocol/commands/1a01.txt create mode 100644 doc/protocol/commands/1a02.txt create mode 100644 doc/protocol/commands/1a03.txt create mode 100644 doc/protocol/commands/1a07.txt create mode 100644 doc/protocol/glossary.txt diff --git a/doc/protocol/README b/doc/protocol/README new file mode 100644 index 0000000..a541f6f --- /dev/null +++ b/doc/protocol/README @@ -0,0 +1 @@ +All the files in this folder are research released in the public domain. diff --git a/doc/protocol/commands.txt b/doc/protocol/commands.txt new file mode 100644 index 0000000..124b00f --- /dev/null +++ b/doc/protocol/commands.txt @@ -0,0 +1,418 @@ +[ Research Status / Importance / Occurences / Command / Channels / Description ] + +Characters + +!* C 6 0101 B-- +WIP C 7 0102 BCS animation state change (movement, sit, stand up, trigger unicube, talk to npc...) +!* C 6 0104 B-- sit position change (floor and chairs); goggle position change +WIP A 7 0105 -CS weapon/armor equip, item use/drop and more; request/reply + ? 6 0106 -CS +!* C 4 0107 B-- sit on chair, get on vehicle + ? 6 0108 --S +! ? 4 0109 -C- weapon/item palette change +WIP B 5 010a -CS shop listing request/reply +OK ? 5 010b -C- player enter area (probably broadcast spawn here) +WIP A 6 010d --S character details (excluding location); similar to 0201 +!* C 7 010f B-- talk to npc; set trap, boom trap +WIP A 5 0110 -C- triggered event (death, type change, online status change...) +OK A 6 0111 --S trigger event + C 3 0112 --S +!* B 4 0113 --S types capabilities list +OK A 7 0115 --S update EXP/money... +OK A 5 0117 --S revive + ? 5 0119 -CS (probably make the RCSM shoot) + +System + +OK A 5 0200 --S zone init +WIP A 6 0201 --S character details (including location); similar to 010d +OK A 5 0202 --S hello +OK A 5 0203 --S spawn character +OK B 5 0204 --S unspawn character +OK A 6 0205 --S load map (related to 0806) +OK A 5 0208 --S end of loading (related to 0808) +OK A 4 020b -C- character selection: select slot +OK ? 5 020c -C- (despite the channel, sent by the server; channel 2) +OK A 4 020d -C- game auth: token authentication request +OK A 5 020e --S quest file transfer +OK A 5 020f --S zone file transfer +OK C 5 0210 --S current unix time +OK C 5 0215 --S +OK A 5 0216 --S login: forward to game server +OK A 5 0217 -C- login: game server address request +OK ? 5 0219 -C- login: password authentication request +OK A 5 021b --S (character selection: end) +OK ? 5 021c -C- (character selection: end) reply +OK A 4 021d -C- uni cube request +OK A 4 021e --S uni cube reply +OK A 4 021f -C- uni cube selection +! ? 4 0220 -C- (uni cube related, sent by the client? thought it was sent by the server) +OK A 5 0222 --S current uni details +OK ? 5 0223 --S login: password authentication success +! ? 3 0224 --S disconnect user, reason given +OK ? 5 0225 --S login: motd reply +OK A 5 0226 -C- login: motd request (jp only): same as 023f (apparently uses channel 3) +OK ? 5 0227 -C- login: whether the motd (TOS on official) was accepted +OK ? 3 0228 --S display a notice: global message; rare mission get message +!* ? 5 022c --S (probably related to parties or NPCs) +-- - - 022d --S gameguard ping +-- - - 022e -C- gameguard pong +OK ? 4 0230 --S (universe change related, including room doors) +OK A 2 0231 --S send user to website (used on wrong password) +WIP A 5 0233 --S list of other characters in zone/lobby/area, whichever +! ? 3 0234 -C- (probably related to 0235; probably partner card related) + ? 3 0235 --S (probably related to 0234; probably partner card related; sends 1 GID and 4 card-like character infos) +OK A 5 0236 --S start zone handler (load objects and enable them) + ? 4 0237 -C- + ? 4 0238 --S (probably related to 0237) +OK A 5 023f -C- login: motd request (us only): same as 0226 + ? 3 0245 --S +! ? 5 0246 --S add or replace text strings + ? 5 024b -C- + ? ? 024f -C- (gam/gas dialog request; jp only) + ? ? 0250 --S (gam/gas dialog reply; jp only) + ? ? 025e --S (lumilass-related; jp only) + +Chat + +! B 2 0302 -C- shortcuts change +! B 5 0303 --S shortcuts list +OK A 6 0304 -CS message +! C 4 0305 --S sound + +Missions + +!* C 7 0402 -C- enemy event (safely ignored?) +!* C 6 0404 -C- object event + +Movements + +!** A 8 0503 B-S position change +!* C 7 050f B-- camera change +!* C 7 0514 B-- stay still + +Area/State change + +OK ? 5 0806 -C- (related to 0808) +OK A 5 0807 -C- area change +OK ? 5 0808 -C- (related to 0806) +WIP ? 4 080c -C- npc force invite-- NO, more like invite npc specific for this quest (in the file), probably kills NPC on zone change too (but not map change apparently) +OK ? 5 080d -C- (area change successful notice?) +OK C 5 080e -C- client/platform/chosen entrance info +OK ? 4 080f -C- (npc related or story related) +OK A 4 0811 -C- enter counter +OK A 4 0812 -C- leave counter +OK A 3 0813 -C- npc invite +OK ? 4 0814 -C- (mission area change successful notice?) +OK ? 5 0815 -C- (non-mission area change successful notice?) +OK C 4 0818 -C- cpu/gpu info + +Items + + ? 5 0a01 --S + ? 5 0a02 --S + ? 3 0a03 --S +* A 4 0a04 --S npc inventory +OK A 5 0a05 --S (player inventory related; the LID is changed right before this command, or right before the previous 0215 command in the case of missions) +OK A 5 0a06 --S player inventory: list of unique items id + ? 4 0a07 -CS (view stats/equip) + ? 3 0a08 --S +** C 5 0a09 -CS (probably: receive item) +!* A 5 0a0a --S player inventory + ? 2 0a0b --S + ? 4 0a0e --S + ? 4 0a0f --S +OK C 5 0a10 -C- item description request +OK C 5 0a11 --S item description reply + +Packet fragments + +OK A 6 0b03 --- fragment (no channel) +OK A 6 0b05 --- reception confirmed (no channel) + +Quests + +OK A 5 0c00 --S quest init +OK A 4 0c01 -C- mission start request +!* A 4 0c02 --S mission start reply (no 1020 or 1015 when rejected) +OK A 4 0c05 -C- counter quest files pack request +OK A 4 0c06 --S counter quest files pack transfer +OK A 3 0c07 -C- lobby transport request +OK A 3 0c08 --S lobby transport reply +* A 4 0c09 --S trial start, end + ? 5 0c0a --S + ? 4 0c0b --S + ? 4 0c0c --S +OK ? 4 0c0d -C- (mission start and mission area change related) +OK A 3 0c0e -C- mission abort +OK A 4 0c0f -C- counter options request +OK A 4 0c10 --S counter options reply +!* ? 3 0c11 -C- (story mission related; probably related to 0c12) +!* ? 3 0c12 --S (probably related to 0c11) + ? 3 0c13 -C- (probably related to 0c14) + ? 3 0c14 -C- (probably related to 0c13) + +Account/Flags + +WIP A 5 0d01 --S character selection: selected character details +OK A 2 0d02 -C- character selection: create character +!* A 4 0d03 --S character selection: character list reply +!** C 5 0d04 -CS set flag +OK C 4 0d05 --S system flags list +OK A 4 0d06 -C- character selection: character list request +OK A 3 0d07 -C- options change +! ? 1 0d08 -C- (gbr info request, 1 per dialog) + ? 1 0d09 --S (gbr info reply 2, 4, 5; during GBR only) +! ? 1 0d0a --S (gbr info reply 1, 3; many GBR 0d04 sent by the server before that; also sent when not in GBR) + +Hits + +WIP A 6 0e00 -C- hit +! ? 3 0e01 -C- +* A 7 0e07 --S hit reply + ? 4 0e08 --S + +Zones + +!* C 2 0f00 -C- vehicle init +!* C 2 0f02 -C- enter vehicle + ? 4 0f03 -C- (vehicle move?) +! ? 1 0f04 -C- +! ? 1 0f05 -C- (vehicle related) +(0f06 vehicle related?) +!* C 2 0f07 -C- (enter vehicle related) +! ? 2 0f09 -C- (vehicle related) +WIP A 6 0f0a -C- object event + +Parties + +! ? 3 1002 -C- (leave party request) + ? 3 1003 --S +* A 4 1004 --S join event (add character info to the left of the screen) +!* ? 5 1005 --S +OK A 5 1006 --S trigger party event +OK ? 4 1007 -C- remove member request + ? 3 100a -CS (invite other player to party; received invite) + ? 3 100c -CS +OK A 5 100e --S character location +* ? 4 100f --S + ? 4 1011 --S + ? 2 1013 -C- +!* A 4 1015 --S mission start: quest file transfer (for mission details window) +* ? 4 1016 -CS (probably related to NPCs) + ? 6 1017 -CS (related to NPC removal from party in story mission) +* ? 6 1019 -CS +* ? 3 101a --S + ? 3 101b -C- + ? 3 101c --- (channel 5; accept party invite) + C 1 101d -C- (set invite block) + ? 3 101e --S + ? 6 101f --S character level and hp update (on the left of the screen); sometimes sent in other places +OK A 4 1020 --S (mission start related) +OK ? 6 1022 --S character hp update (on the left of the screen) + +Bosses + +! ? 4 1101 -C- + ? 3 1102 -C- + ? 4 1103 -C- + ? 4 1104 --S + ? 3 1105 -C- +* ? 3 1106 -C- + ? 3 1107 -C- + ? 3 1108 --S + ? 3 1109 --S + ? 2 110a --S + ? 2 110b --S + ? 4 110c --S + ? 3 110d --S +* ? 4 110e --S + ? 4 110f --S + ? 4 1110 --S + ? 4 1111 --S +* ? 3 1112 -C- (probably related to 1113) +* ? 3 1113 --S (probably related to 1112) + ? 3 1114 --S + ? 2 1116 --S + ? 1 1117 --S + ? 2 1118 --S + ? 4 1119 --S + ? 3 111b --S + ? 3 111c --S + ? 2 111d --S + ? 2 111e --S + ? 3 111f --S + ? 4 1120 --S + ? 4 1121 --S + ? 4 1122 --S + ? 4 1123 -C- + ? 2 1124 --S + +Instances state + + ? 7 1201 --S +* A 6 1202 --S +OK A 5 1204 --S +* A 6 1205 --S block/map event +* A 5 1206 --S +* A 4 1207 --S +* C 3 1208 --S (vehicle init related) +* C 3 120a --S (enter vehicle related) + ? 5 120b --S + ? 1 120c --S +* C 3 120f --S (enter vehicle related; reply for 0f07) + ? 1 1210 --S +* A 6 1211 --S (object event related) +* A 5 1212 --S +* A 6 1213 --S object state on/off +* A 3 1215 --S (boss gate related) +** C 3 1216 --- (airboard rally race start; channel 0) + +Player rooms + + C 4 1304 -C- + C 2 1305 -C- +* C 4 1309 --S + C 4 130a --S + C 2 130b -C- + C 2 130c --S + C 6 130d -C- + C 6 130e --S + C 5 130f -C- + C 3 1310 --S + C 3 1312 --S + C 3 1313 -C- + C 3 1314 --S + C 2 1316 --S + C 5 1318 --S + C 2 1319 -C- + C 2 131a -C- + C 6 131b --S + C 3 131c --S + C 5 131e --S + C 3 131f --S + C 3 1320 --S + C 2 1321 --S + C 4 1323 --S + C 5 1324 --S + C 3 1325 --S + C 3 1326 --S + C 5 1327 --S + C 4 1328 -C- + C 3 1329 --S + C 2 132a -C- + C 4 132b --S + C 3 132c --S + C 4 132d -C- + C 3 132e --S (probably related to 132f) + C 3 132f -C- (probably related to 132e) + C 4 1330 -C- + C 2 1331 --S +* C 4 1332 --S + C 3 1333 --S + C 4 1334 -C- + C 4 1335 --S + C 4 1336 --S + C 4 1337 -C- (probably related to 1338) + C 4 1338 --S (probably related to 1337) + C 3 1339 --S + +??? + + ? 3 1402 -C- (occurs in 1025012, Sakura Blast A 2nd route) + ? 2 1403 -C- + ? 3 1410 --S + +Partner cards/Simple mail + +OK A 5 1500 --S player's own partner card +!* B 5 1501 --S partner cards list +! ? 3 1503 --S (card received) +! ? 3 1504 -C- (card accepted) +! C 4 1506 -C- (partner cards online status request) +! C 4 1507 --S (partner cards online status reply; whether cards are online or offline) +! ? 3 1508 -C- (edit partner card; self only?) +! ? 3 1509 --S (add card to the list) +! ? 4 150b -C- send simple mail +! ? 4 150d -C- (mark simple mail as read?) +! ? 4 150f --S receive simple mail +!* B 5 1512 --S blacklist cards list +! ? 2 1513 -C- (add to blacklist) +! ? 3 1514 -C- (send partner card) +! ? 4 1515 -C- (probably related to 1516) + ? 4 1516 --S (probably related to 1515) + +NPC characters + +* A 4 1601 --S (probably npc AI parameters) +!* A 5 1602 --S player's available NPC and PM info +! ? 3 1603 -C- (receive npc card related; see tutorial) +! ? 2 1604 -C- (sort priority related) +! ? 3 1605 -C- (receive npc card related; see tutorial; sort priority related) + +Counters + +WIP ? 4 1701 -CS parties list request/reply + ? 3 1702 -CS (probably join party request/reply) +OK B 4 1705 -C- party info recap request +!* B 4 1706 -CS party info recap change(C) reply(S) +OK C 4 1707 -C- menu event; select mission +OK B 4 1709 -C- party settings request +!* B 4 170a -CS party settings change(C) reply(S) +OK C 4 170b -C- counter background location points request +WIP C 4 170c --S counter background location points reply (9 of them total) +! ? 3 170d -C- (probably related to 170e) + ? 3 170e --S (probably related to 170d) + ? 4 170f --S (probably reply to 1707, but not all the time?) +OK C 4 1710 -C- counter background request +OK C 4 1711 --S counter background reply + +??? + +! ? 2 1803 -C- (occurs in the AOTI story mission 1231022) + +Trade + + ? 3 1901 -CS (trade request) + ? 3 1902 --S + ? 3 1903 -C- + ? 3 1904 --S + +Dialogs + +OK A 5 1a01 -C- dialog request +OK B 4 1a02 --S dialog reply: standard +OK B 3 1a03 --S dialog reply: lumilass options +!* A 4 1a04 --S dialog reply: pp cube +! ? 3 1a05 -C- (lumilass: bought something) +OK B 4 1a07 --S dialog reply: types + ? 3 1a08 -C- (shop delivery request) + ? 3 1a09 --S (shop delivery reply) + +Casino/Temple + +! C 4 1d01 -C- (casino shop/coins request) +! C 3 1d04 --S +! C 3 1d05 --S +! C 4 1d06 -C- (casino roulette bet request) +! C 5 1d07 --S +! C 2 1d08 -C- (luck lady request) +! C 2 1d09 --S (luck lady reply) +! C 3 1d0a -C- (probably related to 1d0b; offering box) +! C 3 1d0b --S (probably related to 1d0a) +! C 3 1d0c -C- (casino enter; slot machine request) +! C 3 1d0d -C- +! C 4 1d0e -C- +! C 3 1d0f --S + C 4 1d10 --S + C 3 1d11 --S + C 4 1d12 --S + C 3 1d13 --S + C 3 1d16 --S + C 3 1d17 --S + C 3 1d18 --S + +13 WIP 85 OK 336 Total + +! means the command has already been analyzed, at least partially +* means the command is already found somewhere in the server but needs to be reviewed diff --git a/doc/protocol/commands/010b.txt b/doc/protocol/commands/010b.txt new file mode 100644 index 0000000..0662799 --- /dev/null +++ b/doc/protocol/commands/010b.txt @@ -0,0 +1,30 @@ +010b + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +FromGID:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +FromGID:32 +PartyPosOrLID:32 +0:16 IntDir:16 +PosX:32 +PosY:32 +PosZ:32 +0:32 +0:32 +QuestID:32 +ZoneID:32 +MapID:32 +EntryID:32 + +Size: 0x5c +Channel: 2 +FromGID: should be the same in both the header and the body (even for NPC characters) +IntDir: character direction as a float converted to int:16 diff --git a/doc/protocol/commands/0111.txt b/doc/protocol/commands/0111.txt new file mode 100644 index 0000000..d8c01dc --- /dev/null +++ b/doc/protocol/commands/0111.txt @@ -0,0 +1,32 @@ +0111 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +TargetGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +TargetGID:32 +TargetLID:32 +EventID:32 +Param:32 + +Size: 60 +Channel: 3 +TargetGID: player or npc +DestTypeID: 00011300 +EventID: 2 3 4 5 6 7 +Param: only for EventID 3 and 7 + +Events: + 2: ? ; Param=0 + 3: red screen of death; Param: whether to ask if the player wants to go back to lobby, 0 or 1 + 4: healing pad aura + sound; Param=0 + 5: ? ; Param=0 + 6: ? ; Param=0 ; sent for lobby area change just before 010d + 7: EXP FULL message; Param is the enemy TargetID that triggered this diff --git a/doc/protocol/commands/0115.txt b/doc/protocol/commands/0115.txt new file mode 100644 index 0000000..a2070c8 --- /dev/null +++ b/doc/protocol/commands/0115.txt @@ -0,0 +1,40 @@ +0115 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +TargetGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +TargetGID:32 +TargetLID:32 +EnemyTargetID:32 +Level:32 +BlastBar:16 Luck:8 _UnknownJ:8 +0:32 +EXP:32 +0:32 +Money:32 +PlayTime:32 +for npc characters: + 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 + 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 01000000:32 + 4e4f4630:32 08000000:32 00000000:32 00000000:32 4e454e44:32 +for player characters: + _UnknownK:32 _UnknownL:32 0:32 0:32 0:32 + ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 + ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 + ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 + ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 ClassLevelAndEXP:32 + +Size: 168 +Channel: 3 +DestTypeID: 00011300 +TargetGID: either player or npc +EnemyTargetID: presumably the TargetID of the enemy that got you leveled +Level and following: seems to take the same format as 0201, refer there for details diff --git a/doc/protocol/commands/0117.txt b/doc/protocol/commands/0117.txt new file mode 100644 index 0000000..0d175f4 --- /dev/null +++ b/doc/protocol/commands/0117.txt @@ -0,0 +1,26 @@ +0117 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +TargetGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +TargetGID:32 +TargetLID:32 +SE1:32 SE2:32 +HP:32 +0:32 + +Size: 68 +Channel: 3 +TargetGID: either player or npc +DestTypeID: 00011300 +SE1: 00000000 or 00000200(stay down) or 00001000(no idea); SE part 1 +SE2: various; SE part 2 +HP: how many HP to revive the player with diff --git a/doc/protocol/commands/0200.txt b/doc/protocol/commands/0200.txt new file mode 100644 index 0000000..bcb3bc2 --- /dev/null +++ b/doc/protocol/commands/0200.txt @@ -0,0 +1,26 @@ +0200 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +LID:16 ZoneID:16 +NbPlayers:32 +Var:320 + +Size: always 5c +TypeID: always 00011300 +LID: same as in both places; probably the player's new LID after entering this zone +ZoneID: 0 1 2 3 4 5 6 7 8 9 10 11 32; I now have doubt over whether this is a ZoneID +NbPlayers: many values from 0 to more than 255; number of players in this zone, starts at 1 (self) - LID is supposed to stay below that +Var: either of + ffffffff 00040000 00000000 00000000 00000000 00000000 00000000 00140000 ffffffff ffffffff + ffffffff 06000000 02000000 00000000 00000000 40000000 00010000 00010000 ffffffff ffffffff + ffffffff 06000500 01000000 00000000 00000000 00040000 00010000 00140000 ffffffff ffffffff diff --git a/doc/protocol/commands/0202.txt b/doc/protocol/commands/0202.txt new file mode 100644 index 0000000..b8a989c --- /dev/null +++ b/doc/protocol/commands/0202.txt @@ -0,0 +1,25 @@ +0202 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +SessionID:32 +0:1024 + +Size: 0xb0 +Channel: 3 +SessionID: like GID except typically only temporary; apparently official use the same counter for NPCs and for these SessionID +0:1024: can also contain an error message, though details are limited on that; it's similar to 0223 though + +The following format will display an error: + 0:32, 3:32/little, 0:48, Len:16/little, Error/binary, 0:Padding + +The server should disconnect the client right after sending that command if an error has been sent. diff --git a/doc/protocol/commands/0203.txt b/doc/protocol/commands/0203.txt new file mode 100644 index 0000000..1232046 --- /dev/null +++ b/doc/protocol/commands/0203.txt @@ -0,0 +1,19 @@ +0203 + +Size:32 +Command:16 Channel:8 0:8 +DestLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +TargetGID:32 +TargetLID:32 + +Size: 52 +Channel: 3 +DestTypeID: 00011300 diff --git a/doc/protocol/commands/0204.txt b/doc/protocol/commands/0204.txt new file mode 100644 index 0000000..328fb7d --- /dev/null +++ b/doc/protocol/commands/0204.txt @@ -0,0 +1,23 @@ +0204 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +CharTypeID:32 +CharGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +CharGID:32 +CharLID:32 +_UnknownC:32 + +Size: 0x38 +Channel: 3 +CharTypeID: 00001200 for players, 00001d00 for NPCs +CharGID: both NPC and players +DestTypeID: 00011300 +_UnknownC: seems to be an LID that isn't either of DestLID or CharLID; should be the total number of players in the zone after the removal diff --git a/doc/protocol/commands/0205.txt b/doc/protocol/commands/0205.txt new file mode 100644 index 0000000..070df3a --- /dev/null +++ b/doc/protocol/commands/0205.txt @@ -0,0 +1,30 @@ +0205 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +ffffffff:32 +ZoneID:32 +MapID:32 +EntryID:32 +AreaNb:32 +PlayerLID:16 _UnknownF:8 IsSeasonal:8 + +TypeID: always 00011300 +ZoneID: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 20 +MapID: 313 of them +EntryID: 0 1 2 3 4 5 6 7 8 10 11 12 13 14 20 21 22 23 32767 +AreaNb: odd value, starts at 1, incremented after sending this command; replied by 0806 +PlayerLID: LID of the related player +_UnknownF: sometimes 1 +IsSeasonal: 0 otherwise + +not sure how AreaNb works when 0205 is sent for spawning other players diff --git a/doc/protocol/commands/0208.txt b/doc/protocol/commands/0208.txt new file mode 100644 index 0000000..af7c737 --- /dev/null +++ b/doc/protocol/commands/0208.txt @@ -0,0 +1,19 @@ +0208 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +AreaNb:32 + +Size: 48 +Channel: 3 +DestTypeID: 00011300 +AreaNb: even value, starts at 2 following the first 0205 sent, incremented after sending this command; replied by 0808 diff --git a/doc/protocol/commands/020b.txt b/doc/protocol/commands/020b.txt new file mode 100644 index 0000000..1d2abfc --- /dev/null +++ b/doc/protocol/commands/020b.txt @@ -0,0 +1,20 @@ +020b + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +Slot:32 +0:8 BackToPreviousField:8 0:16 + +Size: 52 +Channel: 2 +Slot: character save slot +BackToPreviousField: if any, whether to go back to the previous field the character was in diff --git a/doc/protocol/commands/020c.txt b/doc/protocol/commands/020c.txt new file mode 100644 index 0000000..3886ded --- /dev/null +++ b/doc/protocol/commands/020c.txt @@ -0,0 +1,16 @@ +020c + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2, despite being sent by the server diff --git a/doc/protocol/commands/020d.txt b/doc/protocol/commands/020d.txt new file mode 100644 index 0000000..fac88f1 --- /dev/null +++ b/doc/protocol/commands/020d.txt @@ -0,0 +1,20 @@ +020d + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +AuthGID:32 +AuthKey:32 +0:32 +0:32 + +Size: 60 +Channel: 2 diff --git a/doc/protocol/commands/020e.txt b/doc/protocol/commands/020e.txt new file mode 100644 index 0000000..f5936ff --- /dev/null +++ b/doc/protocol/commands/020e.txt @@ -0,0 +1,21 @@ +020e + +Size:32 +Command:16 Channel:8 0:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +FileSize:32 +_UnknownA:32 +File/binary +0:32 + +Size: variable, depends on File +Channel: 3 +_UnknownA: odd value but always in the same region; maybe the addition of all values in the file or something? diff --git a/doc/protocol/commands/020f.txt b/doc/protocol/commands/020f.txt new file mode 100644 index 0000000..83c0ec2 --- /dev/null +++ b/doc/protocol/commands/020f.txt @@ -0,0 +1,20 @@ +020f + +Size:32 +Command:16 Channel:8 0:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +SetID:8 SeasonID:8 0:16 +FileSize:32 +File:N + +Size: depends on FileSize +SetID: which set file to open (0 to N - 1) +SeasonID: what season to load, if any; 255 otherwise diff --git a/doc/protocol/commands/0210.txt b/doc/protocol/commands/0210.txt new file mode 100644 index 0000000..c440430 --- /dev/null +++ b/doc/protocol/commands/0210.txt @@ -0,0 +1,19 @@ +0210 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +0:32 +UnixTime:32 + +Size: 52 +TypeID: 00011300 +UnixTime: current unix time diff --git a/doc/protocol/commands/0215.txt b/doc/protocol/commands/0215.txt new file mode 100644 index 0000000..2483d24 --- /dev/null +++ b/doc/protocol/commands/0215.txt @@ -0,0 +1,19 @@ +0215 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +_UnknownC:32 + +Size: 0x30 +Channel: 3 +TypeID: always 00011300 +_UnknownC: 0 1 2 3 4 5 ffffffff (PartyPos? Leader's PartyPos?) diff --git a/doc/protocol/commands/0216.txt b/doc/protocol/commands/0216.txt new file mode 100644 index 0000000..20277ef --- /dev/null +++ b/doc/protocol/commands/0216.txt @@ -0,0 +1,22 @@ +0216 + +Size:32 +Command:16 Channel:8 0:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +IP:32 +Port:16 0:16 + +Size: 52 +Channel: 3 +TypeID: 00000f00 +GID: the temporary SessionID +IP: standard binary format, as four 8 bit integers +Port: standard binary format diff --git a/doc/protocol/commands/0217.txt b/doc/protocol/commands/0217.txt new file mode 100644 index 0000000..38bcb46 --- /dev/null +++ b/doc/protocol/commands/0217.txt @@ -0,0 +1,16 @@ +0217 + +Size:32 +Command:16 Channel:8 0:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 44 +Channel: 2 diff --git a/doc/protocol/commands/0219.txt b/doc/protocol/commands/0219.txt new file mode 100644 index 0000000..0b2b075 --- /dev/null +++ b/doc/protocol/commands/0219.txt @@ -0,0 +1,21 @@ +0219 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +Username:192 +Password:192 +_UnknownC:64 + +Size: 100 +Channel: 2 +Username, Password: ASCII +_UnknownC: always 29525a52 7510439e? diff --git a/doc/protocol/commands/021b.txt b/doc/protocol/commands/021b.txt new file mode 100644 index 0000000..6dbef38 --- /dev/null +++ b/doc/protocol/commands/021b.txt @@ -0,0 +1,17 @@ +021b + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 + +Size: 44 +Channel: 3 +TypeID: 00011300 diff --git a/doc/protocol/commands/021c.txt b/doc/protocol/commands/021c.txt new file mode 100644 index 0000000..2ecd637 --- /dev/null +++ b/doc/protocol/commands/021c.txt @@ -0,0 +1,17 @@ +021c + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 +FromLID: ffff or LID diff --git a/doc/protocol/commands/021d.txt b/doc/protocol/commands/021d.txt new file mode 100644 index 0000000..af6598f --- /dev/null +++ b/doc/protocol/commands/021d.txt @@ -0,0 +1,18 @@ +021d + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +EntryID:32 + +Size: 0x30 +Channel: 2 +EntryID: where to spawn if using it; 0 1 2 4 5 6 7 10 11 12 20 21 22 23 diff --git a/doc/protocol/commands/021e.txt b/doc/protocol/commands/021e.txt new file mode 100644 index 0000000..ded782c --- /dev/null +++ b/doc/protocol/commands/021e.txt @@ -0,0 +1,28 @@ +021e + +Size:32 +Command:16 Channel:8 0:8 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +NbUnis:32 +Unis:N + +per uni: +UniID:32 +NbPlayers:16 Style:16 +StrName:256 (padded with 0s) +StrPopulation:96 (padded with 0s) + +Size: 0x2c6 +Channel: 3 +NbUnis: 11 on official +UniID: ffffffff for myroom; 1a 1c 1e 20 22 24 26 28 2a 2c for unis on official +NbPlayers: 0 for myroom +Style: 0 for centered (myroom), 0x0283 for left aligned + population count on the right (normal unis) diff --git a/doc/protocol/commands/021f.txt b/doc/protocol/commands/021f.txt new file mode 100644 index 0000000..dd6a082 --- /dev/null +++ b/doc/protocol/commands/021f.txt @@ -0,0 +1,20 @@ +021f + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +UniID:32 +EntryID:32 + +Size: 0x34 +Channel: 2 +UniID: as sent in 021e, on official either 00 (cancel), 1a 1c 1e 20 22 24 26 28 2a 2c, or ffffffff (myroom) +EntryID: where to spawn, 0 1 2 4 5 6 7 10 11 12 20 21 22 23 diff --git a/doc/protocol/commands/0222.txt b/doc/protocol/commands/0222.txt new file mode 100644 index 0000000..1871b80 --- /dev/null +++ b/doc/protocol/commands/0222.txt @@ -0,0 +1,27 @@ +0222 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +TargetTypeID:32 +TargetGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +UniID:32 +NbPlayers:16 MaxPlayers:16 +Name:352 +LevelMax:32 + +Size: always 100 +Channel: 3 +TargetTypeID: 00001200 +TargetGID: same as DestGID +DestTypeID: 00011300 +UniID: on official: 0x15 0x1a 0x1c 0x1e 0x20 0x22 0x24 0x26 0x28 0x2a 0x2c; that means MyRoom has an UniID, 0x15 +NbPlayers: from 1 to 0x19f on official; number of players in this universe (all rooms count as one universe) +MaxPlayers: 5000 for MyRoom, 670 for normal unis on official; 630 for normal unis on JP +LevelMax: 170 on official; 180 on JP diff --git a/doc/protocol/commands/0223.txt b/doc/protocol/commands/0223.txt new file mode 100644 index 0000000..8204964 --- /dev/null +++ b/doc/protocol/commands/0223.txt @@ -0,0 +1,33 @@ +0223 + +Size:32 +Command:16 Channel:8 0:8 +0:32 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +AuthGID:32 +AuthKey:32 +(following is an optional part when a message must be shown) +_UnknownA:32 +0:32 +0:16 Length:16 +Message:N + +Size: 52 +Channel: 3 +TypeID: 00000f00 +GID: the temporary one +AuthGID: the real account GID; 0 if something went wrong +AuthKey: random +(then the optional part) +_UnknownA: seems to be 3 for errors, but 0 is also found when the supplemental asks about free course +Length: Size / 2 + 2; to include the \0 at the end +Message: variable size + +0:16 before Length is probably the same thing as MOTD: pages. diff --git a/doc/protocol/commands/0225.txt b/doc/protocol/commands/0225.txt new file mode 100644 index 0000000..087b326 --- /dev/null +++ b/doc/protocol/commands/0225.txt @@ -0,0 +1,23 @@ +0225 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +NbPages:8 CurrentPage:8 Length:16 +MOTD:N + +Size: variable +Channel: 3 +LID: ffff +NbPages: number of pages - 1 +Page: starts at 0 +Length: Size / 2 + 2; to include the \0 at the end +MOTD: variable size diff --git a/doc/protocol/commands/0226.txt b/doc/protocol/commands/0226.txt new file mode 100644 index 0000000..8fbc593 --- /dev/null +++ b/doc/protocol/commands/0226.txt @@ -0,0 +1,19 @@ +0226 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +PageNumber:8 Language:8 0:16 + +Size: 48 +Channel: 3 +Page: starting from 0 +Language: see 080e diff --git a/doc/protocol/commands/0227.txt b/doc/protocol/commands/0227.txt new file mode 100644 index 0000000..a5127a2 --- /dev/null +++ b/doc/protocol/commands/0227.txt @@ -0,0 +1,18 @@ +0227 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +AcceptMOTD:32 + +Size: 48 +Channel: 2 +AcceptMOTD: 1 if accepted, 0 otherwise diff --git a/doc/protocol/commands/0228.txt b/doc/protocol/commands/0228.txt new file mode 100644 index 0000000..13205ac --- /dev/null +++ b/doc/protocol/commands/0228.txt @@ -0,0 +1,24 @@ +0228 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +FromTypeID:32 +FromGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +MsgType:32 +Duration:32 +Message:N 0:16 + +Size: depends on Message +FromTypeID: 0 if sent from the server itself, 00011500 if sent from a GM account +FromGID: 0 if sent from the server itself, GID of the GM account otherwise +DestTypeID: 00011300 +MsgType: 0 dialog in the middle of the screen; 1 scrolling message on top; 2 scrolling message on the right; 3 dialog in the middle for a specified Duration +Duration: in seconds, only for MsgType 3; value of 2 otherwise +Message: up to 511 unicode characters + ending \0\0 diff --git a/doc/protocol/commands/0230.txt b/doc/protocol/commands/0230.txt new file mode 100644 index 0000000..5768de8 --- /dev/null +++ b/doc/protocol/commands/0230.txt @@ -0,0 +1,15 @@ +0230 + +Size:32 +Command:16 Channel:8 0:8 +ffff:16 0:16 +TypeID:32 +GID:32 +0:64 +TypeID:32 +GID:32 +0:64 + +Size: 0x2c +Channel: 3 +TypeID: 00011300 diff --git a/doc/protocol/commands/0231.txt b/doc/protocol/commands/0231.txt new file mode 100644 index 0000000..202101b --- /dev/null +++ b/doc/protocol/commands/0231.txt @@ -0,0 +1,21 @@ +0231 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +TypeID:32 +GID:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +URLLength:32 +URL:16384 + +Size: 560 +Channel: 3 +TypeID: always 00000f00 +URLLength: length(URL) + 1; the + 1 is because it includes the ending \0 +URL: as ASCII, padded with \0s diff --git a/doc/protocol/commands/0236.txt b/doc/protocol/commands/0236.txt new file mode 100644 index 0000000..10576fa --- /dev/null +++ b/doc/protocol/commands/0236.txt @@ -0,0 +1,17 @@ +0236 + +Size:32 +Command:16 Channel:8 0:8 +DestLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 + +Size: 44 +Channel: 3 +DestTypeID: 00011300 diff --git a/doc/protocol/commands/023f.txt b/doc/protocol/commands/023f.txt new file mode 100644 index 0000000..94ecea9 --- /dev/null +++ b/doc/protocol/commands/023f.txt @@ -0,0 +1,3 @@ +023f + +same as 0226 except on Channel 2 diff --git a/doc/protocol/commands/0304.txt b/doc/protocol/commands/0304.txt new file mode 100644 index 0000000..7503d6c --- /dev/null +++ b/doc/protocol/commands/0304.txt @@ -0,0 +1,49 @@ +0304 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 0:16 +FromTypeID:32 +FromGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +SourceTypeID:32 +SourceGID:32 +0:32 +0:32 +ChatType:8 ChatCutIn:8 ChatCutInAngle:8 ChatMessageLength:8 +ChatChannel:8 ChatCharacterType:8 0:8 _UnknownH:8 +FromName:512 +ChatMessage:N + +Size: depends on ChatMessage +Channel: 2, 3 +DestLID: sometimes ffff guessing in counters +FromTypeID: 0 on channel 2; 00011300 on channel 3, this is the one for the player source, or leader if an NPC +FromGID: 0 on channel 2; GID of the player source, or leader if an NPC on channel 3 +DestTypeID: 0 on channel 2; 00011300 on channel 3 +DestGID: 0 on channel 2; GID on channel 3 +channel 2: + SourceTypeID: 00000000 (? found twice in the logs) or 00001200 (player) or 00001d00 (npc) + SourceGID: can be 00000000 too? found twice in the logs too; otherwise player or npc GID +channel 3: + SourceTypeID: 00001200 (player) or 00001d00 (npc); never 00000000 like on channel 2 + SourceGID: player or npc GID; never 00000000 like on channel 2 +ChatType: 0=normal 1=shout 2=whisper +ChatCutIn: 0=none 1=laugh 2=smile 3=wry_smile 4=surprised 5=confused 6=disappointed 7=deep_in_thought 8=sneer 9=dissatisfied 10=angry +ChatCutInAngle: 0=default 1=(down 1 time) 2=(down 2 times) 3=(down 3 times) +ChatMessageLength: a rounding happens, probably a good idea to check its validity + a 2 (D = len of a + 1) + hi 4 (D = len of hi + 2) + lol 4 (D = len of lol + 1) + lolo 6 (D = len of lolo + 2) + So probably string + \0\0 rounded below at a number multiple of 2. +ChatChannel: 0=public 1=private +ChatCharacterType: 0 2; probably 0 for a normal player, 2 for an NPC +_UnknownH: from 0 to 255 +FromName: not available in v2.0 +ChatMessage: variable length, finishes by a double \0 diff --git a/doc/protocol/commands/0806.txt b/doc/protocol/commands/0806.txt new file mode 100644 index 0000000..c79a36a --- /dev/null +++ b/doc/protocol/commands/0806.txt @@ -0,0 +1,20 @@ +0806 + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +AreaNb:32 + +Size: 0x30 +Channel: 2 +AreaNb: value from 0205 replied as-is + +not sure if the value is replied when 0205 is used for spawning other players diff --git a/doc/protocol/commands/0807.txt b/doc/protocol/commands/0807.txt new file mode 100644 index 0000000..5ed9e97 --- /dev/null +++ b/doc/protocol/commands/0807.txt @@ -0,0 +1,25 @@ +0807 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +QuestID:32 +ZoneID:16 MapID:16 +EntryID:16 AreaChangeNb:16 +TargetPartyPosOrLID:32 + +Size: 0x3c +Channel: 2 +ZoneID: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 20 ffff; ffff on a mission start +MapID: map number or ffff; ffff on a mission start +EntryID: 0 1 2 3 4 5 6 7 8 11 12 13 14 20 21 22 23 ff7f ffff; ffff on a mission start; ff7f probably when using the mission crystal +AreaChangeNb: number of times the player changed area +TargetPartyPosOrLID: ffffffff for self, otherwise the party pos of the NPC to move with the player (used in story missions) diff --git a/doc/protocol/commands/0808.txt b/doc/protocol/commands/0808.txt new file mode 100644 index 0000000..2c1438f --- /dev/null +++ b/doc/protocol/commands/0808.txt @@ -0,0 +1,18 @@ +0808 + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +AreaNb:32 + +Size: 0x30 +Channel: 2 +AreaNb: value from 0208 replied as-is diff --git a/doc/protocol/commands/080d.txt b/doc/protocol/commands/080d.txt new file mode 100644 index 0000000..ce31bdc --- /dev/null +++ b/doc/protocol/commands/080d.txt @@ -0,0 +1,17 @@ +080d + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 +FromLID: ffff or LID diff --git a/doc/protocol/commands/080e.txt b/doc/protocol/commands/080e.txt new file mode 100644 index 0000000..dffb869 --- /dev/null +++ b/doc/protocol/commands/080e.txt @@ -0,0 +1,34 @@ +080e + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +_UnknownB:8 Language:8 _UnknownC:8 Entrance:8 +Platform:8 0:24 +Version:32 -> Revision:8, Minor:4, _UnknownE:12, Major:4, _UnknownF:4 +0:32 +0:32 +0:32 + +Size: 68 +Channel: 2 +Language: + 0 Japanese + 1 English + 3 French + 4 German +_UnknownB: always 0? +_UnknownC: always 1? +Entrance: 1 or 2 +Platform: + 0 PS2 + 1 PC +Version: the detail shown but as an unsigned int diff --git a/doc/protocol/commands/080f.txt b/doc/protocol/commands/080f.txt new file mode 100644 index 0000000..df1df91 --- /dev/null +++ b/doc/protocol/commands/080f.txt @@ -0,0 +1,17 @@ +080f + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +PartyPosOrLID:32 + +Size: always 48 +Channel: 2 diff --git a/doc/protocol/commands/0811.txt b/doc/protocol/commands/0811.txt new file mode 100644 index 0000000..bc5000d --- /dev/null +++ b/doc/protocol/commands/0811.txt @@ -0,0 +1,23 @@ +0811 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +CounterType:8 _UnknownC:8 FromZoneID:16 +FromMapID:16 FromEntryID:16 +CounterID:32 +ffffffff:32 + +Size: 0x3c +Channel: 2 +CounterType: apparently 1 for mission counters, 2 for others (shops, etc.) +_UnknownC: either 0 0x29 0x32 or 0xff, 0x29 only when _UnknownB is 2; 0x29 most often +CounterID: ffffffff used for shops etc., otherwise from 0 to 255 (a few unused values on official apparently) diff --git a/doc/protocol/commands/0812.txt b/doc/protocol/commands/0812.txt new file mode 100644 index 0000000..b13ca2e --- /dev/null +++ b/doc/protocol/commands/0812.txt @@ -0,0 +1,17 @@ +0812 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 +LID: 0 1 2 3 4 5 so presumably the LID in counters (like in missions) is party-only diff --git a/doc/protocol/commands/0813.txt b/doc/protocol/commands/0813.txt new file mode 100644 index 0000000..33e802b --- /dev/null +++ b/doc/protocol/commands/0813.txt @@ -0,0 +1,19 @@ +0813 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +ffffffff:32 +NPCid:32 + +Size: 0x34 +Channel: 2 +NPCid: on official, 1 2 3 4 5 6 7 9 10 12 13 15 16 17 25 32 40 42 (and more?) diff --git a/doc/protocol/commands/0814.txt b/doc/protocol/commands/0814.txt new file mode 100644 index 0000000..c7dd9f9 --- /dev/null +++ b/doc/protocol/commands/0814.txt @@ -0,0 +1,16 @@ +0814 + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 diff --git a/doc/protocol/commands/0815.txt b/doc/protocol/commands/0815.txt new file mode 100644 index 0000000..6d3b97d --- /dev/null +++ b/doc/protocol/commands/0815.txt @@ -0,0 +1,16 @@ +0815 + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 diff --git a/doc/protocol/commands/0818.txt b/doc/protocol/commands/0818.txt new file mode 100644 index 0000000..31ce058 --- /dev/null +++ b/doc/protocol/commands/0818.txt @@ -0,0 +1,22 @@ +0818 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +GPU:512 +CPU:384 +_UnknownB:32 + +Size: 160 +Channel: 2 +GPU: ascii string +CPU: ascii string +_UnknownB: various values diff --git a/doc/protocol/commands/0a05.txt b/doc/protocol/commands/0a05.txt new file mode 100644 index 0000000..80da838 --- /dev/null +++ b/doc/protocol/commands/0a05.txt @@ -0,0 +1,17 @@ +0a05 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 + +Size: 0x2c +Channel: 3 +TypeID: always 00011300 diff --git a/doc/protocol/commands/0a06.txt b/doc/protocol/commands/0a06.txt new file mode 100644 index 0000000..fe01731 --- /dev/null +++ b/doc/protocol/commands/0a06.txt @@ -0,0 +1,21 @@ +0a06 + +Size:32 +Command:16 Channel:8 0:8 +LID:16 0:16 +0:32 +DestGID:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +ItemUUID00:32 ItemUUID01:32 ItemUUID02:32 ItemUUID03:32 +... +ItemUUID56:32 ItemUUID57:32 ItemUUID58:32 ItemUUID59:32 + +Size: 284 +Channel: 3 +DestTypeID: 00011300 +ItemUUID**: an unique identifier for the item diff --git a/doc/protocol/commands/0a10.txt b/doc/protocol/commands/0a10.txt new file mode 100644 index 0000000..12b05d0 --- /dev/null +++ b/doc/protocol/commands/0a10.txt @@ -0,0 +1,17 @@ +0a10 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +ItemID:32 + +Size: 0x2c +Channel: 2 diff --git a/doc/protocol/commands/0a11.txt b/doc/protocol/commands/0a11.txt new file mode 100644 index 0000000..16927b5 --- /dev/null +++ b/doc/protocol/commands/0a11.txt @@ -0,0 +1,22 @@ +0a11 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +ItemID:32 +Length:32 +ItemDesc/binary 0:16 + +Size: depends on Length +Channel: 3 +DestTypeID: 00011300 +Length: in characters, not in bytes +ItemDesc: in UCS2, ending with 0:16 diff --git a/doc/protocol/commands/0c00.txt b/doc/protocol/commands/0c00.txt new file mode 100644 index 0000000..f4ea02b --- /dev/null +++ b/doc/protocol/commands/0c00.txt @@ -0,0 +1,28 @@ +0c00 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +QuestID:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 +ffffffff:32 ffffffff:32 ffffffff:32 ffffffff:32 + +Size: b0 +Channel: 3 +LID: sometimes ffff in lobbies (probably when first joining, but not necessarily) +TypeID: 00011300 +QuestID: is ffffff7f for counters diff --git a/doc/protocol/commands/0c01.txt b/doc/protocol/commands/0c01.txt new file mode 100644 index 0000000..8808f04 --- /dev/null +++ b/doc/protocol/commands/0c01.txt @@ -0,0 +1,18 @@ +0c01 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +QuestID:32 + +Size: 0x30 +Channel: 2 +LID: the one for missions (0 1 2 3 4 5) diff --git a/doc/protocol/commands/0c05.txt b/doc/protocol/commands/0c05.txt new file mode 100644 index 0000000..4a8a309 --- /dev/null +++ b/doc/protocol/commands/0c05.txt @@ -0,0 +1,18 @@ +0c05 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +CounterID:32 + +Size: 0x30 +Channel: 2 +LID: the one for missions (0 1 2 3 4 5) diff --git a/doc/protocol/commands/0c06.txt b/doc/protocol/commands/0c06.txt new file mode 100644 index 0000000..5f47322 --- /dev/null +++ b/doc/protocol/commands/0c06.txt @@ -0,0 +1,23 @@ +0c06 + +Size:32 +Command:16 Channel:8 0:8 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +1:32 +PositionList:4096 +SizeList:4096 +NbFiles:32 +Files:N + +Size: variable, generally big +PositionList: list of Position:32, starting from Files +SizeList: list of Size:32 for each files +Files: concatened list of files diff --git a/doc/protocol/commands/0c07.txt b/doc/protocol/commands/0c07.txt new file mode 100644 index 0000000..c40e704 --- /dev/null +++ b/doc/protocol/commands/0c07.txt @@ -0,0 +1,20 @@ +0c07 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +QuestID:32 +Rate:32 + +Size: 0x30 +Channel: 2 +QuestID: more than expected; 02421100 98d41000 a8fb1000 a9fb1000 abfb1000 b0d01000 c8cc1000 e0c81000 +Rate: 0 1 2 3 4 on official, price = 200 x Rate diff --git a/doc/protocol/commands/0c08.txt b/doc/protocol/commands/0c08.txt new file mode 100644 index 0000000..e7e5a5f --- /dev/null +++ b/doc/protocol/commands/0c08.txt @@ -0,0 +1,19 @@ +0c08 + +Size:32 +Command:16 Channel:8 0:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +Reply:32 + +Size: 0x30 +Channel: 3 +DestTypeID: 00011300 +Reply: 0 if allowed, 1 if refused diff --git a/doc/protocol/commands/0c0d.txt b/doc/protocol/commands/0c0d.txt new file mode 100644 index 0000000..02eed68 --- /dev/null +++ b/doc/protocol/commands/0c0d.txt @@ -0,0 +1,17 @@ +0c0d + +Size:32 +Command:16 Channel:8 Garbage:8 +FromLID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 +FromLID: mission LID diff --git a/doc/protocol/commands/0c0e.txt b/doc/protocol/commands/0c0e.txt new file mode 100644 index 0000000..98cb4a7 --- /dev/null +++ b/doc/protocol/commands/0c0e.txt @@ -0,0 +1,16 @@ +0c0e + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 diff --git a/doc/protocol/commands/0c0f.txt b/doc/protocol/commands/0c0f.txt new file mode 100644 index 0000000..cc4d8a9 --- /dev/null +++ b/doc/protocol/commands/0c0f.txt @@ -0,0 +1,18 @@ +0c0f + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +CounterID:32 + +Size: 0x30 +Channel: 2 +LID: 0 1 2 3 4 5 diff --git a/doc/protocol/commands/0c10.txt b/doc/protocol/commands/0c10.txt new file mode 100644 index 0000000..ade980b --- /dev/null +++ b/doc/protocol/commands/0c10.txt @@ -0,0 +1,26 @@ +0c10 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +Garbage:32 +Garbage:32 +Garbage:32 +Garbage:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +1:8 Garbage:8 OptionsSize:16 +Options:(OptionsSize * 8) + +Size: variable +Channel: 3 +DestTypeID: 00011300 +OptionsSize: size of the list of per-mission options following this value +Options: a list of bytes with 1 byte per option + +An option can be one of at least three values: 0 hidden; 2 visible but grayed; 3 visible and selectable. + +A counter defines categories and missions inside them. +The list of options start with categories and then continue with missions directly. diff --git a/doc/protocol/commands/0d02.txt b/doc/protocol/commands/0d02.txt new file mode 100644 index 0000000..0a4fa1e --- /dev/null +++ b/doc/protocol/commands/0d02.txt @@ -0,0 +1,19 @@ +0d02 + +Size:32 +Command:16 Channel:8 0:8 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +Slot:32 +NameAndAppearance + +Size: 324 +Channel: 2 +Slot: 0 1 2 3 diff --git a/doc/protocol/commands/0d05.txt b/doc/protocol/commands/0d05.txt new file mode 100644 index 0000000..80e80c0 --- /dev/null +++ b/doc/protocol/commands/0d05.txt @@ -0,0 +1,22 @@ +0d05 + +Size:32 +Command:16 Channel:8 0:8 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +Flags + +Size: always 0x4e88 +Channel: 3 +TypeID, GID: same in both places +Flags: to be studied further, though it's the same flags list for everyone so no hurry there + +There's apparently 3 categories of flags, which more than likely function differently. +The command 0d04 is used to set or retrieve flags information. diff --git a/doc/protocol/commands/0d06.txt b/doc/protocol/commands/0d06.txt new file mode 100644 index 0000000..6769060 --- /dev/null +++ b/doc/protocol/commands/0d06.txt @@ -0,0 +1,16 @@ +0d06 + +Size:32 +Command:16 Channel:8 0:8 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 44 +Channel: 2 diff --git a/doc/protocol/commands/0d07.txt b/doc/protocol/commands/0d07.txt new file mode 100644 index 0000000..8889974 --- /dev/null +++ b/doc/protocol/commands/0d07.txt @@ -0,0 +1,22 @@ +0d07 + +Size:32 +Command:16 Channel:8 0:8 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +TextDisplaySpeed:8 Sound:8 MusicVolume:8 SoundEffectVolume:8 +Vibration:8 RadarMapDisplay:8 CutInDisplay:8 MainMenuCursorPosition:8 +0:8 Camera3rdY:8 Camera3rdX:8 Camera1stY:8 +Camera1stX:8 Controller:8 WeaponSwap:8 LockOn:8 +Brightness:8 FunctionKeySetting:8 _UnknownA:8 ButtonDetailDisplay:8 + +Size: 0x44 +Channel: 2 +_UnknownA: 0 1 2 3 4 diff --git a/doc/protocol/commands/1006.txt b/doc/protocol/commands/1006.txt new file mode 100644 index 0000000..b2e9875 --- /dev/null +++ b/doc/protocol/commands/1006.txt @@ -0,0 +1,37 @@ +1006 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +EventID:8 PartyPos:8 0:16 + +Size: 48 +Channel: 3 +TypeID: 00011300 +EventID: 2 3 4 5 6 7 8 9 10 11 12 13 15 16 on official +PartyPos: optional, depends on EventID + +EventID: + 2: removes party people + 3: you have been removed by the party leader message + remove party info + 4 + PartyPos: X has left the party message + 5 + PartyPos: X party leader change on the left + 6 + PartyPos: ? + 7 + PartyPos: X is the new party leader message + 8 + PartyPos: X has been removed from the party + remove party info + 9 + PartyPos: ? + 10: Mission "%s" end message + 11: The party leader has cancelled the mission message + 12: ? + 13 + PartyPos: X has been removed from the party + remove SOME party info + 14 + PartyPos: X has joined the party message + 15 + PartyPos: ? + 16 + PartyPos: X has left the party message + remove party info (NPC only?) diff --git a/doc/protocol/commands/1007.txt b/doc/protocol/commands/1007.txt new file mode 100644 index 0000000..a4a210c --- /dev/null +++ b/doc/protocol/commands/1007.txt @@ -0,0 +1,18 @@ +1007 + +Size:32 +Command:16 Channel:8 Garbage:8 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +PartyPosOrLID:32 +Name:512 + +Size: always 112 +Channel: 2 diff --git a/doc/protocol/commands/100e.txt b/doc/protocol/commands/100e.txt new file mode 100644 index 0000000..858e70d --- /dev/null +++ b/doc/protocol/commands/100e.txt @@ -0,0 +1,32 @@ +100e + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +1:8 PartyPos:8 ZoneID:16 +MapID:16 EntryID:16 +QuestID:32 +LocationName:512 +TargetLID:32 +CounterID:32 +CounterType:32 + +Size: 132 +Channel: 3 +DestTypeID: 00011300 +PartyPos: 0 1 2 3 4 5; for the given character +ZoneID: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 20 +MapID: many values +EntryID: 0 1 2 3 4 5 6 7 8 10 11 12 13 14 20 21 22 23 7fff +QuestID: many values; 7fffffff for counters +LocationName: UCS2; can contain color codes, finished by \0\0 +CounterID: ffffffff when not a counter +CounterType: 0 when not a counter; 1 when in a mission counter; 2 when in a shop/clothes change counter diff --git a/doc/protocol/commands/1020.txt b/doc/protocol/commands/1020.txt new file mode 100644 index 0000000..9799167 --- /dev/null +++ b/doc/protocol/commands/1020.txt @@ -0,0 +1,17 @@ +1020 + +Size:32 +Command:16 Channel:8 0:8 +ffff:16 0:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 + +Size: 44 +Channel: 3 +DestTypeID: 00011300 diff --git a/doc/protocol/commands/1022.txt b/doc/protocol/commands/1022.txt new file mode 100644 index 0000000..e6174ca --- /dev/null +++ b/doc/protocol/commands/1022.txt @@ -0,0 +1,19 @@ +1022 + +Size:32 +Command:16 Channel:8 Garbage:8 +ffff:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +HP:32 +PartyPos:32 + +Size: 52 +Channel: 3 +DestTypeID: 00011300 diff --git a/doc/protocol/commands/1204.txt b/doc/protocol/commands/1204.txt new file mode 100644 index 0000000..420d252 --- /dev/null +++ b/doc/protocol/commands/1204.txt @@ -0,0 +1,27 @@ +1204 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +0:32 +20000000:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 84 +Channel: 3 +DestTypeID: 00011300 diff --git a/doc/protocol/commands/1500.txt b/doc/protocol/commands/1500.txt new file mode 100644 index 0000000..2b46bb6 --- /dev/null +++ b/doc/protocol/commands/1500.txt @@ -0,0 +1,27 @@ +1500 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +Name:512 +Race:8 Gender:8 Class:8 VoiceType:8 +VoicePitch:8 0:24 +CardGID:32 +0:224 +Comment:2816 +1:8 4:8 1:8 CharacterSlot:8 +0:64 + +Size: 0x200 +Channel: 3 +DestLID: 0 1 2 3 4 5 7 13 ffff (probably has a LID only when card is sent back after being edited) +DestTypeID: 00011300 +CharacterSlot: 0 1 2 3 diff --git a/doc/protocol/commands/1705.txt b/doc/protocol/commands/1705.txt new file mode 100644 index 0000000..08d265e --- /dev/null +++ b/doc/protocol/commands/1705.txt @@ -0,0 +1,17 @@ +1705 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 +LID: 0 1 2 3 4 5 diff --git a/doc/protocol/commands/1707.txt b/doc/protocol/commands/1707.txt new file mode 100644 index 0000000..5b1a0dc --- /dev/null +++ b/doc/protocol/commands/1707.txt @@ -0,0 +1,18 @@ +1707 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +QuestID:32 + +Size: 0x30 +Channel: 2 +QuestID: currently selected quest in the counter diff --git a/doc/protocol/commands/1709.txt b/doc/protocol/commands/1709.txt new file mode 100644 index 0000000..aee9c62 --- /dev/null +++ b/doc/protocol/commands/1709.txt @@ -0,0 +1,17 @@ +1709 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 +LID: 0 1 2 3 4 5 diff --git a/doc/protocol/commands/170b.txt b/doc/protocol/commands/170b.txt new file mode 100644 index 0000000..16f143b --- /dev/null +++ b/doc/protocol/commands/170b.txt @@ -0,0 +1,17 @@ +170b + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 + +Size: 0x2c +Channel: 2 +LID: 0 1 2 3 4 5 diff --git a/doc/protocol/commands/1710.txt b/doc/protocol/commands/1710.txt new file mode 100644 index 0000000..87cadfa --- /dev/null +++ b/doc/protocol/commands/1710.txt @@ -0,0 +1,18 @@ +1710 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +CounterID:32 + +Size: 0x30 +Channel: 2 +LID: 0 1 2 3 4 5 diff --git a/doc/protocol/commands/1711.txt b/doc/protocol/commands/1711.txt new file mode 100644 index 0000000..dea7e4d --- /dev/null +++ b/doc/protocol/commands/1711.txt @@ -0,0 +1,30 @@ +1711 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +TypeID:32 +GID:32 +0:32 +0:32 +Background:8 Garbage:24 + +Size: 0x30 +Channel: 3 +TypeID: always 00011300 +Background: 4 5 6 7 ff on official + +The background is always ff on official except for the following counters: + 8 5 GRM + 112 5 Parum Cafe + 114 6 Moatoob Pub + 115 4 GUARDIANS HQ + 116 5 Parum GUARDIANS + 117 7 Neudaiz GUARDIANS + 118 6 Moatoob GUARDIANS + 170 4 (probably Program DF' counter) + 177 4 Colony R&D diff --git a/doc/protocol/commands/1a01.txt b/doc/protocol/commands/1a01.txt new file mode 100644 index 0000000..4f832e3 --- /dev/null +++ b/doc/protocol/commands/1a01.txt @@ -0,0 +1,52 @@ +1a01 + +Size:32 +Command:16 Channel:8 Garbage:8 +LID:16 0:16 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +0:32 +LID:32 +ShopID:32 +EventID:32 +_UnknownB:32 +_UnknownC:32 + +Size: 0x40 +Channel: 2 +LID: same in header and body +EventID: + 0: npc talk + ShopID defined; _UnknownB 0; _UnknownC many values + send_1a02 + 2: lumilass + ShopID always 0; _UnknownB 0 or 1 but mostly 0; _UnknownC gets many values + send_1a03 + 3: pp cube request + ShopID, _UnknownB always 0; _UnknownC gets many values + send_1a04 + 4: pp cube recharge all + ShopID always 0 + 5: pp cube recharge one + ShopID always 0 + 6: put on clothes/parts + ShopID, _UnknownB always 0 + 7: remove clothes/parts + ShopID always 0 + 9: types menu (also type select counter); whether types are enabled + a few other values + ShopID, _UnknownB, _UnknownC always 0 + send_1a07 + +apparently replies using 1a02 are dependent on the shopid? but the game doesn't seem to care +but there's only a few of them after the first unknown value: + 80 -> send_1a02(0, 17, 17, 3, 9); %% lumilass + 90 -> send_1a02(0, 5, 1, 4, 5); %% parum weapon grinding + 91 -> send_1a02(0, 5, 5, 4, 7); %% tenora weapon grinding + 92 -> send_1a02(0, 5, 0, 4, 0); %% yohmei weapon grinding + 93 -> send_1a02(0, 5, 18, 4, 0); %% kubara weapon grinding + _ -> send_1a02(0, 0, 1, 0, 0) diff --git a/doc/protocol/commands/1a02.txt b/doc/protocol/commands/1a02.txt new file mode 100644 index 0000000..e156c76 --- /dev/null +++ b/doc/protocol/commands/1a02.txt @@ -0,0 +1,30 @@ +1a02 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +_UnknownC:32 +_UnknownD:16 _UnknownE:16 +_UnknownF:16 _UnknownG:16 + +Size: always 56 +Channel: 3 +DestTypeID: 00011300 +_UnknownC: from around 00000009 to around 0000000e +_UnknownD to _UnknownG: 6 types of values + 00000100 00000000: any other shop + 05000100 04000500: parum weapon grinding + 05000500 04000700: tenora weapon grinding + 05000800 04000000: yohmei weapon grinding + 05001200 04000000: kubara weapon grinding + 11001100 03000900: lumilass only + +see 1a01 diff --git a/doc/protocol/commands/1a03.txt b/doc/protocol/commands/1a03.txt new file mode 100644 index 0000000..e6e3024 --- /dev/null +++ b/doc/protocol/commands/1a03.txt @@ -0,0 +1,26 @@ +1a03 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +_UnknownC:32 +NbHairstyles:32 +NbHeadtypes:32 +0:416 +Hairstyles:Rest +0:32 + +Size: 1708; padded with 0s at the end so the size probably doesn't really matter, to be sure finish the packet with 0:32 though +Channel: 3 +DestTypeID: 00011300 +NbHairstyles: number of hairstyles, not a size +NbHeadtypes: number of headtypes, or 0 for fleshies; Headtypes list isn't sent though +Hairstyles: list of 4 bytes appearance codes diff --git a/doc/protocol/commands/1a07.txt b/doc/protocol/commands/1a07.txt new file mode 100644 index 0000000..7e535cb --- /dev/null +++ b/doc/protocol/commands/1a07.txt @@ -0,0 +1,25 @@ +1a07 + +Size:32 +Command:16 Channel:8 Garbage:8 +DestLID:16 Garbage:16 +0:32 +0:32 +0:32 +0:32 +DestTypeID:32 +DestGID:32 +0:32 +0:32 +_UnknownC:32 +_UnknownD:16 0:16 +0:32 +HunterEnabled:8 RangerEnabled:8 ForceEnabled:8 FighgunnerEnabled:8 +GuntecherEnabled:8 WartecherEnabled:8 FortefighterEnabled:8 FortegunnerEnabled:8 +FortetecherEnabled:8 ProtranserEnabled:8 AcrofighterEnabled:8 AcrotecherEnabled:8 +FighmasterEnabled:8 GunmasterEnabled:8 MasterforceEnabled:8 AcromasterEnabled:8 + +Size: 72 +Channel: 3 +DestTypeID: 00011300 +*Enabled: 0 no 1 yes diff --git a/doc/protocol/glossary.txt b/doc/protocol/glossary.txt new file mode 100644 index 0000000..872b61b --- /dev/null +++ b/doc/protocol/glossary.txt @@ -0,0 +1,97 @@ +AreaNb: + +This number is associated with the player's session. It starts at 1 and is +increased with each 0205 and 0208 calls for this player. It is not sure how +0205 for spawning other players affects this value. + +Channel: + +Commands are sent over three channels: broadcast, client and server. +Broadcast packets are received from the client and directly broadcast to +all the other players in the same area with little modifications. Client +commands are instructions from the client to the server and server commands +are their opposite. Sometimes a command will use a wrong channel or a +different channel entirely. Broadcast is channel 1, client is channel 2 +and server is channel 3. + +Command: + +The command is represented by a 16-bit integer value. It is more or less +ordered by categories although it is not clear how some commands relate +to others from the same category. See commands.txt for more details. + +Counter: + +A counter is a special area where players can start missions. It generally +features a 2D background and menus on the left. As such it is also used for +special shops like Lumilass or the clothes shops, along with special rooms +where players can change their clothes. +Mission counters all have a CounterID and a counter file with their +settings. This file is sent alongside all the quests available from this +counter. Counter files are server-side. + +CounterID: + +The CounterID is a 8-bit integer value going from 0 to 255 that represents +a mission counter. + +EntryID: + +The EntryID is a 16-bit integer value and is the entrance identifier for +a map. It is probably found as a parameter to entrance objects in the zone +file. + +GID: + +GUARDIANS ID, the unique player identifier. + +LID: + +LID is a misnomer for what is essentially a temporary player identifier +for the current zone he's in. Each zones maintain their lists of players +and NPCs inside it and they are identified using this unique identifier. +The LID is in fact a TargetID. + +Map: + +A map is an area where players can be, like Clyez City 1st Floor for +example. Map files are client-side. +A map is uniquely identified by a MapID and an area identifier. + +MapID: + +A MapID is a map identifier which represents a map file when associated +with an area identifier. + +Quest: + +A quest is a set of zones with a few related settings. Quests can be +lobbies, rooms or missions. Quests handle the area names and the list +of entrance and exit values to other areas. Quest files are server-side. +A quest is uniquely identified by a QuestID. + +QuestID: + +A QuestID is a quest identifier which represents a quest file. + +TargetID: + +A TargetID is an identifier for a target in a zone. A target can be a +player, an enemy, an NPC, an object or a vehicle. Not all objects have +a TargetID though. All TargetID are unique per zone. +Players and NPCs have a TargetID starting from 0 up to 1023. +From 1024 to 3823 the TargetID are for the various objects and enemies. +3824 and above are for vehicles. + +Zone: + +A zone is a set of maps along with the objects available to each maps, +a script, enemy parameters if any and any other file related to the zone. +Zones can be used for lobbies, rooms or missions. They contain one or more +maps. Zone files are server-side. +A zone is uniquely identified by the combination of a QuestID and a ZoneID. + +ZoneID: + +A ZoneID is a zone identifier which represents a zone file when associated +with a QuestID.