
å€ãã®ãã·ã¢ã®ã²ãŒã ãèŠããŠããŸããïŒ å®æ§çïŒ å¿ããããªãïŒ ã¯ããããã§ããã ããªãã35æ³ä»¥äžã§ãããããã·ã¢ã®ã²ãŒã æ¥çã®ãã¡ã³ãªããããããåªãããåå°ã«ç²ŸéããŠããã§ãããã
ç©èªã¯éåžžã«æ®éçã«å§ãŸããŸããïŒå€ãæãã ç¹å¥ãªããšã¯äœããããŸãããã©ãããããã®ããŒããã©ã€ãã®ã³ã³ãã³ãããã£ãããšé²èЧãããšããç§ã®èŠç·ã¯æ°å¹Žã®éã¢ã€ãã«ç¶æ
ã ã£ãããªãã¿ã®ãã©ãŽã³ã®ã¢ã€ã³ã³ãä»ãããã©ã«ããŒãã€ãã¿ãŸããã
ã²ãŒã ã®ã©ã®ãã¡ã³ãäžèº«ãç¥ãããããªãã®ã§ããããïŒ
ã¯ããã«
Cursed Lands-ãŸãã¯ãCISã®å€ã§åŒã°ããããã«ã Evil IslandsïŒCurse of the Lost Soul ã2000幎ã«ãªãªãŒã¹ãããã¹ãã«ã¹RPGã²ãŒã ã ãã®ã²ãŒã ã¯Nival Interactiveã«ãã£ãŠéçºãããŸãããNivalInteractiveã¯ãåœæãã§ã«äžé£ã®Allodaã²ãŒã ïŒæµ·å€ã®Rage of MagesïŒãšããŠç¢ºç«ãããŠããŸããã ã¢ã¹ã¯ã¯å·ç«å€§åŠã®ã»ãšãã©ã®åæ¥çã¯ããã§åããŠããŸãã-圌ãã¯å®å
šã«3次å
ã®äžçãæã€æåã®ã²ãŒã ã®1ã€ãå®çŸããããšãã§ããŸããã
2010幎ãMail.RuïŒ information ïŒãã¿ã€ãã«ãè²æž¡ããŸããããã²ãŒã ã¯Nivalã«ä»£ãã£ãŠGOGã¹ãã¢ã§è²©å£²ãããŠããŸãã
æ¯èŒçæè¿ãã²ãŒã ã¯18æ³ã«ãªããŸãã-CISã§ã®ãªãªãŒã¹æ¥ã§ãã10æ26æ¥ã®èªçæ¥ãšèŠãªãããŸãã æä»£ã«ãããããããå
¬åŒã®ãã¹ã¿ãŒãµãŒããŒã¯ãŸã 䜿çšäžã§ãã宿çã«ã誰ããGipatã®æ£®ããåãã仲éã®ããŒã ã§12åãŸãã¯2åã®ã¹ã±ã«ãã³ãæ»æããããšã«ããŸãã
èšäºã«ã€ããŠç°¡åã«
åœåãç§ã®ç®æšã¯ãæšæºã©ã€ãã©ãªã®ã¿ã䜿çšããŠãPython 3ã§ãèªåçšãã®äžæ¹åã³ã³ããŒã¿ãäœæããããšã ãã§ããã ãããããã®éçšã§ããã©ãŒãããã«é¢ããææžåãã¹ã ãŒãºã«å§ãŸããäœããã®åœ¢ã§åºåãæšæºåããããšããŸããã äžéšã®åœ¢åŒã§ã¯ãæ§é ã¯Kaitai Structã䜿çšããŠèšè¿°ãããŸããã ãã®çµæããã¹ãŠããã®èšäºãšwikiã圢åŒã§æžãããšã«ãªããŸããã
ããã«æ³šæããŸããã»ãšãã©ã®å Žåãã²ãŒã ãã¡ã€ã«ã¯æ¢ã«èª¿æ»ãããŠããããã¡ã³ãšãã£ã¿ãŒãäœæãããŠããŸãã ãã ããæ
å ±ã¯éåžžã«æçåãããŠããããããªãã¯ãã¡ã€ã³ã®åœ¢åŒã®å®å
šãªèª¬æã¯ã»ãšãã©ãããŸããããŸãã倿Žãäœæããããã®é©åãªã»ããããããŸããã
...ãããŠãããèªãæ¹æ³
ã¹ããŒã ïŒ.ksyãã¡ã€ã«ïŒã¯ãã¹ãŠã®åœ¢åŒã§æäŸããã2åã¯ãªãã¯ããã ãã§ããã€ãã®æãäžè¬çãªèšèªã®ã³ãŒãã«å€æã§ããŸãã
æ®å¿µãªããããã§ã«ãã®èšäºãæžããŠããæåŸã®æ®µéã§ãå°æ¬ãããHabrã¯YAMLïŒããã³JSONïŒã匷調衚瀺ããæ¹æ³ãç¥ããããã¹ãŠã®ã¹ããŒã ãããã䜿çšããŠããããšãããããŸããã ããã¯å€§ããªåé¡ã§ã¯ãããŸããããã¹ããŒã ãèªãã®ãäžäŸ¿ãªå Žåã¯ãNPPãªã©ã®ãµãŒãããŒãã£ã®ãšãã£ã¿ãŒã«ã³ããŒããããšããå§ãããŸãã
ãªãœãŒã¹ãšãã®å Žæ
ãã®ã²ãŒã ã¯ãã©ã€ãã©ãªãã©ã³ãã£ãŒãããã³å®éã«ã¯ãªãœãŒã¹ãè©°ã蟌ãŸãããšã³ãžã³ãå«ãããŒã¿ãã«ã¢ããªã±ãŒã·ã§ã³ã§ãã
ããã¯è峿·±ãã§ã ãã²ãŒã ã®èšå®ã¯ãã»ãŒå®å
šã«ã¬ãžã¹ããªã«ä¿åãããŸãã GOGããŒãžã§ã³ã®ã«ã¡ã©ã®ãã°ã¯ãã€ã³ã¹ããŒã©ãŒãæ£ããããã©ã«ãå€ãç»é²ããªããšããäºå®ã«ãããã®ã§ãã
ã²ãŒã ãã©ã«ãã®å
容ãäžèŠãããšãASIãšREGãšãã2ã€ã®æ°ãããã¡ã€ã«æ¡åŒµåãããã«ããããŸãã
1ã€ç®ã¯åçã©ã€ãã©ãªã§ãããããã¯èæ
®ããŸããïŒããã¯ãªããŒã¹ãšã³ãžãã¢ãªã³ã°ã®å°éå®¶ã«ãã£ãŠè¡ãããŸãïŒãã2ã€ç®ã¯ã²ãŒã ã®æåã®ãã€ãã£ããã¡ã€ã«åœ¢åŒã§ãã
REG
ãã®ã¿ã€ãã®ãã¡ã€ã«ã¯ãæ¢ç¥ã®ããã¹ãINIãã¡ã€ã«ã®ãã€ããªã·ãªã¢ã«åã§ãã
ã³ã³ãã³ãã¯ãããŒãšãã®å€ãæ ŒçŽããã»ã¯ã·ã§ã³ã«åå²ãããŸãã REGãã¡ã€ã«ã¯ãã®éå±€ãä¿æããŸãããããŒã¿ã®èªã¿åããšè§£æãé«éåããŸã-2000幎ã«ã¯ãããã¯æããã«éèŠã§ããã
äžè¬ã«ããã®å³ã®æ§é ã説æã§ããŸãã

