DQ3戦闘部分解説23

解説が抜けていた部分があるのでそこを補足。

  • SR: $02B054 行動対象者を戦闘から離脱させる処理メイン
02B054PHPPush P Flag
02B055REP #$30m=off(A/M:16b), x=off(X/Y:16b)
02B057PHAPush A
02B058PHXPush X
02B059PHYPush Y
02B05APHBPush DB
02B05BPEA $7E7EPush $7E7E
02B05EPLBPull DB
02B05FPLBPull DB
02B060LDX $2428X=$7E2428
02B063JSL $02CB2BSR: $02CB2B 引数:1#$2050 引数:2#$0002存在フラグチェック?
02B06BBEQ #$FEif(z==on) goto $02B06B生死判定フラグが正しくセットされていない場合はフリーズ?
02B06DJSR $B08BSR: $02B08B
02B070JSR $B0D0SR: $02B0D0行動対象者が戦闘から離脱した場合にターン中行動順から外す
02B073JSR $B0E8SR: $02B0E8離脱者を各グループ生存者数から引く
02B076JSR $B0FCSR: $02B0FC
02B079JSL $02BAE8SR: $02BAE8倒したモンスターがあやしいかげの場合の処理
02B07DJSR $B1B4SR: $02B1B4獲得経験値・ゴールド加算
02B080JSR $B271SR: $02B271
02B083PLBPull DB
02B084REP #$30m=off(A/M:16b), x=off(X/Y:16b)
02B086PLYPull Y
02B087PLXPull X
02B088PLAPull A
02B089PLPPull P Flag
02B08ARTLreturn

  • SR: $02BAE8 倒したモンスターがあやしいかげの場合の処理
02BAE8PHPPush P Flag
02BAE9REP #$30m=off(A/M:16b), x=off(X/Y:16b)
02BAEBPHAPush A
02BAECPHXPush X
02BAEDPHYPush Y
02BAEEPHBPush DB
02BAEFPEA $7E7EPush $7E7E
02BAF2PLBPull DB
02BAF3PLBPull DB
02BAF4LDX $2428X=$7E2428
02BAF7JSL $02CA5BSR: $02CA5B 引数:1#$2049モンスターID取得
02BAFDPHAPush A
02BAFEJSL $02CAD9SR: $02CAD9 引数:1#$2050 引数:2#$0001敵味方判定?
02BB06PHAPush A
02BB07BNE #$07if(z==off) goto $02BB10
02BB09LDA $03,SA=Stack($03)
02BB0BCMP #$0019A==#$0019?モンスターIDが怪しい影なら正体のモンスターに差し替え
02BB0EBEQ #$12if(z==on) goto $02BB22
02BB10LDA $01,SA=Stack($01)
02BB12JSL $02CB70SR: $02CB70 引数:1#$2051 引数:2#$0001
02BB1ALDA $03,SA=Stack($03)
02BB1CJSL $02CA98SR: $02CA98 引数:1#$204B正体のモンスターID取得
02BB22PLAPull A
02BB23PLAPull A
02BB24PLBPull DB
02BB25REP #$30m=off(A/M:16b), x=off(X/Y:16b)
02BB27PLYPull Y
02BB28PLXPull X
02BB29PLAPull A
02BB2APLPPull P Flag
02BB2BRTLreturn

  • SR: $02B1B4 獲得経験値・ゴールド加算
02B1B4LDX $2428X=$7E2428
02B1B7JSL $02CAD9SR: $02CAD9 引数:1#$2052 引数:2#$0010?
02B1BFBNE #$1Aif(z==off) goto $02B1DB
02B1C1JSL $02CAD9SR: $02CAD9 引数:1#$203C 引数:2#$00FFグループID取得
02B1C9CMP #$0004A>=#$0004?離脱者がPCor格闘場で賭けたモンスター
02B1CCBCS #$0Dif(c==on) goto $02B1DB
02B1CEJSL $02CAD9SR: $02CAD9 引数:1#$2051 引数:2#$0001?
02B1D6BNE #$03if(z==off) goto $02B1DB
02B1D8JSR $B1DCSR: $02B1DC獲得経験値・ゴールド加算
02B1DBRTSreturn

  • SR: $02B1DC 獲得経験値・ゴールド加算
