AddCheat('Human Player Moeny Max','人間プレイヤー所持金最大')
CodeK=RegCodeK(8)
CodeCave('00 15 40 F9 F4 4F 42 A9 F5 0B 40 F9 FD 7B C3 A8 C0 03 5F D6 E0 03 1F AA',(
'ldr x0, [x8,#0x28]',
'ldrb w7, [x8,#0x23]',
'cmp w7, #1',
'b.ne .+12',
'ldr x0, {end}',
'str x0, [x8,#0x28]',
'ret'
))
Hack(CodeK, Value2QWord(9999999999))
CodeK=RegCodeK(4)
for num in range(1,8):
SetCodeK(CodeK)
AddCheat('Number of dice %d holding ZL'%num,'ZL押下中サイコロ%d個'%num)
CodeCave(AOB2('E0 03 14 AA E1 03 16 2A E2 03 15 AA ? ? ? ? 60 8E 01 F8',0xc,'F4 03 01 2A'),(
'mov w20, w1',
'ldr w7, {end}',
'cbz w7, .+8',
'mov w20, #%d'%num,
'ret'
))
Hack(CodeK,1,useButton='zl')
AddCheat('Remaining mass Press down while moving(ZL Unchanged ZR 0)','あと何マス 移動時押下(ZL 変更されない ZR 0)')
CodeK=RegCodeK()
CodeCave('29 01 0A 0B 09 19 00 B9 60 32 40 F9',(
'add w7, w9, w10',
'ldr w0, {end}',
'cbz w0, .+12',
'cmp w0, #2',
'csel w7, wzr, w10, eq',
'mov w0, #99',
'cmp w7, w0',
'csel w7, w0, w7, gt',
'mov w9, w7',
'ret'
))
Hack(CodeK,1,useButton='zl')
Hack(CodeK,2,showRestoreCode=False,useButton='zr')
AddCheat('Otanoshimi Vaccine Development Property Available','お楽しみメニュー:歴史ヒーロー')
Hack('40 00 00 54 18 03 1F 32', 'nop')
AddCheat('Otanoshimi Detective Agency Available','お楽しみメニュー:探偵社')
Hack('14 01 97 1A', 'csel w20, w8, w8, eq')
AddCheat('Otanoshimi Arrived at all stations Available','お楽しみメニュー:全駅踏破')
Hack('? ? ? ? 08 03 1C 32', 'mov w0, #1')
AddCheat('Otanoshimi Point Available','お楽しみメニュー:ポイント')
Hack('? ? ? ? 1F 1C 00 72 E0 02 40 F9 08 03 1B 32', 'mov w0, #1')
AddCheat('Otanoshimi Vaccine Development Property Available','お楽しみメニュー:八大財宝を探せ')
Hack('98 02 8A 1A', 'csel w24, w10, w10, eq')
AddCheat('Otanoshimi Vaccine Development Property Available','お楽しみメニュー:八大UMAを探せ')
Hack('18 11 98 1A 08 E0 40 B9', 'csel w24, w8, w8, ne')
AddCheat('Otanoshimi Arrival Count Available','お楽しみメニュー:到着回数')
Hack('? ? ? ? 1F 1C 00 72 E0 02 40 F9 08 20 81 52', 'mov w0, #1')
AddCheat('Otanoshimi IT Property List Available','お楽しみメニュー:IT物件一覧')
Hack('? ? ? ? 1F 1C 00 72 E0 02 40 F9 08 40 82 52', 'mov w0, #1')
AddCheat('Otanoshimi Vaccine Development Property Available','お楽しみメニュー:ワクチン開発物件')
Hack('? ? ? ? 08 80 84 52 1F 1C 00 72', 'mov w0, #1')
#フラグマネージャー
GmFlagManager=[GetQword(GetADRP(AOB('0D6 ? ? F9 A0 02 40 F9 08 E0 40 B9 C8 06 00 34'))), 0x20, 0xc0, 0, 0xb8, 0]
m_gmSoFlag=GmFlagManager+[0x18] # GmSoFlag
m_gmSoGameSettings=GmFlagManager+[0x20] # GmSoGameSettings
_sys_flag=m_gmSoFlag+[0x18] # byte[] const int SYS_FLAG_NUM = 128;
_game_flag=m_gmSoFlag+[0x20] # byte[] const int GAME_FLAG_NUM = 768;
_debug_flag=m_gmSoFlag+[0x28] # byte[] const int DEBUG_FLAG_NUM = 384;
_mes_flag=m_gmSoFlag+[0x30] # byte[]
#プレイヤーマネージャー
PlayerManager=[GetQword(GetADRP(AOB('08 ? ? F9 00 01 40 F9 ? ? ? ? 00 29 00 B4 62 22 40 F9'))), 0x20, 0xc0, 0, 0xb8, 0]
m_gmSoGameSettings=PlayerManager+[0x18] # GmSoGameSettings
m_gmSoHistory=PlayerManager+[0x20] # GmSoHistory
m_playerObj=PlayerManager+[0x28] # GameObject
m_gmSoPlayer=PlayerManager+[0x30] # GmSoPlayerStatus
m_systemPid=PlayerManager+[0x38] # ePLAYER_NUM
m_gmNetPlayer=PlayerManager+[0x40] # GmNetPlayer
m_pClone=PlayerManager+[0x48] # GameObject[]
m_gmTrains=PlayerManager+[0x50] # GmTrain[]
_comConstant=PlayerManager+[0x58] # DBSo_ComConstant
ignorePlayerStatusWhenBonbiBiting=PlayerManager+[0x60] # List<ePLAYER_STATUS>
ERROR_CARD=PlayerManager+[0x68] # readonly
_ignoreStatusForBonbiBiting=PlayerManager+[0x70] # bool
wealthRankingOnMonthStart=PlayerManager+[0x78] # int[]
evtZenekiTargetLocal9=PlayerManager+[0x80] # int[]
tmpHeliportTargetListDic=PlayerManager+[0x88] # Dictionary<string,
HistoryModeWorkValues=PlayerManager+[0x90] # long[]
statusAtOutOfAction=PlayerManager+[0x98] # int[]
boardPlayer=PlayerManager+[0xA0] # int
reservedVehicleAnimSyncPlayerList=PlayerManager+[0xA8] # List<int>
m_netWaitState=PlayerManager+[0xB0] # PlayerManager.eNET_WAIT[]
m_netWaitParam=PlayerManager+[0xB8] # int[]
m_isStampAllOpen=PlayerManager+[0xC0] # bool[]
for pNo in range(4):
player = m_gmSoPlayer+[0x18,0x20+pNo*8]
AddCheat('P%d Money +(-)999trillion R3Push+Up(Down)'%(pNo+1),'プレイヤー%d 持ち金 +(-)999兆 右スティック押込+上(下) '%(pNo+1))
AddCheatCode(PointerCodeHeader(player))
AddCheatCode(PointerCodeArithmetic('+',r2=0x28))
AddCheatCode(ButtonCode(('r3','up'),code=PointerCodeWrite(8,Value2QWord(9999999999),use_D=False)))
AddCheatCode(ButtonCode(('r3','down'),code=PointerCodeWrite(8,Value2QWord('FFFFFFFDABF41C01'),use_D=False)))
cards = player+[0x70]
AddCheat('P%d Card1ID Change(Right+1 Left-1)'%(pNo+1),'プレイヤー%d カード1枚目ID変更(右+1 左-1)'%(pNo+1))
AddCheatCode(PointerCodeHeader(cards+[0x20]))
AddCheatCode(PointerCodeArithmetic('mov','E'))
AddCheatCode(PointerCodeAddOffset(0x10,register='E',length=2))
AddCheatCode(PointerCodeArithmetic('mov','D','E'))
AddCheatCode(ButtonCode('right',code=PointerCodeArithmetic('+','D','E',1,length=2)))
AddCheatCode(ButtonCode('left',code=PointerCodeArithmetic('-','D','E',1,length=2)))
AddCheatCode(PointerCodeCondition('D','>',0x81,length=2))
AddCheatCode(PointerCodeArithmetic('mov','D','E'))
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(PointerCodeStoreRegisterValueToRegisterAddress(length=2,offset=0x10))
AddCheat('P%d TankCardGauge Full'%(pNo+1),'プレイヤー%d タンクカードゲージフル'%(pNo+1))
PointerFillArray(cards,8,0x12,0,length=2)
#ボンビーマネージャー
BonbiManager=[GetQword(GetADRP(AOB('39 ? ? F9 20 03 40 F9 ? ? ? ? 60 15 00 B4'))), 0x20, 0xc0, 0, 0xb8, 0]
Bonbi = BonbiManager+[0x18]
Bonbi_player = Bonbi + [0x10]
Bonbi_lastplayer = Bonbi + [0x14]
Bonbi_type = Bonbi + [0x18]
Bonbi_fplayer = Bonbi + [0x1C]
Bonbi_sidx = Bonbi + [0x20]
Bonbi_life = Bonbi + [0x24]
AddCheat('Bonbi Type Change','ボンビータイプ変更')
PointerHack(Bonbi_type,0,useButton=('zl','up')) # BINBOUGAMI = 0;
AddCheatCode(ButtonCode(('zl','right')))
AddCheatCode(PointerCodeWrite(4,1,use_D=False)) # MINIBONBI = 1;
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zl','down')))
AddCheatCode(PointerCodeWrite(4,2,use_D=False)) # KINGBONBI = 2;
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zl','left')))
AddCheatCode(PointerCodeWrite(4,3,use_D=False)) # KINGBONBI_Jr = 3;
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zl','l3up')))
AddCheatCode(PointerCodeWrite(4,4,use_D=False)) # BIGBONBI = 4;
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zl','l3right')))
AddCheatCode(PointerCodeWrite(4,5,use_D=False)) # BONBITRAIN = 5;
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zl','l3down')))
AddCheatCode(PointerCodeWrite(4,6,use_D=False)) # KIZETSU = 6;
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zl','l3left')))
AddCheatCode(PointerCodeWrite(4,7,use_D=False)) # ROCKBIRD = 7;
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zl','l3')))
AddCheatCode(PointerCodeWrite(4,8,use_D=False)) # BARAMAKI = 8;
AddCheatCode(PointerCodeEndBlock())
AddCheat('Bonbi Player Change ZR+UpRiDwLe P1-P4','ボンビープレイヤー変更 ZR+上右下左 P1-P4')
PointerHack(Bonbi_player,0,useButton=('zr','up'))
AddCheatCode(ButtonCode(('zr','right')))
AddCheatCode(PointerCodeWrite(4,1,use_D=False))
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zr','down')))
AddCheatCode(PointerCodeWrite(4,2,use_D=False))
AddCheatCode(PointerCodeEndBlock())
AddCheatCode(ButtonCode(('zr','left')))
AddCheatCode(PointerCodeWrite(4,3,use_D=False))
AddCheatCode(PointerCodeEndBlock())
AddCheat('------------- Test Code Plyaer Status Setting Start -------------','------------- テストコード プレイヤー状態設定開始 -------------')
from enum import Enum
class PlyaerStats(Enum):
FUUIN = 0
GYUUHO = 1
TOUMIN = 2
TONDEN = 3
YELLOW = 4
HECCHARA = 5
TOTSUNYU = 6
OIDON_PAUSE = 7
TOUMIN_BLOCK = 8
BUTTOBI = 9
GINJIUP = 10
GINJIUPLIFE = 11
KOGUN = 12
MONOCHECK = 13
HASSHOUCHI_0 = 14
HASSHOUCHI_1 = 15
HASSHOUCHI_2 = 16
HASSHOUCHI_3 = 17
COLDEST_CITY = 18
OPEN_TOUHA = 19
TOUHA = 20
AHLOHAMEHA = 21
CHANPONE = 22
SHINKIRO = 23
SHINKIRO_CNT = 24
KURIONENNEE = 25
PUPU = 26
OTANOSHIMI = 27
RALLY = 28
BINGO0 = 29
BINGO1 = 30
BINGO2 = 31
BINGO3 = 32
BINGO4 = 33
BINGO5 = 34
BINGO6 = 35
BINGO7 = 36
BINGO8 = 37
BINGOWORK = 38
BIGENNER_CNT = 39
LUCKY = 40
LUCKYTYPE = 41
LUCKYDICE = 42
NOLUCKY = 43
UNLUCKY = 44
COMREPEAT = 45
SHOPMODE = 46
RANK = 47
BONBI = 48
ASHIDOME = 49
CARD = 50
PLUS = 51
MINUS = 52
SHOENEDICE = 53
POINT = 54
CAPITAL = 55
ARRIVAL = 56
IT_REVOLUTION = 57
CORONA = 58
SHINGEN_YAMA = 59
KANBEE_MIZUZEME = 60
KIYOMASA = 61
TAKARA_CLT = 62
NIZYUIKKYU = 63
YOUKIHIEYE = 64
YOUKIHIDANCE = 65
YOUKIHITIME = 66
ENMA_ZEKKOUCHOU = 67
KAWARAWARI = 68
NOBUYITEM = 69
RESORT = 70
DEKIN = 71
SHAKESPEARELOVE = 72
EINSTEIN_UNLUCKY = 73
GANDHI_BOYCOTT = 74
KATUSHIKA_WAVE = 75
SPIRIT_GREAT_CONDITION_RESERVE = 76
SPIRIT_GREAT_CONDITION_UNLUCKY = 77
SPIRIT_LASSO_BIND = 78
SPIRIT_REPAINT = 79
REPAINT_OVERRIDE = 80
HIKYOTANKEN = 81
NKRUMAH_FUUIN = 82
NKRUMAH_UNLUCKY = 83
KINKYUCHAKURIKU = 84
# 生成したいコードを登録
codeCreateList=[
PlyaerStats.FUUIN, #封印
PlyaerStats.GYUUHO, #牛歩
PlyaerStats.TOUMIN, #冬眠
PlyaerStats.TONDEN,
PlyaerStats.YELLOW,
PlyaerStats.HECCHARA,
PlyaerStats.TOTSUNYU,
PlyaerStats.OIDON_PAUSE,
PlyaerStats.TOUMIN_BLOCK,
PlyaerStats.BUTTOBI,
PlyaerStats.GINJIUP, #銀二遭遇率アップ
PlyaerStats.GINJIUPLIFE,
PlyaerStats.KOGUN,
PlyaerStats.MONOCHECK,
PlyaerStats.HASSHOUCHI_0,
PlyaerStats.HASSHOUCHI_1,
PlyaerStats.HASSHOUCHI_2,
PlyaerStats.HASSHOUCHI_3,
PlyaerStats.COLDEST_CITY,
PlyaerStats.OPEN_TOUHA,
PlyaerStats.TOUHA,
PlyaerStats.AHLOHAMEHA,
PlyaerStats.CHANPONE,
PlyaerStats.SHINKIRO,
PlyaerStats.SHINKIRO_CNT,
PlyaerStats.KURIONENNEE,
PlyaerStats.PUPU,
PlyaerStats.OTANOSHIMI,
PlyaerStats.RALLY,
#PlyaerStats.BINGO0,
#PlyaerStats.BINGO1,
#PlyaerStats.BINGO2,
#PlyaerStats.BINGO3,
#PlyaerStats.BINGO4,
#PlyaerStats.BINGO5,
#PlyaerStats.BINGO6,
#PlyaerStats.BINGO7,
#PlyaerStats.BINGO8,
PlyaerStats.BINGOWORK,
PlyaerStats.BIGENNER_CNT,
PlyaerStats.LUCKY,
PlyaerStats.LUCKYTYPE,
PlyaerStats.LUCKYDICE,
PlyaerStats.NOLUCKY,
PlyaerStats.UNLUCKY,
PlyaerStats.COMREPEAT,
PlyaerStats.SHOPMODE,
PlyaerStats.RANK,
PlyaerStats.BONBI,
PlyaerStats.ASHIDOME,
PlyaerStats.CARD,
PlyaerStats.PLUS,
PlyaerStats.MINUS,
PlyaerStats.SHOENEDICE, #省エネ
PlyaerStats.POINT,
PlyaerStats.CAPITAL,
PlyaerStats.ARRIVAL,
PlyaerStats.IT_REVOLUTION,
PlyaerStats.CORONA,
PlyaerStats.SHINGEN_YAMA,
PlyaerStats.KANBEE_MIZUZEME,
PlyaerStats.KIYOMASA,
PlyaerStats.TAKARA_CLT,
PlyaerStats.NIZYUIKKYU,
PlyaerStats.YOUKIHIEYE,
PlyaerStats.YOUKIHIDANCE,
PlyaerStats.YOUKIHITIME,
PlyaerStats.ENMA_ZEKKOUCHOU,
PlyaerStats.KAWARAWARI,
PlyaerStats.NOBUYITEM, #カード買えない
PlyaerStats.RESORT,
PlyaerStats.DEKIN, #出禁
PlyaerStats.SHAKESPEARELOVE,
PlyaerStats.EINSTEIN_UNLUCKY,
PlyaerStats.GANDHI_BOYCOTT,
PlyaerStats.KATUSHIKA_WAVE,
PlyaerStats.SPIRIT_GREAT_CONDITION_RESERVE,
PlyaerStats.SPIRIT_GREAT_CONDITION_UNLUCKY,
PlyaerStats.SPIRIT_LASSO_BIND,
PlyaerStats.SPIRIT_REPAINT,
PlyaerStats.REPAINT_OVERRIDE,
PlyaerStats.HIKYOTANKEN,
PlyaerStats.NKRUMAH_FUUIN,
PlyaerStats.NKRUMAH_UNLUCKY,
PlyaerStats.KINKYUCHAKURIKU,
]
for pNo in range(4):
player = m_gmSoPlayer+[0x18,0x20+pNo*8]
status = player+[0x50]
for pstat in PlyaerStats:
if not pstat in codeCreateList:continue
AddCheat('P%d %s L(R)3Push On(Off)'%(pNo+1, pstat.name),'プレイヤー%d %s 左(右)スティック押込 設定(解除)'%(pNo+1, pstat.name))
AddCheatCode(PointerCodeHeader(status))
AddCheatCode(PointerCodeArithmetic('+',r2=0x20+pstat.value))
AddCheatCode(ButtonCode('l3',code=PointerCodeWrite(1,1,use_D=False)))
AddCheatCode(ButtonCode('r3',code=PointerCodeWrite(1,0,use_D=False)))
AddCheat('------------- Test Code Plyaer Status Setting End -------------','------------- テストコード プレイヤー状態設定終了 -------------')