æ§é 説æmeta: id: reg title: Evil Islands, REG file (packed INI) application: Evil Islands file-extension: reg license: MIT endian: le doc: Packed INI file seq: - id: magic contents: [0xFB, 0x3E, 0xAB, 0x45] doc: Magic bytes - id: sections_count type: u2 doc: Number of sections - id: sections_offsets type: section_offset doc: Sections offset table repeat: expr repeat-expr: sections_count types: section_offset: doc: Section position in file seq: - id: order type: s2 doc: Section order number - id: offset type: u4 doc: Global offset of section in file instances: section: pos: offset type: section types: section: doc: Section representation seq: - id: keys_count type: u2 doc: Number of keys in section - id: name_len type: u2 doc: Section name lenght - id: name type: str encoding: cp1251 size: name_len doc: Section name - id: keys type: key doc: Section's keys repeat: expr repeat-expr: keys_count types: key: doc: Named key seq: - id: order type: s2 doc: Key order in section - id: offset type: u4 doc: Key offset in section instances: key_record: pos: _parent._parent.offset + offset type: key_data key_data: seq: - id: packed_type type: u1 doc: Key value info - id: name_len type: u2 doc: Key name lenght - id: name type: str encoding: cp1251 size: name_len doc: Key name - id: value type: value doc: Key value instances: is_array: value: packed_type > 127 doc: Is this key contain array value_type: value: packed_type & 0x7F doc: Key value type types: value: doc: Key value seq: - id: array_size type: u2 if: _parent.is_array doc: Value array size - id: data type: switch-on: _parent.value_type cases: 0: s4 1: f4 2: string repeat: expr repeat-expr: '_parent.is_array ? array_size : 1' doc: Key value data string: doc: Sized string seq: - id: len type: u2 doc: String lenght - id: value type: str encoding: cp1251 size: len doc: String
ããã¯è峿·±ããã®ã§ã ã2002幎ãNivalã¯ã²ãŒã ã®ã³ãã¥ããã£ãšããã€ãã®ããŒã«ãå
±æããŸããïŒ ãµã€ãã¹ãããã·ã§ãã ïŒ-ãããã®1ã€ã¯REGã®INIã·ãªã¢ã©ã€ã¶ãŒã§ããã ãæ³åã®ãšããããã·ãªã¢ã©ã€ã¶ãŒã¯å
¬åŒã§ã¯ãããŸããããã»ãšãã©ããã«ç»å ŽããŸããã
éå§ãã©ã«ããæŽçããããããµããã£ã¬ã¯ããªã«é²ã¿ãŸãããã
æåã®å€èгã¯ãCAMãã¡ã€ã«ãå«ãã«ã¡ã©ãã©ã«ããŒã«ãããŸãã
ã«ã
éåžžã«åçŽãªåœ¢åŒã¯ãæéã®çµéãšãšãã«ã«ã¡ã©ã®äœçœ®ãåçŽã«ããã¯ããããšã§ãã ã«ã¡ã©ã¯äœçœ®ãšå転ã«ãã£ãŠèšè¿°ãããŸãã ä»ã®2ã€ã®ãã£ãŒã«ãã¯ãããããç§»åã·ãŒã±ã³ã¹ã®æéãšã¹ãããã§ãã

æ§é 説æ meta: id: cam title: Evil Islands, CAM file (cameras) application: Evil Islands file-extension: cam license: MIT endian: le doc: Camera representation seq: - id: cams type: camera repeat: eos types: vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis quat: doc: quaternion seq: - id: w type: f4 doc: w component - id: x type: f4 doc: x component - id: y type: f4 doc: y component - id: z type: f4 doc: z component camera: doc: Camera parameters seq: - id: unkn0 type: u4 doc: unknown - id: unkn1 type: u4 doc: unknown - id: position type: vec3 doc: camera's position - id: rotation type: quat doc: camera's rotation
次ã®ãã©ã«ããŒ-ResãïŒäºæ³å€ïŒïŒã¢ãŒã«ã€ãã§ããRESãã¡ã€ã«ãä¿åãããŸãã
RES
ãã®åœ¢åŒã¯ä»ã®æ¡åŒµæ©èœã®äžã«é ãããŠããå ŽåããããŸãããå
ã®åœ¢åŒã¯ãŸã RESã§ãã
ããŒã¿æ§é ã¯ããã¡ã€ã«ãžã®ã©ã³ãã ã¢ã¯ã»ã¹ãæã€ã¢ãŒã«ã€ãã®éåžžã«å
žåçãªãã®ã§ããå
éšã®ãã¡ã€ã«ã«é¢ããæ
å ±ãä¿åããããã®ããŒãã«ãååã®ããŒãã«ããã¡ã€ã«ã®å
容ããããŸãã
ãã£ã¬ã¯ããªæ§é ã¯ååã«çŽæ¥å«ãŸããŠããŸãã
2ã€ã®éåžžã«è峿·±ãäºå®ã«æ³šç®ãã䟡å€ããããŸãã
- ã¢ãŒã«ã€ãã¯ããã¡ã€ã«æ
å ±ãã¯ããŒãºãããã·ã¥ã®ãªã³ã¯ãªã¹ãã«ããŒãããããã«æé©åãããŠããŸãã
- ãã¡ã€ã«ã®å
容ã¯äžåºŠä¿åã§ããŸãããå¥ã®ååã§åç
§ããŸãã ç§ã®ç¥ãéãããã®äºå®ã¯ãã¡ã³ã®ãªããã¯ã§äœ¿çšãããŠããŸãããããã«ãããã²ãŒã ã®ãµã€ãºã倧å¹
ã«çž®å°ãããŸããã å
ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ãã¢ãŒã«ã€ãã®æé©åã¯äœ¿çšãããŸããã§ããã

æ§é 説æ meta: id: res title: Evil Islands, RES file (resources archive) application: Evil Islands file-extension: res license: MIT endian: le doc: Resources archive seq: - id: magic contents: [0x3C, 0xE2, 0x9C, 0x01] doc: Magic bytes - id: files_count type: u4 doc: Number of files in archive - id: filetable_offset type: u4 doc: Filetable offset - id: nametable_size type: u4 doc: Size of filenames instances: nametable_offset: value: filetable_offset + 22 * files_count doc: Offset of filenames table filetable: pos: filetable_offset type: file_record repeat: expr repeat-expr: files_count doc: Files metadata table types: file_record: doc: File metadata seq: - id: next_index type: s4 doc: Next file index - id: file_size type: u4 doc: Size of file in bytes - id: file_offset type: u4 doc: File data offset - id: last_change type: u4 doc: Unix timestamp of last change time - id: name_len type: u2 doc: Lenght of filename - id: name_offset type: u4 doc: Filename offset in name array instances: name: io: _root._io pos: name_offset + _parent.nametable_offset type: str encoding: cp1251 size: name_len doc: File name data: io: _root._io pos: file_offset size: file_size doc: Content of file
ããã¯è峿·±ããã®ã§ãããã·ã¢èªçã®ã²ãŒã ã§ã¯ãSpeech.resã¢ãŒã«ã€ãã«2ã€ã®ãµããã£ã¬ã¯ããªsãštãå«ãŸããå
容ããŸã£ããåãã§ãããã®ãããã¢ãŒã«ã€ããµã€ãºã2åã«ãªããŸãã
ããã§ããã¹ãŠã®ã¢ãŒã«ã€ããè§£åã§ããŸãïŒãã¹ãå¯èœïŒïŒ
- RESã¯åãªãã¢ãŒã«ã€ãã§ãã
- MPR-ã²ãŒã ã¬ãã«ã®é¢šæ¯ã
- MQ-ãã«ããã¬ã€ã€ãŒã®ã¿ã¹ã¯ã«é¢ããæ
å ±ã
- ANM-ã¢ãã¡ãŒã·ã§ã³ã®ã»ããã
- MOD-3Dã¢ãã«ã
- BON-ã¢ãã«ã®ããŒã³ã®äœçœ®ã
ã¢ãŒã«ã€ãå
ã®ãã¡ã€ã«ã«æ¡åŒµåããªãå Žåã¯ãBONããã³ANMã¢ãŒã«ã€ãçšã«èŠªæ¡åŒµåãä»ããŸãã
åä¿¡ãããã¹ãŠã®ãã¡ã€ã«ã4ã€ã®ã°ã«ãŒãã«åå²ããããšãã§ããŸãã
- ãã¯ã¹ãã£ãŒ
- ããŒã¿ããŒã¹
- ã¢ãã«
- ã¬ãã«ãã¡ã€ã«ã
ã·ã³ãã«ããå§ããŸããã-ãã¯ã¹ãã£ã䜿ã£ãŠã
MMP
å®éã«ã¯ããã¯ã¹ãã£ã ç»åãã©ã¡ãŒã¿ãMIPã¬ãã«ã®æ°ã䜿çšãããŠããå§çž®ã瀺ãå°ããªèŠåºãããããŸãã ããããŒã®åŸã«ããµã€ãºã®éé ã§MIPã€ã¡ãŒãžã¬ãã«ããããŸãã