02B1DCLDX $2428X=$7E2428
02B1DFLDA #$0001A=#$0001
02B1E2JSL $02CB70SR: $02CB70 引数:1#$2052 引数:2#$0010?
02B1EAJSL $02CA5BSR: $02CA5B 引数:1#$204BモンスターID取得
02B1F0TAXX=A
02B1F1LDY $23EEY=$7E23EE
02B1F4JSL $02CC2CSR: $02CC2C 引数:1#$007C 引数:2#$0008離脱時の戦闘行動がアイテム獲得可か
02B1FCBEQ #$0Eif(z==on) goto $02B20C
02B1FETXAA=X
02B1FFPEA $23A9Push $23A9
02B202PEA $00FFPush $00FF
02B205PEA $7E00Push $7E00
02B208JSL $0902E9SR: $0902E9モンスターIDをセット?
02B20CJSL $02CC2CSR: $02CC2C 引数:1#$007B 引数:2#$0001離脱時の戦闘行動が経験値獲得可か
02B214BEQ #$27if(z==on) goto $02B23D
02B216JSL $02CC69SR: $02CC69 引数:1#$0003経験値情報取得
02B21CCLCc=off
02B21DADC $23DCA+=$7E23DC
02B220STA $23DC$7E23DC=A
02B223LDA $23DEA=$7E23DE
02B226ADC #$0000A+=#$0000
02B229STA $23DE$7E23DE=A
02B22CCMP #$0100A>=#$0100?
02B22FBCC #$0Cif(c==off) goto $02B23D
02B231LDA #$FFFFA=#$FFFFオーバーフロー時に#$FFFFFFでクリップする
02B234STA $23DC$7E23DC=A
02B237LDA #$00FFA=#$00FF
02B23ASTA $23DE$7E23DE=A
02B23DJSL $02CC2CSR: $02CC2C 引数:1#$007C 引数:2#$0004離脱時の戦闘行動がゴールド獲得可か
02B245BEQ #$29if(z==on) goto $02B270
02B247JSL $02CC8BSR: $02CC8B 引数:1#$0005 引数:2#$03FFゴールド情報取得
02B24FCLCc=off
02B250ADC $23E0A+=$7E23E0
02B253STA $23E0$7E23E0=A
02B256LDA $23E2A=$7E23E2
02B259ADC #$0000A+=#$0000
02B25CSTA $23E2$7E23E2=A
02B25FCMP #$0100A>=#$0100?
02B262BCC #$0Cif(c==off) goto $02B270
02B264LDA #$FFFFA=#$FFFFオーバーフロー時に#$FFFFFFでクリップする
02B267STA $23E0$7E23E0=A
02B26ALDA #$00FFA=#$00FF
02B26DSTA $23E2$7E23E2=A
02B270RTSreturn

だいたいこれで、1キャラクター分の戦闘行動は終わりです。1ターン分の行動が終わると、ターン終了時の処理を行います。DQ3ではモンスターの自動回復を行っています。

  • SR: $02A41F ターン終了時処理(全体)
02A41FPHPPush P Flag
02A420PHBPush DB
02A421REP #$30m=off(A/M:16b), x=off(X/Y:16b)
02A423PEA $7E7EPush $7E7E
02A426PLBPull DB
02A427PLBPull DB
02A428LDA #$0000A=#$0000
02A42BPEA $23ABPush $23AB
02A42EPEA $0030Push $0030
02A431PEA $7E00Push $7E00
02A434JSL $0902E9SR: $0902E9RAM上情報変更
02A438LDA #$0001A=#$0001
02A43BPEA $23AEPush $23AE
02A43EPEA $0020Push $0020
02A441PEA $7E00Push $7E00
02A444JSL $0902E9SR: $0902E9RAM上情報変更
02A448JSR $A44ESR: $02A44Eターン終了時処理(各キャラクターごと)
02A44BPLBPull DB
02A44CPLPPull P Flag
02A44DRTLreturn

  • SR: $02A44E ターン終了時処理(各キャラクターごと)
