Rose Online File Formats
Updated: 2019-09-28
Credit: osROSE Community
Implementations
- Revise by Jack Wakefield (C#)
- Rose Lib by Ralph Minderhoud (Rust)
- Original client/engine by Triggersoft
Links:
AIP
CON
CHR
EFT
HIM
HLP
IDX
IFO
LIT
LOD
LTB
MOV
PTL
QSD
STB
STL
TBL
TIL
TSI
ZCA
ZMD
ZMO
ZMS
ZON
ZSC
Misc
Packets
Ops
AIP
DWORD trigger_count
DWORD idle_check
DWORD damage_check
LSTR title
:FOREACH( trigger_count )
FSTR[0x20] trigger_name
DWORD block_count
:FOREACH( block_count )
FSTR[0x20] block_name
DWORD condition_count
:FOREACH( condition_count )
DWORD part_size
DWORD part_cmd
:PACK[4]
:IF( partcmd == E[conditions].RECVDAMAGE )
DWORD damage
BYTE recvorgive
:ELSEIF( partcmd == E[conditions].FINDOBJECT1 )
DWORD distance
BYTE isallied
WORD levelmin
WORD levelmax
WORD charnum
:ELSEIF( partcmd == E[conditions].SPAWNDISTANCE )
DWORD distance
:ELSEIF( partcmd == E[conditions].TARGETDISTANCE )
DWORD distance
BYTE moreorless
:ELSEIF( partcmd == E[conditions].TARGETABILITY )
BYTE abilitytype
DWORD difference
BYTE moreorless
:ELSEIF( partcmd == E[conditions].HPPERCENT )
DWORD hp
BYTE moreorless
:ELSEIF( partcmd == E[conditions].RANDOMCHANCE )
BYTE percent
:ELSEIF( partcmd == E[conditions].FINDOBJECT2 )
DWORD distance
WORD levelmin
WORD levelmax
BYTE isallied
:ELSEIF( partcmd == E[conditions].TARGETDESTCHECK )
:ELSEIF( partcmd == E[conditions].TARGETDESTABILITY )
BYTE abilitytype
BYTE moreorless
:ELSEIF( partcmd == E[conditions].DESTABILITY )
BYTE abilitytype
DWORD value
BYTE moreorless
:ELSEIF( partcmd == E[conditions].DAYNIGHT )
BYTE when
:ELSEIF( partcmd == E[conditions].TARGETMAGICSTATUS )
BYTE checktarget
BYTE statustype
BYTE hasstatus
:ELSEIF( partcmd == E[conditions].OBJECTVAR )
BYTE varindex
DWORD value
BYTE operator
:ELSEIF( partcmd == E[conditions].WORLDVAR )
BYTE varindex
DWORD value
BYTE operator
:ELSEIF( partcmd == E[conditions].ECONOMYVAR )
BYTE varindex
DWORD value
BYTE operator
:ELSEIF( partcmd == E[conditions].SELECTNPC )
DWORD npcid
:ELSEIF( partcmd == E[conditions].OWNERDISTANCE )
DWORD distance
BYTE operator
:ELSEIF( partcmd == E[conditions].ZONETIME )
DWORD starttime
DWORD endtime
:ELSEIF( partcmd == E[conditions].ABILITY )
BYTE abilitytype
DWORD value
BYTE operator
:ELSEIF( partcmd == E[conditions].OWNEREXISTS )
:ELSEIF( partcmd == E[conditions].OWNERHASTARGET )
:ELSEIF( partcmd == E[conditions].WORLDTIME )
DWORD starttime
DWORD endtime
:ELSEIF( partcmd == E[conditions].LOCALTIMEDATE )
BYTE date
BYTE hour1
BYTE min1
BYTE hour2
BYTE min2
:ELSEIF( partcmd == E[conditions].LOCALTIMEDAY )
BYTE weekday
BYTE hour1
BYTE min1
BYTE hour2
BYTE min2
:ELSEIF( partcmd == E[conditions].CHECKCHANNEL )
WORD min
WORD max
:ELSEIF( partcmd == E[conditions].FINDOBJECT3 )
DWORD distance
BYTE isallied
WORD levelmin
WORD levelmax
WORD charnum
BYTE operator
:ELSEIF( partcmd == E[conditions].AIVARIABLE )
WORD varindex
BYTE operator
DWORD value
:ENDIF
:ENDFOR
:PACK[1]
DWORD action_count
:FOREACH( action_count )
DWORD part_size
DWORD part_cmd
-- NOT DONE
:ENDFOR
:ENDFOR
:ENDFOR
CHR
WORD meshcount
:FOREACH( meshcount )
ZSTR path
:ENDFOR
WORD motioncount
:FOREACH( motioncount )
ZSTR path
:ENDFOR
WORD effectcount
:FOREACH( effectcount )
ZSTR path
:ENDFOR
WORD charactercount
:FOREACH( charactercount )
BYTE isactive
:IF( isactive )
WORD boneid
ZSTR name
WORD meshcount
:FOREACH( meshcount )
WORD meshid // Links to an "object" from the ZSC file
:ENDFOR
WORD motioncount
:FOREACH( motioncount )
WORD id
WORD motionid
:ENDFOR
WORD effectcount
:FOREACH( effectcount )
WORD id
WORD effectid
:ENDFOR
:ENDIF
:ENDFOR
CON
DWORD event_mask
:FOREACH( 16 )
FSTR[0x20] load_function
:ENDFOR
DWORD block_offset
DWORD lua_offset
DWORD init_count
DWORD init_offset
DWORD dialog_count
DWORD dialog_offset
:SEEK[SET] 0x20c + init_offset
:FOREACH( init_count )
DWORD init_dataoffset
:ENDFOR
:FOREACH( init_count )
DWORD entry_id
DWORD command
DWORD data
FSTR[0x20] condition_function
FSTR[0x20] reward_function
DWORD str_id
:ENDFOR
:SEEK[SET] 0x20c + dialog_offset
:FOREACH( block_count )
DWORD block_dataoffset
:ENDFOR
:FOREACH( block_count )
DWORD block_size
DWORD entry_count
:XOR( ( (BYTE)entry_count & 1 ) ? (BYTE)entry_count : (BYTE)block_size)
DWORD[entry_count] entry_lookuptable
:FOREACH( entry_count )
DWORD entry_id
E[dialog_command] command
DWORD data
FSTR[0x20] condition_function
FSTR[0x20] reward_function
DWORD str_id
:ENDFOR
:ENDXOR
:ENDFOR
DWORD code_len
:XOR( ( (BYTE)code_len & 1 ) ? (BYTE)code_len : (BYTE){FILE_SIZE} )
BYTE[code_len] lua_data
:ENDXOR
--
:ENUM dialog_command
CLOSE = 0
NEXTMSG = 1
NPCSAY = 2
PLAYERSELECT = 3
JUMPSELECT = 4
:ENUM
EFT
LSTR name
DWORD use_sound_file
LSTR sound_file_name
DWORD sound_loop_count
DWORD system_count
:FOREACH( system_count )
LSTR name
LSTR unique_name
DWORD stb_index
LSTR ptl_file
DWORD use_animation
LSTR zmo_file
DWORD animation_loop_count
DWORD animation_stb_index
VECTOR3 position
QUARTERNION rotation
DWORD delay
DWORD is_linked
:ENDFOR
DWORD animation_count
:FOREACH( animation_count )
LSTR name
LSTR unique_name
DWORD stb_index
LSTR zms_file
LSTR zmo_file
LSTR dds_file
DWORD alpha_enabled
DWORD two_sided
DWORD alpha_test_enabled
DWORD ztest_enabled
DWORD zwrite_enabled
E[blend_mode] source_blend
E[blend_mode] destination_blend
E[blendop_type] blend_op
DWORD use_animation
LSTR animation_name
DWORD animation_loop_count
DWORD animation_stb_index
VECTOR3 position
QUARTERNION rotation
DWORD delay
DWORD repeat_count
DWORD is_linked
:ENDFOR( animation count )
--
:ENUM[DWORD] blend_mode
ZERO = 1
ONE = 2
SRCCOLOR = 3
INVSRCCOLOR = 4
SRCALPHA = 5
INVSRCALPHA = 6
DESTALPHA = 7
INVDESTALPHA = 8
DESTCOLO = 9
INVDESTCOLOR = 10
SRCALPHASAT = 11
BOTHSRCALPHA = 12
BOTHINVSRCALPHA = 13
BLENDFACTOR = 14
INVBLENDFACTOR = 15
SRCCOLOR2 = 16
INVSRCCOLOR2 = 17
:ENDENUM
:ENUM[DWORD] blendop_type
ADD = 1
SUBTRACT = 2
REVSUBTRACT = 3
MIN = 4
MAX = 5
:ENDENUM
HIM
DWORD width
DWORD height
DWORD grid_count
FLOAT grid_size
:FOREACH( width )
:FOREACH( height )
FLOAT height
:ENDFOR
:ENDFOR
E[collision_type] collision_type
DWORD quadentry_count
:FOREACH( quadentry_count )
FLOAT minZ
FLOAT maxZ
:ENDFOR
:DEFINE quadtree_count = 1 + 4 + 16 + 32
DWORD quadtree_count
:CALL writequadnode( 256 )
:CALL writequadnode( 128 )
:CALL writequadnode( 64 )
:CALL writequadnode( 32 )
--
:FUNCTION writequadnode( divisonsize )
// I can't really write the pseudo-format for this, but basically, it writes
// the min and max heights for each quadratic division of the map quadtree
:ENDFUNCTION
:ENUM[BSTR] collision_type
QUAD = "QUAD"
:ENDENUM
HLP
BSTR version
DWORD root_count // Must be 1
BSTR root_node_name
DWORD node_count
:FOREACH( node_count )
:CALL read_node
:ENDFOR
DWORD page_count
:FOREACH( page_count )
BSTR page_title
BSTR page_content
:ENDFOR
--
:FUNCTION read_node
BSTR node_name
DWORD subnode_count
:FOREACH( subnode_count )
:CALL read_node
:ENDFOR
:ENDFUNCTION
IDX
DWORD base_version
DWORD current_version
DWORD vfs_count
:FOREACH( vfs_count )
SSTR vfs_path
DWORD data_offset
:ENDFOR
:FOREACH( vfs_count )
:SEEK[SET] data_offset
DWORD file_count
DWORD delete_count
DWORD start_offset
:FOREACH file_count
SSTR file_path
DWORD offset
DWORD file_length
DWORD block_size
BYTE deleted
BYTE compressed_type
BYTE encryption_type
DWORD version
DWORD checksum
:ENDFOR
:ENDFOR
IFO
DWORD block_count
:FOREACH( block_count )
E[block_type] block_type
DWORD block_offset
:ENDFOR
:FOREACH( block_count )
:SEEK( block_offset )
:IF( block_type == E[block_type].ECONOMYDATA )
DWORD width
DWORD height
DWORD map_cell_x
DWORD map_cell_y
MATRIX4X4 unused
BSTR block_name
:ENDIF
:IF( block_type == E[block_type].DECORATIONS )
:CALL readbasictype
:ENDIF
:IF( block_type == E[block_type].NPCLOCATIONS )
:CALL readbasictype
DWORD ai_pattern_index
BSTR con_file
:ENDIF
:IF( block_type == E[block_type].BUILDINGS )
:CALL readbasictype
:ENDIF
:IF( block_type == E[block_type].SOUNDEFFECTS )
:CALL readbasictype
BSTR path
DWORD range
DWORD interval
:ENDIF
:IF( block_type == E[block_type].EFFECTS )
:CALL readbasictype
BSTR path
:ENDIF
:IF( block_type == E[block_type].ANIMATABLES )
:CALL readbasictype
:ENDIF
:IF( block_type == E[block_type].WATERBIG )
DWORD x_count
DWORD y_count
:FOREACH( x_count )
:FOREACH( y_count )
BYTE use
FLOAT height
DWORD water_type
DWORD water_index
DWORD reserved
:ENDFOR
:ENDFOR
:GOTO NEXT BLOCK!
:ENDIF
:IF( block_type == E[block_type].MONSTERSPAWNS )
:CALL readbasictype
DWORD spawn_count
:FOREACH( spawn_count )
BSTR spawn_name
DWORD basicmob_count
:FOREACH( basicmob_count )
BSTR mob_name
DWORD monster_id
DWORD amount
:ENDFOR
DWORD tacticmob_count
:FOREACH( tacticmob_count )
BSTR mob_name
DWORD monster_id
DWORD amount
:ENDFOR
DWORD interval
DWORD limit_count
DWORD range
DWORD tactic_points
:ENDFOR
:ENDIF
:IF( block_type == E[block_type].WATERPLANES )
DWORD entry_count
:FOREACH( entry_count )
VECTOR3 start
VECTOR3 end
:ENDFOR
:ENDIF
:IF( block_type == E[block_type].WARPGATES )
:CALL readbasictype
:ENDIF
:IF( block_type == E[block_type].COLLISIONBLOCK )
:CALL readbasictype
:ENDIF
:IF( block_type == E[block_type].TRIGGERS )
:CALL readbasictype
BSTR qsd_trigger
BSTR lua_trigger
:ENDIF
:ENDFOR
--
:FUNCTION readbasictype
DWORD entry_count
:FOREACH( entry_count )
BSTR str_data
WORD warp_id
WORD event_id
DWORD obj_type
DWORD obj_id
DWORD map_pos_x
DWORD map_pos_y
QUARTERNION rotation
VECTOR3 position
VECTOR3 scale
:ENDFOR
:ENDFUNCTION
:ENUM block_type
ECONOMYDATA = 0
DECORATIONS = 1
NPCSPAWNS = 2
BUILDINGS = 3
SOUNDEFFECTS = 4
EFFECTS = 5
ANIMATABLES = 6
WATERBIG = 7
MONSTERSPAWNS = 8
WATERPLANES = 9
WARPGATES = 10
COLLISIONBLOCK = 11
TRIGGERS = 12
:ENDENUM
LIT
DWORD obj_count
:FOREACH obj_count
DWORD part_count
DWORD objid
:FOREACH part_count
BSTR originalname
DWORD part_id
BSTR ddsname
DWORD dds_id
DWORD dds_division_size
DWORD dds_division_count
DWORD dds_part_id
:ENDFOR
:ENDFOR
DWORD dds_count
:FOREACH dds_count
BSTR ddsname
:ENDFOR
LOD
ZSTR name
:FOREACH( 0x1F )
:FOREACH( 0x1F )
DWORD detaillevel
:ENDFOR
:ENDFOR
LTB
DWORD column_count
DWORD row_count
:FOREACH( row_count )
:FOREACH( column_count )
DWORD offset
WORD length
:ENDFOR
:ENDFOR
:FOREACH( row_count )
:FOREACH( column_count )
:SEEK[SET] offset
USTR[length] data
:ENDFOR
:ENDFOR
MOV
DWORD width
DWORD height
:FOREACH( width )
:FOREACH( height )
BYTE iswalkable
:ENDFOR
:ENDFOR
PTL
DWORD emmiter_count
:FOREACH( emmiter_count )
LSTR name
FLOAT2 life_time
FLOAT2 emit_rate
DWORD loop_count
FLOAT3 minimum_spawn_direction
FLOAT3 maximum_spawn_direction
FLOAT3 minimum_emit_radius
FLOAT3 maximum_emit_radius
FLOAT3 minimum_gravity
FLOAT3 maximum_gravity
LSTR texture
DWORD particle_number
DWORD align_type
DWORD update_coordinate
DWORD texture_width
DWORD texture_height
DWORD sprite_type
E[blend_mode] destination_blend_mode
E[blend_mode] source_blend_mode
E[blendop_type] blend_op
DWORD infocount
:FOREACH( infocount )
DWORD type
FLOAT time_range
BYTE fade
:IF( type == E[anim_type].SIZE )
VECTOR2 size
:ELSEIF( type == E[anim_type].EVENTTIMER )
FLOAT val
:ELSEIF( type == E[anim_type].RED )
FLOAT val
:ELSEIF( type == E[anim_type].GREEN )
FLOAT val
:ELSEIF( type == E[anim_type].BLUE )
FLOAT val
:ELSEIF( type == E[anim_type].ALPHA )
FLOAT val
:ELSEIF( type == E[anim_type].COLOR )
RGBA color_minimum
RGBA color_maximum
:ELSEIF( type == E[anim_type].VELOCITYX )
FLOAT val
:ELSEIF( type == E[anim_type].VELOCITYY )
FLOAT val
:ELSEIF( type == E[anim_type].VELOCITYZ )
FLOAT val
:ELSEIF( type == E[anim_type].VELOCITY )
POINT velocty
:ELSEIF( type == E[anim_type].UV)
VECTOR2 val
:ENDIF
:ENDFOR
:ENDFOR
--
:ENUM[DWORD] blend_mode
ZERO = 1
ONE = 2
SRCCOLOR = 3
INVSRCCOLOR = 4
SRCALPHA = 5
INVSRCALPHA = 6
DESTALPHA = 7
INVDESTALPHA = 8
DESTCOLO = 9
INVDESTCOLOR = 10
SRCALPHASAT = 11
BOTHSRCALPHA = 12
BOTHINVSRCALPHA = 13
BLENDFACTOR = 14
INVBLENDFACTOR = 15
SRCCOLOR2 = 16
INVSRCCOLOR2 = 17
:ENDENUM
:ENUM[DWORD] blendop_type
ADD = 1
SUBTRACT = 2
REVSUBTRACT = 3
MIN = 4
MAX = 5
:ENDENUM
:ENUM[DWORD] anim_type
SIZE = 1
TIMER = 2
RED = 3
GREEN = 4
BLUE = 5
ALPHA = 6
COLOR = 7
VELOCITYX = 8
VELOCITYY = 9
VELOCITYZ = 10
VELOCITY = 11
TEXTUREINDEX = 12
:ENDENUM
QSD
DWORD file_version
DWORD block_count
SSTR qsd_name
:FOREACH( block_count )
DWORD record_count
SSTR block_name
:FOREACH( record_count )
BYTE check_next
DWORD condition_count
DWORD action_count
SSTR record_name
:FOREACH( condition_count )
DWORD length
DWORD command
BYTE[length - 8] data
:ENDFOR
:FOREACH( action_count )
DWORD length
DWORD command
BYTE[length - 8] data
:ENDFOR
:ENDFOR
:ENDFOR
STB
FSTR[4] format_code
DWORD data_offset
DWORD rowcount
DWORD columncount
DWORD rowheight
WORD rootcolumnwidth
:FOREACH( columncount )
WORD columnwidth
:ENDFOR
SSSTR rootcolumntitle
:FOREACH( columncount )
SSTR columntitle
:ENDFOR
SSTR rootdata
:FOREACH( rowcount - 1 )
SSTR firstcelldata
:ENDFOR
:SEEK[SET] data_offset
:FOREACH( rowcount - 1 )
:FOREACH( columncount - 1 )
SSTR celldata
:ENDFOR
:ENDFOR
STL
BSTR stl_type
DWORD entry_count
:FOREACH( entry_count )
BSTR string_id
DWORD id
:ENDFOR
DWORD language_count
:FOREACH( language_count )
DWORD language_offset
:ENDFOR
:FOREACH( language_count )
:SEEK[SET] language_offset
:FOREACH( entry_count )
DWORD entry_offset
:ENDFOR
:ENDFOR
:FOREACH( language_count )
:FOREACH( entry_count )
:SEEK[SET] entry_offset
BSTR text
:IF( stl_type == "QEST01" OR stl_type == "ITST01" )
BSTR comment
:IF( stl_type == "QEST01" )
BSTR quest1
BSTR quest2
:ENDIF
:ENDIF
:ENDFOR
:ENDFOR
TBL
WORD max_range
:FOREACH( max_range )
WORD start_index
WORD index_count
:ENDFOR
WORD point_count
:FOREACH( point_count )
POINT val
:ENDFOR
TIL
DWORD width
DWORD height
:FOREACH( width )
:FOREACH( height )
BYTE brush_id
BYTE tile_index
BYTE tile_set_number
DWORD tile_id
:ENDFOR
:ENDFOR
TSI
WORD dds_count
:FOREACH( dds_count )
SSTR path
DWORD colour_key
:ENDFOR
WORD totalelement_count
:FOREACH( dds_count )
WORD ddselement_count
:FOREACH( ddselement_count )
WORD ownerid
DWORD x1
DWORD y1
DWORD x2
DWORD y2
DWORD colour
FSTR[0x20] name
:ENDFOR
:ENDFOR
ZCA
FSTR[7] format_code
E[camera_type] camera_type
MATRIX4X4 model_view_matrix
MATRIX4X4 projection_matrix
FLOAT field_of_view
FLOAT aspect_ratio
FLOAT near_plane
FLOAT far_plane
FLOAT eye_x
FLOAT eye_y
FLOAT eye_z
FLOAT center_x
FLOAT center_y
FLOAT center_z
FLOAT up_x
FLOAT up_y
FLOAT up_z
--
:ENUM[DWORD] camera_type
PERSPECTIVE = 0
ORTHOGANAL = 1
:ENDENUM
ZMD
FSTR[7] format_code
DWORD bone_count
:FOREACH( bone_count )
DWORD parentid
ZSTR name
FLOAT posx
FLOAT posy
FLOAT posz
FLOAT rotw
FLOAT rotx
FLOAT roty
FLOAT rotz
:ENDFOR
DWORD dummy_count
:FOREACH( dummy_count )
ZSTR name
DWORD parentid
FLOAT posx
FLOAT posy
FLOAT posz
FLOAT rotw
FLOAT rotx
FLOAT roty
FLOAT rotz
:ENDFOR
ZMO
FSTR[8] format_code
DWORD fps
DWORD frame_count
DWORD channel_count
:FOREACH( channel_count )
E[track_type] tracktype
DWORD trackid
:ENDFOR
:FOREACH( frame_count )
:FOREACH( channel_count )
:IF( tracktype == E[track_type].POSITION )
VECTOR3 position
:ELSEIF( tracktype == E[track_type].ROTATION )
QUARTERNION rotation
:IF( tracktype == E[track_type].NORMAL )
VECTOR3 normal
:IF( tracktype == E[track_type].ALPHA )
FLOAT alpha
:IF( tracktype == E[track_type].UV1 )
VECTOR2 uv1
:IF( tracktype == E[track_type].UV2 )
VECTOR2 uv2
:IF( tracktype == E[track_type].UV3 )
VECTOR2 uv3
:IF( tracktype == E[track_type].UV4 )
VECTOR2 uv4
:IF( tracktype == E[track_type].TEXTUREANIM )
FLOAT texture_animation
:IF( tracktype == E[track_type].SCALE )
FLOAT scale
:ENDIF
:ENDFOR
:ENDFOR
--
:ENUM track_type
POSITION = 0x2
ROTATION = 0x4
NORMAL = 0x8
ALPHA = 0x10
UV1 = 0x20
UV2 = 0x40
UV3 = 0x80
UV4 = 0x100
TEXTUREANIM = 0x200
SCALE = 0x400
:ENDENUM
ZMS
FSTR[8] format_code
E[vertex_format] vertformat
VECTOR3 minbounds
VECTOR3 maxbounds
// Bone Lookup Table
WORD bone_count
:FOREACH( bone_count )
WORD boneid
:ENDFOR
WORD vert_count
:IF( vertformat & E[vertex_format].POSITION )
:FOREACH( vert_count )
VECTOR3 position
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].NORMAL )
:FOREACH( vert_count )
VECTOR3 normal
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].COLOR )
:FOREACH( vert_count )
RGBA color
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].BONEINDICES && vertformat & E[vertex_format].BONEWEIGHTS )
:FOREACH( vert_count )
FLOAT weight1
FLOAT weight2
FLOAT weight3
FLOAT weight4
WORD boneid1
WORD boneid2
WORD boneid3
WORD boneid4
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].TANGENT )
:FOREACH( vert_count )
VECTOR3 tangent
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].UVMAP1 )
:FOREACH( vert_count )
VECTOR2 UVCoords1
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].UVMAP2 )
:FOREACH( vert_count )
VECTOR2 UVCoords2
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].UVMAP3 )
:FOREACH( vert_count )
VECTOR2 UVCoords3
:ENDFOR
:ENDIF
:IF( vertformat & E[vertex_format].UVMAP4 )
:FOREACH( vert_count )
VECTOR2 UVCoords4
:ENDFOR
:ENDIF
// Triangle Face Data
WORD face_count
:FOREACH( face_count )
WORD vertid1
WORD vertid2
WORD vertid3
:ENDFOR
// Strip Face Data
WORD strip_count
:FOREACH( strip_count )
WORD vertid
:ENDFOR
WORD mattype
--
:ENUM vertex_format
POSITION = 2
NORMAL = 4
COLOR = 8
BONEINDICES = 16
BONEWEIGHTS = 32
TANGENT = 64
UVMAP1 = 128
UVMAP2 = 256
UVMAP3 = 512
UVMAP4 = 1024
:ENDENUM
ZON
DWORD blockcount
:FOREACH( blockcount )
DWORD blockid
DWORD blockoffset
:ENDFOR
:FOREACH( blockcount )
:SEEK[SET] blockoffset
:IF( blockid == E[block_type].BASICINFO )
DWORD zone_type
DWORD zone_width
DWORD zone_height
DWORD grid_count
FLOAT grid_size
DWORD xcount
DWORD ycount
:FOREACH( zone_width )
:FOREACH( zone_height )
BYTE use_map
FLOAT x
FLOAT y
:ENDFOR
:ENDFOR
:ELSEIF( blockid == E[block_type].EVENTPOINTS )
DWORD entrycount
:FOREACH( entrycount )
FLOAT x
FLOAT z
FLOAT y
BSTR name
:ENDFOR
:ELSEIF( blockid == E[block_type].TEXTURELIST )
DWORD entrycount
:FOREACH( entrycount )
BSTR path
:ENDFOR
:ELSEIF( blockid == E[block_type].TILELIST )
DWORD entrycount
:FOREACH( entrycount )
DWORD base1
DWORD base2
DWORD offset1
DWORD offset2
DWORD is_blending
DWORD orientation
DWORD tile_type
:ENDFOR
:ELSEIF( blockid == E[block_type].WTFINFO )
BSTR area_name
DWORD is_underground
BSTR button_bgm
BSTR button_back
DWORD check_count
DWORD standard_population
DWORD standard_growth_rate
DWORD metal_consumption
DWORD stone_consumption
DWORD wood_consumption
DWORD leather_consumption
DWORD cloth_consumption
DWORD alchemy_consumption
DWORD chemical_consumption
DWORD industrial_consumption
DWORD medicine_consumption
DWORD food_consumption
:ENDIF
:ENDFOR
--
:ENUM block_type
BASICINFO = 0
EVENTPOINTS = 1
TEXTURELIST = 2
TILELIST = 3
WTFINFO = 4
:ENDENUM
ZSC
WORD mesh_count
:FOREACH( mesh_count )
ZSTR path
:ENDFOR
WORD material_count
:FOREACH( material_count )
ZSTR path
WORD is_skin
WORD alpha_enabled
WORD two_sided
WORD alpha_test_enabled
WORD alpha_ref_enabled
WORD z_write_enabled
WORD z_test_enabled
WORD blending_mode
WORD specular_enabled
FLOAT alpha
WORD glow_type
FLOAT red
FLOAT green
FLOAT blue
:ENDFOR
WORD effect_count
:FOREACH( effect_count )
ZSTR path
:ENDFOR
WORD object_count
:FOREACH( object_count )
DWORD boundingsphere_radius
DWORD boundingsphere_x
DWORD boundingsphere_y
DWORD mesh_count
:IF( mesh_count > 0 )
:FOREACH( mesh_count )
DWORD mesh_id
DWORD material_id
:WHILE( true )
BYTE flag_id
:IF( flag_id == 0 )
:BREAK
:ENDIF
BYTE flag_size
IF( flag_id == E[flag_type].POSITION )
VECTOR3 pos
:ELSEIF( flag_id == E[flag_type].ROTATION )
QUARTERNION rot
:ELSEIF( flag_id == E[flag_type].SCALE )
VECTOR3 scale
:ELSEIF( flag_id == E[flag_type].AXISROTATION )
QUARTERNION axisrot
:ELSEIF( flag_id == E[flag_type].BONEINDEX )
WORD bone_index
:ELSEIF( flag_id == E[flag_type].DUMMYINDEX )
WORD dummy_index
:ELSEIF( flag_id == E[flag_type].PARENT )
WORD parent
:ELSEIF( flag_id == E[flag_type].COLLISION )
E[collision_info] collision
:ELSEIF( flag_id == E[flag_type].ZMOPATH )
BYTE[flag_size] motion_path
:ELSEIF( flag_id == E[flag_type].RANGEMODE )
WORD range_set
:ELSEIF( flag_id == E[flag_type].LIGHTMAPMODE )
WORD use_lightmap
:ENDIF
:WEND
:ENDFOR
WORD effect_count
:FOREACH( effect_count )
DWORD effect_id
E[effect_type] effect_type
:WHILE( true )
BYTE flag_id
:IF( flag_id == 0 )
:BREAK
:ENDIF
BYTE flag_size
:IF( flag_id == 0x01)
VECTOR3 pos
:ELSEIF( flag_id == 0x02)
QUARTERNION rot
:ELSEIF( flag_id == 0x03)
VECTOR3 scale
:ELSEIF( flag_id == 0x07)
WORD parent
:ELSE
BYTE[flag_size] data
:ENDIF
:ENDWHILE
:ENDFOR
//These are for Bounding Box
VECTOR3 minbounds
VECTOR3 maxbounds
:ENDIF
:ENDFOR
--
:ENUM[WORD] blend_mode
NONE = 0
CUSTOM = 1
NORMAL = 2
LIGHTEN = 3
:ENDENUM
:ENUM[WORD] glow_type
NONE = 0
NOTSET = 1
SIMPLE = 2
LIGHT = 3
TEXTURE = 4
TEXTURELIGHT = 5
ALPHA = 6
:ENDENUM
:ENUM[BYTE] flag_type
POSITION = 0x1
ROTATION = 0x2
SCALE = 0x3
AXISROTATION = 0x4
BONEINDEX = 0x5
DUMMYINDEX = 0x6
PARENT = 0x7
COLLISION = 0x1D
ZMOPATH = 0x1E
RANGEMODE = 0x1F
LIGHTMAPMODE = 0x20
:ENDENUM
:ENUM[WORD] collision_type
NONE = 0
SPHERE = 1
AXISALIGNEDBOUNDINGBOX = 2
ORIENTEDBOUNDINGBOX = 3
POLYGON = 4
:ENDENUM
:ENUM[WORD] collisionpick_type
NONE = 0
NOTMOVABLE = 8
NOTPICKABLE = 16
HEIGHTONLY = 32
NOCAMERACOLLISION = 64
:ENDENUM
:TYPEDEF[WORD] collision_info
collision_type | collisionpick_type
:ENDTYPEDEF
:ENUM[DWORD] effect_type
NORMAL = 0
DAYNIGHT = 1
LIGHTCONTAINER = 2
:ENDENUM
Misc
FSTR[S] - Fixed length string where S is the length of the strength
BSTR - Byte-prefixed string where the length is stored as the first byte
SSTR - Short-prefix string where the length is stored as the first 2 bytes
LSTR - Long-prefixed string where the legnth is stored as the first 4 bytes
ZSTR - Null-terminated string
Packets
CLI = Packets sent from the client to any server
LSV = Packets sent from the login server to the login server
WSV = Packets sent from the login server to the char server
GSV = Packets sent from the login server to the world server
(0x700) CLI_ALIVE
(0x700) SVR_ERROR
(0x701) SVR_ANNOUNCE_TEXT
(0x702) GSV_ANNOUNCE_CHAT
(0x703) CLI_ACCEPT_REQ
(0x704) CLI_CHANNEL_LIST_REQ
(0x704) SRV_CHANNEL_LIST_REPLY
(0x705) CLI_CHECK_AUTH
(0x705) SRV_CHECK_AUTH
(0x707) SRV_LOGOUT_REQ
(0x707) GSV_LOGOUT_REPLY
(0x708) SRV_LOGIN_REQ
(0x708) SRV_LOGIN_REPLY
(0x709) GSV_LOGIN_REPLY
(0x70a) SRV_SELECT_SERVER
(0x70a) LSV_SELECT_SERVER
(0x70b) CLI_JOIN_SERVER_REQ
(0x70c) SRV_JOIN_SERVER_REPLY
(0x70d) GSV_GM_COMMAND
(0x70e) GSV_SET_GLOBAL_VAR
(0x70f) GSV_SET_GLOBAL_FLAG
(0x711) WSV_MOVE_SERVER
(0x712) CLI_CHAR_LIST
(0x712) WSV_CHAR_LIST
(0x713) CLI_CREATE_CHAR
(0x713) WSV_CREATE_CHAR
(0x714) CLI_DELETE_CHAR
(0x714) WSV_DELETE_CHAR
(0x715) CLI_SELECT_CHAR
(0x715) GSV_SELECT_CHAR
(0x716) GSV_INVENTORY_DATA
(0x717) GSV_SET_MONEYnINV
(0x718) GSV_SET_INV_ONLY
(0x719) GSV_SERVER_DATA
(0x71a) GSV_RELAY_REQ
(0x71a) CLI_RELAY_REPLY
(0x71b) GSV_QUEST_DATA
(0x71c) CLI_CHAR_CHANGE
(0x71c) WSV_CHAR_CHANGE
(0x71d) GSV_SET_MONEY_ONLY
(0x71e) GSV_REWARD_MONEY
(0x71f) GSV_REWARD_ITEM
(0x720) GSV_REWARD_ADD_ABILITY
(0x721) GSV_REWARD_SET_ABILITY
(0x722) CLI_LOGOUT_CANCLE
(0x723) GSV_QUEST_ONLY
(0x724) GSV_WISH_LIST
(0x730) CLI_QUEST_REQ
(0x730) GSV_QUEST_REPLY
(0x731) GSV_CHECK_NPC_EVENT
(0x751) GSV_CHEAT_CODE
(0x753) CLI_JOIN_ZONE
(0x753) GSV_JOIN_ZONE
(0x754) GSV_INIT_DATA
(0x755) CLI_REVIVE_REQ
(0x755) GSV_REVIVE_REPLY
(0x756) SET_REVIVE_POS
(0x757) CLI_SET_VAR_REQ
(0x757) GSV_SET_VAR_REPLY
(0x761) CLI_CHAR_INFO_REQ
(0x761) GSV_CHAR_INFO_REPLY
(0x762) CLI_SET_WEIGHT_RATE
(0x762) GSV_SET_WEIGHT_RATE
(0x770) GSV_ADJUST_POS
(0x771) CLI_CANTMOVE
(0x771) GSV_CANTMOVE
(0x772) CLI_ATTACK_START
(0x772) GSV_ATTACK_START
(0x773) GSV_ATTACK_STOP
(0x774) GSV_CHANGE_NPC
(0x775) CLI_SUMMON_CMD
(0x775) GSV_SUMMON_CMD
(0x781) CLI_SET_MOTION
(0x781) GSV_SET_MOTION
(0x782) CLI_TOGGLE
(0x782) GSV_TOGGLE
(0x783) CLI_CHAT
(0x783) GSV_CHAT
(0x784) CLI_WHISPER
(0x784) GSV_WHISPER
(0x785) CLI_SHOUT
(0x785) GSV_SHOUT
(0x786) CLI_PARTY_CHAT
(0x786) GSV_PARTY_CHAT
(0x787) CLI_CLAN_CHAT
(0x787) WSV_CLAN_CHAT
(0x788) CLI_ALLIED_CHAT
(0x788) GSV_ALLIED_CHAT
(0x789) CLI_ALLIED_SHOUT
(0x789) GSV_ALLIED_SHOUT
(0x790) GSV_SET_EVENT_STATUS
(0x791) GSV_NPC_CHAR
(0x792) GSV_MOB_CHAR
(0x793) GSV_AVT_CHAR
(0x794) GSV_SUB_OBJECT
(0x795) CLI_SETPOS
(0x796) CLI_STOP
(0x796) GSV_STOP
(0x797) GSV_MOVE
(0x798) CLI_ATTACK
(0x798) GSV_ATTACK
(0x799) CLI_DAMAGE
(0x799) GSV_DAMAGE
(0x79a) CLI_MOUSECMD
(0x79a) GSV_MOUSECMD
(0x79b) GSV_SETEXP
(0x79e) GSV_LEVELUP
(0x79f) CLI_HP_REQ
(0x79f) GSV_HP_REPLY
(0x7a0) GSV_SET_HPnMP
(0x7a1) CLI_STORE_TRADE_REQ
(0x7a1) GSV_STORE_TRADE_REPLY
(0x7a2) CLI_CREATE_ITEM_EXP_REQ
(0x7a3) CLI_USE_ITEM
(0x7a3) GSV_USE_ITEM
(0x7a4) CLI_DROP_ITEM
(0x7a5) CLI_EQUIP_ITEM
(0x7a5) GSV_EQUIP_ITEM
(0x7a6) GSV_ADD_FIELDITEM
(0x7a6) GSV_SUB_FIELDITEM
(0x7a7) CLI_GET_FIELDITEM_REQ
(0x7a7) GSV_GET_FIELDITEM_REPLY
(0x7a8) CLI_TELEPORT_REQ
(0x7a8) GSV_TELEPORT_REPLY
(0x7a9) CLI_USE_BPOINT_REQ
(0x7a9) GSV_USE_BPOINT_REPLY
(0x7aa) CLI_SET_HOTICON
(0x7aa) GSV_SET_HOTICON
(0x7ab) CLI_SET_BULLET
(0x7ab) GSV_SET_BULLET
(0x7ac) CLI_CHANGE_SKIN
(0x7ac) GSV_CHANGE_SKIN
(0x7ad) CLI_BANK_LIST_REQ
(0x7ad) CLI_BANK_LIST_REPLY
(0x7ae) CLI_MOVE_ITEM
(0x7ae) GSV_MOVE_ITEM
(0x7af) CLI_CREATE_ITEM_REQ
(0x7af) GSV_CREATE_ITEM_REPLY
(0x7b0) GSV_SKILL_LEARN_REPLY
(0x7b1) CLI_SKILL_LEVELUP_REQ
(0x7b1) GSV_SKILL_LEVELUP_REPLY
(0x7b2) CLI_SELF_SKILL
(0x7b2) GSV_SELF_SKILL
(0x7b3) CLI_TARGET_SKILL
(0x7b3) GSV_TARGET_SKILL
(0x7b4) CLI_POSITION_SKILL
(0x7b4) GSV_POSITION_SKILL
(0x7b5) GSV_EFFECT_OF_SKILL
(0x7b6) GSV_DAMAGE_OF_SKILL
(0x7b7) GSV_CLEAR_STATUS
(0x7b8) GSV_SPEED_CHANGED
(0x7b9) GSV_RESULT_OF_SKILL
(0x7ba) CLI_APPRAISAL_REQ
(0x7ba) GSV_APPRAISAL_REPLY
(0x7bb) GSV_SKILL_START
(0x7bc) CLI_CRAFT_ITEM_REQ
(0x7bc) GSV_CRAFT_ITEM_REPLY
(0x7bd) GSV_SKILL_CANCEL
(0x7bf) VLI_SET_WISHITEM
(0x7c0) CLI_TRADE_P2P
(0x7c0) GSV_TRADE_P2P
(0x7c1) CLI_TRADE_P2P_ITEM
(0x7c1) GSV_TRADE_P2P_ITEM
(0x7c2) CLI_P_STORE_OPEN
(0x7c2) GSV_P_STORE_OPENED
(0x7c3) CLI_P_STORE_CLOSE
(0x7c3) GSV_P_STORE_CLOSED
(0x7c4) CLI_P_STORE_LIST_REQ
(0x7c4) GSV_P_STORE_LIST_REPLY
(0x7c5) CLI_P_STORE_BUY_REQ
(0x7c6) CLI_P_STORE_SELL_REQ
(0x7c6) GSV_P_STORE_RESULT
(0x7c7) GSV_P_STORE_MONEYnINV
(0x7ca) CLI_ASSEMBLE_RIDE_ITEM
(0x7ca) GSV_ASSEMBLE_RIDE_ITEM
(0x7cb) CLI_USE_ITEM_TO_REPAIR
(0x7cb) GSV_USED_ITEM_TO_REPAIR
(0x7cd) CLI_REPAIR_FROM_NPC
(0x7cd) GSV_REPAIRED_FROM_NPC
(0x7ce) GSV_SET_ITEM_LIFE
(0x7d0) CLI_PARTY_REQ
(0x7d0) GSV_PARTY_REQ
(0x7d1) CLI_PARTY_REPLY
(0x7d1) GSV_PARTY_REPLY
(0x7d2) GSV_PARTY_MEMBER
(0x7d3) GSV_PARTY_INFO
(0x7d3) GSV_PARTY_ITEM
(0x7d4) GSV_PARTY_LEVnEXP
(0x7d5) GSV_CHANGE_OBJIDX
(0x7d6) GSV_ADD_EVENTOBJ
(0x7d6) GSV_SUB_EVENTOBJ
(0x7d7) CLI_PARTY_RULE
(0x7d7) GSV_PARTY_RULE
(0x7d8) CLI_ITEM_RESULT_REPORT
(0x7d8) GSV_ITEM_RESULT_REPORT
(0x7d9) CLI_MALL_ITEM_REQ
(0x7d9) GSV_MALL_ITEM_REPLY
(0x7da) CLI_MOVE_ZULY
(0x7da) GSV_MOVE_ZULY
(0x7db) GSV_SET_NPC_SHOW
(0x7dc) GSV_GODDNESS_MODE
(0x7dd) CLI_CART_RIDE
(0x7dd) GSV_CART_RIDE
(0x7de) GSV_BILLING_MESSAGE_EXT
(0x7df) GSV_BULLING_MESSAGE
(0x7e0) CLI_CLAN_COMMAND
(0x7e0) WSV_CLAN_COMMAND
(0x7e1) CLI_MESSENGER
(0x7e1) WSV_MESSENGER
(0x7e2) CLI_MESSENGER_CHAT
(0x7e2) WSV_MESSENGER_CHAT
(0x7e3) CLI_CHATROOM
(0x7e3) SVR_CHATROOM
(0x7e4) CLI_CHATROOM_MSG
(0x7e4) WSV_CHATROOM_MSG
(0x7e5) CLI_MEMO
(0x7e5) WSV_MEMO
(0x7e6) CLI_CLANMARK_SET
(0x7e7) CLI_CLANMARK_REQ
(0x7e7) WSV_CLANMARK_REPLY
(0x7e8) CLI_CLANMARK_REG_TIME
(0x7e8) WSV_CLANMARK_REG_TIME
(0x7e9) GSV_PATSTATE_CHANGE
(0x7ea) GSV_CHARSTATE_CHANGE
(0x7eb) CLI_SCREEN_SHOT_TIME
(0x7eb) GSV_SCREEN_SHOT_TIME
(0x808) CLI_FAKE_GAMEGUARD_REQ
(0x808) GSV_FAKE_GAMEGUARD_REPLY
Ops
Opcodes, conditions and structs used in the QSD format.
Structs:
STR_NPCVAR
this+0x0, Member, Type: int, iNpcNo
this+0x4, Member, Type: short, nVarNo
STR_QUEST_DATA
this+0x0, Member, Type: int, iType
this+0x0, Member, Type: unsigned short, m_wVarNO
this+0x2, Member, Type: unsigned short, m_wVarTYPE
this+0x4, Member, Type: short, nValue
this+0x6, Member, Type: unsigned char, btOp
STR_ABIL_DATA
this+0x0, Member, Type: int, iType
this+0x4, Member, Type: int, iValue
this+0x8, Member, Type: unsigned char, btOp
STR_ITEM_DATA
this+0x0, Member, Type: unsigned int, uiItemSN
this+0x4, Member, Type: int, iWhere
this+0x8, Member, Type: int, iRequestCnt
this+0xc, Member, Type: unsigned char, btOp
Conditions:
STR_COND_000
this+0x8, Member, Type: int, iQuestSN
STR_COND_001
this+0x8, Member, Type: int, iDataCnt
this+0xc, Member, Type: struct STR_QUEST_DATA[0x1], CheckData
STR_COND_002
this+0x8, Member, Type: int, iDataCnt
this+0xc, Member, Type: struct STR_QUEST_DATA[0x1], CheckData
STR_COND_003
this+0x8, Member, Type: int, iDataCnt
this+0xc, Member, Type: struct STR_ABIL_DATA[0x1], CheckData
STR_COND_004
this+0x8, Member, Type: int, iDataCnt
this+0xc, Member, Type: struct STR_ITEM_DATA[0x1], CheckData
STR_COND_005
this+0x8, Member, Type: unsigned char, btIsLeader
this+0xc, Member, Type: int, iLevel
this+0x10, Member, Type: unsigned char, btReversed
STR_COND_006
this+0x8, Member, Type: int, iZoneSN
this+0xc, Member, Type: int, iX
this+0x10, Member, Type: int, iY
this+0x14, Member, Type: int, iZ
this+0x18, Member, Type: int, iRadius
STR_COND_007
this+0x8, Member, Type: unsigned long, ulTime
this+0xc, Member, Type: unsigned long, ulEndTime
STR_COND_008
this+0x8, Member, Type: unsigned long, ulTime
this+0xc, Member, Type: unsigned char, btOp
STR_COND_009
this+0x8, Member, Type: int, iSkillSN1
this+0xc, Member, Type: int, iSkillSN2
this+0x10, Member, Type: unsigned char, btOp
STR_COND_010
this+0x8, Member, Type: unsigned char, btLowPcnt
this+0x9, Member, Type: unsigned char, btHighPcnt
tagValueQST
this+0x4, Member, Type: int, Type
this+0x8, Member, Type: unsigned char, btWho
this+0xa, Member, Type: short, nVarNo
this+0xc, Member, Type: int, iValue
this+0x10, Member, Type: unsigned char, btOp
STR_COND_012
this+0x8, Member, Type: short, iZone
this+0xc, Member, Type: int, iX
this+0x10, Member, Type: int, iY
this+0x14, Member, Type: int, iEventID
this+0x14, Member, Type: unsigned long, m_HashEventOBJ
STR_COND_013
this+0x8, Member, Type: int, iNpcNo
STR_COND_014
this+0x8, Member, Type: short, nSN
this+0xa, Member, Type: unsigned char, btOp
STR_COND_015
this+0x8, Member, Type: short, nNumber1
this+0xa, Member, Type: short, nNumber2
STR_COND_016
this+0x8, Member, Type: unsigned char, btWho
this+0xc, Member, Type: unsigned long, ulTime
this+0x10, Member, Type: unsigned long, ulEndTime
STR_COND_017
this+0x8, Member, Type: struct STR_NPCVAR, NpcVar1
this+0x10, Member, Type: struct STR_NPCVAR, NpcVar2
this+0x18, Member, Type: unsigned char, btOp
STR_COND_018
this+0x8, Member, Type: unsigned char, btDate
this+0x9, Member, Type: unsigned char, btHour1
this+0xa, Member, Type: unsigned char, btMin1
this+0xb, Member, Type: unsigned char, btHour2
this+0xc, Member, Type: unsigned char, btMin2
STR_COND_019
this+0x8, Member, Type: unsigned char, btWeekDay
this+0x9, Member, Type: unsigned char, btHour1
this+0xa, Member, Type: unsigned char, btMin1
this+0xb, Member, Type: unsigned char, btHour2
this+0xc, Member, Type: unsigned char, btMin2
STR_COND_020
this+0x8, Member, Type: int, iNo1
this+0xc, Member, Type: int, iNo2
STR_COND_021
this+0x8, Member, Type: unsigned char, btSelObjType
this+0xc, Member, Type: int, iRadius
STR_COND_022
this+0x8, Member, Type: unsigned short, nX
this+0xa, Member, Type: unsigned short, nY
STR_COND_023
this+0x8, Member, Type: unsigned char, btReg
STR_COND_024
this+0x8, Member, Type: short, nPOS
this+0xa, Member, Type: unsigned char, btOP
STR_COND_025
this+0x8, Member, Type: short, nCONT
this+0xa, Member, Type: unsigned char, btOP
STR_COND_026
this+0x8, Member, Type: short, nGRD
this+0xa, Member, Type: unsigned char, btOP
STR_COND_027
this+0x8, Member, Type: short, nPOINT
this+0xa, Member, Type: unsigned char, btOP
STR_COND_028
this+0x8, Member, Type: int, iMONEY
this+0xc, Member, Type: unsigned char, btOP
STR_COND_029
this+0x8, Member, Type: short, nMemberCNT
this+0xa, Member, Type: unsigned char, btOP
STR_COND_030
this+0x8, Member, Type: short, nSkill1
this+0xa, Member, Type: short, nSkill2
this+0xc, Member, Type: unsigned char, btOP
Actions:
STR_REWD_000
this+0x8, Member, Type: int, iQuestSN
this+0xc, Member, Type: unsigned char, btOp
STR_REWD_001
this+0x8, Member, Type: unsigned int, uiItemSN
this+0xc, Member, Type: unsigned char, btOp
this+0xe, Member, Type: short, nDupCNT
this+0x10, Member, Type: unsigned char, btPartyOpt
STR_REWD_002
this+0x8, Member, Type: int, iDataCnt
this+0xc, Member, Type: struct STR_QUEST_DATA[0x1], CheckData
STR_REWD_003
this+0x8, Member, Type: int, iDataCnt
this+0xc, Member, Type: struct STR_ABIL_DATA[0x1], CheckData
this+0x18, Member, Type: unsigned char, btPartyOpt
STR_REWD_004
this+0x8, Member, Type: int, iDataCnt
this+0xc, Member, Type: struct STR_QUEST_DATA[0x1], CheckData
STR_REWD_005
this+0x8, Member, Type: unsigned char, btTarget
this+0x9, Member, Type: unsigned char, btEquation
this+0xc, Member, Type: int, iValue
this+0x10, Member, Type: int, iItemSN
this+0x14, Member, Type: unsigned char, btPartyOpt
this+0x16, Member, Type: short, nItemOpt
STR_REWD_006
this+0x8, Member, Type: int, iPercentOfHP
this+0xc, Member, Type: int, iPercentOfMP
this+0x10, Member, Type: unsigned char, btPartyOpt
STR_REWD_007
this+0x8, Member, Type: int, iZoneSN
this+0xc, Member, Type: int, iX
this+0x10, Member, Type: int, iY
this+0x14, Member, Type: unsigned char, btPartyOpt
STR_REWD_008
this+0x8, Member, Type: int, iMonsterSN
this+0xc, Member, Type: int, iHowMany
this+0x10, Member, Type: unsigned char, btWho
this+0x14, Member, Type: int, iZoneSN
this+0x18, Member, Type: int, iX
this+0x1c, Member, Type: int, iY
this+0x20, Member, Type: int, iRange
this+0x24, Member, Type: int, iTeamNo
STR_REWD_009
this+0x8, Member, Type: short, shNameLen
this+0xa, Member, Type: char[0x1], szNextTriggerSN
STR_REWD_010
STR_REWD_012
this+0x8, Member, Type: unsigned char, btMsgType
this+0xc, Member, Type: int, iStrID
STR_REWD_012_STR
this+0x8, Member, Type: unsigned char, btMsgType
this+0x9, Member, Type: char[0x1], szMsg
STR_REWD_013
this+0x8, Member, Type: unsigned char, btWho
this+0xc, Member, Type: int, iSec
this+0x10, Member, Type: short, nNameLength
this+0x12, Member, Type: char[0x1], szTriggerName
this+0x14, Member, Type: unsigned long, m_HashNextTrigger
STR_REWD_014
this+0x8, Member, Type: unsigned char, btOp
this+0xc, Member, Type: int, iSkillNo
STR_REWD_015
this+0x8, Member, Type: short, nSN
this+0xa, Member, Type: unsigned char, btOp
STR_REWD_016
this+0x8, Member, Type: short, nGroupSN
STR_REWD_017
STR_REWD_018
this+0x8, Member, Type: int, iStrID
this+0xc, Member, Type: short, nCnt
this+0xe, Member, Type: unsigned char[0x1], Data
STR_REWD_019
this+0x8, Member, Type: short, nZoneNo
this+0xa, Member, Type: short, nTeamNo
this+0xc, Member, Type: short, nTriggerLength
this+0xe, Member, Type: char[0x1], TriggerName
this+0x10, Member, Type: unsigned long, m_HashTrigger
STR_REWD_020
this+0x8, Member, Type: unsigned char, btNoType
STR_REWD_021
this+0x8, Member, Type: int, iX
this+0xc, Member, Type: int, iY
STR_REWD_022
this+0x8, Member, Type: short, nZonNo
this+0xa, Member, Type: unsigned char, btOp
STR_REWD_023
STR_REWD_024
this+0x8, Member, Type: int, iMONEY
this+0xc, Member, Type: unsigned char, btOP
STR_REWD_025
this+0x8, Member, Type: short, nPOINT
this+0xa, Member, Type: unsigned char, btOP
STR_REWD_026
this+0x8, Member, Type: short, nSkillNo
this+0xa, Member, Type: unsigned char, btOP
STR_REWD_027
this+0x8, Member, Type: short, nCONT
this+0xa, Member, Type: unsigned char, btOP
STR_REWD_028
this+0x8, Member, Type: int, iRange
this+0xc, Member, Type: short, nZoneNo
this+0x10, Member, Type: int, iX
this+0x14, Member, Type: int, iY
AI Op Codes
0x04000001,12,Hold or Attack,0x08 byte cNotfightOrDelay
0x04000002,16,Damage,0x08 dword iDamage,0x0C byte cRecvOrGive
0x04000003,20,Check Near (1),0x08 dword iDistance,0x0C byte btIsAllied,0x0e word nLevelDiff,0x10 word nLevelDiff2,0x12 word wChrNum
0x04000004,12,Check Distance (1),0x08 dword iDistance
0x04000005,16,Check Distance (2),0x08 dword iDistance,0x0C byte cMoreLess
0x04000006,20,Check AB (1),0x08 byte cAbType,0x0C dword iDiff,0x10 byte cMoreLess
0x04000007,16,Check HP,0x08 dword wHP,0x0C byte cMoreLess
0x04000008,12,Random Chance,0x08 byte cPercent
0x04000009,20,Check Near (2),0x08 dword iDistance,0x0C word nLevelDiff,0x0e word nLevelDiff2,0x10 byte btIsAllied
0x0400000a,0,Unknown,Unknown
0x0400000b,12,Check AB (2),0x08 byte cAbType,0x09 byte cMoreLess
0x0400000c,20,Check AB (3),0x08 byte cAbType,0x0C dword iValue,0x10 byte cMoreLess
0x0400000d,12,Check Time (1),0x08 byte cWhen
0x0400000e,12,Check Target (1),0x08 byte btCheckTarget,0x09 byte btStatusType,0x0A byte btHave
0x0400000f,20,Check Variable (1),0x08 byte btVarIDX,0x10 byte btOp,0x0C dword iValue
0x04000010,20,Check Variable (2),0x08 word nVarIDX,0x10 byte btOp,0x0C dword iValue
0x04000011,0,Check Variable (3),Unknown
0x04000012,12,Select NPC,0x08 dword iNpcNo
0x04000013,16,Check Distance (3),0x08 dword iDistance,0x0C byte btOp
0x04000014,16,Check Time (2),0x08 dword ulTime,0x0C dword ulEndTime
0x04000015,20,Check AB (4),0x08 byte btAbType,0x10 byte btOp,0x0C dword iValue
0x04000016,8,Unknown,Unknown
0x04000017,0,Unknown,Unknown
0x04000018,16,Check Time (3),0x08 dword ulTime,0x0C dword ulEndTime
0x04000019,16,Check Date Time (4),0x08 byte btDate,0x09 byte btHour1,0x0A byte btMin1,0x0b byte btHour2,0x0C byte btMin2
0x0400001a,16,Check Weekday Time (5),0x08 byte btWeekDay,0x09 byte btHour1,0x0A byte btMin1,0x0b byte btHour2,0x0C byte btMin2
0x0400001b,12,Check Position,0x08 word nX,0x0A word nY
0x0400001c,24,Check Near Character,0x08 dword iDistance,0x0C byte btIsAllied,0x0e word nLevelDiff,0x10 word nLevelDiff2,0x12 word wChrNum,0x14 byte btOp
0x0400001d,20,Check Variable (4),0x08 word nVarIDX,0x10 byte btOp,0x0C dword iValue
0x0400001e,12,Check Target (2),0x08 byte btTargetType
0x0400001f,12,Unknown,0x08 dword Unknown
0x0B000001,8,Unknown,Unknown
0x0B000002,12,Do Action,0x08 byte cAction
0x0B000003,12,Say LTB String,0x08 dword iStrID
0x0B000004,16,Move (1),0x08 dword iDistance,0x0C byte cSpeed
0x0B000005,16,Move (2),0x08 dword iDistance,0x0C byte cSpeed
0x0B000006,12,Move (3),0x08 byte cSpeed
0x0B000007,16,Move (?),0x08 dword iDistance,0x0C byte cAbType,0xd byte cMoreLess
0x0B000008,0,Unknown,Unknown
0x0B000009,16,Move (4),0x08 dword iDistance,0x0C byte cSpeed
0x0B00000a,12,Spawn Monster (1),0x08 word wMonster
0x0B00000b,12,Spawn Monster (2),0x08 word wMonster
0x0B00000c,16,Spawn Monster (3),0x08 dword iDistance,0x0C dword iNumOfMonster
0x0B00000d,8,Unknown,Unknown
0x0B00000e,8,Unknown,Unknown
0x0B00000f,12,Unknown,0x08 dword iDistance
0x0B000010,8,Retaliate ?,Unknown
0x0B000011,12,Unknown,0x08 dword iDistance
0x0B000012,24,Drop Item,0x08 word item0,0x0A word item1,0x0C word item2,0xe word item3,0x10 word item4,0x14 dword iToOwner
0x0B000013,16,Spawn Monster (4),0x08 word cMonster,0x0A word wHowMany,0x0C dword iDistance
0x0B000014,8,Unknown,Unknown
0x0B000015,16,Spawn Monster (5),0x08 word cMonster,0x0A byte btPos,0x0C dword iDistance
0x0B000016,0,Unknown,Unknown
0x0B000017,0,Unknown,Unknown
0x0B000018,8,Unknown,Unknown
0x0B000019,16,Do Skill,0x08 byte btTarget,0x0A word nSkill,0x0C word nMotion
0x0B00001a,20,Set Variable (1),0x08 byte btVarIDX,0x10 byte btOp,0x0C dword iValue
0x0B00001b,0,Set Variable (2),Unknown
0x0B00001c,0,Set Variable (3),Unknown
0x0B00001d,16,Shout/Ann LTB String,0x08 byte btMsgType,0x0C dword iStrID
0x0B00001e,8,Unknown,Unknown
0x0B00001f,21,Do Trigger,0x08 wordLen szTrigger
0x0B000020,0,Unknown,Unknown
0x0B000021,12,Zone (1),0x08 word nZoneNo,0x0A byte btOnOff
0x0B000022,0,Zone (2),Unknown
0x0B000023,12,Item (?),0x08 word nItemNum,0x0A word nCount
0x0B000024,20,Set Variable (4),0x08 word nVarIDX,0x10 byte btOp,0x0C dword iValue
0x0B000025,12,Monster (1),0x08 word nMonster,0x0A byte btMaster
0x0B000026,20,Monster (2),0x08 word nMonster,0x0A word nPos,0x0C dword iDistance,0x10 byte btMaster