æ§é 説æ meta: id: mmp title: Evil Islands, MMP file (texture) application: Evil Islands file-extension: mmp license: MIT endian: le doc: MIP-mapping texture seq: - id: magic contents: [0x4D, 0x4D, 0x50, 0x00] doc: Magic bytes - id: width type: u4 doc: Texture width - id: height type: u4 doc: Texture height - id: mip_levels_count type: u4 doc: Number of MIP-mapping stored levels - id: fourcc type: u4 enum: pixel_formats doc: FourCC label of pixel format - id: bits_per_pixel type: u4 doc: Number of bits per pixel - id: alpha_format type: channel_format doc: Description of alpha bits - id: red_format type: channel_format doc: Description of red bits - id: green_format type: channel_format doc: Description of green bits - id: blue_format type: channel_format doc: Description of blue bits - id: unused size: 4 doc: Empty space - id: base_texture type: switch-on: fourcc cases: 'pixel_formats::argb4': block_custom 'pixel_formats::dxt1': block_dxt1 'pixel_formats::dxt3': block_dxt3 'pixel_formats::pnt3': block_pnt3 'pixel_formats::r5g6b5': block_custom 'pixel_formats::a1r5g5b5': block_custom 'pixel_formats::argb8': block_custom _: block_custom types: block_pnt3: seq: - id: raw size: _root.bits_per_pixel block_dxt1: seq: - id: raw size: _root.width * _root.height >> 1 block_dxt3: seq: - id: raw size: _root.width * _root.height block_custom: seq: - id: lines type: line_custom repeat: expr repeat-expr: _root.height types: line_custom: seq: - id: pixels type: pixel_custom repeat: expr repeat-expr: _root.width types: pixel_custom: seq: - id: raw type: switch-on: _root.bits_per_pixel cases: 8: u1 16: u2 32: u4 instances: alpha: value: '_root.alpha_format.count == 0 ? 255 : 255 * ((raw & _root.alpha_format.mask) >> _root.alpha_format.shift) / (_root.alpha_format.mask >> _root.alpha_format.shift)' red: value: '255 * ((raw & _root.red_format.mask) >> _root.red_format.shift) / (_root.red_format.mask >> _root.red_format.shift)' green: value: '255 * ((raw & _root.green_format.mask) >> _root.green_format.shift) / (_root.green_format.mask >> _root.green_format.shift)' blue: value: '255 * ((raw & _root.blue_format.mask) >> _root.blue_format.shift) / (_root.blue_format.mask >> _root.blue_format.shift)' channel_format: doc: Description of bits for color channel seq: - id: mask type: u4 doc: Binary mask for channel bits - id: shift type: u4 doc: Binary shift for channel bits - id: count type: u4 doc: Count of channel bits enums: pixel_formats: 0x00004444: argb4 0x31545844: dxt1 0x33545844: dxt3 0x33544E50: pnt3 0x00005650: r5g6b5 0x00005551: a1r5g5b5 0x00008888: argb8
å¯èœãªãã¯ã»ã«ããã±ãŒãžåœ¢åŒïŒ
fourcc | 説æ |
---|
44 44 00 00 | ARGB4 |
44 58 54 31 | Dxt1 |
44 58 54 33 | Dxt3 |
50 4E 54 33 | PNT3-RLEå§çž®ARGB8 |
50 56 00 00 | R5G5B5 |
51 55 00 00 | A1R5G5B5 |
88 88 00 00 | ARGB8 |
PNT3ã«ã€ããŠç»å圢åŒãPNT3ã®å Žåãè§£ååŸã®ãã¯ã»ã«æ§é ã¯ARGB8ã§ãã bits_per_pixel
å§çž®ç»åã®ãµã€ãºïŒãã€ãåäœïŒã
PNT3ã®é梱
n = 0 destination = b"" while src < size: v = int.from_bytes(source[src:src + 4], byteorder='little') src += 4 if v > 1000000 or v == 0: n += 1 else: destination += source[src - (1 + n) * 4:src - 4] destination += b"\x00" * v n = 0
ããã¯è峿·±ãã§ãããã¯ã¹ãã£ã®äžéšã¯åçŽã«åæ ãããŸãïŒãŸãã¯äžéšã¯åæ ãããŸãããïŒïŒã
ãããŠãã²ãŒã ã¯éææ§ã«éåžžã«jeããŠããŸã-ç»åã«ã¢ã«ãã¡ãã£ã³ãã«ãããå Žåãéæãã¯ã»ã«ã®è²ã¯æ£ç¢ºã«é»ã§ãªããã°ãªããŸããã ãŸãã¯çœ-ãªããŠå¹žéã
åçŽãªãã©ãŒãããã¯çµäºããŸããããã峿 Œãªãã©ãŒãããã«ç§»ããŸããã-ãã€ãŠãMODã¡ãŒã«ãŒã®ã©ã³ã¯ã¯æ¬¡ã®ãã©ãŒãããçšã®ç¬èªã®ç·šéããŒã«ãççã«ä¿æããŸããããç¡é§ã§ã¯ãããŸããã§ããã ç§ã¯ããªãã«èŠåããŸããã
ããŒã¿ããŒã¹ïŒ* DBãªã©ïŒ
ãã®åœ¢åŒã¯èª¬æããã®ãéåžžã«äžäŸ¿ã§ã-åºæ¬çã«ãããã¯ããŒãïŒãŸãã¯ã¬ã³ãŒãããŒãã«ïŒã®ã·ãªã¢ã«åãããããªãŒã§ãã ãã¡ã€ã«ã¯ãæå®ããããã£ãŒã«ãã¿ã€ããæã€è€æ°ã®ããŒãã«ã§æ§æãããŸãã äžè¬æ§é ïŒããŒãã«ã¯å
±éã®ãã«ãŒããããŒãã«ãã¹ããããã¬ã³ãŒãã¯ããŒãã«å
ã®ããŒãã§ãã
åããŒãã§ããã®ã¿ã€ããšãµã€ãºãæå®ãããŸãïŒ
unsigned char type_index; unsigned char raw_size;
ããŒãã«ãã£ãŒã«ãã®ã¿ã€ãã¯ãããŒãã«ã®ãã©ãŒãããæååããã€ã³ããã¯ã¹ã«ãã£ãŠååŸãããå®éã®ã¿ã€ãã¯ååŸãããå€ã«ãã£ãŠæ±ºå®ãããŸãã
ãã£ãŒã«ãã¿ã€ãæå® | 説æ |
---|
S | ã²ã |
ç§ã¯ | 4b int |
ãã | 4b笊å·ãªã |
F | 4bãããŒã |
X | ããããã€ã |
f | æµ®åå°æ°ç¹é
å |
ç§ã¯ | inté
å |
B | ããŒã« |
b | ããŒã«é
å |
H | äžæãª16é²ãã€ã |
T | æé |
0 | èšèŒãªã |
1 | 0FII |
2 | SUFF |
3 | FFFF |
4 | 0SISS |
5 | 0SISS00000U |
æ ç¹ã®èª¬æã¢ã€ãã ïŒ.idbïŒ
ããŒãã« | æ§é |
---|
çŽ æ | SSSIFFFIFIFfIX |
æŠåš | SSISIIIFFFFIFIXB00000IHFFFfHHFF |
ã¢ãŒã㌠| SSISIIIFFFFIFIXB00000ffBiHH |
ã¯ã€ãã¯ã¢ã€ãã | SSISIIIFFFFIFIXB00000IIFFSbH |
ã¯ãšã¹ãã¢ã€ãã | SSISIIIFFFFIFIXB00000Is |
ã¢ã€ãã ã®è²©å£² | SSISIIIFFFFIFIXB00000IHI |
ã¹ã€ããïŒ.ldbïŒ
ããŒãã« | æ§é |
---|
ã¹ã€ããã®ãããã¿ã€ã | SfIFTSSS |
ã¹ãã«ãšã¹ãã«ïŒ.pdbïŒ
ããŒãã« | æ§é |
---|
èœå | SSI0000000s |
ã¹ãã« | SSI0000000SSIIIFFFIIIIBI |
ãããããªã³ãïŒprints.dbïŒ
ããŒãã« | æ§é |
---|
è¡ç | 0S11 |
çã®çè·¡ | 0S110000001 |
足跡 | 0S11 |
ã¹ãã«ïŒ.sdbïŒ
ããŒãã« | æ§é |
---|
ãããã¿ã€ã | SSSFIFIFFFFIIIIUSSIIbIXFFFFF |
修食å | SSFIFFISX |
ãã¿ãŒã³ | 0SssSX |
ã¢ãŒããŒãã³ãã¬ãŒã | 0SssSX |
æŠåšã®ãã¿ãŒã³ | 0SssSX |
ã¯ãªãŒãã£ãŒïŒ.udbïŒ
ããŒãã« | æ§é |
---|
ç Žæéšå | SffUU |
人皮 | SUFFUUFfFUUf222222000000000000SssFSsfUUfUUIUSBFUUUU |
ã¢ã³ã¹ã¿ãŒã®ãããã¿ã€ã | SSIUIFFFSFFFFFFFFFUFFFFFFff33sfssSFFFFFUFUSF |
NPC | SUFFFFbbssssFUB |
å«ã³å£°ïŒacks.dbïŒ
ããŒãã« | æ§é |
---|
çã | 0S0000000044444444444444444444445444444444444 |
æ²é³Ž | 0S0000000044444 |
ãã®ä» | 0S0000000044 |
ã¯ãšã¹ãïŒ.qdbïŒ
ããŒãã« | æ§é |
---|
ã¿ã¹ã¯ | SFIISIIs |
ããªãŒãã£ã³ã° | SFFsSsssssI |
ããã¯è峿·±ãã§ãã 2002幎1æ16æ¥ãNivalã¯csv圢åŒã®ãã«ããã¬ã€ã€ãŒã®ãœãŒã¹ããŒã¹ãšãã²ãŒã 圢åŒã®ãŠãŒãã£ãªãã£ã³ã³ããŒã¿ãŒïŒ ãµã€ãã¹ãããã·ã§ãã ïŒãæçš¿ããŸããã åœç¶ãéã³ã³ããŒã¿ãŒã®è¡šç€ºã¯é
ããããŸããã§ããã ãŸããmodmakerãããã£ãŒã«ããšãã®ã¿ã€ãã説æããããã¥ã¡ã³ããå°ãªããšã2ã€ãããŸãããããããèªãããšã¯éåžžã«å°é£ã§ãã
Adb
ç¹å®ã®ã¿ã€ãã®ãŠãããã®ã¢ãã¡ãŒã·ã§ã³ããŒã¿ããŒã¹ã äžèšã®* DBãšã¯å¯Ÿç
§çã«ãããã¯éåžžã«ã人éãã§ããããã¯ãéçãã£ãŒã«ããµã€ãºã®åäžã¬ãã«ã®ããŒãã«ã§ãã

