今年は2008年なので閏年である。
デュエルCGIの配布ソースは、年末年始や閏年には対応していないので、対人デュエル終了から部屋の開放までの数分間がこの境界線を越える場合、部屋が開放されなくなる。
どちらも対応したつもりだったが、今日対人対戦場を見てみたら1つ開放されなくなってる部屋があった。
な、なんと閏年の判定が間違っていた。
if ($nen % 4 == 0 && $nen % 100 != 0 && $nen % 400 == 0) {$nen=366;} else {$nen=365;}
正しくはこう
if ($nen % 4 == 0 && $nen % 100 != 0 || $nen % 400 == 0) {$nen=366;} else {$nen=365;}
いや〜、お恥ずかしい限りです。
2008年03月01日
2008年02月13日
万魔殿−悪魔の巣窟−
「万魔殿−悪魔の巣窟−」を使ったデーモンデッキって自分では使わないので、ずいぶん昔に作ったこのカードの効果を見直す機会は今までなかった。
カイクウさんのところにバグ情報が来てたので、こちらでも見直してみたところ、同時に複数体の「デーモン」が破壊された場合に複数回数発動しちゃうのも問題だけど、その効果処理でデッキのカードを対象に取ってた。
配布時のリクル効果がそうなってるので、最初の頃は知らずにこういう処理を書いてたんだなと感慨にふけった。
というわけで、手札に加える効果に関しては、発動部のほかに効果処理も作り直すはめになった。
カイクウさんのところにバグ情報が来てたので、こちらでも見直してみたところ、同時に複数体の「デーモン」が破壊された場合に複数回数発動しちゃうのも問題だけど、その効果処理でデッキのカードを対象に取ってた。
配布時のリクル効果がそうなってるので、最初の頃は知らずにこういう処理を書いてたんだなと感慨にふけった。
というわけで、手札に加える効果に関しては、発動部のほかに効果処理も作り直すはめになった。
猛突するCPU処理
対CPU戦で、CPUのターンに「召喚制限−猛突するモンスター」と「おジャマトリオ」を発動した場合、おジャマトークン3体は攻撃を強制されるため、3体とも攻撃してこないといけないんだけど、CPUの場に他のモンスターが存在すると攻撃してくれない。
これは、「召喚制限−猛突するモンスター」を作成した際のテストプレイで分かってたんだけど、どこをどう直すと攻撃してくるのか分からなかったので、不問にしておいた(対人対戦では正常動作のため)んだけど、CPU思考ルーチンを眺めててようやくどうすればいいか分かった。
※CPUの場にモンスター1体存在する場合のテスト
<テストログ>
羽蛾 「 オレのターン!
ヒョヒョヒョ、カードを引くよ」
(スタンバイフェイズ→メインフェイズ1)
遊戯 「 罠カード発動 『おジャマトリオ』!」
遊戯 「 永続罠発動 『召喚制限−猛突するモンスター』!」
特殊召喚されたターンにモンスターは猛突する!
羽蛾の場におジャマトリオが現れた!
遊戯 「 効果発動 『召喚制限−猛突するモンスター』!」
召喚制限を受けたおジャマトークンは猛突する!
召喚制限を受けたおジャマトークンは猛突する!
召喚制限を受けたおジャマトークンは猛突する!
(メインフェイズ1→バトルフェイズ)
---------バトル!---------
羽蛾「おジャマトークンの攻撃!」
おジャマトークン 攻撃力:200 VS 氷帝メビウス 攻撃力:2600
敗北!!
羽蛾に2400の戦闘ダメージ!
-------------------------
遊戯 「 効果発動 『おジャマトリオ』!」
羽蛾に300の効果ダメージ!
---------バトル!---------
羽蛾「おジャマトークンの攻撃!」
おジャマトークン 攻撃力:200 VS 氷帝メビウス 攻撃力:2600
敗北!!
羽蛾に2400の戦闘ダメージ!
-------------------------
遊戯 「 効果発動 『おジャマトリオ』!」
羽蛾に300の効果ダメージ!
---------バトル!---------
羽蛾「おジャマトークンの攻撃!」
おジャマトークン 攻撃力:200 VS 氷帝メビウス 攻撃力:2600
敗北!!
羽蛾に2400の戦闘ダメージ!
-------------------------
遊戯 「 効果発動 『おジャマトリオ』!」
羽蛾に300の効果ダメージ!
羽蛾 「 ヒ〜〜ン、ウソだぁ〜〜」
遊戯 「 とっとと島を出ていきな! 弱昆虫野郎!」
これは、「召喚制限−猛突するモンスター」を作成した際のテストプレイで分かってたんだけど、どこをどう直すと攻撃してくるのか分からなかったので、不問にしておいた(対人対戦では正常動作のため)んだけど、CPU思考ルーチンを眺めててようやくどうすればいいか分かった。
※CPUの場にモンスター1体存在する場合のテスト
<テストログ>
羽蛾 「 オレのターン!
ヒョヒョヒョ、カードを引くよ」
(スタンバイフェイズ→メインフェイズ1)
遊戯 「 罠カード発動 『おジャマトリオ』!」
遊戯 「 永続罠発動 『召喚制限−猛突するモンスター』!」
特殊召喚されたターンにモンスターは猛突する!
羽蛾の場におジャマトリオが現れた!
遊戯 「 効果発動 『召喚制限−猛突するモンスター』!」
召喚制限を受けたおジャマトークンは猛突する!
召喚制限を受けたおジャマトークンは猛突する!
召喚制限を受けたおジャマトークンは猛突する!
(メインフェイズ1→バトルフェイズ)
---------バトル!---------
羽蛾「おジャマトークンの攻撃!」
おジャマトークン 攻撃力:200 VS 氷帝メビウス 攻撃力:2600
敗北!!
羽蛾に2400の戦闘ダメージ!
-------------------------
遊戯 「 効果発動 『おジャマトリオ』!」
羽蛾に300の効果ダメージ!
---------バトル!---------
羽蛾「おジャマトークンの攻撃!」
おジャマトークン 攻撃力:200 VS 氷帝メビウス 攻撃力:2600
敗北!!
羽蛾に2400の戦闘ダメージ!
-------------------------
遊戯 「 効果発動 『おジャマトリオ』!」
羽蛾に300の効果ダメージ!
---------バトル!---------
羽蛾「おジャマトークンの攻撃!」
おジャマトークン 攻撃力:200 VS 氷帝メビウス 攻撃力:2600
敗北!!
羽蛾に2400の戦闘ダメージ!
-------------------------
遊戯 「 効果発動 『おジャマトリオ』!」
羽蛾に300の効果ダメージ!
羽蛾 「 ヒ〜〜ン、ウソだぁ〜〜」
遊戯 「 とっとと島を出ていきな! 弱昆虫野郎!」
2008年01月26日
はたき落とし
はたき落とし 通常罠
相手のドローフェイズ時に発動する事ができる。相手はドローフェイズでドローしたカード1枚をそのまま墓地に捨てる。
ルールHPさんの記載によると、ターンプレイヤーがドローフェイズに1ターンに1度行なえるドローをした時が発動タイミングであり、それ以外には発動できない。
「凡骨の意地」などのように、ドローフェイズに他のカードの効果でドローした場合にも発動できそうなテキストなので、現在の事務局回答は違うのかも知れないが、他に情報もないのでデュエルCGIでも効果によるドローに対しては発動不可としている。
デュエルCGIの配布時から実装されているカードであるが、効果処理には若干の問題点がある。
このカードの効果によって手札を捨てるのは、確実にターンプレイヤーであるので、このカードの発動に手札から速攻魔法をチェーンできる。
このカードの処理は、ドローしたカードのカード名と手札の位置(一番右端)によって捨てさせるカードを判別することでドローしたカードを判別しているのだが、この方法だと、手札の最後(一番右端)に速攻魔法があり、ドローしたカードがその速攻魔法と同じカードだった場合に問題が起こる。
(手札) モンスターA 罠B 通常魔法C 速攻魔法D 速攻魔法E(ドロー)
※速攻魔法DとEは同名カードとする
<例1>
この手札の時に相手が「はたき落とし」を発動。
これにチェーンして速攻魔法Dを発動。
この場合は、ドローしたカードはまだ手札にあるので「はたき落とし」の効果によって捨てられる。
<例2>
この手札の時に相手が「はたき落とし」を発動。
これにチェーンして速攻魔法Eを発動。
この場合は、ドローしたカードが手札になくなるので「はたき落とし」の効果は不発になるのが正しい処理だけど、同じカードが手札の最後(一番右端)に残っているため、デュエルCGIでは「はたき落とし」が成立してしまう(バグ)。
最近出た「強烈なはたき落とし」だと、手札から速攻魔法をチェーンされないので、この問題はおきにくいが起こらないわけではない。(どんな場合か考えてみるのは面白いですよ)
この問題を解決するには、ドローしたカードを完璧に確定できるようにすればいいんだけど、なかなかそれも大変そうなので、とりあえず現状よりもドローしたカードの判別精度を上がるような処理を入れてみました。
これにより、<例2>のパターンには対応したが、チェーンするカードによっては、まだ不具合がでる可能性はあります。
相手のドローフェイズ時に発動する事ができる。相手はドローフェイズでドローしたカード1枚をそのまま墓地に捨てる。
ルールHPさんの記載によると、ターンプレイヤーがドローフェイズに1ターンに1度行なえるドローをした時が発動タイミングであり、それ以外には発動できない。
「凡骨の意地」などのように、ドローフェイズに他のカードの効果でドローした場合にも発動できそうなテキストなので、現在の事務局回答は違うのかも知れないが、他に情報もないのでデュエルCGIでも効果によるドローに対しては発動不可としている。
デュエルCGIの配布時から実装されているカードであるが、効果処理には若干の問題点がある。
このカードの効果によって手札を捨てるのは、確実にターンプレイヤーであるので、このカードの発動に手札から速攻魔法をチェーンできる。
このカードの処理は、ドローしたカードのカード名と手札の位置(一番右端)によって捨てさせるカードを判別することでドローしたカードを判別しているのだが、この方法だと、手札の最後(一番右端)に速攻魔法があり、ドローしたカードがその速攻魔法と同じカードだった場合に問題が起こる。
(手札) モンスターA 罠B 通常魔法C 速攻魔法D 速攻魔法E(ドロー)
※速攻魔法DとEは同名カードとする
<例1>
この手札の時に相手が「はたき落とし」を発動。
これにチェーンして速攻魔法Dを発動。
この場合は、ドローしたカードはまだ手札にあるので「はたき落とし」の効果によって捨てられる。
<例2>
この手札の時に相手が「はたき落とし」を発動。
これにチェーンして速攻魔法Eを発動。
この場合は、ドローしたカードが手札になくなるので「はたき落とし」の効果は不発になるのが正しい処理だけど、同じカードが手札の最後(一番右端)に残っているため、デュエルCGIでは「はたき落とし」が成立してしまう(バグ)。
最近出た「強烈なはたき落とし」だと、手札から速攻魔法をチェーンされないので、この問題はおきにくいが起こらないわけではない。(どんな場合か考えてみるのは面白いですよ)
この問題を解決するには、ドローしたカードを完璧に確定できるようにすればいいんだけど、なかなかそれも大変そうなので、とりあえず現状よりもドローしたカードの判別精度を上がるような処理を入れてみました。
これにより、<例2>のパターンには対応したが、チェーンするカードによっては、まだ不具合がでる可能性はあります。
2007年11月15日
死デッキ適用中の複数枚ドロー
CPU双六と戯れていた時に気付いたバグ。
死・魔・闇デッキ適用中に複数枚数ドローして、2枚以上のカードが破壊された場合なんだけど、これに「マクロコスモス」+「魂吸収」が加わると処理がややこしいことになる。
CPU戦してた時は、死デッキ中に「貪欲な壺」を発動したら、ドローしたカードが2枚とも攻撃力1500以上だったため、
2枚とも破壊→マクロコスモスによって除外→魂吸収によって回復
という処理になったが、この時に魂吸収での回復が1枚ずつ発生した。
<バグ版テストログ>
海馬は山札から2枚ドロー!
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
魂吸収! 双六のライフが500ポイント回復!
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
魂吸収! 双六のライフが500ポイント回復!
魂吸収の回復処理はだいぶ前にほとんど直したつもりだったが、このパターンは思いつかなかったので手を入れてない。
せっかく見つけたので忘れないうちに修正しておこう。
<修正後のテストログ>
海馬は山札から2枚ドロー!
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
魂吸収! 双六のライフが1000ポイント回復!
死・魔・闇デッキ適用中に複数枚数ドローして、2枚以上のカードが破壊された場合なんだけど、これに「マクロコスモス」+「魂吸収」が加わると処理がややこしいことになる。
CPU戦してた時は、死デッキ中に「貪欲な壺」を発動したら、ドローしたカードが2枚とも攻撃力1500以上だったため、
2枚とも破壊→マクロコスモスによって除外→魂吸収によって回復
という処理になったが、この時に魂吸収での回復が1枚ずつ発生した。
<バグ版テストログ>
海馬は山札から2枚ドロー!
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
魂吸収! 双六のライフが500ポイント回復!
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
魂吸収! 双六のライフが500ポイント回復!
魂吸収の回復処理はだいぶ前にほとんど直したつもりだったが、このパターンは思いつかなかったので手を入れてない。
せっかく見つけたので忘れないうちに修正しておこう。
<修正後のテストログ>
海馬は山札から2枚ドロー!
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
青眼の白龍はウイルスに感染−消滅!
(青眼の白龍は光の彼方に追放された)
魂吸収! 双六のライフが1000ポイント回復!
2007年08月29日
投石部隊
投石部隊
自分フィールド上の戦士族モンスター1体を生け贄に捧げる。このカードの攻撃力以下の守備力を持つ表側表示のモンスター1体を破壊する。
何だか古いカードの修正ばっかやってる気もするが、デュエルCGIとOCGとの違い(うちでは面倒なので一覧表作ってないが)に載ってるヤツで、正規ルールでは自分のモンスターも破壊できるが、デュエルCGIの処理では「生贄モンと区別がつかないので、相手のモンスターしか破壊できない」という違い。
「フォッグ・コントロール」もこれと似ていて、生け贄に捧げるモンスターとフォッグカウンターを乗せるモンスターが両方自分の場の場合の区別をしないといけない。
「フォッグ・コントロール」の実装によって、一応この問題は解決できたので同じやり方で「投石部隊」も修正してみた。
これで、またひとつOCGとの違いを減らせた。
自分フィールド上の戦士族モンスター1体を生け贄に捧げる。このカードの攻撃力以下の守備力を持つ表側表示のモンスター1体を破壊する。
何だか古いカードの修正ばっかやってる気もするが、デュエルCGIとOCGとの違い(うちでは面倒なので一覧表作ってないが)に載ってるヤツで、正規ルールでは自分のモンスターも破壊できるが、デュエルCGIの処理では「生贄モンと区別がつかないので、相手のモンスターしか破壊できない」という違い。
「フォッグ・コントロール」もこれと似ていて、生け贄に捧げるモンスターとフォッグカウンターを乗せるモンスターが両方自分の場の場合の区別をしないといけない。
「フォッグ・コントロール」の実装によって、一応この問題は解決できたので同じやり方で「投石部隊」も修正してみた。
これで、またひとつOCGとの違いを減らせた。
2007年08月28日
俊足のギラザウルス
俊足のギラザウルス
このモンスターの召喚を特殊召喚扱いにする事ができる。特殊召喚扱いにした場合、相手の墓地から相手はモンスター1体を特殊召喚する事ができる。
某所のバグ報告に、「俊足のギラザウルス」を自身の効果で特殊召喚した際に、相手の墓地に特殊召喚可能なモンスターが存在しない場合に、「俊足のギラザウルス」の特殊召喚に対して「地獄の暴走召喚」が発動できないというのがあった。
ソースを見直してみたら、確かにその場合には特殊召喚成功時という中断タイミングが発生しないような処理になっていた。
修正ついでに、エキスパートルールHPで「俊足のギラザウルス」のルールを調べてみたら、相手の蘇生効果は発動時に墓地のカードを対象に取る効果という裁定になっていた。
「俊足のギラザウルス」は初期配布時に実装済みカードなんだけど、チェーン対応や優先権がらみのタイミングなので一度作り直している。その時には、そこまで調べなかったか頭が回らなかったかのどちらかだけど、現行ルールと違っているので再度作り直した。
「俊足のギラザウルス」を特殊召喚したコントローラーと蘇生効果のコントローラーが違うのでややこしいが、相手の墓地に特殊召喚可能なモンスターが存在しないか相手が効果を使用しなかった場合は、「俊足のギラザウルス」を特殊召喚したコントローラーに優先権行使のタイミングが生じる(ようになったと思う)。
このモンスターの召喚を特殊召喚扱いにする事ができる。特殊召喚扱いにした場合、相手の墓地から相手はモンスター1体を特殊召喚する事ができる。
某所のバグ報告に、「俊足のギラザウルス」を自身の効果で特殊召喚した際に、相手の墓地に特殊召喚可能なモンスターが存在しない場合に、「俊足のギラザウルス」の特殊召喚に対して「地獄の暴走召喚」が発動できないというのがあった。
ソースを見直してみたら、確かにその場合には特殊召喚成功時という中断タイミングが発生しないような処理になっていた。
修正ついでに、エキスパートルールHPで「俊足のギラザウルス」のルールを調べてみたら、相手の蘇生効果は発動時に墓地のカードを対象に取る効果という裁定になっていた。
「俊足のギラザウルス」は初期配布時に実装済みカードなんだけど、チェーン対応や優先権がらみのタイミングなので一度作り直している。その時には、そこまで調べなかったか頭が回らなかったかのどちらかだけど、現行ルールと違っているので再度作り直した。
「俊足のギラザウルス」を特殊召喚したコントローラーと蘇生効果のコントローラーが違うのでややこしいが、相手の墓地に特殊召喚可能なモンスターが存在しないか相手が効果を使用しなかった場合は、「俊足のギラザウルス」を特殊召喚したコントローラーに優先権行使のタイミングが生じる(ようになったと思う)。
2007年05月26日
二重召喚
二重召喚 通常魔法
このターン中もう1度だけ通常召喚を行なう事ができる。
・召喚権利を使用していなくても発動可能
・何枚発動しても召喚権での召喚以外に1回しか通常召喚できない
・「スケープ・ゴート」を発動したターンにこのカードを発動できる?
はやまって実装したため、実際のルールと違っちゃってるなぁ。
うちのCGIだと、
・召喚権利を使用後にしか発動できない
・2枚発動すれば2回通常召喚できる
・「スケープ・ゴート」を発動したターンには発動不可
てな具合になってます。
何でこうしたかというと、この方が簡単だったから(汗
これ、直すの大変そうだなぁ。
このターン中もう1度だけ通常召喚を行なう事ができる。
・召喚権利を使用していなくても発動可能
・何枚発動しても召喚権での召喚以外に1回しか通常召喚できない
・「スケープ・ゴート」を発動したターンにこのカードを発動できる?
はやまって実装したため、実際のルールと違っちゃってるなぁ。
うちのCGIだと、
・召喚権利を使用後にしか発動できない
・2枚発動すれば2回通常召喚できる
・「スケープ・ゴート」を発動したターンには発動不可
てな具合になってます。
何でこうしたかというと、この方が簡単だったから(汗
これ、直すの大変そうだなぁ。
2007年05月05日
召喚成功時の複数誘発チェーン処理
5/3に書いたコードだと、複数の誘発する効果が片プレイヤーだけの場合にはうまく動作するが、両プレイヤーの効果が混ざって発動する場合に、効果のコントローラーの振り分けがうまくいってなかった。
原因は@s_siteiに効果のコントローラーを保存する処理の
push(@s_sitei, $1);
正しくは、
unshift(@s_sitei, $1);
としないといけないようだ。(5/3のリストは修正済み)
sub del_chainやsub del_chain2ではpushでやってるので、同じようにしたんだけど、なんであっちはあれでいいんだろう。不思議だ・・・。ひょっとして、これがCPUがたまに誤動作する原因なのかな。
実際にデュエルしていて、誘発でチェーン組む事ってそれほどない(バブーン使ってると頻繁にあるけど)ので、まだ不具合が表面化はしてなかったみたい。
あと、誘発効果のチェーンを組む順がバラバラだったのを、ターンプレイヤーの効果のあとに非ターンプレイヤーの効果という順になるようにした。
1.ターンプレイヤーの墓地発動効果
2.ターンプレイヤーのフィールド発動効果
3.非ターンプレイヤーの墓地発動効果
4.非ターンプレイヤーのフィールド発動効果
の順。ここを任意の順で組めるようにする気はさすがにない。
原因は@s_siteiに効果のコントローラーを保存する処理の
push(@s_sitei, $1);
正しくは、
unshift(@s_sitei, $1);
としないといけないようだ。(5/3のリストは修正済み)
sub del_chainやsub del_chain2ではpushでやってるので、同じようにしたんだけど、なんであっちはあれでいいんだろう。不思議だ・・・。ひょっとして、これがCPUがたまに誤動作する原因なのかな。
実際にデュエルしていて、誘発でチェーン組む事ってそれほどない(バブーン使ってると頻繁にあるけど)ので、まだ不具合が表面化はしてなかったみたい。
あと、誘発効果のチェーンを組む順がバラバラだったのを、ターンプレイヤーの効果のあとに非ターンプレイヤーの効果という順になるようにした。
1.ターンプレイヤーの墓地発動効果
2.ターンプレイヤーのフィールド発動効果
3.非ターンプレイヤーの墓地発動効果
4.非ターンプレイヤーのフィールド発動効果
の順。ここを任意の順で組めるようにする気はさすがにない。
2007年04月26日
士気高揚
チャックしたところ、装備魔法扱いになっているモンスターカードが場から離れた場合にも効果が発動するようにはなっていたが、別の意味でバグってた(汗
ちなみに認定のコンボ板に載ってたやつの動作はこうなる。
遊戯 「 誘発効果 『暗黒魔族ギルファー・デーモン』!」
鉄の騎士ギア・フリードの攻撃力を500下げた!
士気高揚! 遊戯のライフが1000回復!
ビッグバンガールがマグマの杖を振りかざした!
海馬に500の効果ダメージ!
海馬 「 誘発効果 『鉄の騎士ギア・フリード』!」
ギア・フリードの鋼鉄の体が装備カードを弾き飛ばした!
暗黒魔族ギルファー・デーモンは破壊された!
遊戯 「 効果発動 『士気高揚』!」
モンスターの士気がグ〜〜ンと下がった!
遊戯に1000の効果ダメージ!
(対象を選択してくれ)
※以下繰り返しの無限ループ(相手のライフが0になるまで)
「ビッグバンガール」が存在しないと無意味な無限ループになります。
ちなみに認定のコンボ板に載ってたやつの動作はこうなる。
遊戯 「 誘発効果 『暗黒魔族ギルファー・デーモン』!」
鉄の騎士ギア・フリードの攻撃力を500下げた!
士気高揚! 遊戯のライフが1000回復!
ビッグバンガールがマグマの杖を振りかざした!
海馬に500の効果ダメージ!
海馬 「 誘発効果 『鉄の騎士ギア・フリード』!」
ギア・フリードの鋼鉄の体が装備カードを弾き飛ばした!
暗黒魔族ギルファー・デーモンは破壊された!
遊戯 「 効果発動 『士気高揚』!」
モンスターの士気がグ〜〜ンと下がった!
遊戯に1000の効果ダメージ!
(対象を選択してくれ)
※以下繰り返しの無限ループ(相手のライフが0になるまで)
「ビッグバンガール」が存在しないと無意味な無限ループになります。
2007年04月24日
クロス・ソウル
「クロス・ソウル」のバグ報告がきたけど、あれは「クロス・ソウル」の処理を根底から作り直さないと対応できないので、修正方法(というか作り直し)案を脳内検討してみる。
「クロス・ソウル」の処理は現在、魔法カードの効果処理部で$hk[13]に対象モンスターのフィールド位置をセットている。(このため同一ターンに2枚目を発動すると、単に$hk[13]の値が切り替わるので、最初に発動した方が無効となり2枚目で対象にした方が有効になるだけとなる)
この$hk[13]の値を利用して
1.生け贄選択時にsub card_searchで@res_sに$hk[13]をpushしている
2.sub view_fldbutton_mstで相手の場のモンスターに「生贄」のチェックボックスを表示している
の2つを行っている。
発動ターンにバトルフェイズを行えない効果については、初期デュエルCGIでは$hk[13]を使用していたが、うちのは$jok[22]で判定するように変更しているのでこちらはそのままいける。
$hk[13]がクロス・ソウルだけで使用する変数となっている(初期デュエルCGIでは「魔霧雨」でも使用)ので、$hk[13]は発動されたことのフラグ(単に1を入れる)として利用するだけにし、$fld_koka[xx]に"xsoul_$turn<>"をセットして、これによって対象を識別するように変更する。
sub find_koka_subで$hk[13]==1の時に$fld_koka[xx]を調べて@xsoulにフィールド位置を保存する。
sub card_searchとsub view_fldbutton_mstは、@xsoulを利用して処理を行う。
「クロス・ソウル」の効果を受けていることを明示するためにsub get_fld_messで'《クロスソウル》'とでも表示するようにするとか。
これで多分いけるはず。
「クロス・ソウル」の処理は現在、魔法カードの効果処理部で$hk[13]に対象モンスターのフィールド位置をセットている。(このため同一ターンに2枚目を発動すると、単に$hk[13]の値が切り替わるので、最初に発動した方が無効となり2枚目で対象にした方が有効になるだけとなる)
この$hk[13]の値を利用して
1.生け贄選択時にsub card_searchで@res_sに$hk[13]をpushしている
2.sub view_fldbutton_mstで相手の場のモンスターに「生贄」のチェックボックスを表示している
の2つを行っている。
発動ターンにバトルフェイズを行えない効果については、初期デュエルCGIでは$hk[13]を使用していたが、うちのは$jok[22]で判定するように変更しているのでこちらはそのままいける。
$hk[13]がクロス・ソウルだけで使用する変数となっている(初期デュエルCGIでは「魔霧雨」でも使用)ので、$hk[13]は発動されたことのフラグ(単に1を入れる)として利用するだけにし、$fld_koka[xx]に"xsoul_$turn<>"をセットして、これによって対象を識別するように変更する。
sub find_koka_subで$hk[13]==1の時に$fld_koka[xx]を調べて@xsoulにフィールド位置を保存する。
sub card_searchとsub view_fldbutton_mstは、@xsoulを利用して処理を行う。
「クロス・ソウル」の効果を受けていることを明示するためにsub get_fld_messで'《クロスソウル》'とでも表示するようにするとか。
これで多分いけるはず。
2007年04月17日
続チェーン中はカードが場に残る処理
自分でバグ報告とか(笑
フィールド上のカードを手札に戻す効果(「ハリケーン」など)には手を入れたんですが、フィールド上のカードをデッキの戻す効果を忘れてました(「風帝ライザー」など)。
例えば「風帝ライザー」の効果にチェーンして「破壊輪」を発動した場合に、「破壊輪」がデッキトップに戻せてました(汗
フィールド上のカードをデッキの戻す効果は数が少ないので、直すのはそれほど手間が掛かるわけじゃないんですけどね。
フィールド上のカードを手札に戻す効果(「ハリケーン」など)には手を入れたんですが、フィールド上のカードをデッキの戻す効果を忘れてました(「風帝ライザー」など)。
例えば「風帝ライザー」の効果にチェーンして「破壊輪」を発動した場合に、「破壊輪」がデッキトップに戻せてました(汗
フィールド上のカードをデッキの戻す効果は数が少ないので、直すのはそれほど手間が掛かるわけじゃないんですけどね。
2007年04月03日
大将軍 紫炎のバグ
ちょっと前から気付いてはいたのですが、どう修正するかが思いつかなかったので放っておいたのですが、修正方法がひらめいたので手を加えました。
どんな不具合かというと、相手の場に「大将軍 紫炎」が存在する場合は1ターンに1枚しか魔法・罠を発動できなくなる効果で、発動したというカウントを解決時に行っているため、1枚目の発動にチェーンすると2枚目が発動できてしまうというもの(さらにチェーンすれば3枚目も可能)。
発動したというカウントを解決時でなく発動時に行うようにすれば、上記の問題は解消できるのですが、今度は発動を「神の宣告」などで無効にされた場合にもそのターンにカードを発動できなくなってしまうという不具合が発生する。
※相手の場に「大将軍 紫炎」がいても発動が無効になった場合はもう1枚発動できるという裁定です
この両方の問題をクリアできる方法として、発動したカウントはこれまで通り解決時に行い、発動時にこのカウントをチェックするだけでなく、チェーンブロックをスキャンして魔法・罠の発動をチェックする方法を採りました。
こんな感じ
どんな不具合かというと、相手の場に「大将軍 紫炎」が存在する場合は1ターンに1枚しか魔法・罠を発動できなくなる効果で、発動したというカウントを解決時に行っているため、1枚目の発動にチェーンすると2枚目が発動できてしまうというもの(さらにチェーンすれば3枚目も可能)。
発動したというカウントを解決時でなく発動時に行うようにすれば、上記の問題は解消できるのですが、今度は発動を「神の宣告」などで無効にされた場合にもそのターンにカードを発動できなくなってしまうという不具合が発生する。
※相手の場に「大将軍 紫炎」がいても発動が無効になった場合はもう1枚発動できるという裁定です
この両方の問題をクリアできる方法として、発動したカウントはこれまで通り解決時に行い、発動時にこのカウントをチェックするだけでなく、チェーンブロックをスキャンして魔法・罠の発動をチェックする方法を採りました。
こんな感じ
if ($kok[$s_d][22]) {
my ($sien);
if ($hk2[82+$s_a] && !$fld_kido[$use_f_no]) {$sien=1;}
elsif (@chain) {
for (@chain) {
if (/^$s_a-(9|10)-\d+-(\d+)/ && !$fld_kido[$2]) {$sien=1; last;}
}
}
if ($sien) {&error_msg('紫炎に封じられている'); return;}
}
2007年03月28日
2007年03月23日
不要な中断バグ
以前からスタンバイフェイズ時に黄泉ガエルを自身の効果で特殊召喚したときに、自分へのチェーンの[スタンバイ]にチェックを入れてないのにチェーンチェックが入ることがあるというバグ報告が何回かあったのですが、どうもこちらでは再現しないので手の付けようがなかったのですが、再現方法の報告を頂くことができこちらでも症状が再現できたので、何とかバグフィックスできた。
カードの効果の動作ミスとは違い、こういった部分のバグというのは手元でのテストプレイで症状が再現できないと修正はほぼ不可能。
逆に再現さえできればその時点の記録ファイルの状況や、変数の値とかを調べて原因を探ることができるので、時間はかかるかも知れないけど何とかなるものです。
これまでの報告では黄泉ガエルだけでしたが、CPU戦でダイヤモンドガイの効果で「メガトン魔導キャノン」のような全破壊効果を使用すると変な中断が入るのを自分では気付いていたのだが、多分取れたはず。
やっぱし、自分で発見したバグより人に指摘されたバグの方が燃えるよね。
カードの効果の動作ミスとは違い、こういった部分のバグというのは手元でのテストプレイで症状が再現できないと修正はほぼ不可能。
逆に再現さえできればその時点の記録ファイルの状況や、変数の値とかを調べて原因を探ることができるので、時間はかかるかも知れないけど何とかなるものです。
これまでの報告では黄泉ガエルだけでしたが、CPU戦でダイヤモンドガイの効果で「メガトン魔導キャノン」のような全破壊効果を使用すると変な中断が入るのを自分では気付いていたのだが、多分取れたはず。
やっぱし、自分で発見したバグより人に指摘されたバグの方が燃えるよね。
2007年03月14日
ミス!
「虹の古代都市−レインボー・ルイン」のドロー効果に対して「無効」を発動できるように変更したつもりが、ミスって発動するのに条件のあるカードが発動できないようになっちゃってた。
恥ずかしーーー。
恥ずかしーーー。
2007年03月07日
堕落は『デーモン』が存在しないため破壊された件
そげなところにバグ報告せんでけろ。
原因不明及び再現出来ないのと、勝敗決してからの不具合なので不問という事で(汗
トリビアです(笑
あそこ見てない人には何の事やらワカランだろうな。
原因不明及び再現出来ないのと、勝敗決してからの不具合なので不問という事で(汗
トリビアです(笑
あそこ見てない人には何の事やらワカランだろうな。
2006年12月05日
陽気な葬儀屋
陽気な葬儀屋 通常魔法
自分の手札から3枚までのモンスターカードを墓地へ捨てる。
今まで使ったことのないカードだけど、昨日のデッキに入れてデュエルCGIで回してみたところバグが発覚。
「3枚までのモンスターカードを墓地へ捨てる」なので、1〜3枚の中で任意の枚数を捨てることができるんだけど、うちのは3枚固定になってた。さらにはモンスターカード以外も捨てられる仕様(おいおい
ちなみに初期コードはこんな感じ
発動時に捨てるカードを選択する仕様になっているので修正したのがこれ
この時点で3枚固定で何でも捨てられるようになっちゃってる。かつ精霊の鏡で相手の効果で捨てたことになってない。
最終版はこうなる。
もちろんsub select_syoriの't_sute'も修正が必要である。
発動時に手札にモンスターカードがあるかどうかのチェックは不要かも。
自分の手札から3枚までのモンスターカードを墓地へ捨てる。
今まで使ったことのないカードだけど、昨日のデッキに入れてデュエルCGIで回してみたところバグが発覚。
「3枚までのモンスターカードを墓地へ捨てる」なので、1〜3枚の中で任意の枚数を捨てることができるんだけど、うちのは3枚固定になってた。さらにはモンスターカード以外も捨てられる仕様(おいおい
ちなみに初期コードはこんな感じ
elsif($t_nm eq "陽気な葬儀屋"){
$seast="099900001";$go_hit="<4";
if($use_from eq "t"){$tmp=$use_t_no+50;$jokenst='$res_si!='.$tmp;}
if(&go_card_search){return;}
if(&used){return;}
for($i=0;$i<$#res_s+1;$i++){
&add_msg("null","$c_name[$tehuda[$s_a][$res_s[$i]-50]]を捨てた。");
&go_boti2($res_s[$i]-50,0,"",1);
}
}
発動時に捨てるカードを選択する仕様になっているので修正したのがこれ
elsif($use_cno==280){#陽気な葬儀屋
if($cont_flg!=1 && $jok[11]!=9999){
$cou=&maisu_count(6);
if(($use_from eq 'f' && $cou < 3) || ($use_from eq 't' && $cou < 4)){
&add_msg($NULL,"!$s_a(手札が3枚ない)");return;
}
}
if(&used){return;}
if($seirei_flg){$tsno=$s_d;$cou=7;}else{$tsno=$s_a;$cou=6;}
if(&maisu_count($cou)<3){
&add_msg($NULL,"(手札が3枚ないため$t_nmの効果は不発)");
}else{
$tmp_syorip="<>n-t_sute<>g-1<>i-$tsno<>m-(捨てるカードを3枚選択)<>p-3";
$seast='999900001';$jokenst='';&go_select_syori;
}
}
この時点で3枚固定で何でも捨てられるようになっちゃってる。かつ精霊の鏡で相手の効果で捨てたことになってない。
最終版はこうなる。
elsif($use_cno==280){#陽気な葬儀屋
if($cont_flg!=1){
$seast='099900001';&card_search;
if(@res_s<1){&add_msg($NULL,"!$s_a(手札にモンスターカードがない)");return;}
undef @res_s;
}
if(&used){return;}
if($seirei_flg){$tsno=$s_d;$cou=1;$seast='0999000001';}
else{$tsno=$s_a;$cou=0;$seast='099900001';}
$jokenst='';&card_search;
if(@res_s<1){
&add_msg($NULL,'(手札にモンスターカードがないため効果は不発)');
}else{
$tmp_syorip="<>n-t_sute<>g-1<>i-$tsno<>m-(捨てるカードを3枚まで選択)<>p-3l";
$tmp_syorip.='a' if $cou==1;
$seast='099900001';&go_select_syori;
}
}
もちろんsub select_syoriの't_sute'も修正が必要である。
発動時に手札にモンスターカードがあるかどうかのチェックは不要かも。
sub select_syoriの変更前
if($cpu[$s_a]!=1 && @res_s!=$S{'p'} && @res_s<$tcou){&revice_syori;return;}
変更後
if($cpu[$s_a]!=1){
if($S{'p'}=~s/l$//){if(@res_s>$S{'p'}){&revice_syori;return;}}
elsif(@res_s!=$S{'p'} && @res_s<$tcou){&revice_syori;return;}
}
2006年11月10日
無題
彗希さんのところでもバグ発掘できるのは便利かも...と思った。彗希さんにとっては迷惑な話だが(汗
2006年11月08日
運命の火時計
ルールの迷宮に、3ターン目の「光の護封剣」に対して「運命の火時計」を発動した場合に、「運命の火時計」の効果適用後に破壊というのが載っていたので、デュエルCGIでもそうなるように修正した。
テストプレイで先攻1ターン目に「光の護封剣」を発動して「運命の火時計」を伏せて即発動してみたら、選択チェックボックスは出るのだが進まない。発動部のコードを見直したら、ロジックミスってた。
(コード修正、シコシコ)
気を取り直して「運命の火時計」を発動。[残りターン:3]が[残りターン:2]になった。もう1枚「運命の火時計」を発動してみた。[残りターン:2]のまま???え、何故?
内部的には[turn_1<>]が「運命の火時計」を1枚発動する事で[turn_-1<>]になるのだが、ターン数が負の数になった場合に計算がうまくできないようだ。
(コード修正、シコシコ)
気を取り直して「運命の火時計」を発動。[残りターン:1]になった。さらに「運命の火時計」を発動。
遊戯 「 罠カード発動 『運命の火時計』!」
光の護封剣のターンカウントを1つ進めた!
光の護封剣は破壊された!
おーー、破壊された。無事修正成功!
テストプレイで先攻1ターン目に「光の護封剣」を発動して「運命の火時計」を伏せて即発動してみたら、選択チェックボックスは出るのだが進まない。発動部のコードを見直したら、ロジックミスってた。
(コード修正、シコシコ)
気を取り直して「運命の火時計」を発動。[残りターン:3]が[残りターン:2]になった。もう1枚「運命の火時計」を発動してみた。[残りターン:2]のまま???え、何故?
内部的には[turn_1<>]が「運命の火時計」を1枚発動する事で[turn_-1<>]になるのだが、ターン数が負の数になった場合に計算がうまくできないようだ。
(コード修正、シコシコ)
気を取り直して「運命の火時計」を発動。[残りターン:1]になった。さらに「運命の火時計」を発動。
遊戯 「 罠カード発動 『運命の火時計』!」
光の護封剣のターンカウントを1つ進めた!
光の護封剣は破壊された!
おーー、破壊された。無事修正成功!