02A44EJSL $028375SR: $0283751キャラクター行動開始時変数初期化処理
02A452LDY #$0000Y=#$0000
02A455LDA $243E,YA=$7E243E+Y
02A458AND #$00FFA&=#$00FF
02A45BCMP #$0018A>=#$0018?
02A45EBCS #$18if(c==on) goto $02A478
02A460STA $2428$7E2428=A
02A463TAXX=A
02A464JSL $02CAD9SR: $02CAD9 引数:1#$2050 引数:2#$0002生死判定?
02A46CBEQ #$0Aif(z==on) goto $02A478
02A46EJSL $02BE8ASR: $02BE8A 引数:1#$1C生死判定?
02A473BCS #$03if(c==on) goto $02A478
02A475JSR $A47FSR: $02A47F自然回復処理
02A478INYY++
02A479CPY #$0018Y>=#$0018 ?
02A47CBCC #$D7if(c==off) goto $02A455
02A47ERTSreturn

また、1キャラクター分の戦闘行動が終わると、その場で戦闘終了判定を行います(そうしないとどちらかが全滅しているのに別キャラクターの戦闘行動を実行してしまう)。

  • SR: $02B32F 戦闘終了時フラグセット?

詳細不明のため省略

これでようやく1ターン分の処理が終わったので戦闘メインループに処理が戻ってきます。戦闘終了条件を満たしていれば終了処理を行います。

  • SR: $02A48C ターン数オーバーによる戦闘終了条件チェック
02A48CCLCc=off
02A48DPHPPush P Flag
02A48EPHBPush DB
02A48FREP #$30m=off(A/M:16b), x=off(X/Y:16b)
02A491PEA $7E7EPush $7E7E
02A494PLBPull DB
02A495PLBPull DB
02A496INC $23D0$7E23D0++
02A499PEA $2011Push $2011
02A49CPEA $0040Push $0040
02A49FPEA $7E00Push $7E00
02A4A2JSL $09029ESR: $09029E格闘場戦闘か?
02A4A6BNE #$0Dif(z==off) goto $02A4B5
02A4A8LDA $23D0A=$7E23D0
02A4ABCMP #$FFFFA>=#$FFFF?ターン数が65535以上の場合
02A4AEBCC #$33if(c==off) goto $02A4E3
02A4B0LDA #$0004A=#$0004終了フラグ4をセット
02A4B3BRA #$1Agoto $02A4CF
02A4B5LDA $23D0A=$7E23D0
02A4B8CMP #$000AA>=#$000A?格闘場の場合は10ターンが限界
02A4BBBCC #$26if(c==off) goto $02A4E3
02A4BDPEA $23ABPush $23AB
02A4C0PEA $000FPush $000F
02A4C3PEA $7E00Push $7E00
02A4C6JSL $09029ESR: $09029E10ターン終了時に決着が付いているか
02A4CABNE #$10if(z==off) goto $02A4DC
02A4CCLDA #$0007A=#$0007終了フラグ7をセット
02A4CFPEA $23ABPush $23AB
02A4D2PEA $000FPush $000F
02A4D5PEA $7E00Push $7E00
02A4D8JSL $0902E9SR: $0902E9
02A4DCLDA $02,SA=Stack($02)
02A4DEORA #$0001Aor=#$0001
02A4E1STA $02,SStack($02)=A
02A4E3PLBPull DB
02A4E4PLPPull P Flag
02A4E5RTLreturn

  • SR: $02A4E6 戦闘終了判定+終了処理(戦闘続行c=on)