æ§é 説æ meta: id: adb title: Evil Islands, ADB file (animations database) application: Evil Islands file-extension: adb license: MIT endian: le doc: Animations database seq: - id: magic contents: [0x41, 0x44, 0x42, 0x00] doc: Magic bytes - id: animations_count type: u4 doc: Number of animations in base - id: unit_name type: str encoding: cp1251 size: 24 doc: Name of unit - id: min_height type: f4 doc: Minimal height of unit - id: mid_height type: f4 doc: Middle height of unit - id: max_height type: f4 doc: Maximal height of unit - id: animations type: animation doc: Array of animations repeat: expr repeat-expr: animations_count types: animation: doc: Animation's parameters seq: - id: name type: str encoding: cp1251 size: 16 doc: Animation's name - id: number type: u4 doc: Index in animations array - id: additionals type: additional doc: Packed structure with animation parameters - id: action_probability type: u4 doc: Percents of action probability - id: animation_length type: u4 doc: Lenght of animation in game ticks - id: movement_speed type: f4 doc: Movement speed - id: start_show_hide1 type: u4 - id: start_show_hide2 type: u4 - id: start_step_sound1 type: u4 - id: start_step_sound2 type: u4 - id: start_step_sound3 type: u4 - id: start_step_sound4 type: u4 - id: start_hit_frame type: u4 - id: start_special_sound type: u4 - id: spec_sound_id1 type: u4 - id: spec_sound_id2 type: u4 - id: spec_sound_id3 type: u4 - id: spec_sound_id4 type: u4 types: additional: seq: - id: packed type: u8 instances: weapons: value: 'packed & 127' allowed_states: value: '(packed >> 15) & 7' action_type: value: '(packed >> 18) & 15' action_modifyer: value: '(packed >> 22) & 255' animation_stage: value: '(packed >> 30) & 3' action_forms: value: '(packed >> 36) & 63'
ããã¯è峿·±ããã®ã§ããããã€ãã®ãŠãããã§ã¯ãéšåçã«åãæšãŠãããããŒã¿ããŒã¹åœ¢åŒã䜿çšãããŸãããã»ãšãã©æ€èšãããŠããŸããã
ããŒã¿ããŒã¹ãæ±ã£ãã®ã§ã忥çãªäŒæ©ã宣èšããŸãã ããããæã
ã¯äœã宣äŒããŸãã-ç§ãã¡ã®æ¹æ³ã§ã¯ãããŸããã æ¬¡ã«äŸ¿å©ãªãã®ãã¯ãªãŒãã£ãŒãã¡ã€ã«ã®ååã®ä»ãæ¹ãããé©åã«ç€ºããŸãã
ååã¯2æåã®ã°ã«ãŒã-è«çãã¬ãã«ãã®ç¥èªããåéãããŸãã
ããšãã°ã女æ§ãã£ã©ã¯ã¿ãŒã¯unhufe
- Unit > Human > Female
ã§ããã initwesp
- Inventory > Item > Weapon > Spear
ãã€ãŸãåšåº«ã®æ§ïŒèäžã§ã¯ãªããããã¯è¯ãïŒã§ãã
ååèŠçŽ ã®å®å
šãªããªãŒïŒ un: # unit an: # animal wi: # wild ti # tiger ba # bat bo # boar hy # hyen de # deer gi # rat ra # rat cr # crawler wo # wolf ho: # home co # cow pi # pig do # dog ho # horse ha # hare or: # orc fe # female ma # male mo: # monster co # column (menu) un # unicorn cu # Curse be # beholder tr # troll el # elemental su # succub (harpie) ba # banshee dr # driad sh # shadow li # lizard sk # skeleton sp # spider go # golem, goblin ri # Rick og # ogre zo # zombie bi # Rik's dragon cy # cyclope dg # dragon wi # willwisp mi # octopus to # toad hu: # human fe # female ma # male in: # inventory it: # item qu # quest qi # interactive ar: # armor pl # plate gl # gloves lg # leggins bt # boots sh # shirt hl # helm pt # pants li: # loot mt # material tr # trade we: # weapon hm # hammer dg # dagger sp # spear cb # crossbow sw # sword ax # axe bw # bow gm # game menu fa: # faces un: # unit an: # animal wi: # wild ti: # tiger face # face ba: # bat face # face bo: # boar face # face de: # deer face # face ra: # rat face # face cr: # crawler face # face wo: # wolf face # face ho: # home co: # cow face # face pi: # pig face # face do: # dog face # face ho: # horse face # face ha: # hare face # face hu: # human fe: # female fa # me # th # ma: # male fa # me # th # mo: # monster to: # toad face # face tr: # troll face # face or: # orc face # face sp: # spider face # face li: # lizard face # face na: # nature fl: # flora bu # bush te # termitary tr # tree li # waterplant wa # waterfall sk # sky st # stone ef: # effects cu # ar # co # components st: # static si # switch bu: # building to # tower ho # house tr # trap br # bridge ga # gate we # well (waterhole) wa: # wall me # medium li # light to # torch st # static
ããã¯è峿·±ãã§ãããã®åé¡ã«ããã°ãããã³ã¯æšã§ããããŽããªã³ãæã€ãŽãŒã¬ã ã¯å
åŒã§ãããTka-Rickã¯ã¢ã³ã¹ã¿ãŒã§ãã ãŸããããã§ã¯ãæªç©ã®ãåããååãèŠãããšãã§ããŸããããã¯ãDïŒDã®ååãšçããã䌌ãŠããŸã-èŠã人ïŒéªçŒïŒããµãã¥ãïŒããŒããŒïŒã鬌ïŒäººé£ã人皮ïŒãããªã¢ãïŒæ£®ã®äººïŒã
é埳çã«äŒãã§ãç§ãã¡ã¯çã£åããã¢ãã«ã«é£ã³èŸŒã¿ãŸãã ãããã¯ãäºãã«ãªã³ã¯ãããããã€ãã®åœ¢åŒã§è¡šç€ºãããŸãã
Lnk
è«ççã«-ã¢ãã«ã®åºç€ã ã¢ãã«ã®ããŒãã®éå±€ããçŸä»£ã®3Dã¢ããªã³ã°ã®èгç¹ãã説æããŸã-ããŒã³ã®éå±€ã

