PSO Protocol Commands Reference
This document describes the network protocol commands (opcodes) used between the PSO client and newserv server.
Overview
Commands are identified by a 1-byte opcode (0x00-0xFF). Each command may have different handlers depending on the game version. The server supports 14 game versions:
| Column | Version |
|---|
| 1 | PC_PATCH |
| 2 | BB_PATCH |
| 3 | DC_NTE |
| 4 | DC_112000 |
| 5 | DCV1 |
| 6 | DCV2 |
| 7 | PC_NTE |
| 8 | PC |
| 9 | GCNTE |
| 10 | GC |
| 11 | EP3TE |
| 12 | EP3 |
| 13 | XB |
| 14 | BB |
Command Header Formats
- DC/GC/XB (PSOCommandHeaderDCV3): 4 bytes — command(1), flag(1), size(2)
- PC (PSOCommandHeaderPC): 4 bytes — size(2), command(1), flag(1)
- BB (PSOCommandHeaderBB): 8 bytes — size(2), command(2), flag(4)
Naming Convention in Source Code
C_ prefix: Client-to-server (client sends)S_ prefix: Server-to-client (server sends)SC_ prefix: Bidirectional (used in both directions)
Patch Server Commands (PC_PATCH / BB_PATCH only)
| Opcode | Direction | Name | Description |
|---|
| 0x02 | S→C | ServerInit_Patch | Server initialization for patch connection |
| 0x02 | C→S | (response) | Client acknowledges patch server init |
| 0x04 | S→C | (request login) | Server requests user's login information |
| 0x04 | C→S | Login_Patch | Client sends username, password, email |
| 0x06 | S→C | OpenFile_Patch | Open a file for patching |
| 0x07 | S→C | WriteFileHeader_Patch | Write file header during patching |
| 0x08 | S→C | CloseCurrentFile_Patch | Close current file being patched |
| 0x09 | S→C | EnterDirectory_Patch | Enter a directory during patching |
| 0x0C | S→C | FileChecksumRequest_Patch | Request file checksum from client |
| 0x0F | C→S | FileInformation_Patch | Client responds with file checksum/size |
| 0x10 | C→S | (all checksums done) | Client finished responding to all checksum requests |
| 0x11 | S→C | StartFileDownloads_Patch | Begin file downloads |
Login & Authentication Commands
| Opcode | Direction | Handler | Versions | Description |
|---|
| 0x02/0x17 | S→C | — | DC/PC/V3 | Server initialization (encryption setup) |
| 0x03 | S→C | — | BB | Server initialization for BB |
| 0x05 | C→S | on_05_XB | XB | Xbox disconnect (quit game) |
| 0x05 | C→S | on_ignored | Others | Ignored (encryption ack) |
| 0x88 | C→S | on_88_DCNTE | DC_NTE | DC NTE login |
| 0x8B | C→S | on_8B_DCNTE | DC_NTE | DC NTE extended login |
| 0x90 | C→S | on_90_DC | DC | DC V1 login |
| 0x91 | S→C | — | DC/PC/V3 | Server init (alternate) |
| 0x92 | C→S | on_92_DC | DC | DC V1 registration |
| 0x93 | C→S | on_93_DC | DC | DC V1 login with hardware info |
| 0x93 | C→S | on_93_BB | BB | BB login (multiple sub-formats) |
| 0x9A | C→S | on_9A | DC/PC/V3 | Login with V1 serial + V2 serial |
| 0x9B | S→C | — | All | Server init (alternate) |
| 0x9C | C→S | on_9C | DC/PC/V3/BB | Registration |
| 0x9D | C→S | on_9D_9E | DC/PC/GC | Login (DC/PC/GC format) |
| 0x9E | C→S | on_9D_9E | PC/GC | Login (extended format) |
| 0x9E | C→S | on_9E_XB | XB | Xbox login |
| 0xDB | C→S | on_DB_V3 | V3 | Verify account (V3) |
Navigation & Menu Commands
| Opcode | Direction | Handler | Description |
|---|
| 0x07 | S→C | — | Menu items list |
| 0x08 | C→S | on_08_E6 | Request game list |
| 0x09 | C→S | on_09 | Request menu item info (quest/game/lobby details) |
| 0x0E | S→C | — | Legacy join game |
| 0x10 | C→S | on_10 | Menu selection (main menu, game list, quest list, etc.) |
| 0x1F | C→S | on_1F | Request information menu |
| 0x84 | C→S | on_84 | Lobby selection |
| 0xA0 | C→S | on_A0 | Ship change (return to ship select) |
| 0xA1 | C→S | on_A1 | Block change (treated same as ship change) |
| 0xD6 | C→S | on_D6_V3 | Request info board / welcome message (V3) |
| 0xE6 | C→S | on_08_E6 | Request spectator team list (BB) |
Lobby & Player Management
| Opcode | Direction | Handler | Description |
|---|
| 0x61 | C→S | on_61_98 | Send player data (character data) |
| 0x64 | S→C | — | Join game notification |
| 0x65/0x67/0x68 | S→C | — | Join lobby notification |
| 0x66/0x69 | S→C | — | Leave lobby notification |
| 0x83 | S→C | — | Lobby list |
| 0x88 | S→C | — | Arrow update (lobby arrows) |
| 0x95 | S→C | — | Set guild card number |
| 0x96 | C→S | on_96 | Character save info |
| 0x98 | C→S | on_61_98 | Leave game (send player data) |
| 0xC1 | S→C | — | Create game |
Game Commands & Subcommands
| Opcode | Direction | Handler | Description |
|---|
| 0x60 | C→S/S→C | on_6x_C9_CB | Game subcommand (broadcast to room) |
| 0x62 | C→S/S→C | on_6x_C9_CB | Game subcommand (to specific player) |
| 0x6C | C→S/S→C | on_6x_C9_CB | Extended game subcommand (broadcast) |
| 0x6D | C→S/S→C | on_6x_C9_CB | Extended game subcommand (to specific player) |
| 0xC9 | C→S | on_6x_C9_CB / on_C9_XB | Game subcommand (EP3/XB variant) |
| 0xCB | C→S | on_6x_C9_CB | Game subcommand (EP3 variant) |
| 0x30 | C→S | on_30 | Create game |
Chat & Communication
| Opcode | Direction | Handler | Description |
|---|
| 0x01 | S→C | — | Send text message to client |
| 0x06 | C→S | on_06 | Chat message / chat command |
| 0x11 | S→C | — | System message (scrolling on BB) |
| 0x1A | S→C | — | Message box |
| 0x40 | C→S/S→C | — | Guild card search |
| 0xB0 | S→C | — | Text message (scrolling) |
| 0xC0 | C→S | on_C0 | Broadcast symbol chat |
| 0xC1 | C→S | on_C1_PC / on_C1_BB | Create game (PC/BB) |
| 0xC2 | C→S | on_C2 | Symbol chat |
| 0xD8 | S→C/C→S | on_D8 | Info board |
Quest System
| Opcode | Direction | Handler | Description |
|---|
| 0xA2 | C→S | on_A2 | Quest list request |
| 0xA2/0xA4 | S→C | — | Quest menu entries |
| 0x44/0xA6 | S→C | — | Open quest file |
| 0x13/0xA7 | C→S | on_13_A7_V3_V4 | Quest file write confirmation |
| 0xA9 | C→S | on_A9 | Quest selection cancelled |
| 0xAA | C→S | on_AA | Update quest statistics |
| 0xAB | S→C | — | Call quest label |
| 0xAC | C→S | on_AC_V3_BB | Quest file loaded / joinable quest ready |
| 0xB2 | S→C | — | Execute code (send function to client) |
| 0xB3 | C→S | on_B3 | Execute code result (function call response) |
Server System Commands
| Opcode | Direction | Handler | Description |
|---|
| 0x04 | S→C | — | Update client config |
| 0x19 | S→C | — | Reconnect (redirect to another server) |
| 0x1D | C→S | on_1D | Ping response |
| 0xB1 | C→S | on_B1 | Request server time |
| 0xB1 | S→C | — | Server time response |
| 0xDE | S→C | — | Rare monster list (BB) |
| 0xEF | S→C | — | Set shutdown command (BB) |
BB-Specific Commands
| Opcode | Direction | Handler | Description |
|---|
| 0xDC | C→S | on_DC_BB | Guild card data request |
| 0xDC (01) | S→C | — | Guild card header |
| 0xDC (02) | S→C | — | Guild card file chunk |
| 0xDF | C→S | on_DF_BB | Challenge mode settings |
| 0xE0 | C→S | on_E0_BB | Request system file |
| 0xE1 | S→C | — | System file created notification |
| 0xE2 | C→S | on_E2_BB | Sync system file |
| 0xE3 | C→S | on_E3_BB | Player preview request / character select |
| 0xE4 | S→C | — | Approve player choice / player preview |
| 0xE5 | C→S | on_E5_BB | Create character |
| 0xE6 | S→C | — | Client init (BB) |
| 0xE7 | C→S | on_E7_BB | Sync save files |
| 0xE8 | C→S | on_E8_BB | Guild card operations (add/delete/comment/sort) |
| 0xEA | C→S | on_EA_BB | Team commands (create/disband/add/remove members, etc.) |
| 0xEB | C→S | on_EB_BB | Stream file operations (index/chunk) |
| 0xEC | C→S | on_EC_BB | Leave character select |
| 0xED | C→S | on_ED_BB | Update settings (options/symbol chats/shortcuts/key config/pad config/tech menu/customize/challenge records) |
BB Team Sub-Commands (0xEA)
| Sub-opcode | Direction | Description |
|---|
| 0x01EA | C→S | Create team |
| 0x03EA | C→S | Add team member |
| 0x05EA | C→S | Remove team member |
| 0x09EA | S→C | Team member list |
| 0x0FEA | C→S | Set team flag |
| 0x11EA | C→S | Change team member privilege level |
| 0x12EA | S→C | Update team membership |
| 0x13EA | S→C | Team info for player (all lobby clients) |
| 0x15EA | S→C | Team info for player (single client) |
| 0x18EA | S→C | Intra-team ranking |
| 0x19EA | S→C | Team reward list |
| 0x1AEA | S→C | Team reward list (purchased) |
| 0x1CEA | S→C | Cross-team ranking |
| 0x1DEA | S→C | Update team reward flags |
| 0x1EEA | C→S | Rename team |
Episode 3 (Card Battle) Commands
| Opcode | Direction | Handler | Description |
|---|
| 0xB7 | C→S | on_B7_Ep3 | Request EP3 rank/music update |
| 0xB7 | S→C | — | Rank update |
| 0xB9 | S→C | — | Media update (maps, card definitions, etc.) |
| 0xBA | C→S | on_BA_Ep3 | Meseta transaction (buy/sell cards at shop) |
| 0xBA | S→C | — | Meseta transaction result |
| 0xBB | S→C | — | Tournament spectator team list |
| 0xCA | C→S | on_CA_Ep3 | Card battle server data (game commands) |
| 0xCC | S→C | — | Confirm tournament entry |
| 0xDC | C→S | on_DC_Ep3 | Request tournament list (EP3) |
| 0xE0 | S→C | — | Tournament list |
| 0xE1 | S→C | — | Game information |
| 0xE2 | C→S | on_E2_Ep3 | Tournament operations (list/check/enter/withdraw) |
| 0xE2 | S→C | — | Tournament entry list |
| 0xE3 | S→C | — | Tournament game details |
| 0xE4 | C→S | on_E4_Ep3 | Card battle table state update |
| 0xE4 | S→C | — | Card battle table state |
| 0xE5 | C→S | on_E5_Ep3 | Card battle table confirmation |
| 0xE5 | S→C | — | Card battle table confirmation response |
| 0xE6 | C→S | — | Join spectator team |
| 0xE7 | C→S | — | Create spectator team |
| 0xE8 | S→C | — | Join spectator team response |
| 0xE9 | S→C | — | Leave spectator team |
| 0xEA | S→C | — | Timed message box |
| 0xEE | C→S | on_EE_Ep3 | Card trade operations |
| 0xEE | S→C | — | Card trade state advance / complete |
| 0xEF | C→S | on_EF_Ep3 | Card auction |
| 0xEF | S→C | — | Start card auction |
GC/Xbox-Specific Commands
| Opcode | Direction | Handler | Description |
|---|
| 0xD7 | C→S | on_D7_GC | GBA game file request (GC) |
| 0xD0 | C→S | on_D0_V3_BB | Choice search criteria update (V3/BB) |
| 0xD2 | C→S | on_D2_V3_BB | Choice search request (V3/BB) |
| 0xD4 | C→S | on_D4_V3_BB | Choice search result select (V3/BB) |
DC NTE-Specific Commands
| Opcode | Direction | Handler | Description |
|---|
| 0x88 | C→S | on_88_DCNTE | Login |
| 0x8A | C→S | on_8A | Connection info |
| 0x8B | C→S | on_8B_DCNTE | Extended login |
| 0x8E | C→S | on_8E_DCNTE | Ship change (maps to 0xA0) |
| 0x8F | C→S | on_8F_DCNTE | Block change (maps to 0xA1) |
Item & Shop Commands
| Opcode | Direction | Description |
|---|
| 0x24 | S→C | Exchange secret lottery ticket result (BB) |
| 0x25 | S→C | Gallon plan result (BB) |
Game Subcommands Reference (0x60/0x62/0x6C/0x6D)
Game subcommands are carried inside the main protocol commands 0x60 (broadcast), 0x62 (to specific player), 0x6C (extended broadcast), 0x6D (extended to specific player). Each subcommand has a 1-byte sub-opcode (0x00-0xFF).
Subcommand Header Format
Standard header: 4 bytes — subcommand(1), size_in_dwords(1), data...
Extended header (size=0): 8 bytes — subcommand(1), 0x00, extended_size(4), data...
Version Mapping
Each subcommand has three opcode columns:
- DC NTE — Dreamcast Network Trial Edition
- DC 11/2000 — Dreamcast prototype (Nov 2000)
- Final — All other versions (DCV1, DCV2, PC, GC, EP3, XB, BB)
NONE means the subcommand does not exist for that version.
Player Movement & Position
| Sub-opcode | Handler | Description |
|---|
| 6x1F | on_change_floor | Change floor (includes teleport/pipe transitions) |
| 6x20 | on_movement_xyz_with_floor | Set position with floor (SetPosition) |
| 6x21 | on_change_floor | Change floor (alternate) |
| 6x24 | on_movement_xyz | Teleport player to XYZ position |
| 6x3E | on_movement_xyz_with_floor | Stop at position |
| 6x3F | on_movement_xyz_with_floor | Set position (alternate) |
| 6x40 | on_movement_xz | Walk to position (XZ plane) |
| 6x41 | on_movement_xz | Run/move to position |
| 6x42 | on_movement_xz | Run/move to position (alternate) |
| 6x55 | on_movement_xyz | Intra-map warp |
| 6x56 | on_movement_xyz | Set player position and angle |
| 6x94 | on_warp | Warp to another area |
Player State & Animation
| Sub-opcode | Handler | Description |
|---|
| 6x02 | forward_subcommand_m | (basic forward) |
| 6x03 | forward_subcommand_m | (basic forward) |
| 6x04 | forward_subcommand_m | (basic forward) |
| 6x05 | on_switch_state_changed | Switch state changed |
| 6x0C | on_received_condition | Received negative condition (status effect) |
| 6x0E | forward (entity_id_transcode) | Clear negative status effects |
| 6x17 | on_set_entity_pos_and_angle | Set entity position and angle |
| 6x23 | on_set_player_visible | Set player visible |
| 6x2F | on_change_hp | Change player HP |
| 6x30 | on_level_up | Player level up |
| 6x4A | on_change_hp | Change HP (variant) |
| 6x4B | on_change_hp | Change HP (variant) |
| 6x4C | on_change_hp | Change HP (variant) |
| 6x4D | on_player_died | Player died |
| 6x4E | on_player_revivable | Player became revivable |
| 6x4F | on_player_revived | Player revived |
| 6x52 | on_set_animation_state | Set animation state |
Item & Inventory Operations
| Sub-opcode | Handler | Description |
|---|
| 6x25 | on_equip_item | Equip item |
| 6x26 | on_unequip_item | Unequip item |
| 6x27 | on_use_item | Use item (consume) |
| 6x28 | on_feed_mag | Feed MAG |
| 6x29 | on_destroy_inventory_item | Destroy item in inventory |
| 6x2A | on_player_drop_item | Player drops item to floor |
| 6x2B | on_create_inventory_item | Create item in inventory |
| 6x59 | on_pick_up_item | Pick up item (confirmed) |
| 6x5A | on_pick_up_item_request | Pick up item request |
| 6x5C | on_destroy_floor_item | Destroy floor item |
| 6x5D | on_drop_partial_stack | Drop partial stack of items |
| 6x5E | on_buy_shop_item | Buy item from shop |
| 6x5F | on_box_or_enemy_item_drop | Box/enemy item drop notification |
| 6x60 | on_entity_drop_item_request | Entity drop item request |
| 6x63 | on_destroy_floor_item | Destroy floor item (alternate) |
| 6xA2 | on_entity_drop_item_request | Entity drop item request (alternate) |
Combat & Attack
| Sub-opcode | Handler | Description |
|---|
| 6x46 | forward (entity_targets_transcode) | Attack finished (hit targets) |
| 6x47 | forward (entity_targets_transcode) | Cast technique (hit targets) |
| 6x48 | on_cast_technique_finished | Technique cast finished |
| 6x49 | forward (entity_targets_transcode) | Execute photon blast (hit targets) |
| 6x89 | forward (entity_id_transcode) | Set killer entity ID |
| 6x8F | forward (entity_id_transcode) | Add battle damage scores |
| 6x91 | on_update_attackable_col_state | Update attackable collision state |
| 6xE4 | on_incr_enemy_damage | Increment enemy damage (extended) |
Boss Actions
| Sub-opcode | Handler | Description |
|---|
| 6x10 | forward (entity_id_transcode) | Dragon boss actions |
| 6x11 | forward (entity_id_transcode) | Dragon boss actions (alt) |
| 6x12 | on_dragon_actions | Dragon actions (special) |
| 6x13 | forward (entity_id_transcode) | De Rol Le boss actions |
| 6x14 | forward (entity_id_transcode) | De Rol Le boss actions with target |
| 6x15 | forward (entity_id_transcode) | Vol Opt boss actions |
| 6x16 | on_vol_opt_actions | Vol Opt boss actions (special) |
| 6x18 | forward (entity_id_transcode) | Vol Opt Phase 2 boss actions |
| 6x19 | forward (entity_id_transcode) | Dark Falz actions |
| 6x84 | on_vol_opt_actions | Vol Opt boss actions (V2+) |
| 6x9F | forward (entity_id_transcode) | Gal Gryphon boss actions |
| 6xA0 | forward (entity_id_transcode) | Gal Gryphon boss actions (alt) |
| 6xA3 | forward (entity_id_transcode) | Olga Flow boss actions |
| 6xA4 | forward (entity_id_transcode) | Olga Flow boss actions (alt) |
| 6xA5 | forward (entity_id_transcode) | Olga Flow boss actions (alt 2) |
| 6xA8 | on_gol_dragon_actions | Gol Dragon actions |
| 6xA9 | forward (entity_id_transcode) | Barba Ray boss actions |
| 6xAA | forward (entity_id_transcode) | Barba Ray boss actions (alt) |
Enemy & Object State
| Sub-opcode | Handler | Description |
|---|
| 6x0A | on_update_enemy_state | Update enemy state |
| 6x0B | on_update_object_state | Update object state |
| 6x76 | on_set_entity_set_flag | Set entity set flag |
| 6x86 | on_update_object_state | Hit destructible object |
| 6x9C | on_set_enemy_low_game_flags_ultimate | Set enemy flags (Ultimate difficulty) |
Game Sync & Join
| Sub-opcode | Handler | Description |
|---|
| 6x6B | on_sync_joining_player_compressed_state | Sync joining player state (compressed, player 0) |
| 6x6C | on_sync_joining_player_compressed_state | Sync joining player state (compressed, player 1) |
| 6x6D | on_sync_joining_player_compressed_state | Sync joining player state (compressed, player 2) |
| 6x6E | on_sync_joining_player_compressed_state | Sync joining player state (compressed, player 3) |
| 6x6F | on_sync_joining_player_quest_flags | Sync joining player quest flags |
| 6x70 | on_sync_joining_player_disp_and_inventory | Sync joining player display data and inventory |
Event & Map Triggers
| Sub-opcode | Handler | Description |
|---|
| 6x67 | on_trigger_set_event | Trigger set event |
| 6x68 | on_update_telepipe_state | Update telepipe state |
| 6x69 | on_npc_control | NPC control |
| 6x6A | on_set_boss_warp_flags | Set boss warp flags |
| 6x75 | on_set_quest_flag | Set quest flag |
| 6x77 | on_sync_quest_register | Sync quest register |
| 6x93 | on_activate_timed_switch | Activate timed switch |
Communication
| Sub-opcode | Handler | Description |
|---|
| 6x06 | on_send_guild_card | Send guild card to another player |
| 6x07 | on_symbol_chat | Symbol chat |
| 6x74 | on_word_select | Word select (predefined phrases) |
| 6xBD | on_ep3_private_word_select_bb_bank_action | EP3 private word select / BB bank action |
| 6xB2 | on_play_sound_from_player | Play sound effect from player |
Challenge & Battle Mode
| Sub-opcode | Handler | Description |
|---|
| 6x7C | on_challenge_update_records | Update challenge mode records |
| 6x7D | on_update_battle_data | Update battle mode data |
| 6x7F | on_battle_scores | Battle mode scores |
| 6x97 | on_challenge_mode_retry_or_quit | Challenge mode retry or quit |
| 6xCF | on_battle_restart_bb | Battle mode restart (BB) |
| 6xD0 | on_battle_level_up_bb | Battle mode level up (BB) |
| 6xD1 | on_request_challenge_grave_recovery_item_bb | Challenge grave recovery item (BB) |
BB-Specific Subcommands
| Sub-opcode | Handler | Description |
|---|
| 6xB5 | on_open_shop_bb_or_ep3_battle_subs | Open shop (BB) / EP3 battle subs |
| 6xB7 | on_buy_shop_item_bb | Buy shop item (BB) |
| 6xB8 | on_identify_item_bb | Identify item (Tekker) |
| 6xBA | on_accept_identify_item_bb | Accept identified item |
| 6xBB | on_open_bank_bb_or_card_trade_counter_ep3 | Open bank (BB) / Card trade counter (EP3) |
| 6xC0 | on_sell_item_at_shop_bb | Sell item at shop |
| 6xC3 | on_drop_partial_stack_bb | Drop partial stack |
| 6xC4 | on_sort_inventory_bb | Sort inventory |
| 6xC5 | on_medical_center_bb | Medical center (heal) |
| 6xC6 | on_steal_exp_bb | Steal EXP (weapon special) |
| 6xC7 | on_charge_attack_bb | Charge attack (weapon special) |
| 6xC8 | on_enemy_exp_request_bb | Enemy EXP request |
| 6xC9 | on_adjust_player_meseta_bb | Adjust player meseta |
| 6xCA | on_quest_create_item_bb | Quest create item |
| 6xCB | on_transfer_item_via_mail_message_bb | Transfer item via mail |
| 6xCC | on_exchange_item_for_team_points_bb | Exchange item for team points |
| 6xD2 | on_write_quest_counter_bb | Write quest counter |
| 6xD5 | on_quest_exchange_item_bb | Quest exchange item |
| 6xD6 | on_wrap_item_bb | Wrap item (present) |
| 6xD7 | on_photon_drop_exchange_for_item_bb | Photon Drop exchange for item |
| 6xD8 | on_photon_drop_exchange_for_s_rank_special_bb | Photon Drop exchange for S-Rank special |
| 6xD9 | on_momoka_item_exchange_bb | Momoka item exchange |
| 6xDA | on_upgrade_weapon_attribute_bb | Upgrade weapon attribute |
| 6xDE | on_secret_lottery_ticket_exchange_bb | Secret lottery ticket exchange |
| 6xDF | on_photon_crystal_exchange_bb | Photon Crystal exchange |
| 6xE0 | on_quest_F95E_result_bb | Quest F95E result |
| 6xE1 | on_quest_F95F_result_bb | Quest F95F result |
| 6xE2 | on_quest_F960_result_bb | Quest F960 result |
EP3 Card Battle Subcommands
| Sub-opcode | Handler | Description |
|---|
| 6xBC | on_ep3_trade_card_counts | EP3 trade card counts |
| 6xBF | on_forward_check_ep3_lobby | EP3 lobby forward |
Xbox-Specific
| Sub-opcode | Handler | Description |
|---|
| 6xB3 | on_xbox_voice_chat_control | Xbox voice chat control |
| 6xB4 | on_xbox_voice_chat_control | Xbox voice chat control |
Debug
| Sub-opcode | Handler | Description |
|---|
| 6xFF | on_debug_info | Debug info (extended subcommand, used for debugging patches) |
Summary
Total subcommands defined: 256 (0x00-0xFF)
- Active handlers (not
on_invalid): ~160 - Forward-only (no server-side logic): ~60
- Server-side processing: ~100