レナスにおけるステータス異常の管理方法ですが、少々複雑な手法を採用していたので調べるのに手こずってしまいました。まず、移動中はRAMの7E160E(キャラごとに+26h)で状態変化を管理しており、戦闘中になるとここを使用せず今度は7E1A8D(キャラごとに+0Eh)で状態変化を管理(戦闘に遷移する際に7E160Eの内容をコピー)します。特に状態異常がない場合は00になっており、キャラクターの現在HPが0になると気絶状態化処理を行いここに01を書き込むのですが、ではこの箇所に00を書き込めば気絶状態から復帰できるのかというと実際にはそうはなりません。混乱や麻痺などの状態異常はこの方法で回復できる(=ダデケスやクリアボトルによる状態回復処理)のですが、仮に気絶状態のキャラの7E1A8Dに00を書き込んだ場合、確かに一瞬だけ気絶から復帰しますがそのまま再び気絶(HPを回復したり現在HPのRAMを書き換えたとしても駄目です)してしまいます。
これはどういう事かというと、「7E1A8Dと一緒にキャラクターが気絶状態になった事を管理するRAM領域がある」という事を示しており、そこを7E1A8Dと同時に書き換えない限り気絶から復帰できないという事です。具体的にはRAMの7E19EDという箇所で気絶したキャラクターの有無を管理しており、ここをキャラクターが戦線復帰する際に任意の数値に変更する必要があるのです。この部分には戦闘開始時には0Fが入力されており、万が一キャラクターがエネミーに倒されて気絶=戦線離脱した場合は隊列の1人目…01、2人目…02、3人目…04、4人目…08をマイナスして計算しています。そして全員が気絶すると00になり、全滅処理が行われゲームオーバーになるという仕組みになっています。つまり気絶状態になったキャラを復帰させるには、「7E1A8Dに00を書き込む」と同時に「7E19EDに復帰キャラの隊列位置のコードをプラスする」という処理が必要というわけです。意外と面倒な処理を行っていますね。ちなみにHPが0の状態で双方のフラグ処理だけを行う(というかHP回復よりも先にフラグ処理を行う)と、その時点で即座に気絶判定が行われてその場でまた気絶してしまいますので、先にHPの回復処理を行ってからフラグ処理を実行するという変な一手間が必要です。なお、戦闘が終了すると7E1A8Dの内容は麻痺の場合のみが7E160Eにコピーされ、7E19EDの内容はリセットされます。
さて、こうなると処理的にはダデスやダデケス、クリアボトルによる気絶回復よりもHP回復アイテムで処理する方がはるかに楽なように思えます。単純な方法としては「HP回復アイテム使用時に現在HPをチェック→現在HPが0であればHPを回復しつつ7E1A8Dに00を書き込み」、ついでに「回復したキャラの隊列順位に該当する数値を7E19EDにプラスして戦線離脱処理を解除する」という処理を行えばいいというものが実現性が高そうです。例によってRAMを拡張して新たな処理を組み込む事になりそうですが、それほど時間はかからないのではないでしょうか。
コメント
コメントを投稿