裏CHUNSOFT > ROMイメージ改造・解析 > モンスターハウスの出現率

モンスターハウスの出現率

フロア生成時に実行されるルーチンです。 モンスターハウスの巻物を読んだ場合、内部では予約フラグを立ててこのルーチンを実行することでモンスターハウスを発生させています。

03991D  08              PHP             ; 
03991E  E2 30           SEP #$30        ; 
039920  22 58 2B C6     JSL $062B58     ; $00 = 00(予約なし),01(予約あり)
039924  A5 00           LDA $00         ; "A" = $00
039926  F0 2D           BEQ #$2D        ; 予約なしのとき039955へ
039928  22 68 43 C2     JSL $024368     ; $00 = 00(通常),01(泥棒状態)
03992C  A5 00           LDA $00         ; "A" = $00
03992E  F0 0A           BEQ #$0A        ; 泥棒状態でないとき03993Aへ
039930  A2 03           LDX #$03        ; "X" = 03
039932  A9 06           LDA #$06        ; "A" = 06(番犬隊)
039934  8F 76 C1 7E     STA $7EC176     ; $7EC176 = "A" (モンスターハウスの種類)
039938  80 17           BRA #$17        ; 039951へ
03993A  A2 01           LDX #$01        ; "X" = 01
03993C  22 E6 27 C6     JSL $0627E6     ; $00 = 01(こばみ谷),02(食神のほこら),03(掛軸裏の洞窟),04(フェイの最終問題)
039940  A5 00           LDA $00         ; "A" = $00
039942  C9 01           CMP #$01        ; 
039944  F0 0B           BEQ #$0B        ; "A" = 01(こばみ谷) のとき039951へ
039946  22 5F F6 C3     JSL $03F65F     ; $00 = (乱数)
03994A  A5 00           LDA $00         ; "A" = $00
03994C  89 01           BIT #$01        ; 
03994E  F0 01           BEQ #$01        ; 乱数が偶数のとき039951へ
039950  E8              INX             ; "X" ++
039951  86 00           STX $00         ; $00 = "X"
039953  28              PLP             ; 
039954  60              RTS             ; 元のルーチンへ
039955  A2 00           LDX #$00        ; "X" = 00
039957  AF 79 C1 7E     LDA $7EC179     ; "A" = $7EC179(地形のタイプ)
03995B  C9 04           CMP #$04        ; 
03995D  F0 24           BEQ #$24        ; 4分割のとき039983へ
03995F  C9 05           CMP #$05        ; 
039961  F0 20           BEQ #$20        ; 2分割のとき039983へ
039963  C9 07           CMP #$07        ; 
039965  F0 1C           BEQ #$1C        ; 大部屋のとき039983へ
039967  22 C8 27 C6     JSL $0627C8     ; $00 = 00(食神のほこら),FF(それ以外)
03996B  A5 00           LDA $00         ; "A" = $00
03996D  10 2A           BPL #$2A        ; 食神のほこらのとき039999へ
03996F  22 71 27 C6     JSL $062771     ; $00 = (フロア)
039973  A5 00           LDA $00         ; "A" = $00
039975  C9 04           CMP #$04        ; 
039977  90 20           BCC #$20        ; 3F以下のとき039999へ
039979  22 5F F6 C3     JSL $03F65F     ; $00 = (乱数)
03997D  A5 00           LDA $00         ; "A" = $00
03997F  89 0F           BIT #$0F        ; 
039981  D0 16           BNE #$16        ; 乱数の下位1バイトが00でないとき039999へ
039983  E8              INX             ; "X" ++
039984  22 E6 27 C6     JSL $0627E6     ; $00 = 01(こばみ谷),02(食神のほこら),03(掛軸裏の洞窟),04(フェイの最終問題)
039988  A5 00           LDA $00         ; "A" = $00
03998A  C9 01           CMP #$01        ; 
03998C  F0 0B           BEQ #$0B        ; こばみ谷のとき039999へ
03998E  22 5F F6 C3     JSL $03F65F     ; $00 = (乱数)
039992  A5 00           LDA $00         ; "A" = $00
039994  C9 AA           CMP #$AA        ; 
039996  90 01           BCC #$01        ; (乱数) = 00〜A9 のとき039999へ
039998  E8              INX             ; "X" ++
039999  86 00           STX $00         ; $00 = "X"
03999B  28              PLP             ; 
03999C  60              RTS             ; 元のルーチンへ

$00は最終的に、モンスターハウスがないとき00h、通常ハウスのとき01h、特殊ハウスのとき02h、番犬隊のとき03hになります。 必ずモンスターハウスがある地形以外での、モンスターハウスの出現率は1/16であることがお分かり頂けるかと思います。 また、特殊ハウスになる確率は、人工的に発生させたモンスターハウスの場合は1/2、天然のモンスターハウスの場合は約1/3になることも分かります。

後は、モンスターハウスの巻物を読んだ場合はその部屋をモンスターハウスにします。 予約または天然の場合は最も部屋番号の大きい部屋から順に調べていき、初めて以下のいずれにも該当しない部屋をモンスターハウスにします。 全ての部屋がいずれかに該当した場合、仮に予約をしていたとしてもモンスターハウスは出現しません。

モンスターハウスの予約をしていると、必ずモンスターハウスのある地形が出やすくなる、ということはありません。 そうでない地形が出た場合でも、普通の部屋があれば必ずモンスターハウスが出現するようになる、というだけです。

因みに、特殊ハウスになる場合は全ての種類が等確率、1つのモンスターハウスに配置されるモンスターは10〜15体です。

2009年3月5日更新

裏CHUNSOFT > ROMイメージ改造・解析 > モンスターハウスの出現率