02A4E6CLCc=off
02A4E7PHPPush P Flag
02A4E8PHBPush DB
02A4E9REP #$30m=off(A/M:16b), x=off(X/Y:16b)
02A4EBPEA $7E7EPush $7E7E
02A4EEPLBPull DB
02A4EFPLBPull DB
02A4F0LDA #$0000A=#$0000
02A4F3PEA $23AFPush $23AF
02A4F6PEA $0004Push $0004
02A4F9PEA $7E00Push $7E00
02A4FCJSL $0902E9SR: $0902E9
02A500JSR $A521SR: $02A521
02A503PEA $23ABPush $23AB
02A506PEA $000FPush $000F
02A509PEA $7E00Push $7E00
02A50CJSL $09029ESR: $09029E
02A510ASLA<<1
02A511TAXX=A
02A512JSR $A567SR: $($02A567+X)戦闘終了フラグに応じた戦後処理
02A515BCC #$07if(c==off) goto $02A51E
02A517LDA $02,SA=Stack($02)
02A519ORA #$0001Aor=#$0001
02A51CSTA $02,SStack($02)=A
02A51EPLBPull DB
02A51FPLPPull P Flag
02A520RTLreturn

  • SR: $02A6AF 戦闘終了時処理SR_SR_0001(勝利時)
02A6AFJSL $01E32ESR: $01E32E 引数:1#$0029BGM再生
02A6B5LDX #$0000X=#$0000
02A6B8PEA $23ABPush $23AB
02A6BBPEA $00C0Push $00C0
02A6BEPEA $7E00Push $7E00
02A6C1JSL $09029ESR: $09029E
02A6C5BEQ #$0Cif(z==on) goto $02A6D3
02A6C7INXX++
02A6C8INXX++
02A6C9DECA–
02A6CABEQ #$07if(z==on) goto $02A6D3
02A6CCINXX++
02A6CDINXX++
02A6CEDECA–
02A6CFBEQ #$02if(z==on) goto $02A6D3
02A6D1INXX++
02A6D2INXX++
02A6D3LDA #$8000A=#$8000
02A6D6STA $23E4$7E23E4=A
02A6D9LDA $02A707,XA=$02A707+X
02A6DDJSL $01A87ASR: $01A87A
02A6E1JSL $01E59CSR: $01E59C 引数:1#$0029BGM停止
02A6E7BCS #$06if(c==on) goto $02A6EF
02A6E9JSL $0028B4SR: $0028B4
02A6EDBRA #$F2goto $02A6E1
02A6EFJSL $01E264SR: $01E264移動中BGM再生
02A6F3JSR $A746SR: $02A746一人当たりの獲得経験値計算処理
02A6F6JSR $A767SR: $02A767経験値獲得メッセージ表示
02A6F9JSR $AA44SR: $02AA44戦闘終了時ゴールド取得処理
02A6FCJSR $A7B3SR: $02A7B3経験値加算+レベルアップ処理
02A6FFJSR $A907SR: $02A907戦闘終了時アイテム取得処理
02A702JSR $AAF8SR: $02AAF8プロンプト表示2?
02A705CLCc=off
02A706RTSreturn

長くなったので一旦切ります。

(12/23追記)

  • SR: $02A907 戦闘終了時アイテム取得処理
02A907JSR $A910SR: $02A910アイテム取得処理(盗賊)
02A90ABCS #$03if(c==on) goto $02A90F
02A90CJSR $A9AESR: $02A9AEアイテム取得処理(宝箱)
02A90FRTSreturn

  • SR: $02A907 アイテム取得処理(盗賊)
