確率設定 | 確率 (アイテム #1) |
確率 (アイテム #2) |
確率 (アイテム #3) |
確率 (アイテム #4) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 457/15360 | 278/15360 | 150/15360 | 15/15360 |
2 | 2264/15360 | 1406/15360 | 754/15360 | 76/15360 |
3 | 128/256 | 80/256 | 44/256 | 4/256 |
+ | ... |
;------------------------------------------
; アイテムドロップ処理
;------------------------------------------
...
03ECE8 A6 B7 LDX $B7
03ECEA BD 8E 35 LDA $358E,X
03ECED 85 B3 STA $B3
03ECEF BD 8E 35 LDA $358E,X
03ECF2 29 C0 AND #$C0
03ECF4 C9 C0 CMP #$C0
03ECF6 F0 17 BEQ $03ED0F
;
03ECF8 C9 40 CMP #$40
03ECFA D0 04 BNE $03ED00
;
; case 1:
;
03ECFC A9 05 LDA #$05
03ECFE 80 06 BRA $03ED06
;
03ED00 C9 80 CMP #$80
03ED02 D0 5B BNE $03ED5F
;
; case 2:
;
03ED04 A9 19 LDA #$19
03ED06 85 B4 STA $B4
03ED08 20 8B 85 JSR $858B ; A ← 乱数値 0〜98
03ED0B C5 B4 CMP $B4
03ED0D B0 50 BCS $03ED5F
; case 3: アイテムを落とす場合
03ED0F 06 B3 ASL $B3
03ED11 06 B3 ASL $B3
03ED13 A5 B3 LDA $B3
03ED15 AA TAX
03ED16 7B TDC
03ED17 A8 TAY
03ED18 84 A9 STY $A9
03ED1A BF 00 9F 0E LDA $0E9F00,X
03ED1E 99 9C 28 STA $289C,Y
03ED21 E8 INX
03ED22 C8 INY
03ED23 E6 A9 INC $A9
03ED25 A5 A9 LDA $A9
03ED27 C9 04 CMP #$04
03ED29 D0 EF BNE $03ED1A
03ED2B AD A3 16 LDA $16A3
03ED2E 65 97 ADC $97
03ED30 85 97 STA $97 ; 乱数テーブル index に ($16A3 + 1) を加算(+1 は carry = 1 のため)
03ED32 20 93 85 JSR $8593 ; A ← 乱数 0〜255
03ED35 C9 80 CMP #$80
03ED37 B0 04 BCS $03ED3D
03ED39 A9 00 LDA #$00
03ED3B 80 12 BRA $03ED4F
03ED3D C9 D0 CMP #$D0
03ED3F B0 04 BCS $03ED45
03ED41 A9 01 LDA #$01
03ED43 80 0A BRA $03ED4F
03ED45 C9 FC CMP #$FC
03ED47 B0 04 BCS $03ED4D
03ED49 A9 02 LDA #$02
03ED4B 80 02 BRA $03ED4F
03ED4D A9 03 LDA #$03
03ED4F AA TAX
03ED50 BD 9C 28 LDA $289C,X
;------------------------------------------
; A ← 乱数 0〜98
;------------------------------------------
03858B 7B TDC
03858C AA TAX
03858D A9 62 LDA #$62
03858F 20 79 83 JSR $8379
038592 60 RTS
;------------------------------------------
; A ← 乱数 0〜255
;------------------------------------------
038593 7B TDC
038594 AA TAX
038595 A9 FF LDA #$FF
038597 20 79 83 JSR $8379
03859A 60 RTS
;------------------------------------------
; A ← 乱数 X〜A
;------------------------------------------
038379 E2 10 SEP #$10
03837B 86 96 STX $96
03837D E0 FF CPX #$FF
03837F D0 02 BNE $038383
038381 80 33 BRA $0383B6
038383 C9 00 CMP #$00
038385 F0 2F BEQ $0383B6
038387 C5 96 CMP $96
038389 F0 2B BEQ $0383B6
03838B A6 97 LDX $97
03838D 38 SEC
03838E E5 96 SBC $96
038390 C9 FF CMP #$FF
038392 D0 05 BNE $038399
;
038394 BD 00 19 LDA $1900,X
038397 80 1D BRA $0383B6
;
038399 1A INC
03839A 8D 47 39 STA $3947
03839D 9C 48 39 STZ $3948
0383A0 BD 00 19 LDA $1900,X
0383A3 AA TAX
0383A4 8E 45 39 STX $3945
0383A7 C2 10 REP #$10
0383A9 20 07 84 JSR $8407
0383AC E2 10 SEP #$10
0383AE 18 CLC
0383AF AD 4B 39 LDA $394B
0383B2 65 96 ADC $96
0383B4 E6 97 INC $97
;
0383B6 C2 10 REP #$10
0383B8 60 RTS
;------------------------------------------
; divmod($3945, $3947)
;------------------------------------------
038407 C2 20 REP #$20
038409 9C 49 39 STZ $3949
03840C 9C 4B 39 STZ $394B
03840F AD 45 39 LDA $3945
038412 F0 2B BEQ $03843F
038414 AD 47 39 LDA $3947
038417 F0 26 BEQ $03843F
038419 18 CLC
03841A A2 10 00 LDX #$0010
03841D 2E 45 39 ROL $3945
038420 2E 4B 39 ROL $394B
038423 38 SEC
038424 AD 4B 39 LDA $394B
038427 ED 47 39 SBC $3947
03842A 8D 4B 39 STA $394B
03842D B0 0A BCS $038439
03842F AD 4B 39 LDA $394B
038432 6D 47 39 ADC $3947
038435 8D 4B 39 STA $394B
038438 18 CLC
038439 2E 49 39 ROL $3949
03843C CA DEX
03843D D0 DE BNE $03841D
03843F 7B TDC
038440 E2 20 SEP #$20
038442 60 RTS
;------------------------------------------
; 経過時間の更新 (NMI 中)
;------------------------------------------
...
03F7CD EE A3 16 INC $16A3
03F7D0 AD A3 16 LDA $16A3 ; フレーム数
03F7D3 C9 3C CMP #$3C
03F7D5 90 10 BCC $03F7E7
03F7D7 9C A3 16 STZ $16A3 ; フレーム数は 0〜59 の値を取る
03F7DA EE A4 16 INC $16A4
03F7DD D0 08 BNE $03F7E7
03F7DF EE A5 16 INC $16A5
03F7E2 D0 03 BNE $03F7E7
03F7E4 EE A6 16 INC $16A6
03F7E7 6B RTL
...
|
確率設定 | 確率 (アイテム #1) |
確率 (アイテム #2) |
確率 (アイテム #3) |
確率 (アイテム #4) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
1 | 約 160/6272 | 約 100/6272 | 約 55/6272 | 約 5/6272 |
2 | 約 800/6272 | 約 500/6272 | 約 275/6272 | 約 25/6272 |
3 | 128/256 | 80/256 | 44/256 | 4/256 |
+ | ... |
;------------------------------------------
; アイテムドロップ処理
;------------------------------------------
8088570 70 B5 PUSH {R4-R6,LR}
8088572 81 B0 ADD SP, #-$0004
8088574 48 31 ADD R1, #$48
8088576 09 88 LDRH R1, [R1, #$00]
8088578 48 00 LSL R0, R1, #$01
808857A 40 18 ADD R0, R0, R1
808857C 80 00 LSL R0, R0, #$02
808857E 1C 49 LDR R1, [PC, #$1C]
8088580 45 18 ADD R5, R0, R1
8088582 1C 49 LDR R1, [PC, #$1C]
8088584 68 46 MOV R0, SP
8088586 04 22 MOV R2, #$04
8088588 1B 4B LDR R3, [PC, #$1B]
808858A 33 F0 BLL #$0033
808858C CB FC BLH #$04CB
808858E 28 78 LDRB R0, [R5, #$00]
8088590 00 28 CMP R0, #$00
8088592 66 D0 BEQ $08088662
8088594 03 28 CMP R0, #$03
8088596 16 D0 BEQ $080885C6
8088598 18 48 LDR R0, [PC, #$18] ; ($08058805)
808859A 33 F0 BLL #$0033
808859C BD FC BLH #$04BD
808859E 04 1C ADD R4, R0, #$00 ; r4 ← 乱数 0〜65535
80885A0 17 48 LDR R0, [PC, #$17] ; ($080599ED)
80885A2 33 F0 BLL #$0033
80885A4 B9 FC BLH #$04B9
80885A6 00 06 LSL R0, R0, #$18
80885A8 00 0E LSR R0, R0, #$18 ; r0 ← 乱数 0〜255
80885AA 24 18 ADD R4, R4, R0
80885AC 24 04 LSL R4, R4, #$10
80885AE 20 0C LSR R0, R4, #$10
80885B0 14 4A LDR R2, [PC, #$14]
80885B2 62 21 MOV R1, #$62
80885B4 33 F0 BLL #$0033
80885B6 B4 FC BLH #$04B4
80885B8 00 06 LSL R0, R0, #$18
80885BA 00 0E LSR R0, R0, #$18 ; r0 ← (((乱数値 0〜65535) + (乱数値 0〜255)) mod 0x10000) mod 98
80885BC 29 78 LDRB R1, [R5, #$00]
80885BE 69 44 ADD R1, SP
80885C0 09 78 LDRB R1, [R1, #$00] ; r1 ← (0, 4, 24, 100)
80885C2 88 42 CMP R0, R1
80885C4 4D D8 BHI $08088662
80885C6 0D 48 LDR R0, [PC, #$0D] ; ($08058805)
80885C8 33 F0 BLL #$0033
80885CA A6 FC BLH #$04A6
80885CC 04 1C ADD R4, R0, #$00
80885CE 0C 48 LDR R0, [PC, #$0C] ; ($080599ED)
80885D0 33 F0 BLL #$0033
80885D2 A2 FC BLH #$04A2
80885D4 00 06 LSL R0, R0, #$18
80885D6 00 0E LSR R0, R0, #$18
80885D8 24 18 ADD R4, R4, R0
80885DA 24 04 LSL R4, R4, #$10
80885DC FF 20 MOV R0, #$FF
80885DE 00 04 LSL R0, R0, #$10
80885E0 20 40 AND R0, R4
80885E2 00 0C LSR R0, R0, #$10 ; r0 ← ((乱数値 0〜65535) + (乱数値 0〜255)) mod 256
80885E4 01 26 MOV R6, #$01
80885E6 7F 28 CMP R0, #$7F
80885E8 0E D8 BHI $08088608
80885EA 6C 88 LDRH R4, [R5, #$02] ; 乱数値 r0 が 0〜127 の範囲であった場合
80885EC 15 E0 BAL $0808861A
80885EE 00 00
80885F0 84 B4 0F 08 6C 58 0F 08
80885F8 41 18 0C 08
80885FC 05 88 LDRH R5, [R0, #$00]
80885FE 05 08 LSR R5, R0, #$00
8088600 ED 99 LDR R1, [SP, #$03B4]
8088602 05 08 LSR R5, R0, #$00
8088604 B1 0A LSR R1, R6, #$0A
8088606 00 08 LSR R0, R0, #$00
8088608 CF 28 CMP R0, #$CF
808860A 01 D8 BHI $08088610
808860C AC 88 LDRH R4, [R5, #$04] ; 乱数値 r0 が 128〜207 の範囲であった場合
808860E 04 E0 BAL $0808861A
8088610 FB 28 CMP R0, #$FB
8088612 01 D8 BHI $08088618
8088614 EC 88 LDRH R4, [R5, #$06] ; 乱数値 r0 が 208〜251 の範囲であった場合
8088616 00 E0 BAL $0808861A
8088618 2C 89 LDRH R4, [R5, #$08] ; 乱数値 r0 が 252〜255 の範囲であった場合
...
8088662 01 B0 ADD SP, #$0004
8088664 70 BC POP {R4-R6}
8088666 01 BC POP {R0}
8088668 00 47 BX R0
;------------------------------------------
; r0 ← 16-bit 乱数値
;------------------------------------------
8058804 70 B5 PUSH {R4-R6,LR}
8058806 10 4D LDR R5, [PC, #$10]
8058808 63 F0 BLL #$0063
805880A 90 FB BLH #$0390
805880C 0F 4E LDR R6, [PC, #$0F]
805880E 80 19 ADD R0, R0, R6
8058810 04 88 LDRH R4, [R0, #$00] ; R0: 0x0200E080
8058812 00 2C CMP R4, #$00
8058814 00 D1 BNE $08058818
8058816 0E 4C LDR R4, [PC, #$0E] ; R4 ← 0x2a6d
8058818 A0 00 LSL R0, R4, #$02
805881A 00 19 ADD R0, R0, R4
805881C C0 00 LSL R0, R0, #$03
805881E 00 19 ADD R0, R0, R4
8058820 00 04 LSL R0, R0, #$10
8058822 01 0E LSR R1, R0, #$18
8058824 00 02 LSL R0, R0, #$08
8058826 04 0C LSR R4, R0, #$10
8058828 0C 43 ORR R4, R1
805882A 63 F0 BLL #$0063
805882C 7F FB BLH #$037F ;
805882E 80 19 ADD R0, R0, R6
8058830 04 80 STRH R4, [R0, #$00]
8058832 63 F0 BLL #$0063
8058834 7B FB BLH #$037B
8058836 07 49 LDR R1, [PC, #$07]
8058838 40 18 ADD R0, R0, R1
805883A 00 88 LDRH R0, [R0, #$00] ; R0: 0x0200E082
805883C 20 18 ADD R0, R4, R0
805883E 00 04 LSL R0, R0, #$10
8058840 00 0C LSR R0, R0, #$10
8058842 70 BC POP {R4-R6}
8058844 02 BC POP {R1}
8058846 08 47 BX R1
8058848 39 90 06 08 8C 76 00 00
8058850 6D 2A 00 00 8E 76 00 00
;------------------------------------------
; r0 ← 8-bit 乱数値
;------------------------------------------
80599EC 70 B5 PUSH {R4-R6,LR}
80599EE 46 46 MOV R6, R8
80599F0 40 B4 PUSH {R6}
80599F2 0E 4C LDR R4, [PC, #$0E] ; ($080eefb2)
80599F4 0E 4D LDR R5, [PC, #$0E] ; ($08069039)
80599F6 62 F0 BLL #$0062
80599F8 99 FA BLH #$0299
80599FA 0E 4E LDR R6, [PC, #$0E]
80599FC 80 19 ADD R0, R0, R6
80599FE 00 88 LDRH R0, [R0, #$00]
8059A00 00 19 ADD R0, R0, R4
8059A02 00 78 LDRB R0, [R0, #$00]
8059A04 80 46 MOV R8, R0 ; R8 ← (8-bit 乱数値)
8059A06 62 F0 BLL #$0062
8059A08 91 FA BLH #$0291
8059A0A 04 1C ADD R4, R0, #$00
8059A0C 62 F0 BLL #$0062
8059A0E 8E FA BLH #$028E
8059A10 80 19 ADD R0, R0, R6
8059A12 00 88 LDRH R0, [R0, #$00]
8059A14 01 30 ADD R0, #$01
8059A16 FF 21 MOV R1, #$FF
8059A18 08 40 AND R0, R1
8059A1A A4 19 ADD R4, R4, R6
8059A1C 20 80 STRH R0, [R4, #$00]
8059A1E 40 46 MOV R0, R8
8059A20 08 BC POP {R3}
8059A22 98 46 MOV R8, R3
8059A24 70 BC POP {R4-R6}
8059A26 02 BC POP {R1}
8059A28 08 47 BX R1
8059A2A 00 00
8059A2C B2 EF 0E 08
8059A30 39 90 06 08
8059A34 D6 08 00 00
;------------------------------------------
; 8-bit 乱数値の index
;------------------------------------------
8069038 01 48 LDR R0, [PC, #$01] ; (0x02000410)
806903A 00 68 LDR R0, [R0, #$00]
806903C 70 47 BX LR
8069040 10 04 00 02
;------------------------------------------
; フレーム経過による乱数の更新(フィールド上)
;------------------------------------------
...
80517F4 08 88 LDRH R0, [R1, #$00] ; (0x0200E082)
80517F6 01 30 ADD R0, #$01
80517F8 08 80 STRH R0, [R1, #$00]
...
;------------------------------------------
; フレーム経過による乱数の更新(戦闘中)
;------------------------------------------
...
80B23E8 01 88 LDRH R1, [R0, #$00] ; (0x0200E080)
80B23EA 01 31 ADD R1, #$01
80B23EC 01 80 STRH R1, [R0, #$00]
...
|