---------------------------------------------------------------------------------- 先攻値計算メイン処理 (1Pのバーコード読み込み処理。$652Bに1Pのスピード初期値がセットされる) 897A:10 F7 BPL $8973 897C:20 BC 89 JSR $89BC 種族相性差算出(input=$6529(1P種族),$655A(2P種族) output=$6506) 897F:20 EC 89 JSR $89EC $6505=#$0A 8982:20 92 8D JSR $8D92 正確な先攻値算出(input=$6505(0A),$6506(種族相性差),$652B(1Pスピード初期値) output=$24) 8985:A5 24 LDA $0024 8987:48 PHA  1P先攻値算出結果保存 8988:20 62 78 JSR $7862 (2Pのバーコード読み込み処理。$652Bに2Pのスピード初期値がセットされる) 899F:10 F7 BPL $8998 89A1:20 BC 89 JSR $89BC 種族相性差算出 89A4:20 EC 89 JSR $89EC $6505=#$0A 89A7:20 92 8D JSR $8D92 正確な先攻値算出(input=$6505(0A),$6506(種族相性差),$652B(2Pスピード初期値) output=$24) 89AA:68 PLA  1P先攻値算出結果読み込み 89AB:C5 24 CMP $0024 2P先攻値算出結果と比較、大きいほうが勝ち 89AD:F0 D8 BEQ $8987 (1Pと2Pが同じ値だったときは計算やり直し) 89AF:90 05 BCC $89B6 キャリーフラグがクリアならブランチ 89B1:A9 01 LDA #$01 89B3:4C B8 89 JMP $89B8 89B8:8D 03 65 STA $6503 $6503に先攻側をセット 89BB:60 RTS 16進数時 ・先攻値算出(割り算は切り捨てで計算) 先攻値=((乱数0〜8+(スピード値)×05))×守護星0A)/0A)×相手との種族相性08,0A,0C+01)/0A ・特殊能力0x25の先攻値算出(割り算は切り捨てで計算) 先攻値=0x32+((乱数0〜8+(スピード値)×05))×守護星0A)/0A)×相手との種族相性08,0A,0C+01)/0A (※FFを超えた場合はFFに丸める) --------$89BCのロジック----------- 89BC:AE 29 65 LDX $6529 = #$02 A:34 X:FF Y:01 P:NvUbdizC //$6529=種族(1P)=2 89BF:BD CE 89 LDA $89CE,X @ $89D0 = #$0A A:34 X:02 Y:01 P:nvUbdizC  //パターンテーブル1から種族対応値読み込み 89C2:18 CLC A:0A X:02 Y:01 P:nvUbdizC 89C3:6D 5A 65 ADC $655A = #$04 A:0A X:02 Y:01 P:nvUbdizc //$655A=種族(2P)=4 を加算 89C6:AA TAX A:0E X:02 Y:01 P:nvUbdizc 89C7:BD D3 89 LDA $89D3,X @ $89E1 = #$08 A:0E X:0E Y:01 P:nvUbdizc //パターンテーブル2から種族対応値読み込み 89CA:8D 06 65 STA $6506 = #$0C A:08 X:0E Y:01 P:nvUbdizc //$6506に相性差を保存? 89CD:60 RTS A:08 X:0E Y:01 P:nvUbdizc | 1P種族00 | 01 | 02 | 03 | 04 | |0A 08 0C 0C 08 |0C 0A 08 0C 08 |08 0C 0A 0C 08 |08 08 08 0A 0C |0C 0C 0C 08 0A| 2P種族|00 01 02 03 04 |00 01 02 03 04 |00 01 02 03 04 |00 01 02 03 04 |00 01 02 03 04| 種族間相性 08=80% 0A=100% 0C=120% --------$89ECのロジック----------- 89A4:20 EC 89 JSR $89EC A:08 X:0E Y:01 P:nvUbdizc 89EC:A9 0A LDA #$0A A:08 X:0E Y:01 P:nvUbdizc 89EE:8D 05 65 STA $6505 = #$0A A:0A X:0E Y:01 P:nvUbdizc 89F1:60 RTS A:0A X:0E Y:01 P:nvUbdizc 6505=0A(守護星100%?)が読み込まれる --------$8D92のロジック----------- input $652B(スピード初期値),$6505(0A),$6506(種族相性差) 8D92:A9 09 LDA #$09 8D94:85 18 STA $0018 8D96:20 C5 DA JSR $DAC5 乱数生成($0024=0-8) 8D99:A5 24 LDA $0024 8D9B:48 PHA 乱数保存 8D9C:AD 2B 65 LDA $652B スピード初期値 8D9F:85 18 STA $0018 8DA1:A9 05 LDA #$05 8DA3:85 1C STA $001C 8DA5:20 DF DA JSR $DADF ($24)=スピード初期値×05 8DA8:68 PLA 乱数読み込み(0-8) 8DA9:18 CLC 8DAA:65 24 ADC $0024 8DAC:85 18 STA $0018 8DAE:AD 05 65 LDA $6505 $6505(0A) 8DB1:85 1C STA $001C 8DB3:20 DF DA JSR $DADF ($25$24)=(乱数0-8+1回目の$24)×0A 8DB6:A5 24 LDA $0024 8DB8:85 18 STA $0018 $18=$24 8DBA:A5 25 LDA $0025 8DBC:85 19 STA $0019 $19=$25 8DBE:A9 0A LDA #$0A 8DC0:85 1C STA $001C $1C=0A 8DC2:A9 00 LDA #$00 8DC4:85 1D STA $001D $1D=00 8DC6:20 CD DB JSR $DBCD ($24) =($19$18/$1C) 8DC9:A5 24 LDA $0024 8DCB:85 18 STA $0018 8DCD:AD 06 65 LDA $6506 $6506(種族相性差) 8DD0:85 1C STA $001C 8DD2:E6 1C INC $001C $1C=$1C+1 8DD4:20 DF DA JSR $DADF ($25$24)=$18×(種族相性差+1) 8DD7:A5 24 LDA $0024 8DD9:85 18 STA $0018 $18=$24 8DDB:A5 25 LDA $0025 8DDD:85 19 STA $0019 $19=$25 8DDF:A9 0A LDA #$0A 8DE1:85 1C STA $001C $1C=0A 8DE3:A9 00 LDA #$00 8DE5:85 1D STA $001D $1D=00 8DE7:20 CD DB JSR $DBCD ($24) =($19$18/$1C) 8DEA:AD 2F 65 LDA $652F $652F(特殊能力) 8DED:C9 25 CMP #$25 特殊能力が0x25(37)か? ←特殊能力もちゃんと計算してるー 8DEF:D0 0B BNE $8DFC ゼロでないときジャンプ 8DF1:18 CLC 8DF2:A9 32 LDA #$32 8DF4:65 24 ADC $0024 A=0x32+($24)=先攻値はかなりでかい値にセットされる 8DF6:90 04 BCC $8DFC キャリーフラグがクリアならジャンプ 8DF8:A9 FF LDA #$FF A=#$FF(特殊能力で先攻値が255以上になった場合は255に丸める) 8DFA:85 24 STA $0024 $24(先攻値算出完了) 8DFC:60 RTS $0030,$0055の乱数をもとに$0030を生成 生成された$0030を09を減算していき、8以下のとき$24に保存 --------$DAC5のロジック----------- input $0018=9,$0030(乱数),$0055(乱数) output $24 DAC5:20 62 78 JSR $7862 --------$7862のロジック------------input $0055,$0030 output $30 :7862:A5 55 LDA $0055 :7864:C5 30 CMP $0030   $0055-$0030 :7866:D0 06 BNE $786E ゼロでないときジャンプ :7868:E6 55 INC $0055 $0055=$0055+1 :786A:A5 55 LDA $0055 A=$0055 :786C:49 FF EOR #$FF Aとメモリを論理XOR演算。$55=43ならA=FF-43 :786E:85 30 STA $0030 :7870:60 RTS DAC8:A5 18 LDA $0018 (初期値=9) DACA:F0 0A BEQ $DAD6 ゼロならジャンプ DACC:A5 30 LDA $0030 乱数$0030を初期値として読み込み DACE:C5 18 CMP $0018 DAD0:90 04 BCC $DAD6 キャリーフラグがクリア($0018>A)ならジャンプ DAD2:E5 18 SBC $0018 Aから9を引き算 DAD4:D0 F8 BNE $DACE ゼロフラグがクリアならジャンプ DAD6:85 24 STA $0024 DAD8:60 RTS $18×$1Cの結果を($25(上位),$24(下位))に格納 1回目:スピード初期値×05 = ($24) 2回目:(乱数0-8+1回目の$24)×0A = ($25$24) 3回目:DBCDの計算結果×(種族相性差(08,0A,0C)+1) = ($25$24) --------$DADFのロジック----------- input $0018(1回目:スピード初期値,2回目:乱数(0-8)+1回目の$0024 3回目:DBCDの計算結果),$001C(1回目:05 2回目:0A 3回目:種族相性差) output $0024,$0025 DADF:A9 00 LDA #$00 DAE1:85 00 STA $0000 $0000=00 DAE3:85 24 STA $0024 $0024=00 DAE5:85 25 STA $0025 $0025=00 DAE7:46 18 LSR $0018 左シフト DAE9:90 0D BCC $DAF8 キャリーフラグがクリアならジャンプ DAEB:18 CLC DAEC:A5 24 LDA $0024 DAEE:65 1C ADC $001C DAF0:85 24 STA $0024 $0024=$0024+$001C DAF2:A5 25 LDA $0025 DAF4:65 00 ADC $0000 $0025=$0025+$0000 DAF6:85 25 STA $0025 DAF8:06 1C ASL $001C 左シフト DAFA:26 00 ROL $0000 左ローテート(ビット0とビット7の間にキャリー フラグを挟んで、全体を回転)。$001CがASLで桁溢れしたときにビットが立つ DAFC:A5 18 LDA $0018 DAFE:D0 E7 BNE $DAE7 ゼロフラグがクリアならジャンプ DB00:60 RTS ($19$18)/$001D(0A)の結果を$24に出力 --------$DBCDのロジック----------- input $0018(下位バイト),$0019(上位バイト),$001D(0A),$001C(00) output $24,$25,$2C,$2D DBCD:A9 00 LDA #$00 DBCF:85 24 STA $0024 $0024=00 DBD1:85 25 STA $0025 $0025=00 DBD3:85 2C STA $002C $002C=00 DBD5:85 2D STA $002D $002D=00 DBD7:A2 10 LDX #$10 DBD9:06 24 ASL $0024 左シフト DBDB:26 25 ROL $0025 左ローテート DBDD:06 18 ASL $0018 左シフト DBDF:26 19 ROL $0019 左ローテート DBE1:26 2C ROL $002C 左ローテート DBE3:26 2D ROL $002D 左ローテート DBE5:A5 2D LDA $002D DBE7:C5 1D CMP $001D DBE9:90 1A BCC $DC05 キャリーフラグがクリアならジャンプ DBEB:D0 06 BNE $DBF3 ゼロフラグがクリアならジャンプ DBED:A5 2C LDA $002C DBEF:C5 1C CMP $001C DBF1:90 12 BCC $DC05 キャリーフラグがクリアならジャンプ DBF3:A5 2C LDA $002C DBF5:E5 1C SBC $001C DBF7:85 2C STA $002C $2C=$2C-$1C DBF9:A5 2D LDA $002D DBFB:E5 1D SBC $001D DBFD:85 2D STA $002D $2D=$2D-$1D DBFF:E6 24 INC $0024 $24=$24+1 DC01:D0 02 BNE $DC05 ゼロフラグがクリアならジャンプ DC03:E6 25 INC $0025 $25=$25+1 DC05:CA DEX DC06:D0 D1 BNE $DBD9 ゼロフラグがクリアならジャンプ(X=#$10=16回ループ) DC08:60 RTS