//{$VERSION 3.1.0023} {$CLEO .cs} { Skin Selector by Ryosuke http://gtasamod.web.fc2.com/ } const // 定数 // ここの値を変更する際はファイル末尾のリストも変更すること MAX_NORMAL_SKIN = 288 // 通常スキン数 - 1 MAX_SPECIAL_SKIN = 31 // 特別スキン数 - 1 MAX_ADDON_SKIN = 255 // 追加スキン数 - 1 MAX_SPAWN_ACTORS = 63 // 出現させた人の最大記憶数 - 1 ACTOR_EMPTY = 0xFFFFFFFF // 人が存在しないときの値 end { 変数 0@ メモリアドレス 1@ メモリ値 2@ 現在のスキン 3@ メニュー中の通常スキン 4@ メニュー中の特別スキン 5@ メニュー中の追加スキン 6@ タイプ 7@ モデルID 8@ スキン種 9@ スキンID 10@ 未使用 11@ 未使用 12@ 未使用 13@ 未使用 14@ 体脂肪 15@ 筋力 16@ ループ 17@ ループ 18@ 文字列1 19@ 文字列1 20@ 文字列1 21@ 文字列1 22@ 文字列1 23@ 文字列1 24@ 文字列2 25@ 文字列2 26@ 文字列2 27@ 文字列2 28@ 文字列2 29@ 文字列2 30@ アーカイブ1 31@ アーカイブ2 32@ キータイマー 33@ キータイマー } //================ // スクリプトここから //================ thread 'SKIN_C' 0ABA: end_custom_thread_named 'SKIN' 0ABA: end_custom_thread_named 'SKIN_N' 0ABA: end_custom_thread_named 'SKIN_O' 0A95: enable_thread_saving // スレッドの保存を有効化 0006: 8@ = 0 0006: 9@ = #NULL :SKIN_INIT wait 0 if 03D9: save_done jf @SKIN_INIT if 0039: 8@ == 3 then gosub @GET_ADDRESS 000E: 0@ -= @TEMP_MEMORY for 17@ = 0 to 4 0A8C: write_memory 0@ size 4 value 24@(17@,6i) virtual_protect 0 000A: 0@ += 4 end end //============= // リストの初期化 //============= // 通常スキン gosub @GET_ADDRESS 000E: 0@ -= @LIST_SKIN_NORMAL for 16@ = 0 to MAX_NORMAL_SKIN for 17@ = 0 to 7 // アンダーバーをNULLに置き換え 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x5F then 0A8C: write_memory 0@ size 1 value 0x00 virtual_protect 0 end 000A: 0@ += 1 end end // 特別スキン gosub @GET_ADDRESS 000E: 0@ -= @LIST_SPECIAL for 16@ = 0 to MAX_SPECIAL_SKIN for 17@ = 0 to 7 // アンダーバーをNULLに置き換え 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x5F then 0A8C: write_memory 0@ size 1 value 0x00 virtual_protect 0 end 000A: 0@ += 1 end end // 追加スキン gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON for 16@ = 0 to MAX_ADDON_SKIN for 17@ = 0 to 4 // NULLで埋める 0A8C: write_memory 0@ size 4 value 0x00000000 virtual_protect 0 000A: 0@ += 4 end end //================================ // skin.imgから追加スキンのリストを生成 //================================ 0A99: chdir 0 // カレントディレクトリを設定 gosub @GET_ADDRESS 000E: 0@ -= @SKIN_ARCHIVE_DIR if 8AE4: not directory_exists 0@ // skin.imgは存在するか? then // skin.imgが見つからなかった場合 gosub @GET_ADDRESS 000E: 0@ -= @TEXT_FILE_NOT_FOUND gosub @SHOW_TEXT_BOX 0006: 2@ = -1 0006: 3@ = 0 0006: 4@ = 0 0006: 5@ = 0 jump @SKIN_MAIN end gosub @GET_ADDRESS 000E: 0@ -= @SKIN_ARCHIVE_DIR 0AA5: call 0x5387D0 num_params 1 pop 1 0@ // CFileDir::SetDir(dir) -- Use this instead to work in Mod Loader. gosub @GET_ADDRESS 000E: 0@ -= @PATH_BUF if 8AE6: not 30@ = find_first_file "*.*" get_filename_to 0@ // skin.imgを開いてみる then // skin.imgが開けなかった場合 gosub @GET_ADDRESS 000E: 0@ -= @TEXT_FILE_CANT_READ gosub @SHOW_TEXT_BOX 0006: 2@ = -1 0006: 3@ = 0 0006: 4@ = 0 0006: 5@ = 0 jump @SKIN_MAIN end 0006: 2@ = 0 while true // .imgヘッダ ファイル情報 ファイル名 24バイト 24@-29@へ格納 gosub @GET_ADDRESS 000E: 0@ -= @PATH_BUF 0006: 1@ = 24 // copy to 24@-29@ gosub @COPY_FROM_BUF_TO_STRING // ファイル名を大文字に変換 0A9F: 0@ = current_thread_pointer 000A: 0@ += 0xB3 // スレッド情報中の29@のアドレス for 16@ = 0 to 23 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if and 0019: 1@ > 0x60 001B: 0x7B > 1@ then 000A: 1@ += -0x20 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 end 000A: 0@ += -1 end // 拡張子の置き換え 後ろから探す 0A9F: 0@ = current_thread_pointer 000A: 0@ += 0xB3 // スレッド情報中の29@のアドレス for 16@ = 0 to 23 0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 if // 文字列中に.DFFが見つかれば.TXDに置き換え 0039: 1@ == 0x4646442E then 0A8C: write_memory 0@ size 4 value 0x4458542E virtual_protect 0 break end // 文字列中に.TXDが見つかれば.DFFに置き換え if 0039: 1@ == 0x4458542E then 0A8C: write_memory 0@ size 4 value 0x4646442E virtual_protect 0 break end 000A: 0@ += -1 end if 8039: not 16@ == 23 //.DFFまたは.TXDが見つかりループが中断されたか? then // 対になっている.DFFまたは.TXDを探す gosub @GET_ADDRESS 000E: 0@ -= @PATH_BUF if 8AE6: not 31@ = find_first_file "*.*" get_filename_to 0@ // skin.imgを開いてみる then // skin.imgが開けなかった場合 gosub @GET_ADDRESS 000E: 0@ -= @TEXT_FILE_CANT_READ gosub @SHOW_TEXT_BOX 0A9B: closefile 30@ 0006: 2@ = -1 0006: 3@ = 0 0006: 4@ = 0 0006: 5@ = 0 jump @SKIN_MAIN end 0006: 16@ = 0 // 現在探している位置まで進める while true if 002D: 16@ >= 2@ // (int) then break end // 1ファイル分の情報 32バイト 無視 000A: 16@ += 1 gosub @GET_ADDRESS 000E: 0@ -= @PATH_BUF 0AE7: 0@ = find_next_file 31@ // IF and SET end while true gosub @GET_ADDRESS 000E: 0@ -= @PATH_BUF if 8AE7: not 0@ = find_next_file 31@ // .imgヘッダ ファイル情報 ファイル名 24バイト 18@-23@へ格 then break end gosub @GET_ADDRESS 000E: 0@ -= @PATH_BUF 0006: 1@ = 18 // copy to 18@-23@ gosub @COPY_FROM_BUF_TO_STRING // ファイル名を大文字に変換 0A9F: 0@ = current_thread_pointer 000A: 0@ += 0x9B // スレッド情報中の23@のアドレス for 17@ = 0 to 23 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if and 0019: 1@ > 0x60 001B: 0x7B > 1@ then 000A: 1@ += -0x20 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 end 000A: 0@ += -1 end // ファイル名が合致するか if and 003B: 18@ == 24@ // (int) 003B: 19@ == 25@ // (int) 003B: 20@ == 26@ // (int) 003B: 21@ == 27@ // (int) 003B: 22@ == 28@ // (int) 003B: 23@ == 29@ // (int) then // 拡張子を削除 0A9F: 0@ = current_thread_pointer 000A: 0@ += 0xB3 // スレッド情報中の29@のアドレス for 17@ = 0 to 23 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x2E then 0A8C: write_memory 0@ size 4 value 0x00000000 virtual_protect 0 break end 000A: 0@ += -1 end // 追加スキンリストへ登録 gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON for 17@ = 0 to MAX_ADDON_SKIN 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 // 空いているか? then 0A8C: write_memory 0@ size 4 value 24@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 25@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 26@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 27@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 28@ virtual_protect 0 break end 000A: 0@ += 20 end break end 000A: 16@ += 1 end 0AE8: find_close 31@ // ファイルを閉じる end 000A: 2@ += 1 gosub @GET_ADDRESS 000E: 0@ -= @PATH_BUF if 8AE7: not 0@ = find_next_file 30@ //ファイル情報の終端まで来たか? then break end end 0AE8: find_close 30@ // ファイルを閉じる 0A99: chdir 0 // 変数の初期化 0006: 2@ = -1 0006: 3@ = 0 0006: 4@ = 0 0006: 5@ = 0 // スキンを戻す wait 0 if 0039: 8@ == 3 then gosub @GET_ADDRESS 000E: 0@ -= @TEMP_MEMORY for 17@ = 0 to 4 0A8D: 24@(17@,6i) = read_memory 0@ size 4 virtual_protect 0 000A: 0@ += 4 end for 9@ = 0 to MAX_ADDON_SKIN gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON 0085: 16@ = 9@ // (int) 0012: 16@ *= 20 005A: 16@ += 0@ // (int) for 17@ = 0 to 4 0A8D: 18@(17@,6i) = read_memory 16@ size 4 virtual_protect 0 000A: 16@ += 4 end if 0039: 18@ == 0x00000000 then break end if and 003B: 18@ == 24@ // (int) 003B: 19@ == 25@ // (int) 003B: 20@ == 26@ // (int) 003B: 21@ == 27@ // (int) 003B: 22@ == 28@ // (int) then jump @REST_BREAK break end end 09C7: change_player $PLAYER_CHAR model_to #NULL 0006: 8@ = 0 0006: 9@ = #NULL end :REST_BREAK gosub @SKIN_REST //========= // メインループ //========= :SKIN_MAIN wait 0 if 03D9: save_done // セーブされた場合,リストを作り直す jf @SKIN_INIT if 0256: player $PLAYER_CHAR defined // プレイヤーがいなければ無視 jf @SKIN_MAIN // 出現させた人の管理 gosub @GET_ADDRESS 000E: 0@ -= @LIST_SPAWNED for 17@ = 0 to MAX_SPAWN_ACTORS 0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 if 056D: actor 1@ defined // 存在するか? then if 051A: actor 1@ damaged_by_actor $PLAYER_ACTOR then 0223: set_actor 1@ health_to 0 end if or 80F2: not actor 1@ near_actor $PLAYER_ACTOR radius 100.0 100.0 0 // 遠くへ離れたか? 0118: actor 1@ dead // 死亡したか? then 01C2: remove_references_to_actor 1@ // Like turning an actor into a random pedestrian 0A8C: write_memory 0@ size 4 value ACTOR_EMPTY virtual_protect 0 continue end 04DD: 16@ = actor 1@ armour if 0039: 16@ == 0 then 06AB: set_actor 1@ all_weapons_hidden 1 07CB: set_actor 1@ supporting_fire 0 07DD: set_actor 1@ temper_to 75 // see pedstats.dat 0006: 16@ = 2 else 07CB: set_actor 1@ supporting_fire 1 07DD: set_actor 1@ temper_to 25 // see pedstats.dat 0006: 16@ = 4 end 077A: set_actor 1@ default_action 16@ to_actors_pedtype 6 077A: set_actor 1@ default_action 16@ to_actors_pedtype 7 077A: set_actor 1@ default_action 16@ to_actors_pedtype 9 077A: set_actor 1@ default_action 16@ to_actors_pedtype 10 077A: set_actor 1@ default_action 16@ to_actors_pedtype 11 077A: set_actor 1@ default_action 16@ to_actors_pedtype 12 077A: set_actor 1@ default_action 16@ to_actors_pedtype 13 077A: set_actor 1@ default_action 16@ to_actors_pedtype 14 077A: set_actor 1@ default_action 16@ to_actors_pedtype 17 077A: set_actor 1@ default_action 16@ to_actors_pedtype 20 end 000A: 0@ += 4 end // インテリアのチェック 07B0: get_active_shop_name_to s$Current_Shop_GXT_Name // 8-byte string 077E: get_active_interior_to $ACTIVE_INTERIOR if and 85AD: not s$CURRENT_SHOP_GXT_NAME == 'CSCHP' // Binco 85AD: not s$CURRENT_SHOP_GXT_NAME == 'CSSPRT' // Pro-Laps 85AD: not s$CURRENT_SHOP_GXT_NAME == 'LACS1' // Sub Urban 85AD: not s$CURRENT_SHOP_GXT_NAME == 'CLOTHGP' // Zip 85AD: not s$CURRENT_SHOP_GXT_NAME == 'CSDESGN' // Victim 85AD: not s$CURRENT_SHOP_GXT_NAME == 'CSEXL' // Didier Sachs 85AD: not s$CURRENT_SHOP_GXT_NAME == 'TATTOO' // Tattoo Parlor 85AD: not s$CURRENT_SHOP_GXT_NAME == 'TATTO2' // Tattoo Parlor jf @SKIN_CJ if and 85AD: not s$CURRENT_SHOP_GXT_NAME == 'TATTO3' // Tattoo Parlor 85AD: not s$CURRENT_SHOP_GXT_NAME == 'BARBERS' // Barber 85AD: not s$CURRENT_SHOP_GXT_NAME == 'BARBER2' // Barber 85AD: not s$CURRENT_SHOP_GXT_NAME == 'BARBER3' // Barber 8038: not $ACTIVE_INTERIOR == 14 86B9: not cutscene_data_loaded jf @SKIN_CJ :SKIN_RTRN // 体型・スクリプトのチェック if 8039: not 2@ == -1 then 0653: 16@ = float_stat 21 if 8045: not 14@ == 16@ // (float) then 062A: change_float_stat 21 to 14@ end 0653: 17@ = float_stat 23 if 8045: not 15@ == 17@ // (float) then 062A: change_float_stat 23 to 15@ end end gosub @SKIN_REST // スキンを変更できる状態か? if and 03EE: player $PLAYER_CHAR controllable 80DF: not actor $PLAYER_ACTOR driving 8597: not actor $PLAYER_ACTOR crouching 8965: not actor $PLAYER_ACTOR swimming jf @SKIN_MAIN // キーのチェック if or 80E1: not player 0 pressed_key 4 80E1: not player 0 pressed_key 5 jf @SKIN_PREV if or 80E1: not player 0 pressed_key 4 80E1: not player 0 pressed_key 7 jf @SKIN_NEXT jump @SKIN_MAIN :SKIN_CJ if or 8611: not actor $PLAYER_ACTOR performing_animation "WALK_player" 05AD: s$CURRENT_SHOP_GXT_NAME == 'TATTOO' // Tattoo Parlor 05AD: s$CURRENT_SHOP_GXT_NAME == 'TATTO2' // Tattoo Parlor 05AD: s$CURRENT_SHOP_GXT_NAME == 'TATTO3' // Tattoo Parlor jf @SKIN_RTRN if or 83EE: not player $PLAYER_CHAR controllable 05AD: s$CURRENT_SHOP_GXT_NAME == 'TATTOO' // Tattoo Parlor 05AD: s$CURRENT_SHOP_GXT_NAME == 'TATTO2' // Tattoo Parlor 05AD: s$CURRENT_SHOP_GXT_NAME == 'TATTO3' // Tattoo Parlor 06B9: cutscene_data_loaded jf @SKIN_RTRN if 8039: not 2@ == -1 jf @SKIN_MAIN // CJに戻す 09C7: change_player $PLAYER_CHAR model_to #NULL 0006: 2@ = -1 jump @SKIN_MAIN :SKIN_REST if and 8039: not 8@ == 0 0039: 2@ == -1 0AA1: return_if_false // CJから戻す if 0039: 8@ == 1 then gosub @GET_ADDRESS 000E: 0@ -= @LIST_SKIN_NORMAL 0085: 17@ = 9@ // (int) 0012: 17@ *= 8 005A: 0@ += 17@ // (int) 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 8039: not 1@ == 0x00 // ファイル名の無いものは無視 then if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end 0006: 2@ = -2 0085: 7@ = 9@ // (int) gosub @ACTOR_CHANGE end end if 0039: 8@ == 2 then gosub @GET_ADDRESS 000E: 0@ -= @LIST_SPECIAL 0085: 16@ = 9@ // (int) 0012: 16@ *= 8 005A: 16@ += 0@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @SKIN_LOAD 000A: 0@ += 6 for 17@ = 0 to 7 0A8D: 1@ = read_memory 16@ size 1 virtual_protect 0 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 16@ += 1 gosub @ACTOR_CHANGE end if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end 0006: 2@ = -2 0006: 7@ = #SPECIAL10 gosub @ACTOR_CHANGE end if 0039: 8@ == 3 then gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON 0085: 16@ = 9@ // (int) 0012: 16@ *= 20 005A: 16@ += 0@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @SKIN_LOAD 000A: 0@ += 6 for 17@ = 0 to 19 0A8D: 1@ = read_memory 16@ size 1 virtual_protect 0 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 16@ += 1 end if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end 0085: 2@ = 9@ // (int) 0006: 7@ = #SPECIAL10 gosub @ACTOR_CHANGE end return :SKIN_PREV wait 0 // メニューを開く if or 80E1: not player 0 pressed_key 5 80E1: not player 0 pressed_key 7 jf @SKIN_MENU // 前のスキン if 80E1: not player 0 pressed_key 5 jf @SKIN_PREV if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end if 0039: 2@ == -2 // メニューから選んでいた場合 then 0006: 2@ = -1 else 000A: 2@ += -1 end if 001B: -1 > 2@ then gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON for 16@ = 0 to MAX_ADDON_SKIN 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 then break end 000A: 0@ += 20 end 000A: 16@ += -1 0085: 2@ = 16@ // (int) end if 8039: not 2@ == -1 then 0085: 5@ = 2@ // (int) end jump @SKIN_6 :SKIN_NEXT wait 0 // メニューを開く if or 80E1: not player 0 pressed_key 5 80E1: not player 0 pressed_key 7 jf @SKIN_MENU // 次のスキン if 80E1: not player 0 pressed_key 7 jf @SKIN_NEXT if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end if 0039: 2@ == -2 // メニューから選んでいた場合 then 0006: 2@ = -1 else 000A: 2@ += 1 end gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON for 16@ = 0 to MAX_ADDON_SKIN 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 then break end 000A: 0@ += 20 end 000A: 16@ += -1 if 001D: 2@ > 16@ // (int) then 0006: 2@ = -1 end if 8039: not 2@ == -1 then 0085: 5@ = 2@ // (int) end jump @SKIN_6 :SKIN_6 if 0039: 2@ == -1 then 0006: 8@ = 0 09C7: change_player $PLAYER_CHAR model_to #NULL else 0006: 8@ = 3 0085: 9@ = 2@ // (int) 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON 0085: 16@ = 2@ // (int) 0012: 16@ *= 20 005A: 16@ += 0@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @SKIN_LOAD 000A: 0@ += 6 for 17@ = 0 to 19 0A8D: 1@ = read_memory 16@ size 1 virtual_protect 0 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 16@ += 1 end 000A: 16@ += -20 for 17@ = 0 to 4 0A8D: 24@(17@,6i) = read_memory 16@ size 4 virtual_protect 0 000A: 16@ += 4 end gosub @SKIN_LOAD 09C7: change_player $PLAYER_CHAR model_to #SPECIAL10 0296: unload_special_actor 10 end jump @SKIN_MAIN //========== // メニュー処理 //========== :SKIN_MENU 01B4: toggle_player $PLAYER_CHAR can_move 0 04C4: store_coords_to 18@ 19@ 20@ from_actor $PLAYER_ACTOR with_offset -0.75 3.0 1.0 015F: set_camera_position 18@ 19@ 20@ rotation 0.0 0.0 0.0 04C4: store_coords_to 18@ 19@ 20@ from_actor $PLAYER_ACTOR with_offset 0.75 0.0 0.25 0160: set_camera_point_at 18@ 19@ 20@ mode 2 // メニューを表示 gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_MENU gosub @SHOW_TEXT_BOX gosub @WRITE_TEXT_CLEAR :SKIN_MLOOP wait 0 0006: 32@ = 0 0006: 33@ = 0 // 通常スキン if 00E1: player 0 pressed_key 17 then gosub @KEY_WAIT gosub @WRITE_TEXT_NORMAL gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST gosub @SHOW_TEXT_BOX jump @SKIN_NLOOP end // 特別スキン if 00E1: player 0 pressed_key 14 then gosub @KEY_WAIT gosub @WRITE_TEXT_SPECIAL gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST gosub @SHOW_TEXT_BOX jump @SKIN_SLOOP end // 追加スキン if 00E1: player 0 pressed_key 16 then gosub @KEY_WAIT gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON for 23@ = 0 to MAX_ADDON_SKIN 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 then break end 000A: 0@ += 20 end gosub @WRITE_TEXT_ADDON gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST gosub @SHOW_TEXT_BOX jump @SKIN_ALOOP end // 服装 if 00E1: player 0 pressed_key 18 then gosub @KEY_WAIT 0512: show_permanent_text_box 'WARDH1' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select a shop.~N~~k~~PED_SPRINT~ Select~N~~k~~VEHICLE_ENTER_EXIT~ Quit 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel 08DB: set_panel 23@ column 0 header 'DUMMY' data 'SHOP1' 'SHOP2' 'SHOP3' 'SHOP4' 'SHOP5' 'SHOP6' 'SHOP7' 'REMCLT' 'BARBERS' 'BARBER2' 'BARBER3' 'DUMMY' if 8039: not 2@ == -1 jf @SKIN_CLOOP 09C7: change_player $PLAYER_CHAR model_to #NULL 0006: 2@ = -1 jump @SKIN_CLOOP end // 体型 if 00E1: player 0 pressed_key 19 then gosub @KEY_WAIT 0653: 20@ = float_stat 21 0653: 21@ = float_stat 23 0092: 20@ = float 20@ to_integer 0092: 21@ = float 21@ to_integer gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_SHAPE gosub @SHOW_TEXT_BOX 08D4: 23@ = create_panel_with_title 'DUMMY' position 29.0 145.0 width 186.0 columns 2 interactive 1 background 1 alignment 1 // 08D6: set_panel 23@ column 0 alignment 1 08DB: set_panel 23@ column 0 header 'DUMMY' data 'STAT021' 'STAT023' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 08D6: set_panel 23@ column 1 alignment 2 08DB: set_panel 23@ column 1 header 'DUMMY' data 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 08EE: set_panel 23@ column 1 row 0 text_1number GXT 'NUMBER' number 20@ // ~1~ 08EE: set_panel 23@ column 1 row 1 text_1number GXT 'NUMBER' number 21@ // ~1~ 09DB: set_panel 23@ column 0 width 140 09DB: set_panel 23@ column 1 width 46 if 8039: not 2@ == -1 jf @SKIN_FLOOP 09C7: change_player $PLAYER_CHAR model_to #NULL 0006: 2@ = -1 jump @SKIN_FLOOP end // 戻る if 00E1: player 0 pressed_key 15 jf @SKIN_MLOOP while 00E1: player 0 pressed_key 15 wait 0 end 03E6: remove_text_box 015A: restore_camera 01B4: toggle_player $PLAYER_CHAR can_move 1 0687: clear_actor $PLAYER_ACTOR task jump @SKIN_MAIN // 通常スキン :SKIN_NLOOP wait 0 gosub @GET_KEY if 001D: 32@ > 22@ // (int) then 0006: 32@ = 0 if 001B: -64 > 21@ then 000A: 3@ += -1 end if 0019: 21@ > 64 then 000A: 3@ += 1 end if 001B: 0 > 3@ then 0006: 3@ = 0 end if 0019: 3@ > MAX_NORMAL_SKIN then 0006: 3@ = MAX_NORMAL_SKIN end gosub @WRITE_TEXT_CLEAR gosub @WRITE_TEXT_NORMAL gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST gosub @SHOW_TEXT_BOX end gosub @GET_ADDRESS 000E: 0@ -= @LIST_SKIN_NORMAL 0085: 17@ = 3@ // (int) 0012: 17@ *= 8 005A: 0@ += 17@ // (int) 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if and 00E1: player 0 pressed_key 16 8039: not 1@ == 0x00 // ファイル名の無いものは無視 then 018C: play_sound 1052 at 0.0 0.0 0.0 0006: 8@ = 1 0085: 9@ = 3@ // (int) if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end 0006: 2@ = -2 0085: 7@ = 3@ // (int) gosub @ACTOR_CHANGE gosub @KEY_WAIT end if and 00E1: player 0 pressed_key 17 8039: not 1@ == 0x00 // ファイル名の無いものは無視 then 018C: play_sound 1052 at 0.0 0.0 0.0 0006: 6@ = 4 0085: 7@ = 3@ // (int) gosub @ACTOR_CREATE gosub @KEY_WAIT end if and 00E1: player 0 pressed_key 14 8039: not 1@ == 0x00 // ファイル名の無いものは無視 then 018C: play_sound 1052 at 0.0 0.0 0.0 0006: 6@ = 2 0085: 7@ = 3@ // (int) gosub @ACTOR_CREATE gosub @KEY_WAIT end if 80E1: not player 0 pressed_key 15 jf @SKIN_BACK jump @SKIN_NLOOP // 特別スキン :SKIN_SLOOP wait 0 gosub @GET_KEY if 001D: 32@ > 22@ // (int) then 0006: 32@ = 0 if 001B: -64 > 21@ then 000A: 4@ += -1 end if 0019: 21@ > 64 then 000A: 4@ += 1 end if 001B: 0 > 4@ then 0006: 4@ = 0 end if 0019: 4@ > MAX_SPECIAL_SKIN then 0006: 4@ = MAX_SPECIAL_SKIN end gosub @WRITE_TEXT_CLEAR gosub @WRITE_TEXT_SPECIAL gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST gosub @SHOW_TEXT_BOX end if or 00E1: player 0 pressed_key 16 00E1: player 0 pressed_key 17 00E1: player 0 pressed_key 14 then gosub @GET_ADDRESS 000E: 0@ -= @LIST_SPECIAL 0085: 16@ = 4@ // (int) 0012: 16@ *= 8 005A: 16@ += 0@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @SKIN_LOAD 000A: 0@ += 6 for 17@ = 0 to 7 0A8D: 1@ = read_memory 16@ size 1 virtual_protect 0 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 16@ += 1 end 018C: play_sound 1052 at 0.0 0.0 0.0 if 00E1: player 0 pressed_key 16 then 0006: 8@ = 2 0085: 9@ = 4@ // (int) if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end 0006: 2@ = -2 0006: 7@ = #SPECIAL10 gosub @ACTOR_CHANGE gosub @KEY_WAIT end if 00E1: player 0 pressed_key 17 then 0006: 6@ = 4 0006: 7@ = #SPECIAL10 gosub @ACTOR_CREATE gosub @KEY_WAIT end if 00E1: player 0 pressed_key 14 then 0006: 6@ = 2 0006: 7@ = #SPECIAL10 gosub @ACTOR_CREATE gosub @KEY_WAIT end end if 80E1: not player 0 pressed_key 15 jf @SKIN_BACK jump @SKIN_SLOOP // 追加スキン :SKIN_ALOOP wait 0 gosub @GET_KEY if 001D: 32@ > 22@ // (int) then 0006: 32@ = 0 if 001B: -64 > 21@ then 000A: 5@ += -1 end if 0019: 21@ > 64 then 000A: 5@ += 1 end if 001B: 0 > 5@ then 0006: 5@ = 0 end gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON for 23@ = 0 to MAX_ADDON_SKIN 0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 then break end 000A: 0@ += 20 end 000A: 23@ += -1 if 0019: 5@ > 23@ then 0085: 5@ = 23@ // (int) end gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST 000A: 0@ += 115 gosub @WRITE_TEXT_CLEAR 000A: 23@ += 1 gosub @WRITE_TEXT_ADDON gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST gosub @SHOW_TEXT_BOX end if or 00E1: player 0 pressed_key 16 00E1: player 0 pressed_key 17 00E1: player 0 pressed_key 14 then gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON 0085: 16@ = 5@ // (int) 0012: 16@ *= 20 005A: 16@ += 0@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @SKIN_LOAD 000A: 0@ += 6 for 17@ = 0 to 19 0A8D: 1@ = read_memory 16@ size 1 virtual_protect 0 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 16@ += 1 end 018C: play_sound 1052 at 0.0 0.0 0.0 if 00E1: player 0 pressed_key 16 then 0006: 8@ = 3 0085: 9@ = 5@ // (int) 000A: 16@ += -20 for 17@ = 0 to 4 0A8D: 24@(17@,6i) = read_memory 16@ size 4 virtual_protect 0 000A: 16@ += 4 end if 0039: 2@ == -1 then 0653: 14@ = float_stat 21 0653: 15@ = float_stat 23 end 0085: 2@ = 5@ // (int) 0006: 7@ = #SPECIAL10 gosub @ACTOR_CHANGE gosub @KEY_WAIT end if 00E1: player 0 pressed_key 17 then 0006: 6@ = 4 0006: 7@ = #SPECIAL10 gosub @ACTOR_CREATE gosub @KEY_WAIT end if 00E1: player 0 pressed_key 14 then 0006: 6@ = 2 0006: 7@ = #SPECIAL10 gosub @ACTOR_CREATE gosub @KEY_WAIT end end if 80E1: not player 0 pressed_key 15 jf @SKIN_BACK jump @SKIN_ALOOP // 服装 :SKIN_CLOOP wait 0 if 00E1: player 0 pressed_key 16 then gosub @KEY_WAIT 08D8: 22@ = panel 23@ selected_row 08DA: remove_panel 23@ 03E6: remove_text_box if 001B: 6 > 22@ then 0512: show_permanent_text_box 'WARDH2' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select an area.~N~~k~~PED_SPRINT~ Select~N~~k~~VEHICLE_ENTER_EXIT~ Back 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel if 0039: 22@ == 0 then 05AA: 24@s = 'CSCHP' end if 0039: 22@ == 1 then 05AA: 24@s = 'CSSPRT' end if 0039: 22@ == 2 then 05AA: 24@s = 'LACS1' end if 0039: 22@ == 3 then 05AA: 24@s = 'CLOTHGP' end if 0039: 22@ == 4 then 05AA: 24@s = 'CSDESGN' end if 0039: 22@ == 5 then 05AA: 24@s = 'CSEXL' end 08DB: set_panel 23@ column 0 header 'DUMMY' data 'TORSO' 'LEGS' 'FEET' 'CHAINS' 'WATCHES' 'SHADES' 'HATS' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' jump @SKIN_CLOOP2 end if 0039: 22@ == 6 then 0006: 18@ = 17 05AA: 24@s = 'UNIFORM' 0512: show_permanent_text_box 'WARDH3' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select an item.~N~~k~~PED_SPRINT~ View~N~~k~~VEHICLE_ENTER_EXIT~ Back 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel for 16@ = 0 to 11 05A9: $9897(16@,12s) = 'DUMMY' end 075E: load_shopping_data_PRICES_subsection 24@s // v$ 075D: load_shopping_data_SHOPS_subsection "CLOTHES" // v$ 075F: store_shopping_data_entries_number_to 17@ 0006: 16@ = 0 0006: 20@ = 0 while 001D: 17@ > 16@ // (int) 0760: store_shopping_data_index 16@ textureCRC_to 19@ 000A: 16@ += 1 0783: get_shopping_item_with_textureCRC 19@ flag 1 store_to 21@ if 803B: not 21@ == 18@ // (int) then continue end 0783: get_shopping_item_with_textureCRC 19@ flag 0 store_to 21@ 078C: get_shopping_item_with_textureCRC 19@ nametag_to 26@s // 8-byte string 008A: $2438(20@,12i) = 19@ // (int) 008A: $2474(20@,12i) = 21@ // (int) 05A9: $9897(20@,12s) = 26@s 000A: 20@ += 1 if 0039: 20@ == 12 then break end end 087C: release_shopping_data 08DB: set_panel 23@ column 0 header 'DUMMY' data s$9897[0] s$9897[1] s$9897[2] s$9897[3] s$9897[4] s$9897[5] s$9897[6] s$9897[7] s$9897[8] s$9897[9] s$9897[10] s$9897[11] jump @SKIN_CLOOP3 end if 0039: 22@ == 7 then 0512: show_permanent_text_box 'WARDH2' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select an area.~N~~k~~PED_SPRINT~ Select~N~~k~~VEHICLE_ENTER_EXIT~ Back 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel 08DB: set_panel 23@ column 0 header 'DUMMY' data 'TORSO' 'LEGS' 'FEET' 'CHAINS' 'WATCHES' 'SHADES' 'HATS' 'SHOP7' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' jump @SKIN_CLOOP4 end if 0019: 22@ > 7 then 0006: 18@ = 1 if 0039: 22@ == 8 then 05AA: 24@s = 'BARBERS' end if 0039: 22@ == 9 then 05AA: 24@s = 'BARBER2' end if 0039: 22@ == 10 then 05AA: 24@s = 'BARBER3' end 0512: show_permanent_text_box 'WARDH3' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select an item.~N~~k~~PED_SPRINT~ View~N~~k~~VEHICLE_ENTER_EXIT~ Back 08D4: 23@ = create_panel_with_title 'HAIRSTY' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Hairstyle for 16@ = 0 to 11 05A9: $9897(16@,12s) = 'DUMMY' end 075E: load_shopping_data_PRICES_subsection 24@s // v$ 075D: load_shopping_data_SHOPS_subsection "HAIRCUTS" // v$ 075F: store_shopping_data_entries_number_to 17@ 0006: 16@ = 0 0006: 20@ = 0 while 001D: 17@ > 16@ // (int) 0760: store_shopping_data_index 16@ textureCRC_to 19@ 000A: 16@ += 1 0783: get_shopping_item_with_textureCRC 19@ flag 1 store_to 21@ if 803B: not 21@ == 18@ // (int) then continue end 0783: get_shopping_item_with_textureCRC 19@ flag 0 store_to 21@ 078C: get_shopping_item_with_textureCRC 19@ nametag_to 26@s // 8-byte string 008A: $2438(20@,12i) = 19@ // (int) 008A: $2474(20@,12i) = 21@ // (int) 05A9: $9897(20@,12s) = 26@s 000A: 20@ += 1 if 0039: 20@ == 12 then break end end 087C: release_shopping_data 08DB: set_panel 23@ column 0 header 'DUMMY' data s$9897[0] s$9897[1] s$9897[2] s$9897[3] s$9897[4] s$9897[5] s$9897[6] s$9897[7] s$9897[8] s$9897[9] s$9897[10] s$9897[11] jump @SKIN_CLOOP3 end end if 00E1: player 0 pressed_key 15 then gosub @KEY_WAIT 08DA: remove_panel 23@ 03E6: remove_text_box gosub @SKIN_REST jump @SKIN_MENU end jump @SKIN_CLOOP :SKIN_CLOOP2 wait 0 if 00E1: player 0 pressed_key 16 then gosub @KEY_WAIT 08D8: 18@ = panel 23@ selected_row gosub @GET_BODYPART 08DA: remove_panel 23@ 03E6: remove_text_box 0512: show_permanent_text_box 'WARDH3' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select an item.~N~~k~~PED_SPRINT~ View~N~~k~~VEHICLE_ENTER_EXIT~ Back 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel for 16@ = 0 to 11 05A9: $9897(16@,12s) = 'DUMMY' end 075E: load_shopping_data_PRICES_subsection 24@s // v$ 075D: load_shopping_data_SHOPS_subsection "CLOTHES" // v$ 075F: store_shopping_data_entries_number_to 17@ 0006: 16@ = 0 0006: 20@ = 0 while 001D: 17@ > 16@ // (int) 0760: store_shopping_data_index 16@ textureCRC_to 19@ 000A: 16@ += 1 0783: get_shopping_item_with_textureCRC 19@ flag 1 store_to 21@ if 803B: not 21@ == 18@ // (int) then continue end 0783: get_shopping_item_with_textureCRC 19@ flag 0 store_to 21@ 078C: get_shopping_item_with_textureCRC 19@ nametag_to 26@s // 8-byte string 008A: $2438(20@,12i) = 19@ // (int) 008A: $2474(20@,12i) = 21@ // (int) 05A9: $9897(20@,12s) = 26@s 000A: 20@ += 1 if 0039: 20@ == 12 then break end end 087C: release_shopping_data 08DB: set_panel 23@ column 0 header 'DUMMY' data s$9897[0] s$9897[1] s$9897[2] s$9897[3] s$9897[4] s$9897[5] s$9897[6] s$9897[7] s$9897[8] s$9897[9] s$9897[10] s$9897[11] jump @SKIN_CLOOP3 end if 00E1: player 0 pressed_key 15 then gosub @KEY_WAIT 08DA: remove_panel 23@ 03E6: remove_text_box 0512: show_permanent_text_box 'WARDH1' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select a shop.~N~~k~~PED_SPRINT~ Select~N~~k~~VEHICLE_ENTER_EXIT~ Quit 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel 08DB: set_panel 23@ column 0 header 'DUMMY' data 'SHOP1' 'SHOP2' 'SHOP3' 'SHOP4' 'SHOP5' 'SHOP6' 'SHOP7' 'REMCLT' 'BARBERS' 'BARBER2' 'BARBER3' 'DUMMY' jump @SKIN_CLOOP end jump @SKIN_CLOOP2 :SKIN_CLOOP3 wait 0 if 00E1: player 0 pressed_key 16 then gosub @KEY_WAIT 08D8: 21@ = panel 23@ selected_row if or 0039: 18@ == 0 0039: 18@ == 2 0039: 18@ == 3 then 0784: set_player $PLAYER_CHAR textureCRC 0 modelCRC 0 bodypart 17 end 0784: set_player $PLAYER_CHAR textureCRC $2438(21@,12i) modelCRC $2474(21@,12i) bodypart 18@ 070D: rebuild_player $PLAYER_CHAR end if 00E1: player 0 pressed_key 15 then gosub @KEY_WAIT 08DA: remove_panel 23@ 03E6: remove_text_box if or 0039: 18@ == 17 0039: 18@ == 1 then 0512: show_permanent_text_box 'WARDH1' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select a shop.~N~~k~~PED_SPRINT~ Select~N~~k~~VEHICLE_ENTER_EXIT~ Quit 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel 08DB: set_panel 23@ column 0 header 'DUMMY' data 'SHOP1' 'SHOP2' 'SHOP3' 'SHOP4' 'SHOP5' 'SHOP6' 'SHOP7' 'REMCLT' 'BARBERS' 'BARBER2' 'BARBER3' 'DUMMY' jump @SKIN_CLOOP else 0512: show_permanent_text_box 'WARDH2' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select an area.~N~~k~~PED_SPRINT~ Select~N~~k~~VEHICLE_ENTER_EXIT~ Back 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel 08DB: set_panel 23@ column 0 header 'DUMMY' data 'TORSO' 'LEGS' 'FEET' 'CHAINS' 'WATCHES' 'SHADES' 'HATS' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' jump @SKIN_CLOOP2 end end jump @SKIN_CLOOP3 :SKIN_CLOOP4 wait 0 if 00E1: player 0 pressed_key 16 then gosub @KEY_WAIT 08D8: 18@ = panel 23@ selected_row gosub @GET_BODYPART 0784: set_player $PLAYER_CHAR textureCRC 0 modelCRC 0 bodypart 18@ 070D: rebuild_player $PLAYER_CHAR end if 00E1: player 0 pressed_key 15 then gosub @KEY_WAIT 08DA: remove_panel 23@ 03E6: remove_text_box 0512: show_permanent_text_box 'WARDH1' // Use ~k~~GO_FORWARD~ and ~k~~GO_BACK~ to select a shop.~N~~k~~PED_SPRINT~ Select~N~~k~~VEHICLE_ENTER_EXIT~ Quit 08D4: 23@ = create_panel_with_title 'CLOTCHO' position 29.0 145.0 width 186.0 columns 1 interactive 1 background 1 alignment 1 // Apparel 08DB: set_panel 23@ column 0 header 'DUMMY' data 'SHOP1' 'SHOP2' 'SHOP3' 'SHOP4' 'SHOP5' 'SHOP6' 'SHOP7' 'REMCLT' 'BARBERS' 'BARBER2' 'BARBER3' 'DUMMY' jump @SKIN_CLOOP end jump @SKIN_CLOOP4 // 体型 :SKIN_FLOOP 0006: 33@ = 0 wait 0 0494: get_joystick 0 data_to 21@ 22@ 22@ 22@ if or 0019: 21@ > 64 001B: -64 > 21@ then 006A: 21@ *= 33@ // (int) 0093: 21@ = integer 21@ to_float 0017: 21@ /= 640.0 08D7: 20@ = panel 23@ active_row 0012: 20@ *= 2 000A: 20@ += 21 0653: 22@ = float_stat 20@ 005B: 22@ += 21@ // (float) if 0023: 0.0 > 22@ then 0007: 22@ = 0.0 end if 0021: 22@ > 1000.0 then 0007: 22@ = 1000.0 end 062A: change_float_stat 20@ to 22@ 0653: 20@ = float_stat 21 0653: 21@ = float_stat 23 0092: 20@ = float 20@ to_integer 0092: 21@ = float 21@ to_integer 08EE: set_panel 23@ column 1 row 0 text_1number GXT 'NUMBER' number 20@ // ~1~ 08EE: set_panel 23@ column 1 row 1 text_1number GXT 'NUMBER' number 21@ // ~1~ end if 00E1: player 0 pressed_key 16 then 070D: rebuild_player $PLAYER_CHAR end if 00E1: player 0 pressed_key 15 then gosub @KEY_WAIT 08DA: remove_panel 23@ 03E6: remove_text_box gosub @SKIN_REST jump @SKIN_MENU end jump @SKIN_FLOOP :SKIN_BACK wait 0 if 80E1: not player 0 pressed_key 15 jf @SKIN_BACK jump @SKIN_MENU //========= // サブルーチン //========= // スクリプトコードのアドレスを取得 :GET_ADDRESS 0A9F: 0@ = current_thread_pointer 000A: 0@ += 0x10 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 return // テキストボックスを表示 :SHOW_TEXT_BOX if 0AA9: is_game_version_original then 0AA5: call 0x588BE0 num_params 4 pop 4 0 0 0 0@ else 0AA5: call 0x5893B0 num_params 4 pop 4 0 0 0 0@ end return // Copies a string from a null-terminated buffer (at 0@) into the 24 byte string (starting at var numered 1@) truncating with NUL. // Example: 0@ = label @PATH_BUF offset, 1@ = 24 // Copies from @PATH_BUF to [24@ 25@ 26@ 27@ 28@ 29@]. // Uses 16@ and 17@ as temp vars, modifies 0@ and 1@ directly. :COPY_FROM_BUF_TO_STRING 0A9F: 10@ = current_thread_pointer 10@ += 0x3C // 32 vars array 1@ *= 4 005A: 10@ += 1@ // (int) 0085: 1@ = 10@ // (int) for 11@ = 0 to 22 0A8D: 10@ = read_memory 0@ size 1 virtual_protect 0 if 10@ <> 0 then 0A8C: write_memory 1@ size 1 value 10@ virtual_protect 0 1@ += 1 0@ += 1 else 0A8C: write_memory 1@ size 1 value 0 virtual_protect 0 1@ += 1 // Don't advance 0@ anymore, so it's always NUL. end end // step 23 0A8C: write_memory 1@ size 1 value 0 virtual_protect 0 return // 方向キー/スティックの状態を取得 :GET_KEY 0494: get_joystick 0 data_to 23@ 21@ 23@ 23@ if and 0019: 21@ > -64 001B: 64 > 21@ then 0006: 32@ = 950 0006: 33@ = 0 end if 0019: 33@ > 950 then 0006: 33@ = 950 end 0085: 22@ = 33@ // (int) 0012: 22@ *= -1 000A: 22@ += 1000 return // キーが放されるまで待つ :KEY_WAIT wait 0 if and 80E1: not player 0 pressed_key 15 80E1: not player 0 pressed_key 16 80E1: not player 0 pressed_key 17 80E1: not player 0 pressed_key 14 80E1: not player 0 pressed_key 18 80E1: not player 0 pressed_key 19 jf @KEY_WAIT return // スペシャルアクターのロード :SKIN_LOAD 023C: load_special_actor "____________________" as 10 // models 290-299 038B: load_requested_models while 823D: not special_actor 10 loaded wait 0 end return // スキンリストの初期化 :WRITE_TEXT_CLEAR gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST 000A: 0@ += 115 for 16@ = 0 to 10 0A8C: write_memory 0@ size 4 value 0x5F5F5F5F virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 0x5F5F5F5F virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 0x5F5F5F5F virtual_protect 0 000A: 0@ += 4 000A: 0@ += 6 end return // 通常スキンリストの生成 :WRITE_TEXT_NORMAL for 16@ = 0 to 10 0085: 17@ = 3@ // (int) 000A: 17@ += -5 005A: 17@ += 16@ // (int) if and 0029: 17@ >= 0 002B: MAX_NORMAL_SKIN >= 17@ then 0085: 22@ = 3@ // (int) 000A: 22@ += -5 005A: 22@ += 16@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST 000A: 0@ += 115 0085: 17@ = 16@ // (int) 0012: 17@ *= 18 005A: 0@ += 17@ // (int) 0085: 17@ = 22@ // (int) 0085: 23@ = 22@ // (int) 0016: 23@ /= 1000 0012: 23@ *= 1000 0062: 17@ -= 23@ // (int) 0016: 17@ /= 100 000A: 17@ += 0x30 0A8C: write_memory 0@ size 1 value 17@ virtual_protect 0 000A: 0@ += 1 0085: 17@ = 22@ // (int) 0085: 23@ = 22@ // (int) 0016: 23@ /= 100 0012: 23@ *= 100 0062: 17@ -= 23@ // (int) 0016: 17@ /= 10 000A: 17@ += 0x30 0A8C: write_memory 0@ size 1 value 17@ virtual_protect 0 000A: 0@ += 1 0085: 17@ = 22@ // (int) 0085: 23@ = 22@ // (int) 0016: 23@ /= 10 0012: 23@ *= 10 0062: 17@ -= 23@ // (int) 000A: 17@ += 0x30 0A8C: write_memory 0@ size 1 value 17@ virtual_protect 0 gosub @GET_ADDRESS 000E: 0@ -= @LIST_SKIN_NORMAL 0085: 23@ = 0@ // (int) 0085: 17@ = 3@ // (int) 000A: 17@ += -5 005A: 17@ += 16@ // (int) 0012: 17@ *= 8 005A: 23@ += 17@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST 000A: 0@ += 119 0085: 17@ = 16@ // (int) 0012: 17@ *= 18 005A: 0@ += 17@ // (int) for 17@ = 0 to 11 0A8D: 1@ = read_memory 23@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 then break end 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 23@ += 1 end end end return // 特別スキンリストの生成 :WRITE_TEXT_SPECIAL for 16@ = 0 to 10 0085: 17@ = 4@ // (int) 000A: 17@ += -5 005A: 17@ += 16@ // (int) if and 0029: 17@ >= 0 002B: MAX_SPECIAL_SKIN >= 17@ then gosub @GET_ADDRESS 000E: 0@ -= @LIST_SPECIAL 0085: 23@ = 0@ // (int) 0085: 17@ = 4@ // (int) 000A: 17@ += -5 005A: 17@ += 16@ // (int) 0012: 17@ *= 8 005A: 23@ += 17@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST 000A: 0@ += 115 0085: 17@ = 16@ // (int) 0012: 17@ *= 18 005A: 0@ += 17@ // (int) for 17@ = 0 to 11 0A8D: 1@ = read_memory 23@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 then break end 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 23@ += 1 end end end return // 追加スキンリストの生成 :WRITE_TEXT_ADDON for 16@ = 0 to 10 0085: 17@ = 5@ // (int) 000A: 17@ += -5 005A: 17@ += 16@ // (int) if and 0029: 17@ >= 0 0019: 23@ > 17@ then gosub @GET_ADDRESS 000E: 0@ -= @LIST_ADDON 0085: 23@ = 0@ // (int) 0085: 17@ = 5@ // (int) 000A: 17@ += -5 005A: 17@ += 16@ // (int) 0012: 17@ *= 20 005A: 23@ += 17@ // (int) gosub @GET_ADDRESS 000E: 0@ -= @TEXT_SKIN_LIST 000A: 0@ += 115 0085: 17@ = 16@ // (int) 0012: 17@ *= 18 005A: 0@ += 17@ // (int) for 17@ = 0 to 11 0A8D: 1@ = read_memory 23@ size 1 virtual_protect 0 if 0039: 1@ == 0x00 then break end 0A8C: write_memory 0@ size 1 value 1@ virtual_protect 0 000A: 0@ += 1 000A: 23@ += 1 end end end return // 体の部位を取得 :GET_BODYPART if 0029: 18@ >= 3 then 000A: 18@ += 10 end if and 0029: 18@ >= 1 002B: 2 >= 18@ then 000A: 18@ += 1 end return // メニューから選択した人に変更 :ACTOR_CHANGE if 0039: 7@ == #NULL then 09C7: change_player $PLAYER_CHAR model_to #NULL end if and 8039: not 7@ == #NULL 8039: not 7@ == #SPECIAL10 then 0247: load_model 7@ 038B: load_requested_models while 8248: not model 7@ available wait 0 end 09C7: change_player $PLAYER_CHAR model_to 7@ 0249: release_model 7@ end if 0039: 7@ == #SPECIAL10 then gosub @SKIN_LOAD 09C7: change_player $PLAYER_CHAR model_to #SPECIAL10 0296: unload_special_actor 10 end return // メニューから選択した人を出現 :ACTOR_CREATE 0208: 18@ = random_float_in_ranges -0.25 0.25 0208: 19@ = random_float_in_ranges 1.25 1.75 04C4: store_coords_to 18@ 19@ 20@ from_actor $PLAYER_ACTOR with_offset 18@ 19@ 0.5 if 0039: 7@ == #NULL then 009A: 16@ = create_actor_pedtype 8 model #NULL at 18@ 19@ 20@ end if and 8039: not 7@ == #NULL 8039: not 7@ == #SPECIAL10 then 0247: load_model 7@ 038B: load_requested_models while 8248: not model 7@ available wait 0 end 009A: 16@ = create_actor_pedtype 8 model 7@ at 18@ 19@ 20@ 0249: release_model 7@ end if 0039: 7@ == #SPECIAL10 then gosub @SKIN_LOAD 009A: 16@ = create_actor_pedtype 8 model #SPECIAL10 at 18@ 19@ 20@ 0296: unload_special_actor 10 end // いろいろ設定 02A9: toggle_actor 16@ immune_to_nonplayer 1 02AB: set_actor 16@ immunities BP 1 FP 1 EP 1 CP 1 MP 0 0223: set_actor 16@ health_to 100 02E2: set_actor 16@ weapon_accuracy_to 95 03FE: set_actor 16@ money 0 04D8: set_actor 16@ drowns_in_water 0 060F: set_actor 16@ melee_accuracy_to 100.0 077A: set_actor 16@ default_action 6@ to_actors_pedtype 6 077A: set_actor 16@ default_action 6@ to_actors_pedtype 7 077A: set_actor 16@ default_action 6@ to_actors_pedtype 9 077A: set_actor 16@ default_action 6@ to_actors_pedtype 10 077A: set_actor 16@ default_action 6@ to_actors_pedtype 11 077A: set_actor 16@ default_action 6@ to_actors_pedtype 12 077A: set_actor 16@ default_action 6@ to_actors_pedtype 13 077A: set_actor 16@ default_action 6@ to_actors_pedtype 14 077A: set_actor 16@ default_action 6@ to_actors_pedtype 17 077A: set_actor 16@ default_action 6@ to_actors_pedtype 20 if 0039: 6@ == 4 then 07CB: set_actor 16@ supporting_fire 1 07DD: set_actor 16@ temper_to 75 // see pedstats.dat else 07CB: set_actor 16@ supporting_fire 0 07DD: set_actor 16@ temper_to 25 // see pedstats.dat end 081A: set_actor 16@ weapon_skill_to 2 if 0039: 6@ == 4 then // MP5を持たせる 0247: load_model #KNIFECUR 0247: load_model #DESERT_EAGLE 0247: load_model #MP5LNG 038B: load_requested_models while 8248: not model #MP5LNG available wait 0 end 01B2: give_actor 16@ weapon 29 ammo 3000 // Load the weapon model before using this 0249: release_model #MP5LNG //アーマー装着 035F: actor 16@ armour += 100 end // その辺まで歩かせる 0208: 18@ = random_float_in_ranges -2.5 2.5 0208: 19@ = random_float_in_ranges 5.0 10.0 0208: 20@ = random_float_in_ranges -2.5 2.5 04C4: store_coords_to 18@ 19@ 20@ from_actor $PLAYER_ACTOR with_offset 18@ 19@ 20@ 05D3: AS_actor 16@ goto_point 18@ 19@ 20@ mode 4 999999 ms // versionA 0007: 18@ = 0.0 0006: 19@ = 0 // 人リストに登録 gosub @GET_ADDRESS 000E: 0@ -= @LIST_SPAWNED for 17@ = 0 to MAX_SPAWN_ACTORS 0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 if 856D: not actor 1@ defined then 0A8C: write_memory 0@ size 4 value 16@ virtual_protect 0 0006: 16@ = ACTOR_EMPTY break else 00A0: store_actor $PLAYER_ACTOR position_to 24@ 25@ 26@ 00A0: store_actor 1@ position_to 27@ 28@ 29@ 0509: 20@ = distance_between_XY 24@ 25@ and_XY 27@ 28@ if 0025: 20@ > 18@ // (float) then 0085: 19@ = 17@ // (int) 0087: 18@ = 20@ // (float) end end 000A: 0@ += 4 end // 空きが無かった場合 if 8039: not 16@ == ACTOR_EMPTY then gosub @GET_ADDRESS 000E: 0@ -= @LIST_SPAWNED 0012: 19@ *= 4 005A: 0@ += 19@ // (int) 0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 01C2: remove_references_to_actor 1@ // Like turning an actor into a random pedestrian 0A8C: write_memory 0@ size 4 value 16@ virtual_protect 0 0006: 16@ = ACTOR_EMPTY end return //========================== // 実行されるスクリプトここまで //========================== //============== // 表示用文字列 //============== // メニュー用文字列 :TEXT_SKIN_MENU hex "~y~SkinSelector_v2.1_C~w~~n~~n~~k~~PED_FIREWEAPON~_Normal_Peds~n~~k~~PED_JUMPING~_Special_Actors~n~~k~~PED_SPRINT~_Add-on_Actors~n~~n~~k~~PED_DUCK~_Player_Cloth~n~~k~~PED_LOOKBEHIND~_Player_Shape~n~~n~~k~~VEHICLE_ENTER_EXIT~_Quit" 00 end // リスト用文字列 :TEXT_SKIN_LIST hex "~k~~PED_SPRINT~_Change_Skin~n~~k~~PED_FIREWEAPON~_Spawn_~r~Extreme~n~~w~~k~~PED_JUMPING~_Spawn_~g~Moderate~n~" "~n~~w~____________" "~n~~w~____________" "~n~~w~____________" "~n~~w~____________" "~n~~w~____________" "~n~~y~____________" "~n~~w~____________" "~n~~w~____________" "~n~~w~____________" "~n~~w~____________" "~n~~w~____________" 00 end :TEXT_SKIN_SHAPE hex "Use_~k~~GO_FORWARD~_and_~k~~GO_BACK~_to_select~n~an_item.~n~Use_~k~~GO_LEFT~_and_~k~~GO_RIGHT~_to_change~n~a_value.~n~~k~~PED_SPRINT~_Preview~n~~k~~VEHICLE_ENTER_EXIT~_Quit" 00 end // エラー表示 :TEXT_FILE_NOT_FOUND hex "~y~SkinSlector_v2.1~n~~r~Error:_Dir_'SKIN.IMG'_not_found." 00 end // エラー表示 :TEXT_FILE_CANT_READ hex "~y~SkinSlector_v2.1~n~~r~Error:_Dir_'SKIN.IMG'_can't_read." 00 end :SKIN_ARCHIVE_DIR hex "skin.img" 00 end //========== // スキン名リスト //========== // 通常スキンリスト // 基本的に変更しないこと :LIST_SKIN_NORMAL hex "null____" "________" "________" "________" "________" "________" "________" "male01__" "________" "BFORI___" "BFOST___" "VBFYCRP_" "BFYRI___" "BFYST___" "BMORI___" "BMOST___" "BMYAP___" "BMYBU___" "BMYBE___" "BMYDJ___" "BMYRI___" "BMYCR___" "BMYST___" "WMYBMX__" "WBDYG1__" "WBDYG2__" "WMYBP___" "WMYCON__" "BMYDRUG_" "WMYDRUG_" "HMYDRUG_" "DWFOLC__" "DWMOLC1_" "DWMOLC2_" "DWMYLC1_" "HMOGAR__" "WMYGOL1_" "WMYGOL2_" "HFORI___" "HFOST___" "HFYRI___" "HFYST___" "________" "HMORI___" "HMOST___" "HMYBE___" "HMYRI___" "HMYCR___" "HMYST___" "OMOKUNG_" "WMYMECH_" "BMYMOUN_" "WMYMOUN_" "OFORI___" "OFOST___" "OFYRI___" "OFYST___" "OMORI___" "OMOST___" "OMYRI___" "OMYST___" "WMYPLT__" "WMOPJ___" "BFYPRO__" "HFYPRO__" "________" "BMYPOL1_" "BMYPOL2_" "WMOPREA_" "SBFYST__" "WMOSCI__" "WMYSGRD_" "SWMYHP1_" "SWMYHP2_" "________" "SWFOPRO_" "WFYSTEW_" "SWMOTR1_" "WMOTR1__" "BMOTR1__" "VBMYBOX_" "VWMYBOX_" "VHMYELV_" "VBMYELV_" "VIMYELV_" "VWFYPRO_" "________" "VWFYST1_" "WFORI___" "WFOST___" "WFYJG___" "WFYRI___" "WFYRO___" "WFYST___" "WMORI___" "WMOST___" "WMYJG___" "WMYLG___" "WMYRI___" "WMYRO___" "WMYCR___" "WMYST___" "BALLAS1_" "BALLAS2_" "BALLAS3_" "FAM1____" "FAM2____" "FAM3____" "LSV1____" "LSV2____" "LSV3____" "MAFFA___" "MAFFB___" "MAFBOSS_" "VLA1____" "VLA2____" "VLA3____" "TRIADA__" "TRIADB__" "________" "TRIBOSS_" "DNB1____" "DNB2____" "DNB3____" "VMAFF1__" "VMAFF2__" "VMAFF3__" "VMAFF4__" "DNMYLC__" "DNFOLC1_" "DNFOLC2_" "DNFYLC__" "DNMOLC1_" "DNMOLC2_" "SBMOTR2_" "SWMOTR2_" "SBMYTR3_" "SWMOTR3_" "WFYBE___" "BFYBE___" "HFYBE___" "SOFYBU__" "SBMYST__" "SBMYCR__" "BMYCG___" "WFYCRK__" "HMYCM___" "WMYBU___" "BFYBU___" "________" "WFYBU___" "DWFYLC1_" "WFYPRO__" "WMYCONB_" "WMYBE___" "WMYPIZZ_" "BMOBAR__" "CWFYHB__" "CWMOFR__" "CWMOHB1_" "CWMOHB2_" "CWMYFR__" "CWMYHB1_" "BMYBOUN_" "WMYBOUN_" "WMOMIB__" "BMYMIB__" "WMYBELL_" "BMOCHIL_" "SOFYRI__" "SOMYST__" "VWMYBJD_" "VWFYCRP_" "SFR1____" "SFR2____" "SFR3____" "BMYBAR__" "WMYBAR__" "WFYSEX__" "WMYAMMO_" "BMYTATT_" "VWMYCR__" "VBMOCD__" "VBMYCR__" "VHMYCR__" "SBMYRI__" "SOMYRI__" "SOMYBU__" "SWMYST__" "WMYVA___" "COPGRL3_" "GUNGRL3_" "MECGRL3_" "NURGRL3_" "CROGRL3_" "GANGRL3_" "CWFOFR__" "CWFOHB__" "CWFYFR1_" "CWFYFR2_" "CWMYHB2_" "DWFYLC2_" "DWMYLC2_" "OMYKARA_" "WMYKARA_" "WFYBURG_" "VWMYCD__" "VHFYPRO_" "________" "OMONOOD_" "OMOBOAT_" "WFYCLOT_" "VWMOTR1_" "VWMOTR2_" "VWFYWAI_" "SBFORI__" "SWFYRI__" "WMYCLOT_" "SBFOST__" "SBFYRI__" "SBMOCD__" "SBMORI__" "SBMOST__" "SHMYCR__" "SOFORI__" "SOFOST__" "SOFYST__" "SOMOBU__" "SOMORI__" "SOMOST__" "SWMOTR5_" "SWFORI__" "SWFOST__" "SWFYST__" "SWMOCD__" "SWMORI__" "SWMOST__" "SHFYPRO_" "SBFYPRO_" "SWMOTR4_" "SWMYRI__" "SMYST___" "SMYST2__" "SFYPRO__" "VBFYST2_" "VBFYPRO_" "VHFYST3_" "BIKERA__" "BIKERB__" "BMYPIMP_" "SWMYCR__" "WFYLG___" "WMYVA2__" "BMOSEC__" "BIKDRUG_" "WMYCH___" "SBFYSTR_" "SWFYSTR_" "HECK1___" "HECK2___" "BMYCON__" "WMYCD1__" "BMOCD___" "VWFYWA2_" "WMOICE__" "________" "________" "________" "________" "________" "________" "________" "________" "________" "laemt1__" "lvemt1__" "sfemt1__" "lafd1___" "lvfd1___" "sffd1___" "lapd1___" "sfpd1___" "lvpd1___" "csher___" "lapdm1__" "swat____" "fbi_____" "army____" "dsher___" 00 end // 特別スキンリスト // gta3.img内で使えるものがあれば追加可 // 追加の際はファイル先頭の定数も変更すること :LIST_SPECIAL hex "TENPEN__" "PULASKI_" "HERN____" "SMOKE___" "SWEET___" "RYDER___" "RYDER2__" "RYDER3__" "EMMET___" "ANDRE___" "OGLOC___" "CESAR___" "KENDL___" "WUZIMU__" "CAT_____" "TRUTH___" "CLAUDE__" "JETHRO__" "DWAYNE__" "ZERO____" "TBONE___" "JIZZY___" "TORINO__" "SINDACO_" "MACCER__" "PAUL____" "ROSE____" "FORELLI_" "MADDOGG_" "JANITOR_" "BBTHIN__" "SMOKEV__" 00 end // 追加スキンリスト // skin.imgから探し出した追加スキン名が格納される // より多くの追加スキンを扱いたければ追加 // 追加の際はファイル先頭の定数も変更すること :LIST_ADDON hex "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" "____________________" 00 end // 出現させた人 // より多くの人を記憶させたければ追加 // 追加の際はファイル先頭の定数も変更すること // ただしSA側で上限がある :LIST_SPAWNED hex FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00 end :TEMP_MEMORY hex "____________________" 00 end :PATH_BUF hex "________________________________________________________________________________________" "________________________________________________________________________________________" "________________________________________________________________________________________" 00 end