æ§é 説æ meta: id: lnk title: Evil Islands, LNK file (bones hierarchy) application: Evil Islands file-extension: lnk license: MIT endian: le doc: Bones hierarchy seq: - id: bones_count type: u4 doc: Number of bones - id: bones_array type: bone repeat: expr repeat-expr: bones_count doc: Array of bones types: bone: doc: Bone node seq: - id: bone_name_len type: u4 doc: Length of bone's name - id: bone_name type: str encoding: cp1251 size: bone_name_len doc: Bone's name - id: parent_name_len type: u4 doc: Length of bone's parent name - id: parent_name type: str encoding: cp1251 size: parent_name_len doc: Bone's parent name
芪ããŒã³ã®èŠªåã¯ç©ºã®æååïŒé·ã0ïŒã§ãã
骚ã¯ãããŸãããååãä»ããŠçµã¿ç«ãŠãã ãã§ã¯ååã§ã¯ãããŸããã骚ã«çµã¿ç«ãŠãå¿
èŠããããŸãã
ãã³
åè¿°ã®ããã«ããã®åœ¢åŒïŒã¢ãŒã«ã€ãã§ãªãå ŽåïŒã¯ã芪ããŒãã«å¯Ÿããã¢ãã«ã®ããŒãïŒããŒã³ïŒã®äœçœ®ãèšå®ããŸãã å転ããã«ãªãã»ããã®ã¿ãä¿åãããŸã-ææ°ã®ãã©ãŒããããšã®éãã®1ã€ã§ãã

æ§é 説æ meta: id: bon title: Evil Islands, BON file (bone position) application: Evil Islands file-extension: bon license: MIT endian: le doc: Bone position seq: - id: position type: vec3 doc: Bone translation repeat: eos types: vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis
ã芧ã®ãšããã1ã€ã®ãªãã»ããã«ã¯æ°ãå€ãããŸã-å®éãããã§æåã«ã²ãŒã ãšã³ãžã³ã®éèŠãªæ©èœã®1ã€ã§ããããªãªãã¢ã¢ãã«è£éã«åºäŒããŸããã
ä»çµã¿ïŒã¢ãã«ã«ã¯ãæ¡ä»¶ã匷床ãåšçšããæé·ãšãã3ã€ã®è£éãã©ã¡ãŒã¿ãŒããããŸãã ã¢ãã«ã«ã¯8ã€ã®æ¥µç«¯ãªç¶æ
ããããŸãã ãã©ã¡ãŒã¿ã䜿çšããŠããã©ã€ãªãã¢è£éã«ããæçµã¢ãã«ãååŸã§ããŸãã
ã¢ã«ãŽãªãºã èªäœ def trilinear(val, coefs=[0, 0, 0]):
ããã¯è峿·±ãã§ããããšãã°ãç³ã®ãã¢ããã§ã¹ããéããªã©ãäžéšã®ãªããžã§ã¯ããã¢ãã¡ãŒã·ã§ã³åããããã«ããã©ã€ãªãã¢ã¢ãã«ã®è£éã䜿çšãããŸãã
ä»ãããã¢ãã«èªäœã®äžéšãèŠããšãã§ãã
å³
ããããããã®éäŒã¯çè§£ããããšãäžå¯èœã§ãã 圌ã®èª¬æãšãã¬ã³ããŒã®ãã©ã°ã€ã³ã¯ãããäžã§èŠã€ããããšãã§ããŸãããããããç¥ã£ãŠããŠãããã«ã¯æ°ã¥ããŸããã ã芧ãã ããïŒ

æ§é 説æ meta: id: fig title: Evil Islands, FIG file (figure) application: Evil Islands file-extension: fig license: MIT endian: le doc: 3d mesh seq: - id: magic contents: [0x46, 0x49, 0x47, 0x38] doc: Magic bytes - id: vertex_count type: u4 doc: Number of vertices blocks - id: normal_count type: u4 doc: Number of normals blocks - id: texcoord_count type: u4 doc: Number of UV pairs - id: index_count type: u4 doc: Number of indeces - id: vertex_components_count type: u4 doc: Number of vertex components - id: morph_components_count type: u4 doc: Number of morphing components - id: unknown contents: [0, 0, 0, 0] doc: Unknown (aligment) - id: group type: u4 doc: Render group - id: texture_index type: u4 doc: Texture offset - id: center type: vec3 doc: Center of mesh repeat: expr repeat-expr: 8 - id: aabb_min type: vec3 doc: AABB point of mesh repeat: expr repeat-expr: 8 - id: aabb_max type: vec3 doc: AABB point of mesh repeat: expr repeat-expr: 8 - id: radius type: f4 doc: Radius of boundings repeat: expr repeat-expr: 8 - id: vertex_array type: vertex_block doc: Blocks of raw vertex data repeat: expr repeat-expr: 8 - id: normal_array type: vec4x4 doc: Packed normal data repeat: expr repeat-expr: normal_count - id: texcoord_array type: vec2 doc: Texture coordinates data repeat: expr repeat-expr: texcoord_count - id: index_array type: u2 doc: Triangles indeces repeat: expr repeat-expr: index_count - id: vertex_components_array type: vertex_component doc: Vertex components array repeat: expr repeat-expr: vertex_components_count - id: morph_components_array type: morph_component doc: Morphing components array repeat: expr repeat-expr: morph_components_count types: morph_component: doc: Morphing components indeces seq: - id: morph_index type: u2 doc: Index of morphing data - id: vertex_index type: u2 doc: Index of vertex vertex_component: doc: Vertex components indeces seq: - id: position_index type: u2 doc: Index of position data - id: normal_index type: u2 doc: Index of normal data - id: texture_index type: u2 doc: Index of texcoord data vec2: doc: 2d vector seq: - id: u type: f4 doc: u axis - id: v type: f4 doc: v axis vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis vec3x4: doc: 3d vector with 4 values per axis seq: - id: x type: f4 doc: x axis repeat: expr repeat-expr: 4 - id: y type: f4 doc: y axis repeat: expr repeat-expr: 4 - id: z type: f4 doc: z axis repeat: expr repeat-expr: 4 vertex_block: doc: Vertex raw block seq: - id: block type: vec3x4 doc: Vertex data repeat: expr repeat-expr: _root.vertex_count vec4x4: doc: 4d vector with 4 values per axis seq: - id: x type: f4 doc: x axis repeat: expr repeat-expr: 4 - id: y type: f4 doc: y axis repeat: expr repeat-expr: 4 - id: z type: f4 doc: z axis repeat: expr repeat-expr: 4 - id: w type: f4 doc: w axis repeat: expr repeat-expr: 4
é£ããã¯äœã§ããïŒ ãããã£ãŠãæ³ç·ãšé ç¹ã®ããŒã¿ã¯4ã€ã®ãããã¯ã«æ ŒçŽãããé ç¹ãè£éã®ããã«8ã€ã®ãããã¯ã«é
眮ãããŸãã
ããã¯è峿·±ãã§ããããããã1999幎以éIntelããã»ããµã«ç»å ŽããSSEåœä»€ã®å©ããåããŠåŠçãé«éåããããã«ããã®ãããªã°ã«ãŒãåãè¡ãããŸããã
ããŠãç§ãã¡ã¯ã¢ãã«ãèªãã§æ§æããŸããããäœããæ¬ ããŠããŸãã ãŸãã«-ã¢ãã¡ãŒã·ã§ã³ïŒ
ãã
ã¢ãã¡ãŒã·ã§ã³ã¯ãããŒã®ç¶æ
ãšããŠã³ã³ããŒãã³ã圢åŒã§ä¿åãããŸãã è峿·±ãäºå®ã¯ãéªšæ Œã¢ãã¡ãŒã·ã§ã³ã ãã§ãªãé ç¹ã¢ãŒãã£ã³ã°ããµããŒããããŠããããšã§ãã