02A910STZ $00$000000=#$00
02A912STZ $02$000002=#$00
02A914LDX #$0006X=#$0006
02A917LDA $2008,XA=$7E2008+Xモンスター出現数をセット?
02A91ACLCc=off
02A91BBEQ #$01if(z==on) goto $02A91E
02A91DSECc=on
02A91EROL $00($000000+C)<<1
02A920DEXX–
02A921DEXX–
02A922BPL #$F3if(n==off) goto $02A917
02A924LDX #$0000X=#$0000
02A927JSL $001407SR: $001407乱数発生 $0000-FFFF dp,Xの1になっているビットをランダムで0にする
02A92BBCC #$5Aif(c==off) goto $02A987
02A92DASLA<<1
02A92ETAXX=A
02A92FLDA $2000,XA=$7E2000+X盗賊が盗む対象モンスター決定
02A932STA $BE71$7EBE71=A
02A935JSR $AA15SR: $02AA15ドロップアイテム・ドロップ率取得
02A938STA $00$000000=A
02A93AJSL $04297CSR: $04297C 引数:1#$01 引数:2#$02パーティ人数取得
02A940LDY #$0000Y=#$0000
02A943JSL $02AF66SR: $02AF66対象者の戦闘中キャラクタインデックスを取得
02A947STX $23E4$7E23E4=X
02A94ASTX $2428$7E2428=X
02A94DJSL $02BE8ASR: $02BE8A 引数:1#$1C生死判定?
02A952BCS #$2Eif(c==on) goto $02A982
02A954JSL $02BE8ASR: $02BE8A 引数:1#$16麻痺判定
02A959BCS #$27if(c==on) goto $02A982
02A95BJSL $02BE8ASR: $02BE8A 引数:1#$28混乱チェック
02A960BCS #$20if(c==on) goto $02A982
02A962JSL $02BE8ASR: $02BE8A 引数:1#$24職業ID取得
02A967CMP #$0006A==#$0006?盗賊か
02A96ABNE #$16if(z==off) goto $02A982
02A96CJSL $02C240SR: $02C240 引数:1#$0Aレベル取得
02A971LSRA>>1
02A972LSRA>>1
02A973LSRA>>1
02A974LSRA>>1
02A975INCA++
02A976PHAPush Aレベル/16(+1)が閾値
02A977LDA $00A=$000000ドロップ率分母をAにセット
02A979JSL $00135FSR: $00135F乱数発生 00-A A(2B)
02A97DCMP $01,SA==or>=Stack($01)?
02A97FPLAPull A
02A980BCC #$07if(c==off) goto $02A989盗み成功
02A982INYY++
02A983CPY $02Y==$000002?パーティ人数分ループする
02A985BNE #$BCif(z==off) goto $02A943
02A987CLCc=off
02A988RTSreturn
02A989LDA $242CA=$7E242C
02A98CCMP #$0000A==#$0000?ドロップアイテムIDが#$00(未設定)なら失敗扱い
02A98FBEQ #$F6if(z==on) goto $02A987
02A991STA $BE79$7EBE79=A
02A994JSL $044739SR: $044739 引数:1#$FF 引数:2#$01 引数:3#$FD 引数:4#$40PCにアイテムを持たせる
02A99CBCC #$05if(c==off) goto $02A9A3c=onならいっぱいで持てない
02A99EJSL $045399SR: $045399 引数:1#$FFアイテムを袋に入れる
02A9A3JSR $AAF3SR: $02AAF3プロンプト表示
02A9A6JSL $01A867SR: $01A867 引数:1#$0038戦闘メッセージ表示:「…をぬすんでいた!」
02A9ACSECc=on
02A9ADRTSreturn

  • SR: $02AA15 ドロップアイテム・ドロップ率取得
02AA15PHXPush X
02AA16PHYPush Y
02AA17TAYY=AAにはモンスターIDがセットされていることが前提
02AA18JSL $02CC92SR: $02CC92 引数:1#$000C 引数:2#$00FFドロップアイテムID取得
02AA20STA $242C$7E242C=A
02AA23JSL $02CC92SR: $02CC92 引数:1#$001D 引数:2#$0038ドロップ確率インデックス取得
02AA2BASLA<<1
02AA2CTAXX=A
02AA2DLDA $02AA34,XA=$02AA34+X実質ドロップ確率分母取得
02AA31PLYPull Y
02AA32PLXPull X
02AA33RTSreturn

