構造体の読み方

Last-modified: 2015-05-03 (日) 21:26:51

■構造体の読み方基本形は下記のコードになる。

  for 28@ = [Start] to [(Start)+(size*(Num-1))] step [size]
     読んだり
     書き込んだり
  end

■人物車以外の構造体集

  #####################################################################
  0x00AAE948あたりからモデルの定義。
  ひとつあたり0x20バイト、
  コリジョンモデルの構造体へのポインタ(DWORD)、
  LOD切り替え距離(FLOAT)が含まれる。
  全部で14000個くらい。
  0x00B744A4に格納されているポインタの指すアドレスに格納されている
  ポインタの指すアドレスからコリジョンモデル構造体の配列。
  ひとつあたり0x30バイト、
  +0x00 FLOAT X最小
  +0x04 FLOAT Y最小
  +0x08 FLOAT Z最小
  +0x0C FLOAT X最大
  +0x10 FLOAT Y最大
  +0x14 FLOAT Z最大
  +0x18 FLOAT X中心
  +0x1C FLOAT Y中心
  +0x20 FLOAT Z中心
  +0x24 FLOAT 球半径
  +0x28 DWORD ?
  +0x2C DWORD ?
  全部で10150個くらい。
  #####################################################################
  0xA94DE4 から 0x7C バイトごとに 8つの1バイト整数を取得し、
  全てが0でなければそれ以上作成できないということになります。
  for 0@ = 0xA94D68 to 0xA950CC step 0x7C
  0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
  if
  8039: not 1@ == 0
  jf @CREATABLE
  end
  // 作成できない
  :CREATABLE
  // 作成できる
  #####################################################################
  0xC891A8にProjectile構造体(36byte*32element)があるので
  それぞれの+0x0Cを0等遠い値にしてやると時限信管による爆発・消滅しなくなります。
  また、0xB7CB84の値あたりにしてやると即爆発・消滅します。
  RocketやMissileなんかはぶつかるまで無限に飛び続けます。
  Rockets
  The rocket pool contains info on launched rockets (for example, Hydra rockets).
  0xC891A8 - Rocket pool start. Each slot has 36 bytes of data. There are 32 elements in the pool.
  +0 = [dword] Rocket type:
  16 = none
  19 = normal
  20 = heatseeking
  58 = flare
  +4 = [dword] Pointer to launching vehicle
  +8 = [dword] Pointer to target vehicle (when heatseeking), 0 otherwise
  +0x0Cを0等遠い値にしてやると時限信管による爆発・消滅しなくなります
  +16 = [byte] Does rocket exist?
  0 = exploded/does not exist
  1 = travelling
  +20 = [float] X-axis position
  +24 = [float] Y-axis position
  +28 = [float] Z-axis position
  #####################################################################
  Corona Structure
  Start 0xC3E058
  Size 0x3C
  Num 0x40
  +0x00 Float X Position
  +0x04 Float Y Position
  +0x08 Float Z Position
  +0x0C DWord Unknown
  +0x10 DWord Ptr To Texture (+0x10 Char[64] Name)
  +0x14 Float Radius
  +0x18 Float Unknown
  +0x1C Float Far Clip
  +0x20 Float Near Clip
  +0x24 DWord 0
  +0x28 Float 15.0
  +0x2C Byte Color R
  +0x2D Byte Color G
  +0x2E Byte Color B
  +0x2F Byte Color A
  +0x30 Byte Fade (0=Hide/255=Show)
  +0x31 Byte Flag (0/1)
  +0x32 Byte Flare
  +0x33 Byte Flag (0/1)
  +0x34 DWord Flag
  +0x38 DWord 0
  #####################################################################
  CPickupItem
  開始 0x9788C0
  サイズ 0x20
  最大 0x26C
  +0x04 DWORD CObjectアドレス 0なら存在しない
  +0x08 DWORD 札束の場合は金額
  +0x0C DWORD(?) 消滅時刻
  +0x10 WORD X座標*8.0
  +0x12 WORD Y座標*8.0
  +0x14 WORD Z座標*8.0
  +0x1C WORD タイプ 8なら主に札束 4なら主に落とされた武器
  +0x0Cを0にすると消える
  毎フレームチェックされないみたいだから瞬時には消えない
  for 0@ = 0x9788DC to 0x97D63C step 0x20
  0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
  if
  0039: 1@ == 4
  then
  000A: 0@ += -0x18
  0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
  000A: 0@ += 0x18
  if
  8039: not 1@ == 0
  then
    0A8D: 2@ = read_memory 0xB7449C size 4 virtual_protect 0
  0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
  0062: 1@ -= 2@ // (int)
  0016: 1@ /= 0x19C
  0A8D: 2@ = read_memory 0xB7449C size 4 virtual_protect 0
  000A: 2@ += 0x4
  0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
  005A: 2@ += 1@ // (int)
  0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0
  0012: 1@ *= 0x100
  005A: 1@ += 2@ // (int)
  0984: 10@ = object 1@ model
  end
  end
  end
  pickupの武器IDを取得します。
  1@がオブジェクト、10@がIDです。
  sweet家上のtec9等の元から落ちている武器は取得できません。
  for 28@ = 0x9788C0 to 0x97D620 step 0x20
      000A: 28@ += 0x4
      0A8D: 26@ = read_memory 28@ size 4 virtual_protect 0
      000A: 28@ += -0x4
      if
      8039: not 26@ == 0//exist?
      then
          000A: 28@ += 0x1C
          0A8D: 26@ = read_memory 28@ size 4 virtual_protect 0
          000A: 28@ += -0x1C
          if
          0039: 26@ == 4//weapon?
          then
              ////////get_ammo//////////
              000A: 28@ += 0x08
              0A8D: 15@ = read_memory 28@ size 4 virtual_protect 0
              000A: 28@ += -0x08
              ////////get_ammo//////////
              ////////set_disapper///////////
              000A: 28@ += 0x0C
              0A8D: 0@ = read_memory 0xB7CB84 size 4 virtual_protect 0 //grobal_timer
              0A8C: write_memory 28@ size 4 value 0@ virtual_protect 0
              000A: 28@ += -0x0C
              ////////set_disapper///////////
              ////////get_pos/////////
              000A: 28@ += 0x10
              0A8D: 16@ = read_memory 28@ size 2 virtual_protect 0
              000A: 28@ += 0x2
              0A8D: 17@ = read_memory 28@ size 2 virtual_protect 0
              000A: 28@ += 0x2
              0A8D: 18@ = read_memory 28@ size 2 virtual_protect 0
              000A: 28@ += -0x14
              16@ /= 8.0
              17@ /= 8.0
              18@ /= 8.0
              ////////get_pos/////////
              ////////get_model////////
              0A8D: 2@ = read_memory 0xB7449C size 4 virtual_protect 0
              0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
              0062: 26@ -= 2@ // (int)
              0016: 26@ /= 0x19C
              0A8D: 2@ = read_memory 0xB7449C size 4 virtual_protect 0
              000A: 2@ += 0x4
              0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
              005A: 2@ += 26@ // (int)
              0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0
              0012: 26@ *= 0x100
              005A: 26@ += 2@ // (int)
              0984: 10@ = object 26@ model
              ////////get_model////////
              //0A92: create_custom_thread "31)4like_make_weapon_obj.s" [x_f][y_f][z_f][model_id_i][amount_ammo_i]
              0A92: create_custom_thread "31)4like_make_weapon_obj.s" 16@ 17@ 18@ 10@ 15@
          end
      end
  end
  #####################################################################
  Marker
  0xBA86F0
  サイズは0x28バイト
  要素数は0xB0
  +0x04 DWORD アタッチ先ハンドル
  +0x14 WORD マーカーの色
  +0x26 BYTE アタッチ先の種類(車04 人08 物0C)
  マーカーのハンドル
  Marker Handleは(Flag << 0x10 | Index)です。
  0@ = 0xBAA270
  000A: 0@ += 0x14
  0A8D: 1@ = read_memory 0@ size 2 virtual_protect 0//mark handle
  000E: 0@ -= 0x14
  0012: 1@ *= 0x10000
  0085: 2@ = 0@ // (int)
  000E: 2@ -= 0xBA86F0
  0016: 2@ /= 0x28
  005A: 1@ += 2@ // (int)
  アタッチ先の種類の見分け方の例
  if and
  88B7: not test 26@ bit 2
  08B7: test 26@ bit 3
  then
  (この場合、1000B==0x08==人 の時真となる)
  #####################################################################
  FireStart 0xB71F80
  Size 0x28
  Num 0x3C
  +0x00 Word Exist Flag (20=None)
  +0x02 Word Index used in SCM
  +0x04 Float X Position
  +0x08 Float Y Position
  +0x0C Float Z Position
  +0x10 DWord Attached to
  +0x14 DWord Fired from
  +0x18 DWord Disappear Time (from 0xB7CB84)
  +0x1C Float Size
  +0x20 Byte Some Flag
  +0x21 Byte Unknown 60
  +0x22 Word Unknown 0
  +0x24 Float Unknown
  #####################################################################
  melee.datStart 0xC170D0
  Size 0x88
  Num 0x0F
  +0x00 DWord ANIMGROUP
  +0x04 Float RANGES
  +0x08 Float ATTACK1 hit / 30.0
  +0x0C Float ATTACK2 hit / 30.0
  +0x10 Float ATTACK3 hit / 30.0
  +0x14 Float AGROUND hit / 30.0
  +0x18 Float AMOVING hit / 30.0
  +0x1C Float ATTACK1 chain / 30.0
  +0x20 Float ATTACK2 chain / 30.0
  +0x24 Float ATTACK3 chain / 30.0
  +0x28 Float AGROUND chain / 30.0
  +0x2C Float AMOVING chain / 30.0
  +0x30 Float ATTACK1 radius
  +0x34 Float ATTACK2 radius
  +0x38 Float ATTACK3 radius
  +0x3C Float AGROUND radius
  +0x40 Float AMOVING radius
  +0x44 Float AGROUND groundLoop / 30.0
  +0x48 Float ABLOCK hit / 30.0
  +0x4C Float ABLOCK chain / 30.0
  +0x50 Byte ATTACK1 hitlevel
  +0x51 Byte ATTACK2 hitlevel
  +0x52 Byte ATTACK3 hitlevel
  +0x53 Byte AGROUND hitlevel
  +0x54 Byte AMOVING hitlevel
  +0x55 Byte ATTACK1 damage
  +0x56 Byte ATTACK2 damage
  +0x57 Byte ATTACK3 damage
  +0x58 Byte AGROUND damage
  +0x59 Byte AMOVING damage
  +0x5A Byte Padding
  +0x5B Byte Padding
  +0x5C DWord ATTACK1 hit + 60
  +0x60 DWord ATTACK2 hit + 60
  +0x64 DWord ATTACK3 hit + 60
  +0x68 DWord AGROUND hit + 60
  +0x6C DWord AMOVING hit + 60
  +0x70 DWord ATTACK1 altHit + 60
  +0x74 DWord ATTACK2 altHit + 60
  +0x78 DWord ATTACK3 altHit + 60
  +0x7C DWord AGROUND altHit + 60
  +0x80 DWord AMOVING altHit + 60
  +0x84 DWord FLAGS
  * Index of array = *(Byte*)(0xC8AB26 + WeaponID * 0x70) - 4;
  #####################################################################
  CoronaStart 0xC3E058
  Size 0x3C
  Num 0x40
  +0x00 Float X Position
  +0x04 Float Y Position
  +0x08 Float Z Position
  +0x0C DWord Unknown
  +0x10 DWord Ptr To Texture Struct (+0x10 Char[64] Name)
  +0x14 Float Radius
  +0x18 Float Unknown
  +0x1C Float Far Clip
  +0x20 Float Near Clip
  +0x24 DWord 0
  +0x28 Float 15.0
  +0x2C Byte Color R
  +0x2D Byte Color G
  +0x2E Byte Color B
  +0x2F Byte Color A
  +0x30 Byte Fade (0=Hide/255=Show)
  +0x31 Byte Some Flag (0/1)
  +0x32 Byte Flare
  +0x33 Byte Some Flag (0/1)
  +0x34 DWord Some Flag
  +0x38 DWord 0
  #####################################################################
  Bullet TrackStart 0xC7C748
  Size 0x2C
  Num 0x10
  +0x00 Float Trans Side X
  +0x04 Float Trans Side Y
  +0x08 Float Trans Side Z
  +0x0C Float Yellow Side X
  +0x10 Float Yellow Side Y
  +0x14 Float Yellow Side Z
  +0x18 Byte Exist Flag
  +0x19 Byte Pad
  +0x1A Byte Pad
  +0x1B Byte Pad
  +0x1C DWord Created Time (from 0xB7CB84)
  +0x20 DWord Disappear Time (e.g. 750)
  +0x24 Float Radius
  +0x28 Byte Alpha
  +0x29 Byte Pad
  +0x2A Byte Pad
  +0x2B Byte Pad
  #####################################################################
  Racing Check PointStart 0xC7F158
  Size 0x38
  Num 0x20
  +0x00 Byte Type
  +0x04 DWord Handle in SCM
  +0x08 DWord Color (RGBA)
  +0x10 Float X Pisition
  +0x14 Float Y Pisition
  +0x18 Float Z Pisition
  +0x1C Float X Direction
  +0x20 Float Y Direction
  +0x24 Float Z Direction
  +0x2C Float Size
  * Start Address and some other are from GTAModding.com
  #####################################################################
  BulletStart 0xC88740
  Size 0x2C
  Num 0x08
  +0x00 DWord Weapon Type
  +0x04 DWord Fired From
  +0x08 Float Destroy Time
  +0x0C Byte Exist Flag
  +0x0D Byte3 Padding
  +0x10 Float X Position
  +0x14 Float Y Position
  +0x18 Float Z Position
  +0x1C Float X Velocity (Meters per Frame)
  +0x20 Float Y Velocity (Meters per Frame)
  +0x24 Float Z Velocity (Meters per Frame)
  +0x28 Word Damage
  +0x2A Word Padding
  * Start Address and some other are from Sacky's post in GTAForums.com
  #####################################################################
  ExplosionStart 0xC88950
  Size 0x7C
  Num 0x10
  +0x00 DWord Explosion Type
  +0x04 Float X Position
  +0x08 Float X Position
  +0x0C Float X Position
  +0x10 Float Unknown
  +0x14 Float Unknown 0.5
  +0x18 DWord Unknown 0
  +0x1C DWord Unknown 0
  +0x20 Float Disappear Time (from 0xB7CB84)
  +0x24 Float Unknown 1.0
  +0x28 Byte Frames from Created
  +0x29 Byte Unknown 1
  +0x2A Byte Unknown 1
  +0x2B Byte Unknown 0
  +0x2C Float Created Time (from 0xB7CB84)
  +0x30 DWord Unknown 0
  +0x34 Float Visible Radius
  +0x38 DWord Unknown 0
  +0x3C DWord Time from Created
  +0x40 - +0x78 Float Effect Coords
  #####################################################################
  weapon.datStart 0xC8AAB8
  Size 0x70
  Num 0x51
  +0x00 DWord eFireType
  +0x04 Float targetRange
  +0x08 Float weaponRange
  +0x0C Long modelId1
  +0x10 Long modelId2
  +0x14 DWord weaponslot
  +0x18 DWord flags
  +0x1C DWord AssocGroupId
  +0x20 Word ammoClip
  +0x22 Word damage
  +0x24 Float fireOffset x
  +0x28 Float fireOffset y
  +0x2C Float fireOffset z
  +0x30 DWord skillLevel
  +0x34 DWord req stat level to get this weapon skill level
  +0x38 Float accuracy
  +0x3C Float move speed
  +0x40 Float animLoop start / 30.0
  +0x44 Float animLoop end / 30.0
  +0x48 Float animLoop fire / 30.0
  +0x4C Float animLoop2 start / 30.0
  +0x50 Float animLoop2 end / 30.0
  +0x54 Float animLoop2 fire / 30.0
  +0x58 Float breakoutTime
  +0x5C Float speed
  +0x60 Float radius
  +0x64 Float lifespan
  +0x68 Float spread
  +0x6C Byte AssocGroupId
  +0x6D Byte Unknown 0
  +0x6E Byte baseCombo
  +0x6F Byte Unknown 1
  Index 0 - 46 : Weapon 0 - 46 : Gangsta
  Index 47 - 57 : Weapon 22 - 32 : Poor
  Index 58 - 68 : Weapon 22 - 32 : Hitman
  Index 69 : Weapon 22 : Cop
  #####################################################################