æ§é 説æ meta: id: anm title: Evil Islands, ANM file (bone animation) application: Evil Islands file-extension: anm license: MIT endian: le doc: Bone animation seq: - id: rotation_frames_count type: u4 doc: Number of rotation frames - id: rotation_frames type: quat repeat: expr repeat-expr: rotation_frames_count doc: Bone rotations - id: translation_frames_count type: u4 doc: Number of translation frames - id: translation_frames type: vec3 repeat: expr repeat-expr: translation_frames_count doc: Bone translation - id: morphing_frames_count type: u4 doc: Number of morphing frames - id: morphing_vertex_count type: u4 doc: Number of vertices with morphing - id: morphing_frames type: morphing_frame repeat: expr repeat-expr: morphing_frames_count doc: Array of morphing frames types: vec3: doc: 3d vector seq: - id: x type: f4 doc: x axis - id: y type: f4 doc: y axis - id: z type: f4 doc: z axis quat: doc: quaternion seq: - id: w type: f4 doc: w component - id: x type: f4 doc: x component - id: y type: f4 doc: y component - id: z type: f4 doc: z component morphing_frame: doc: Array of verteces morphing seq: - id: vertex_shift type: vec3 repeat: expr repeat-expr: _parent.morphing_vertex_count doc: Morphing shift per vertex
ããã ãã§ã-ããã§æ¬æ Œçãªã¢ãã«ãã§ããŸãããæ°ããã¬ã³ããªã³ã°ãããã€ãã«ãªãè³è³ã§ããŸãïŒ

æãããç¬éãã«ã²ã«å¿
èŠãªãã®ãèŠã€ãã
圌ã®å®¶ã§ãã«ã²ãšã®äŒè©±
é è
ãªã¶ãŒãïŒããªãã¯æ¥ããç·ã ããã¯ããã§ãã
ã¶ãã¯ïŒããªããç§ã«äŒãããã£ãããšã¯ããã ãã§ããïŒ
é è
ãªã¶ãŒãïŒããªãã¯åã³æ¥ãã§ããŸãã ç§ã¯ããªãã®è³ªåãèŠããŠããããããã«çããŸãã ååŒãããããã«éã®äººã
ã«æ¥ãŸããã ããããç§ã¯åœŒããããªãã«ã©ãããããèŠãŸããã 圌ãã¯èšèãæã¡ãŸãããç§ã¯åœŒããä¿¡ããããšãæ¢ããŸããã ããªãã¯èšèãå®ããŸããã ååŒãããªãã«æäŸãããŸãã
é è
ãªã¶ãŒãïŒäººã
ã¯éã倧奜ãã§ãã éã®ãã«ã²ã¯é¢çœããªãã ããªãã¯ç§ã®ä»äºãå®äºããŸãããããŠç§ã¯ããªãã«ç§ãæã£ãŠããéãäžããŸãã ããããã®éããããŸãã
ã¶ãã¯ïŒææ
®æ·±ããããŸãèå³ããªãïŒ ïŒããŒã...ãŽãŒã«ã...ããã¯ç¢ºãã«å·ã€ããªãã ãã...
ã¶ãã¯ïŒç§ãé·å¹Žæ¢ããŠããèéè¡åž«ã®å±
å ŽæãèŠã€ããŠããããšããã®ã§ããã çµå±ã®ãšããããã«ã²ã¯å€ä»£ã®äººã
ã§ãããããªãã¯ãããç¥ãããšãã§ããŸãïŒ
é è
ãªã¶ãŒãïŒãã®ãšããã§ãã ãã«ã²ã¯å€ä»£ã®äººã
ã§ãã ç§ãã¡ã¯è人ã«ã€ããŠç¥ã£ãŠãããã¹ãŠãéããããšãã§ããŸãã ç§ã®ããã·ã§ã³ãå®äºããããšã«åæããŸããïŒ
ã¶ãã¯ïŒãªããŠè©±ã ïŒ ãã¹ãŠããã§ã«è¡ãããŠããããšãèæ
®ããŠãã ããã
Hermit Lizard ïŒãŸããã«ïŒ ïŒãããã£ãã®ïŒ ç§ãã ãŸããŸããïŒ
ã¶ãã¯ïŒå®éãç§ã¯åè«ãèšãããã£ããããã§ãªããã°ãããªãã¯æ¬åœã«çå£ã ã£ãã
é è
ãã«ã²ïŒãªãã»ã©ã ããã¯åè«ã§ãã ç§ãåè«ãèšãããšãã§ãããšæããŸãã ããããã ãããŠä»ãéæ²³ã«æ°Žãæ»ãå¿
èŠããããŸãã ãªãŒã¯ã¯ç§ãã¡ããæ°Žãçã¿ãŸããã
é è
ãã«ã²ïŒæ°Žã«æ²¿ã£ãŠåã«è¡ããŸãã ãã ãšéæ²³ãèŠããŸãã ãã ãäžããå¿
èŠããããŸãã ã¬ãã¬ããžã ãããŸã ãã£ãã«ããããã¯ããå¿
èŠããããŸãã ç³ã ç³ããããŸãã 圌ã¯ãã§ã«éæ²³ã®ç«¯ã«æšªããã£ãŠããŸãã ãã ã®äžæµã ç³ã¯éãã§ãã ãªãŒã¯ãæã£ããšãã圌ãã¯é·ãé圌ãæã¡äžããŸããã ããªããåœŒãæŒããšã圌ã¯ããã«åŸéããŸãã
é è
ãªã¶ãŒãïŒãã®åŸãæ»ã£ãŠããŠãã ããã æã®éè¡åž«ã«ã€ããŠåŠãã ããšããã¹ãŠã話ãããŸãã
ã¶ãã¯ïŒæã«ïŒ ããããã¡ãªã¿ã«ãã¹ããŒãªãŒã«å°ãã³ã€ã³ã远å ããŠããç§ã¯ãŸã£ããæ°åã害ããããšã¯ãããŸããã
é è
ã®ãã«ã²ïŒããã«åã®æµ
ç¬ã«äœãã§ããç§ã®èŠªrelativeã«ã³ã€ã³ãæ±ããŠãã ããã 3çªç®ã«äžŠãã§ããæãé ãç æµã®å³¶ã«è¡ããŸãã å®ç©ã¯ããªãã®ãã®ã«ãªããŸãïŒ
ãã«ã²ã®é è
ïŒåœŒèªèº«ãžïŒ ïŒå¥åŠãªã ãã®ç·ã¯ãŠãŒã¢ã¢ã倧奜ãã§ãã ç§ã¯åè«ãèšã£ãŠããŸããã ç·ã¯ç¬ããŸããã§ããã ãšãŠãå¥åŠã§ãã
ããŠãæãè峿·±ãã®ã¯ããããã®ä¿åæ¹æ³ã§ãã
MP
ããã¯ãããããããŒãã¡ã€ã«ã§ãã äžå¹žãªå¶ç¶ã®äžèŽã«ãããæ¡åŒµåã¯ãã«ããã¬ã€ã€ãŒã®ä¿åãã¡ã€ã«ã®æ¡åŒµåãšäžèŽããŸãããããã¯èæ
®ããŸããã
æåã«ã颚æ¯ã®äžè¬çãªèª¬æãããå¿
èŠããããŸãã
- ããã£ã³ã¯ãã®æ°-32x32ã¡ãŒãã«ã®ã«ãŒãã®ç Žçã
- æå€§é«ãïŒé ç¹ã®é«ãã¯æŽæ°ã¹ã±ãŒã«ã§ä¿åãããããïŒ;
- ã¿ã€ã«ã¢ãã©ã¹ã®æ°ã
ããã«ãããããããªã¢ã«ã®èª¬æãšãã¢ãã¡ãŒã·ã§ã³ã¿ã€ã«ïŒæ°Žã溶岩ãªã©ïŒããããŸãã

æ§é 説æ meta: id: mp title: Evil Islands, MP file (map header) application: Evil Islands file-extension: mp license: MIT endian: le doc: Map header seq: - id: magic contents: [0x72, 0xF6, 0x4A, 0xCE] doc: Magic bytes - id: max_altitude type: f4 doc: Maximal height of terrain - id: x_chunks_count type: u4 doc: Number of sectors by x - id: y_chunks_count type: u4 doc: Number of sectors by y - id: textures_count type: u4 doc: Number of texture files - id: texture_size type: u4 doc: Size of texture in pixels by side - id: tiles_count type: u4 doc: Number of tiles - id: tile_size type: u4 doc: Size of tile in pixels by side - id: materials_count type: u2 doc: Number of materials - id: animated_tiles_count type: u4 doc: Number of animated tiles - id: materials type: material doc: Map materials repeat: expr repeat-expr: materials_count - id: id_array type: u4 doc: Tile type repeat: expr repeat-expr: tiles_count enum: tile_type - id: animated_tiles type: animated_tile doc: Animated tiles repeat: expr repeat-expr: animated_tiles_count types: material: doc: Material parameters seq: - id: type type: u4 doc: Material type by enum: terrain_type - id: color type: rgba doc: RGBA diffuse color - id: self_illumination type: f4 doc: Self illumination - id: wave_multiplier type: f4 doc: Wave speed multiplier - id: warp_speed type: f4 doc: Warp speed multiplier - id: unknown size: 12 types: rgba: doc: RGBA color seq: - id: r type: f4 doc: Red channel - id: g type: f4 doc: Green channel - id: b type: f4 doc: Blue channel - id: a type: f4 doc: Alpha channel enums: terrain_type: 0: base 1: water_notexture 2: grass 3: water animated_tile: doc: Animated tile parameters seq: - id: start_index type: u2 doc: First tile of animation - id: length type: u2 doc: Animation frames count enums: tile_type: 0: grass 1: ground 2: stone 3: sand 4: rock 5: field 6: water 7: road 8: empty 9: snow 10: ice 11: drygrass 12: snowballs 13: lava 14: swamp 15: highrock
material type | çš®é¡ |
---|
0 | grass |
1 | ground |
2 | stone |
3 | sand |
4 | rock |
5 | field |
6 | water |
7 | road |
8 | (empty) |
9 | snow |
10 | ice |
11 | drygrass |
12 | snowballs |
13 | lava |
14 | swamp |
15 | highrock |
, Res/aiinfo.res/tileDesc.reg
.
: , â .
: .
. !
SEC
â 3232 . , ZonenameXXXYYY
.