これを見るとわかりますが、盗賊の盗みについては以下のような実装になっているようです。

  • 死亡、麻痺、混乱していない盗賊がパーティ中にいる場合、レベル/16+1を閾値(=分子、最大7)にしてドロップ判定(分母はモンスターのドロップ率に準拠)して
  • 戦闘に参加していたモンスター*1からランダムで*2盗む
  • 判定はORなので、盗賊がいればいるほど有利
  • 一度に複数個入手することはできない
  • 盗みが成功した場合は宝箱ドロップは発生しない

下の通常ドロップと比較するとわかりますが、盗賊の場合、ドロップ率の分子が1ではなく、レベルによって最大7になるので、かなり有利になります。良く話題に上がるドーピングのための種集めには複数人のレベルの高い盗賊は必須と言えることがわかります。例えば、いのちのきのみのドロップ率が高いことで知られているコングですが、設定されているドロップ率は1/64です。Lv99の盗賊が4人いた場合にいのちのきのみを得られる確率は7/64 + 7/64 + 7/64 + 7/64 + 1/64 1- (57/64(盗賊1人目が盗めない確率) * 57/64(盗賊2人目が盗めない確率) * 57/64(盗賊3人目が盗めない確率) * 57/64(盗賊4人目が盗めない確率) * 63/64(ドロップしない確率))で約38%となり、ほぼ3回に1回は入手できる計算になります(他のモンスターがいなかった場合)。スカイドラゴンも同じくドロップ率は1/64ですが、往々にして他のモンスターと組になって出てくることが多いので、スカイドラゴンが盗み先のモンスターとして選択される確率が低くなります(特に出現数の多いしびれあげやスライムつむりなどと一緒に出てきた場合は絶望的です)。コングはコングのみ3体で出てくることが多いのでランダム選択の余地がなくコングしか盗み先として選ばれないわけで、やはりコングのほうが効率がいい、ということになります。他の種集めについても同様で、モンスターそのもののドロップ確率も重要ですが、他のモンスターと組になって出現しない、出現数そのものが多い、ということにも注意を払うとより効率的に種集めができるでしょう。逆に、DQ3ではモンスターしかドロップしないレアアイテムの設定というのが難しい、とも言えます。エンカウント設定にもよりますが、ドロップ率が29倍に成り得るので、1/1024の確率に設定しても理論上は1/35まで確率が上がってしまいます。DQ3では1/1024のドロップ率を持つモンスターは実質存在しないので(設定はされているがドロップアイテムが空)、$02AA34-に配置されている分母の値を#$03FF(1023)から#0FFF(4095)にする、などの対応をする必要があるかもしれません。お供の小さいモンスターを沢山必ず一緒に出現させる、というふうにすれば盗まれる確率も減るでしょう。このへんはアイテムの重要性に応じていろいろ調整する余地がありそうです。

  • SR: $02A9AE アイテム取得処理(宝箱ドロップ)
