What the fight tells your browser
The messages that cross between this site's server and your screen — which are the game's own, and the four we had to invent because the game has no way to say them.
Every number you see in a fight arrives as a message. This page says which of those messages are the real game's and which are ours, because the difference is the difference between "this site reproduces Silkroad" and "this site is like Silkroad".
The game's own messages · Game
Almost everything is the shard's own vocabulary, unchanged: a body appearing or leaving, where it is walking, a cast starting and what it did, health and mana moving, which bad statuses are on you, a buff going on or coming off, an item being used. The reader that decodes them in your browser is a port of the client's own code, so what your screen believes is what a real client would believe.
The one about damage is worth knowing. A hit does not arrive as a plain number: it arrives with flags saying what kind of hit it was — an ordinary one, a critical, a block, one that pierced defence, one that knocked you down or threw you back — and the number beside them. That is why the fight can tell you why a swing did what it did rather than only how much.
The four we invented · Ours
The shard has no way to say some things, because in the real game nothing needs to. Rather than bend an existing message into a shape it does not have, this site uses four numbers no real client ever sends or receives. They are deliberately outside the range the game uses, so nothing can collide with them, and the bridge that speaks to real clients never emits them.
| What it says | Why the game has no message for it |
|---|---|
| Whether you are fighting or watching | A room here can be opened by one person and walked into by another. The real game has no such thing |
| That the fight is over, who won, and how many fell | The real game has no "fight": you simply stop being attacked, or you die |
| How long each status and buff has left | The shard's own status message carries no clock. The real client does not need one — the server takes the status off when it ends and the client just believes it. Ours draws a countdown, so the number has to travel |
| Why something you pressed did nothing | The game refuses a walk in silence. "I click and nothing happens" had no answer, so now every refusal carries its own reason |
The third one is the clearest example of the trade. The real game's status message is a bare set of flags — what is on you, nothing more. A page that draws a ticking clock beside each icon needs a number the original never sends, so we send it on a channel of our own and label it as ours rather than pretending the shard provides it.
What we leave unsaid · Missing
The shard's messages carry far more than a fight needs — trade, jobs, guilds, parties, shops, mail. This site's server never sends any of them, and the reader in your browser would not know what to do with them if it did. The appendix below documents the layouts anyway, because they are what our reading of the shard is checked against.
For anyone opening the binary
Everything below is reference: hit-state flags, packet layouts, item and monster classification, and the config a real shard runs on, recovered from the original server's own files. It describes their messages, not ours.
Hit State Flags (ActionHitStateFlag)
Normal - Regular hit
Block - Blocked (no damage)
KnockBack - Knockback (position data follows)
Dead - Entity died
Damage Packet Layout (from server)
1. Hit State flags (byte)
2. Crit status (byte): 0x01 = normal, 0x02 = critical
3. Damage value (3 bytes, little-endian, combined into Int32)
4. Unknown state (4 bytes)
KnockBack Packet Layout
When HitState has KnockBack flag:
- Position data follows: Position X, Y, Z (as Int32 from packet)
Magic Options & Alchemy Stats
Magic Option Types (from NATTR_ definitions)
| Code | Stat Name |
|---|---|
| NATTR_DUR | Durability |
| NATTR_PDSTR | Physical Defense (STR) |
| NATTR_MDINT | Magical Defense (INT) |
| NATTR_PD | Physical Defense |
| NATTR_MD | Magical Defense |
| NATTR_ER | Evasion Rate |
| NATTR_PASTR | Physical Attack (STR) |
| NATTR_MAINT | Magical Attack (INT) |
| NATTR_HR | Hit Rate |
| NATTR_PA | Physical Attack |
| NATTR_MA | Magical Attack |
| NATTR_CRITICAL | Critical Hit Chance |
| NATTR_BR | Block Rate |
| NATTR_PAR | Physical Attack Rating |
| NATTR_MAR | Magical Attack Rating |
Magic Option Bonuses (format strings from server)
| Format String | Meaning |
|---|---|
| reinforce +%d%% | Plus level bonus |
| anti-burn +%d%% | Burn resistance |
| critical +%d | Critical bonus (flat) |
| block rate +%d | Block rate bonus (flat) |
| resist stun +%d%% | Stun resistance (percent) |
| anti-eshock +%d%% | Electric shock resistance |
| resist disease +%d%% | Disease resistance |
| resist sleep +%d%% | Sleep resistance |
| NASRUN umpc +%d%% | ??? (MP consumption reduction?) |
| NASRUN umdc +%d%% | ??? (??? damage reduction?) |
Alchemy System
- Magic stones (Luck 07, 08, 09 grades) - add blue stats
- Attribute stones - add attributes (physical/magical)
- Element stones - add element (Fire, etc.)
- Reinforce recipes - required for +ing items (Weapon, Shield, Armor, Accessory)
- Rondo (01, 02) - Lucky powder for success rate
- Sockets: Maker, StoneInserter, StoneEraser classes exist
- Avatar items have separate enchanting system
Enchant Classes
CEnchant_EnchantAttrStone - Add attribute (STR/INT)
CEnchant_EnchantMagicStone - Add magic option (blue stats)
CEnchant_Reinforce - Plus (+) items
CEnchant_UpperReinforce - Advanced plus
CEnchant_SocketMaker - Make socket holes
CEnchant_SocketStoneInserter - Insert socket stones
CEnchant_SocketStoneEraser - Remove socket stones
CEnchant_EnchantAvatarItem - Avatar enchanting
CBless_AvatarItemWithNPC - Bless avatar with NPC
Success Rate Functions
_SumSuccessRatio()- Calculate alchemy success_GetTotalSuccessRatio()- Total success calculation- Avatar items can reach 100% success rate
Skill Data Format (from skills_raw.txt)
Skills table has 6,631 entries. Format:
ID, ReqCommon_Mastery1, Basic_Code, ReqCommon_MasteryLevel1,
Action_CastingTime, Consume_MP, UI_IconFile, UI_SkillName, ReqLearn_Race
Example (Sword Smash A level 1):
ID: 3
Mastery: 257 (Sword Mastery)
Code: SKILL_CH_SWORD_SMASH_A_01
Req Level: 5
Casting Time: 411ms
Consume MP: 19
Icon: skill\china\sword_smash_a.ddj
Race: 0 (Chinese)
Skill Series Progression (example - Sword Smash)
| Level | Mastery Level | MP Cost | Series |
|---|---|---|---|
| A_01 | 5 | 19 | Smash A |
| A_02 | 7 | 23 | Smash A |
| A_03 | 9 | 27 | Smash A |
| A_04 | 11 | 31 | Smash A |
| A_05 | 13 | 36 | Smash A |
| A_06 | 15 | 42 | Smash A |
| A_07 | 17 | 47 | Smash A |
| A_08 | 19 | 53 | Smash A |
| A_09 | 21 | 60 | Smash A |
| B_01 | 27 | 91 | Smash B |
| B_02 | 29 | 100 | Smash B |
| C_01 | 49 | 290 | Smash C |
Item Data Format (from items_raw_new.txt)
Items table has 8,513 entries. Format:
ID, CodeName128, NameStrID128, AssocFileObj128,
TypeID1, TypeID2, TypeID3, TypeID4,
ItemClass, ReqGender, ReqStr, ReqInt, ReqLevel1
TypeID Classification
TypeID1 = Main type, TypeID2 = Sub-type, TypeID3 = Sub-sub-type, TypeID4 = Detail
Item Classes (ItemClass)
| Class | Meaning |
|---|---|
| 1 | Equipment (weapon) |
| 2 | Equipment (armor) |
| ... | ... |
Item Categories (by CodeName prefix)
| Prefix | Category |
|---|---|
| ITEM_CH_SWORD_ | Chinese Sword |
| ITEM_CH_BLADE_ | Chinese Blade |
| ITEM_CH_SPEAR_ | Chinese Spear |
| ITEM_CH_BOW_ | Chinese Bow |
| ITEM_CH_TBLADE_ | Chinese Two-handed Blade |
| ITEM_CH_SHIELD_ | Chinese Shield |
| ITEM_CH_M_CLOTHES_ | Chinese Male Clothes |
| ITEM_CH_W_CLOTHES_ | Chinese Female Clothes |
| ITEM_CH_M_HEAVY_ | Chinese Male Heavy Armor |
| ITEM_CH_W_HEAVY_ | Chinese Female Heavy Armor |
| ITEM_CH_M_LIGHT_ | Chinese Male Light Armor |
| ITEM_CH_W_LIGHT_ | Chinese Female Light Armor |
| ITEM_CH_NECKLACE_ | Necklace |
| ITEM_CH_RING_ | Ring |
| ITEM_CH_EARRING_ | Earring |
| ITEM_EU_SWORD_ | European Sword |
| ITEM_EU_TSWORD_ | European Two-handed Sword |
| ITEM_EU_AXE_ | European Axe |
| ITEM_EU_CROSSBOW_ | European Crossbow |
| ITEM_EU_DAGGER_ | European Dagger |
| ITEM_EU_HARP_ | European Harp |
| ITEM_EU_WAND_ | European Wand |
| ITEM_EU_STAFF_ | European Staff |
| ITEM_EU_SHIELD_ | European Shield |
| ITEM_EU_M_CLOTHES_ | European Male Clothes |
| ITEM_EU_W_CLOTHES_ | European Female Clothes |
| ITEM_EU_M_HEAVY_ | European Male Heavy Armor |
| ITEM_EU_W_HEAVY_ | European Female Heavy Armor |
| ITEM_EU_M_LIGHT_ | European Male Light Armor |
| ITEM_EU_W_LIGHT_ | European Female Light Armor |
| ITEM_ETC_ | Etc/Consumable items |
Item Grade (A/B/C suffix)
- A = Basic (low stats)
- B = Normal (medium stats)
- C = Premium (high stats)
Item Degree (number before underscore)
Higher number = higher degree = higher level requirement e.g., SWORD_01 = degree 1, SWORD_11 = degree 11
Monster Data Format (from monsters_raw.txt)
Monsters table has 13,662 entries. Format:
ID, CodeName128, NameStrID128, AssocFileObj128, Lvl, MaxHP, MaxMP
Monster Type Prefixes
| Prefix | Region |
|---|---|
| MOB_CH_ | China (Jangan area) |
| MOB_WC_ | West China (Donwhang) |
| MOB_KT_ | ??? |
| MOB_EU_ | Europe (Constantinople) |
| MOB_CA_ | Central Asia (Hotan) |
| MOB_SD_ | Special Dungeon |
| MOB_RM_ | Roc Mountain |
| MOB_EVE_ | Event monsters |
| MOB_TQ_ | Unique monsters (quest) |
Monster Clones
Monsters suffixed with _CLON are clone variations (different stats for higher/lower level areas).
Monster Spawn System
SpawnMonster[CodeName]-RegionXZ[X, Z] PositionXYZ[X, Y, Z]
- Monsters spawn in specific regions with exact coordinates
GiantMonster_SpawnRatiocontrols unique monster spawn rateAGGRO_LINK_DECREASE_RATIOcontrols aggro chaining
Movement & Position Data
Position Format
- Server sends position as
RegionID, X, Y, Z(floating point) - Positions are region-based (128 regions on the SRO world map)
- Each region has blocks with cells for navigation
Movement Boundaries
Cell-basedmovement systemTotal Block Size,CurBlockID,DestBlockID- Path dataCurPosRegionID, CurPosRegion X, CurPosRegion Z- Current positionFastestCurBlockCellID- Pathfinding cell ID
Speed Config
PCSpeedRatio- Global player speed multiplier- Speed scrolls exist:
ITEM_ETC_E051123_SPEED_UP_SCROLL
NavMesh System
The server uses a NavMesh system for pathfinding:
NavMesh_newlibraryRTNavMeshTerrain- Terrain navigationRTNavMeshDungeon- Dungeon navigationRTNavMeshObj- Object navigationRTNavEdge- Navigation edgesRegionManagerBody- Region boundary management
Game World / Instance System
World Types
- Normal overland worlds (shared by all players)
- Dungeon instances (private/party)
- Siege fortress dungeons
- Event worlds
GAME_WORLD_NORMALIZE_TYPE,GAME_WORLD_NORMALIZE_TYPE_A
Dungeon System
- SimpleDungeonData files for dungeon layouts
INS_SIEGE_DUNGEON- Siege dungeon instanceTrying to warp to dungeon!!!- Debug message- Can't open chin's tomb instance (missing ref data)
Instance Data
_CharInstanceWorldDatatable - tracks character's instance progressSetupInstanceDataAccess- Initialize instance data- Max instance dungeon count: server controlled
PvP & Battle Arena
Arena Types (from server.cfg)
BattleArenaRandom 1 - Random arena
BattleArenaParty 1 - Party arena
BattleArenaGuild 1 - Guild arena
BattleArenaJob 1 - Job arena
ArenaMatchOccupy 1 - Occupy match
ArenaMatchFlag 1 - Flag/CTF match
ArenaMatchPoint 1 - Point match
Arena Rewards (Evangelion config)
- Guild & Job arena: win/loose reward count configurable
- Random & Party arena: win/loose reward count configurable
- CTF reward count configurable
- Reward item codes configurable via
arenaRewards/ctfRewardssections
Cash Shop System
Cash Item Types
_STRG_BUY_CASHITEM_EXP - EXP boost items
_STRG_BUY_CASHITEM_EQUIP_NORMAL - Equipment from cash shop
Cash Items Referenced
ITEM_MALL_SKILL_RESTORATION_POTION - Skill reset potion
ITEM_MALL_PREMIUM_GOLDTIME - Premium gold time
ITEM_PRE_GOLTAM_4W - Premium 4 weeks
ITEM_MALL_DAMAGE_INC_20P_SCROLL - Damage increase 20%
ITEM_MALL_DAMAGE_ABS_20P_SCROLL - Damage absorb 20%
Cash Item Service
Trying to add CashItem, is not in service!- Service checkMAX_CASHITEM_TID_COUNT- Max cash item typesbtCash < MAX_CASHITEM_TID_COUNT- Assertion check
Job/Mastery System
Mastery Types (from skill data)
| ID | Mastery |
|---|---|
| 257 | Chinese Sword (Bicheon) |
| 513 | European Warrior Shield |
| ??? | Chinese Spear (Haeksal) |
| ??? | Chinese Bow (Pacheon) |
| ... | ... |
Job Levels
- Skill levels tied to mastery level
_REFHWANLEVELtable for mastery level dataReqCommon_MasteryLevel1in skill data
Skill Point Management
RemainSkillPoint- Available skill pointsOffsetSkillPoint- Modify skill pointsSkill Learn Abuser!!- Anti-cheat for skill learning
Event System
Event Types (from server.cfg comments)
WINTER_EVENT_2009
EUBUSINESS_EVENT
GOLDEN_PIG_FEBRUARY_EVENT
THANKS_GIVING_EVENT
LIBERATION_EVENT
Event Triggers
CGameTriggerCondition_MONSTER_LEVEL_KILL
CGameTriggerCondition_USER_LEVEL
CGameTriggerCondition_POSITION_EVENTZONE_IN
CGameTriggerCondition_POSITION_EVENTZONE_OUT
CGameTriggerEvent_POSITION_EVENTZONE
CGameTriggerAction_CREATEOBJECT_TELEPORT
CGameTriggerAction_SWITCH_TELEPORT
Event Items
ITEM_EVENT_DAMAGE_ABS_20P_SCROLL
ITEM_EVENT_DAMAGE_INC_20P_SCROLL
ITEM_EVENT_REVERSE_RETURN_SCROLL
ITEM_EVENT_RETURN_SCROLL_HIGH_SPEED
ITEM_EVENT_COS_C_SCARABAEUS_SCROLL
ITEM_EVENT_COS_C_WILDPIG_SCROLL
ITEM_EVENT_COS_C_OSTRICH_SCROLL
ITEM_EVENT_COS_C_PEGASUS_SCROLL
Server Events (scheduled)
_AddLogSchedule
_AddLogServerEvent
schedule.cfg - Schedule configuration file
Repository File Structure (for wiki dev)
Key Data Files Available
VSRO_Database/
items_raw.txt - 8,513 items (basic: ID, CodeName, TypeIDs, Class, Req)
items_raw_new.txt - 8,513 items (extended: +ReqLevel1)
monsters_raw.txt - 13,662 monsters (ID, CodeName, Level, MaxHP, MaxMP)
*.bak - Full SQL Server database backups
pk2_extractor/
skills_raw.txt - 6,631 skills (ID, Mastery, Code, CastTime, MPCost, Icon)
textdata_equip&skill.txt - Binary skill/item text data
textdata_new.txt - Binary updated text data
*.py - Python extraction scripts
sro-web/public/models/
monsters_db.json - Monster data dump
items_db.json - Items data dump
skills_db.json - Skills data dump
catalog.json - Item catalog tree
character_textures.json - Character texture variants
Server/
SR_GameServer.exe - Main game server (contains ALL game logic)
Evangelion.dll - Custom server modifications
server.cfg - Server configuration
schedule.cfg - Scheduled events
regioninfo.txt - Region data
3D Model Formats
.bsr - Binary Scene Resource (main model file)
.ddj - Skeleton/Animation descriptor
.bms - Binary Mesh (vertex data)
.bsk - Skeleton (bone hierarchy)
.ban - Animation (keyframe data)
.bmt - Material/Texture
Map Data Files (in project root)
*.m - Terrain: heights, tiles, water (JMXVMAPM1000)
*.o, *.o2 - Object placements (JMXVMAPO1001)
*.t - Tile/texture map (JMXVMAPT1001)
mapinfo.mfo - Map metadata
object.ifo - Placed objects
objectstring.ifo - Object name strings
tile2d.ifo - 2D tile data