meta: id: sec title: Evil Islands, SEC file (map sector) application: Evil Islands file-extension: sec license: MIT endian: le doc: Map sector seq: - id: magic contents: [0x74, 0xF7, 0x4B, 0xCF] doc: Magic bytes - id: liquids type: u1 doc: Liquids layer indicator - id: vertexes type: vertex doc: Vertex array 33x33 repeat: expr repeat-expr: 1089 - id: liquid_vertexes type: vertex doc: Vertex array 33x33 if: liquids != 0 repeat: expr repeat-expr: 'liquids != 0 ? 1089 : 0' - id: tiles type: tile doc: Tile array 16x16 repeat: expr repeat-expr: 256 - id: liquid_tiles type: tile doc: Tile array 16x16 if: liquids != 0 repeat: expr repeat-expr: 'liquids != 0 ? 256 : 0' - id: liquid_material type: u2 doc: Index of material if: liquids != 0 repeat: expr repeat-expr: 'liquids != 0 ? 256 : 0' types: vertex: doc: Vertex data seq: - id: x_shift type: s1 doc: Shift by x axis - id: y_shift type: s1 doc: Shift by y axis - id: altitude type: u2 doc: Height (z position) - id: packed_normal type: normal doc: Packed normal normal: doc: Normal (3d vector) seq: - id: packed type: u4 doc: Normal packed in 4b instances: x: doc: Unpacked x component value: packed >> 11 & 0x7FF y: doc: Unpacked y component value: packed & 0x7FF z: doc: Unpacked z component value: packed >> 22 tile: doc: Tile parameters seq: - id: packed type: u2 doc: Tile information packed in 2b instances: index: doc: Tile index in texture value: packed & 63 texture: doc: Texture index value: packed >> 6 & 255 rotation: doc: Tile rotation (*90 degrees) value: packed >> 14 & 3
â .
10 z, 11 x y
unsigned packed_normal; float x = ((float)((packed_normal >> 11) & 0x7FF) - 1000.0f) / 1000.0f; float y = ((float)(packed_normal & 0x7FF) - 1000.0f) / 1000.0f; float z = (float)(packed_normal >> 22) / 1000.0f;
6 , 8 , 2
unsigned short texture; unsigned char tile_index = f & 63; unsigned char texture_index = (f >> 6) & 255; unsigned char rotation = (f >> 14) & 3;
3d33 33 , , 3232 . â 1 .
:
x = x + x_offset / 254
y = y + y_offset / 254
z = altitude / 65535 * max_altitude ( .mp )
"", :
0 1 2 *-*-* |\|\| ~ 33 *-*-* |\|\| ~ 66 *-*-* ~ ~ ~
, , 1616 . â 2 . , 90 .
. , , ID , MP .
: MP, , : ID , - .
ID â .
â :