02A9AEPEA $23A9Push $23A9
02A9B1PEA $00FFPush $00FF
02A9B4PEA $7E00Push $7E00
02A9B7JSL $09029ESR: $09029E最後に倒したモンスターID取得
02A9BBBEQ #$57if(z==on) goto $02AA14
02A9BDSTA $BE71$7EBE71=A
02A9C0JSR $AA15SR: $02AA15ドロップアイテム・ドロップ率取得
02A9C3JSL $00135FSR: $00135F乱数発生 00-A A(2B)
02A9C7BNE #$4Bif(z==off) goto $02AA14
02A9C9LDA $242CA=$7E242C
02A9CCCMP #$0000A==#$0000?ドロップアイテムIDが#$00(未設定)なら失敗扱い
02A9CFBEQ #$43if(z==on) goto $02AA14
02A9D1STA $BE79$7EBE79=A
02A9D4JSR $AAF3SR: $02AAF3プロンプト表示
02A9D7JSL $01A867SR: $01A867 引数:1#$0033戦闘メッセージ:「…たからばこを おとしていった」
02A9DDLDA #$0042A=#$0042行動主体セット
02A9E0STA $23E4$7E23E4=A
02A9E3JSL $01A867SR: $01A867 引数:1#$0034戦闘メッセージ:「…たからばこを あけた」
02A9E9JSL $01E32ESR: $01E32E 引数:1#$0040SE再生
02A9EFJSL $01A867SR: $01A867 引数:1#$0035戦闘メッセージ:「なんと〇〇をみつけた!」
02A9F5LDA $242CA=$7E242C
02A9F8JSL $044824SR: $044824 引数:1#$FF 引数:2#$FFアイテムを入手する
02A9FESTA $BE77$7EBE77=A
02AA01LDX #$0037X=#$0037戦闘メッセージ:「どうぐぶくろに いれた」
02AA04CMP #$0020A==#$0020?入手先がふくろか
02AA07BEQ #$03if(z==on) goto $02AA0C
02AA09LDX #$0036X=#$0036戦闘メッセージ:「てにいれた いれた」
02AA0CJSR $AAF3SR: $02AAF3プロンプト表示?
02AA0FTXAA=X
02AA10JSL $01A87ASR: $01A87A戦闘メッセージ表示
02AA14RTSreturn

宝箱ドロップもほとんど盗むと似たような実装になっています。こちらは特に解説する必要はないですね。

というわけで長々とやってきましたが、一通り戦闘部分の処理については説明が終わりました。取りこぼしている部分については気づき次第今までのエントリに追記もしくはその24以降という形で随時投下していくつもりです。

*1:モンスターが逃げていても無関係

*2:出現数の多いほうが選ばれやすい

コメント

  1. ks より:

    はじめまして、いつも参考にさせて貰っています。

    盗賊の職業を廃止して、装飾品「盗賊の証」の装備の有無で盗み判定を行うという改造をしているのですが、$7E242CにドロップアイテムID
    と装備アイテムIDを入れなくてはいけなくなり、作業が滞てしまっています。ない知識を振り絞って、$7E23EEにドロップアイテムIDを一時保持させてみたのですが、うまくいきませんでした。何かアドバイスをいただけないでしょうか?

    よろしくお願いします。

    管理者より返信:

    どういう実装をしてるのかわかりませんが、すでに使ってる領域は使わないで別領域を使えばいいんじゃないんですかね?特に$7E23EEは戦闘行動IDを保持する重要な領域のはずなので下手に別用途で使うとまともに動きません。久しぶりに質問回答として後ほど別途エントリとしてを投下します。発動のタイミングは戦闘終了時でいいんでしょうか?

  2. ks より:

    迅速な回答感謝いたします。
    発動タイミングは戦闘終了時でお願いします。
    実装内容もメールで送りましたので、お手数でなければご確認をお願いします。

  3. タカオ より:

     例えばバスタードソードでイオナズンを打てるようにしてみましたが、AIが一向に実行してくれません。代わりに雷神の剣で打てるようにしても、AIの時は対象が元々のベギラゴンの性質に準じてるのか、1グループにしか効力が発生しません。対象選択ルーチンIDが若しや関係してるかと思い色々試してみてもうまくいきませんでした。
     また、例えば水着係のアイテムの戦闘行動の内部データがあるにも関わらず、戦闘中道具コマンドで使用しても「~を使った!しかし何も起こりませんでした!」としか表示されず、用意されていた戦闘メッセージすら表示されずじまいで、どうやら最初からアイテム情報欄で指定された戦闘行動ID自体無視されてるようですが、何かそれを普通に実行できる方法がありますでしょうか。
     SRが書けない前提でいい案がありましたら是非ご教示頂きたく存じます。
     よろしくお願いします。m(._.)m

    管理者より返信:

    AI関連の設定は非公開です。あしからず。

    水着系の戦闘行動は使用者の性別が女だと何も起きないように特殊対処がされています。男が使うとメッセージが表示されます。オリジナルからの動作です。特に変えていません。

タイトルとURLをコピーしました