- â , .
MOB
( ) , , : . â " ", .
, ( ).
:
typedef structure { unsigned type_id; unsigned size; byte data[size - 8]; } node;
(, !)
( , )
meta: id: mob title: Evil Islands, MOB file (map entities) application: Evil Islands file-extension: mob license: MIT endian: le doc: Map entities tree seq: - id: root_node type: node doc: Root node types: node: doc: Entity node seq: - id: type_id type: u4 doc: Node children type ID - id: size type: u4 doc: Node full size - id: data type: node_data size: size - 8 doc: Node stored data node_data: doc: Node data seq: - id: value type: switch-on: _parent.type_id cases: 0xA000: node 0x00001E00: node 0x00001E01: node 0x00001E02: node 0x00001E03: node 0x00001E0B: node 0x00001E0E: node 0x0000A000: node 0x0000AA01: node 0x0000ABD0: node 0x0000B000: node 0x0000B001: node 0x0000CC01: node 0x0000DD01: node 0x0000E000: node 0x0000E001: node 0x0000F000: node 0x0000FF00: node 0x0000FF01: node 0x0000FF02: node 0xBBAB0000: node 0xBBAC0000: node 0xBBBB0000: node 0xBBBC0000: node 0xBBBD0000: node 0xBBBE0000: node 0xBBBF0000: node 0xDDDDDDD1: node _: u1 doc: Node elements repeat: eos
| () | |
---|
AiGraph | | |
AreaArray | | |
Byte | 1 | 1 |
Diplomacy | 4096 | 32x32 2 |
Dword | 4 | 4 |
Float | 4 | 4 |
LeverStats | 12 | |
Null | 0 | |
Plot | 12 | 3 floats (vec3) |
Plot2DArray | | |
Quaternion | 16 | 4 floats (vec4) |
Record | >8 | |
Rectangle | | |
ã²ã | | |
StringArray | >4 | |
StringEncrypted | >4 | |
UnitStats | 180 | |
Unknown | | |
type_idtype_id | | |
---|
0x00000000 | Record | ROOT |
0x00001E00 | Record | VSS_SECTION |
0x00001E01 | Record | VSS_TRIGER |
0x00001E02 | Record | VSS_CHECK |
0x00001E03 | Record | VSS_PATH |
0x00001E04 | Dword | VSS_ID |
0x00001E05 | Rectangle | VSS_RECT |
0x00001E06 | Dword | VSS_SRC_ID |
0x00001E07 | Dword | VSS_DST_ID |
0x00001E08 | ã²ã | VSS_TITLE |
0x00001E09 | ã²ã | VSS_COMMANDS |
0x00001E0A | Byte | VSS_ISSTART |
0x00001E0B | Record | VSS_LINK |
0x00001E0C | ã²ã | VSS_GROUP |
0x00001E0D | Byte | VSS_IS_USE_GROUP |
0x00001E0E | Record | VSS_VARIABLE |
0x00001E0F | StringArray | VSS_BS_CHECK |
0x00001E10 | StringArray | VSS_BS_COMMANDS |
0x00001E11 | ã²ã | VSS_CUSTOM_SRIPT |
0x0000A000 | Record | OBJECTDBFILE |
0x0000AA00 | Null | LIGHT_SECTION |
0x0000AA01 | Record | 軜ã |
0x0000AA02 | Float | LIGHT_RANGE |
0x0000AA03 | ã²ã | LIGHT_NAME |
0x0000AA04 | Plot | LIGHT_POSITION |
0x0000AA05 | Dword | LIGHT_ID |
0x0000AA06 | Byte | LIGHT_SHADOW |
0x0000AA07 | Plot | LIGHT_COLOR |
0x0000AA08 | ã²ã | LIGHT_COMMENTS |
0x0000ABD0 | Record | WORLD_SET |
0x0000ABD1 | Plot | WS_WIND_DIR |
0x0000ABD2 | Float | WS_WIND_STR |
0x0000ABD3 | Float | WS_TIME |
0x0000ABD4 | Float | WS_AMBIENT |
0x0000ABD5 | Float | WS_SUN_LIGHT |
0x0000B000 | Record | OBJECTSECTION |
0x0000B001 | Record | OBJECT |
0x0000B002 | Dword | NID |
0x0000B003 | Dword | OBJTYPE |
0x0000B004 | ã²ã | OBJNAME |
0x0000B005 | Null | OBJINDEX |
0x0000B006 | ã²ã | OBJTEMPLATE |
0x0000B007 | ã²ã | OBJPRIMTXTR |
0x0000B008 | ã²ã | OBJSECTXTR |
0x0000B009 | Plot | OBJPOSITION |
0x0000B00A | Quaternion | OBJROTATION |
0x0000B00B | Null | OBJTEXTURE |
0x0000B00C | Plot | OBJCOMPLECTION |
0x0000B00D | StringArray | OBJBODYPARTS |
0x0000B00E | ã²ã | PARENTTEMPLATE |
0x0000B00F | ã²ã | OBJCOMMENTS |
0x0000B010 | Null | OBJ_DEF_LOGIC |
0x0000B011 | Byte | OBJ_PLAYER |
0x0000B012 | Dword | OBJ_PARENT_ID |
0x0000B013 | Byte | OBJ_USE_IN_SCRIPT |
0x0000B014 | Byte | OBJ_IS_SHADOW |
0x0000B015 | Null | OBJ_R |
0x0000B016 | ã²ã | OBJ_QUEST_INFO |
0x0000C000 | Null | SC_OBJECTDBFILE |
0x0000CC00 | Null | SOUND_SECTION |
0x0000CC01 | Record | SOUND |
0x0000CC02 | Dword | SOUND_ID |
0x0000CC03 | Plot | SOUND_POSITION |
0x0000CC04 | Dword | SOUND_RANGE |
0x0000CC05 | ã²ã | SOUND_NAME |
0x0000CC06 | Dword | SOUND_MIN |
0x0000CC07 | Dword | SOUND_MAX |
0x0000CC08 | ã²ã | SOUND_COMMENTS |
0x0000CC09 | Null | SOUND_VOLUME |
0x0000CC0A | StringArray | SOUND_RESNAME |
0x0000CC0B | Dword | SOUND_RANGE2 |
0x0000CC0D | Byte | SOUND_AMBIENT |
0x0000CC0E | Byte | SOUND_IS_MUSIC |
0x0000D000 | Null | PR_OBJECTDBFILE |
0x0000DD00 | Null | PARTICL_SECTION |
0x0000DD01 | Record | PARTICL |
0x0000DD02 | Dword | PARTICL_ID |
0x0000DD03 | Plot | PARTICL_POSITION |
0x0000DD04 | ã²ã | PARTICL_COMMENTS |
0x0000DD05 | ã²ã | PARTICL_NAME |
0x0000DD06 | Dword | PARTICL_TYPE |
0x0000DD07 | Float | PARTICL_SCALE |
0x0000E000 | Record | DIRICTORY |
0x0000E001 | Record | FOLDER |
0x0000E002 | ã²ã | DIR_NAME |
0x0000E003 | Dword | DIR_NINST |
0x0000E004 | Dword | DIR_PARENT_FOLDER |
0x0000E005 | Byte | DIR_TYPE |
0x0000F000 | Record | DIRICTORY_ELEMENTS |
0x0000FF00 | Record | SEC_RANGE |
0x0000FF01 | Record | MAIN_RANGE |
0x0000FF02 | Record | RANGE |
0x0000FF05 | Dword | MIN_ID |
0x0000FF06 | Dword | MAX_ID |
0x31415926 | AiGraph | AIGRAPH |
0xACCEECCA | ã²ã | SS_TEXT_OLD |
0xACCEECCB | StringEncrypted | SS_TEXT |
0xBBAB0000 | Record | MAGIC_TRAP |
0xBBAB0001 | Dword | MT_DIPLOMACY |
0xBBAB0002 | ã²ã | MT_SPELL |
0xBBAB0003 | AreaArray | MT_AREAS |
0xBBAB0004 | Plot2DArray | MT_TARGETS |
0xBBAB0005 | Dword | MT_CAST_INTERVAL |
0xBBAC0000 | Record | LEVER |
0xBBAC0001 | Null | LEVER_SCIENCE_STATS |
0xBBAC0002 | Byte | LEVER_CUR_STATE |
0xBBAC0003 | Byte | LEVER_TOTAL_STATE |
0xBBAC0004 | Byte | LEVER_IS_CYCLED |
0xBBAC0005 | Byte | LEVER_CAST_ONCE |
0xBBAC0006 | LeverStats | LEVER_SCIENCE_STATS_NEW |
0xBBAC0007 | Byte | LEVER_IS_DOOR |
0xBBAC0008 | Byte | LEVER_RECALC_GRAPH |
0xBBBB0000 | Record | UNIT |
0xBBBB0001 | Null | UNIT_R |
0xBBBB0002 | ã²ã | UNIT_PROTOTYPE |
0xBBBB0003 | Null | UNIT_ITEMS |
0xBBBB0004 | UnitStats | UNIT_STATS |
0xBBBB0005 | StringArray | UNIT_QUEST_ITEMS |
0xBBBB0006 | StringArray | UNIT_QUICK_ITEMS |
0xBBBB0007 | StringArray | UNIT_SPELLS |
0xBBBB0008 | StringArray | UNIT_WEAPONS |
0xBBBB0009 | StringArray | UNIT_ARMORS |
0xBBBB000A | Byte | UNIT_NEED_IMPORT |
0xBBBC0000 | Record | UNIT_LOGIC |
0xBBBC0001 | Null | UNIT_LOGIC_AGRESSIV |
0xBBBC0002 | Byte | UNIT_LOGIC_CYCLIC |
0xBBBC0003 | Dword | UNIT_LOGIC_MODEL |
0xBBBC0004 | Float | UNIT_LOGIC_GUARD_R |
0xBBBC0005 | Plot | UNIT_LOGIC_GUARD_PT |
0xBBBC0006 | Byte | UNIT_LOGIC_NALARM |
0xBBBC0007 | Byte | UNIT_LOGIC_USE |
0xBBBC0008 | Null | UNIT_LOGIC_REVENGE |
0xBBBC0009 | Null | UNIT_LOGIC_FEAR |
0xBBBC000A | Float | UNIT_LOGIC_WAIT |
0xBBBC000B | Byte | UNIT_LOGIC_ALARM_CONDITION |
0xBBBC000C | Float | UNIT_LOGIC_HELP |
0xBBBC000D | Byte | UNIT_LOGIC_ALWAYS_ACTIVE |
0xBBBC000E | Byte | UNIT_LOGIC_AGRESSION_MODE |
0xBBBD0000 | Record | GUARD_PT |
0xBBBD0001 | Plot | GUARD_PT_POSITION |
0xBBBD0002 | Null | GUARD_PT_ACTION |
0xBBBE0000 | Record | ACTION_PT |
0xBBBE0001 | Plot | ACTION_PT_LOOK_PT |
0xBBBE0002 | Dword | ACTION_PT_WAIT_SEG |
0xBBBE0003 | Dword | ACTION_PT_TURN_SPEED |
0xBBBE0004 | Byte | ACTION_PT_FLAGS |
0xBBBF0000 | Record | TORCH |
0xBBBF0001 | Float | TORCH_STRENGHT |
0xBBBF0002 | Plot | TORCH_PTLINK |
0xBBBF0003 | ã²ã | TORCH_SOUND |
0xDDDDDDD1 | Record | DIPLOMATION |
0xDDDDDDD2 | Diplomacy | DIPLOMATION_FOF |
0xDDDDDDD3 | StringArray | DIPLOMATION_PL_NAMES |
0xFFFFFFFF | Unknown | UNKNOWN |
â , , Nival, â , ( , ).
unsigned key; for (size_t i = 0; i < size; i++) { key += (((((key * 13) << 4) + key) << 8) - key) * 4 + 2531011; data[i] ^= key >> 16; }
: , ( ) . , , , .
( , , â Windows 98):

: , . , ( , , " : ", ).
, , - - , , Collada :

ãšãããŒã°
. , .
, . - , â - , . , -...
â !
UPD (23.01.2019):
, : github .
, (, "" ).
- http://gipatgroup.org/utilities â EiEdit (.res, .*db), MobSurgeon (.mob)
- http://svn.gipat.org/trac/GGWiki â EiEdit (.res, .*db), MobSurgeon (.mob), .mp, .sec, .*db
- https://github.com/demothorg/eifixer â
- https://github.com/konstvest/ei_figer â Blender .lnk, .fig, .bon, .anm
- https://github.com/demothorg/ei-tools â (.mob, .lnk, .mpr, .res) +
- https://github.com/konstvest/ei_maper â (.mpr, .mp, .sec, .mob)
- https://github.com/chemmalion/EIDBEditor â (.*db)
- https://gitlab.com/ykurganov/open-evil-islands â ,