5かいバグ

概要

手持ちポケモンと道具欄などで作ったプログラムを、道具「5かい」を使い起動。プログラムに順じた様々な現象を引き起こす。
つまり道具欄をいじって新しくバグ技を作れる。
思わぬ範囲まで効果が及ぶ可能性があるので危険が伴います。実験・使用・使用後のセーブには充分注意しましょう。

5かいで飛ぶのはアドレスD123h。ここは手持ちの総数になり、その後、手持ちポケモンの外見が記録されている。
ここだけでは満足なコードを実行できないが、メノクラゲを利用した相対ジャンプで手持ちポケモンのステータスへ、
さらにその中でジャンプ命令を仕込むことで操作しやすい場所に持っていく。

なかよしバッヂで飛ぶのはアドレスD983h。ここはサファリボールの個数が記録されているが、その直後には育て屋のデータがあり、
育て屋に預けたポケモンのデータは最初にニックネームが入ることを利用して制御しやすいところにジャンプする。

5かいでは手持ちポケモンに、なかよしバッヂでは育て屋の利用に制限がかかります。

至らない点の訂正・追記お願いします

詳しくは→ぽけもん・ばぐ・りっちーず(リンク切れ)http://www.geocities.jp/kattempla/pokebug/index.html

この辺も参考に↓
【5かい】初代ポケモンの任意コード実行解説動画【なかよしバッヂ】 - ニコニコ動画

ちなみにこのバグができるのは赤緑青のみです。ピカチュウ版はバグアイテムのジャンプ先が異なるため、別のアイテムが必要になります。
サブルーチンの位置の違いはありますが、データの格納位置はそれほど変わらないため、このページのコードもほぼ流用できます。↓
ピカチュウ版における任意コード実行

目次

コード例


手持ちポケモンの準備(5かい)

手持ちのポケモンを使って道具欄などを参照させる為のプログラムを組みます。

  • メノクラゲ(18h)とニャース(4Dh)を用意します。
    • ニャースが用意できない場合はクラブ(4Eh)でも代用できます。その場合は技の2番目からPPを調整しましょう。
  • 手持ち準備A;道具2番目(アドレスD25Dh)から参照させる。[jp D25D]
    • メノクラゲの技PPを以下のように調整します。
      1. ポイントアップ3回、PP3(C3h)
        • PP8のふぶきやハイドロポンプから減らすのが手っ取り早いでしょう。わざマシン14は14番目バグで「よ」から取れます。
      2. ポイントアップ1回、PP29(5Dh)
        • みずでっぽうがPP25→30になるので、そこから1減らすのが楽です。
      3. ポイントアップ3回、PP18(D2h)
        • かげぶんしんがPP15→24になるので、無抵抗な敵に連発するだけで調整できます。
  • 手持ち準備B;現在のボックス1匹目のニックネーム(アドレスDE64h)から参照させる。[jp DE64]
    • メノクラゲの技PPを以下のように調整します。
      1. ポイントアップ3回、PP3(C3h)
      2. ポイントアップ1回、PP36(64)
        • バリアーやいあいぎりがPP30→36になります。
      3. ポイントアップ3回、PP30(DEh)
        • ちょうおんぱやリフレクターがPP20→32になるのでそこから調整しましょう。

ニャースの代わりにプリン(64h)やイーブイ(66h)を用意し、習得技や親IDでジャンプさせることもできます。先述のメノクラゲニャースを使って書き換えると楽です。
プリンの場合は3匹目の技の1番目イーブイの場合は3匹目の技の3番目に飛びます。

ちなみにズバット(6Bh)だと3匹目の経験値中桁パラス(6Dh)だと3匹目のHP努力値上桁に飛べます。
努力値から個体値までで12バイト、経験値を含めても14バイトですが、その程度で済んでかつ頻繁に使うコードの場合は頭に入れておくといいでしょう。
数値の書き換えにはバイナリエディタ(簡易型だけでもいい)を導入すると便利です。
なお、プリンで技3からにどげり→おうふくビンタとすることでIDを飛ばして経験値中桁に飛ぶこともでき、とくしゅ努力値下桁からC3 63 D2でニックネームに飛ぶことでもうちょっと長めのコードを仕込むこともできます。
(技で2バイト、経験値~努力値で11バイト、ニックネームで5バイト使えるため、最大18バイトになります)

  • 手持ち準備A';手持ち道具2番目(アドレスD25Dh)から参照させる。[inc h→ld l,63→jp hl→jp D25D]
    • プリンのニックネームを「てヨめ」(C3 5D D2 50)にし、技構成を以下のようにします。
      ニックネームを変えることで、ジャンプ先を変えることができます。(後述)
      1. とっしん(24h)
        • わざマシン09で覚えられます。
        • inc hでhレジスタをD2hにしていますが、これは5かい使用時にhlレジスタがD123hになっているためです。
      2. ほえる(2Eh)
        • 通常では覚えられないので技変えを利用しましょう。
      3. いかり(63h)
        • わざマシン20で覚えられます。14番目バグで「わ」から取れます。
        • 技替えが必須になりますが、ねんりき(5Dh)にすると、ニックネームに関係なく手持ち道具2番目に飛べるようになります。
      4. わざマシン33(E9h)
        • 技変えで…と行きたいところですが、(バージョンによっては)タイプ名が長いので戦闘中に表示しないよう注意。
        • ポイントアップ3回、PP41の技(バリアーなどがおすすめ)を24~27番目の技(手持ち2匹目の技)と入れ替えるといいかもしれません。
  • 手持ち準備A'亜種;手持ち道具2番目(アドレスD25Dh)から参照させる。[ld hl,D25D→jp hl]
    • プリンの技構成と親IDを以下のようにします。イーブイを使う場合、技1と技2は何でも構いません。
      1. うたう(2Fh)
        • 初期技をそのまま使えば問題ありません。イーブイの場合でもすなかけ(初期)で大丈夫です。
      2. メガトンパンチ(68h)
        • わざマシン01で覚えられます。イーブイの場合は何でも構いませんが、わざマシン32で覚えられるかげぶんしんが安上がりでいいでしょう。
      3. たいあたり(21h)
        • イーブイの場合は初期技をそのまま使えば問題ありませんが、プリンの場合は技変えで賄いましょう。
      4. ねんりき(5Dh)
        • 技変えが必要です。
        • 手っ取り早いのはプリン(イーブイ)を手持ちの先頭に置いたうえで19番目にシードラの外見を埋め込むあたりでしょうか。
      5. IDNo.53993(D2E9h)
        • わざマシン10(D2h)とわざマシン33(E9h)をそれぞれ技の5・6番目に埋め込むなどで実現しますが、5かいバグを使って技共々書き換えてしまうのが手っ取り早いかもしれません。
  • 手持ち準備B'現在のボックス1匹目のニックネーム(アドレスDE64h)から参照させる。[ld hl,DE64→jp hl]
    • プリンの技構成と親IDを以下のようにします。イーブイを使う場合、技1と技2は何でも構いません。
      1. うたう(2Fh)
        • 初期技をそのまま使えば問題ありません。
      2. メガトンパンチ(05h)
        • わざマシン01で覚えられます。フラッシュ(94h)でも穴埋めはできます。
      3. たいあたり(21h)
        • 通常では覚えられないので技変えを利用します。イーブイは初期技なので特に問題ありません。
        • メガトンキックを技の9番目に埋め込んでから経験値8を入れて戻すとたいあたりになります。
      4. テレポート(64h)
        • わざマシン30で習得可能ですが、16~19番目バグを使ってプリンの見た目からも取ることができます。
        • わざマシン06(14番目バグで「ほ」から取れる)でどくどくを覚えさせて9番目に埋め込み、経験値を8入れてから戻すとテレポートになります。
      5. IDNo.:57065(DEE9h)
        • わざマシン22(DEh)とわざマシン33(E9h)をそれぞれ技の5・6番目に埋め込むなどで実現しますが、5かいバグを使って技共々書き換えてしまうのが手っ取り早いかもしれません。
    • メノクラゲニャースを使った手持ち準備B'用プリン(イーブイ)の書き換え方(ボックスのニックネームを使って4匹目のデータを書き換える)
      1. がむぜしぼ(26 D1 2E BC 3E 50)
        • 「がむぜし(26 D1 2E BC)」[ld h,D1→ld l,BC]でD1BCh(手持ち4匹目の親IDNo.下桁)を指します。
          特定アドレスを指す場合に何かと使うので覚えておくといいでしょう。
        • 「ぼ終(3E 50)」[ld a,50]でaレジスタを50hにします。
        • 今回、ここ以外の「終端(50)」[ld d,b]には意味を持たせていないので、説明は省略します。
      2. にハづぼん(C6 99 32 3E DE 50)
        • 「にハ(C6 99)」[add a,99]で50hに99hを足してE9hを作り、「づ(32)」[ldd (hl),a]でD1BChに代入します。
          これはE9hが直接入力できない文字「ァ」だからです。
        • 「ぼん(3E DE)」[ld a,DE]で次の数値を用意しておきます。
      3. づにキ(32 C6 86 32 BF 50)
        • 「づ(32)」[ldd (hl),a]でD1BBhにDEhを代入します。
          ここまででIDが57065になります。
        • 「にキ(C6 86)」[add a,86]でDEhに86hを足して64hを作り、「づ(32)」[ldd (hl),a]でD1BAhに64hを代入します。
          これで技4がテレポートになります。
          桁あふれは今回気にしなくて大丈夫です。
        • 「そ(BF)」[cp a]に意味はありません。
      4. よポづぼ空(D6 43 32 3E 7F 50)
        • 「よポ(D6 43)」[sub a,43]で64hから43hを引くことで21hを作り、「づ(32)」[ldd (hl),a]でD1B9hに21hを代入します。
          これで技3がたいあたりになります。
        • イーブイを書き換える場合、「ぼ (3E 7F)」は必要なく、「の(C9)」[ret]で終了していいため、5匹目のポケモンは不要になります。
      5. づづの(32 32 C9 50 xx xx)
        • 技1・2をたきのぼりで埋めるための作業。イーブイの場合は不要。
        • 「ぼ (3E 7F)」[ld a,7F]で用意しておいた7Fhを「づづ(32 32)」[ldd (hl),a→ldd (hl),a]でD1B8hとD1B7hに代入します。
          これで技1と2がたきのぼりになります。
        • 「の(C9)」[ret]でプログラムを終了してアイテム欄に戻ります。

実行方法

  1. 手持ちを6匹にし、2匹目に(PP調整をした)メノクラゲを設置します。[D123:06 xx 18]
    • 手持ち3~5匹でもできなくはないですが、1匹目に置くポケモンの種類(見た目)に気を付ける必要があります。
    • 御三家は全部問題なく、ミュウ(15/dec d)、ミュウツー(82/add,e)、カモネギ(40/ld b,b)、ニドキング(07/rlca)、キングラー(8A/adc,d)あたりが普通に使えるのでそこまで不自由はしませんが…
  2. PPで飛ぶ場合は3匹目にニャース(クラブ)、技で飛ぶ場合は3匹目にプリンイーブイを設置します。
  3. 道具欄やパソコンに預けてあるポケモンのニックネームを確認し、「5かい」を使用します。※「5かい」は道具欄の先頭に置くことを想定しています。

なかよしバッヂを使う方法

道具「なかよしバッヂ」を使うと、サファリボールの残り個数のアドレス(D983h)に飛びます。
その直後には育て屋のデータがあり、ニックネームが都合よく最後に預けたポケモンのデータの先頭にあるため、ここにジャンプ命令を書き込めば5かいよりもはるかに簡単にプログラムを実行できるようになります。

道具「あなぬけのヒモ」または技「あなをほる」を使ってダンジョンから脱出しておきます。

  • 穴を掘ってダンジョンから脱出すると、サファリボールの個数が0になります。
  • サファリゾーンに入ってからすぐ出てサファリボールを30個にしても大丈夫です。

育て屋に所定のニックネームを持ったポケモンを預けます。最後に預けたポケモンの情報があればいいので、すぐに引き出しても構いません。

  • 道具の2番目(D2A4h)に飛ばしたい場合→「パパてヨめ
  • パソコンの2番目の道具(D4BCh)に飛ばしたい場合→「パパてしや
  • ボックス6匹目のニックネーム(DE82h)に飛ばしたい場合→「パパてウん
    • 1匹目のニックネーム(DE64h)に飛ばすには入力不能文字(表示自体は問題ない)が絡むため、一工夫必要。
    • 「パパてフる」から育て屋に預けているポケモンの技3番目(D99Bh)に飛ばして…という方法で先述のイーブイ(プリン)を使いまわす手も。
  • 頭の「パパ」は、育て屋の預け有無に関係なくジャンプを起こすための極力無意味な記述。(40hはld b,bという事実上のnopとなる)

道具欄やパソコンに預けてあるポケモンのニックネームを確認し、「なかよしバッヂ」を使用します。以降は5かい使用時とほぼ同じです。

5かいとジャンプ先を共有したい場合は、3匹目のアドレスが直接入力可能な文字になるのを利用するといいでしょう。

  • 手持ち3匹目の技1(D18Bh)に飛ばしたい場合→「パパてシむ
  • 手持ち3匹目の経験値中桁(D192h)に飛ばしたい場合→「パパてテむ
  • 手持ち3匹目のHP努力値(D194h)に飛ばしたい場合→「パパてナむ

ボックス1匹目のニックネームから実行可能にする

技やPPを使う場合と違い、ボックス1匹目のニックネーム1文字目に飛ばす場合、入力不能文字の「E」(64h、HPバーの一部)の存在が問題になります。
一応おじぞうバッヂ(64h)×222(DEh、これは「ん」でOK)を14番目バグで道具の4番目に埋め込む方法もありますが、おじぞうバッヂの入手方法が問題になります。
そこで、育て屋内の「パパてウん」をなかよしバッヂで「パパE」に変換するコードを紹介します。育て屋には預けた状態で実行してください。

  1. の (C9 50 xx xx xx)
    • 「パパてEん」からたどり着いた時の暴走防止用。
  2. (任意)
  3. (任意)
  4. (任意)
  5. (任意)
  6. がるぜケぼ (26 D9 2E 88 3E 50)
    • hlレジスタに、育て屋に預けたポケモンのニックネーム4文字目(D988h)を参照させる。
    • 終端文字を利用してaレジスタに50hを代入。
  7. にドぶづの (C6 13 3C 32 C9 50)
    • 50h+13hで63h→inc aで64hを作る。これは14hが「ナ゛」で入力できないため。
    • 「ぼねダ」(3E C8 0F: ld a,C8→rrca)や「ぼづグ」(3E 32 07: ld a,32→rlca)でも64hは作れる。

これで、ボックス1匹目のニックネームからコードを実行可能になって入力しやすくなります。
なお、このコードはポケモン2匹に収まっているので、5かいからの手持ちニックネーム実行(C3 5D D2で手持ち2匹目から可能)でも必須枠のポケモンだけで間に合います。

コードを書く場所について

初代ポケモンでコードを書く場所は主に3つあります。

道具欄(てヨめ等)

5かいバグ黎明期に開発された方法です。
数値の指定は比較的自由にできますが、アイテムと個数が1セットになっている点、所持数制限により最大38バイトまでのコードしか組めない点、
個数の無いアイテムや名前の長いアイテムが絡むと構築が面倒になる点が問題になります。

パソコンの道具(てしやてせや等)

より長いコードを書くために開発された方法です。
本来パソコンに道具を預ける場合は1種類当たり99個までで区切られてしまいますが、「やめる」の下のアイテムには個数まとめ処理が発生しないという仕様を利用し、
パソコンの先頭に「やめる」を設置してしまう(これ自体は他の方法で行う必要あり)ことによって道具欄同様にコードを組むことができるようになります。
パソコンには50種類の道具を預けられるので、先頭の「やめる」を除いても最大98バイトものコードが組めるようになります。

ボックスのポケモンのニックネーム(てウんてEん等)

道具使用版からだいぶ後に開発された方法です。
ボックスのポケモンのニックネームを利用することで、6文字×30匹分の180バイト(実際には終端文字があるため実質150バイト)ものコードを書くことができる上に、コードを複数個貯めることもできます。
お手軽にコードを組めますが、入力不能文字によってできないことが意外と多く、道具欄に比べて微修正に手間がかかるところが難点と言えます。
また、普通の入力では終端文字(50h・ld d,b)が入ってしまうことや、入力方法によってゴミデータが混じることには注意が必要です。

ちょっと変わった方法として、コード本体はニックネームに書き、数値指定を道具欄で行うといったものもあります。特定のアドレスに好きな数値を入れるような用途で使われることがあります。


以下、コード集。各コードは水平線(hrタグ)で区切る。


任意のポケモンをゲットするコード(道具版)

種類 個数
むしよけスプレー xx
ねむけざまし yy
かみなりのいし 102
ミックスオレ 67
わざマシン33 不問

コード内容

1E xx ; ld e,xx
0E yy ; ld c,yy
21 66 3E ; ld hl,3E66
43 ; ld b,e
E9 ; jp hl

むしよけスプレーの個数に応じた種族がねむけざましの個数に応じたレベルで手に入るコード。わざマシン33は何個でもいい。
ポケモンの種族は内部番号で指定するため、文字コード対応表を参考に。
手持ちがいっぱいの場合は、通常のポケモンゲット同様、ボックスの先頭に送られます。
ニックネームコーディングの手助けになれば。
サブルーチンを使う関係上、このコードは赤緑後期版専用となる。
赤緑初期版の場合は使うサブルーチンが3E78hになるので、かみなりのいしの個数を102→120にする必要がある。

ちなみに任意のポケモンとエンカウントするだけならもっと簡単で、D036hにエンカウントしたいポケモンの内部番号を入れればいい。
D0EChに数値を入れることでレベルを指定することもできる。(指定しなかった場合は最後に読み込んだポケモンのレベルになる)

任意エンカウント
種類 個数
ミックスオレ xx
ねむけざまし yy
かみなりのいし 54
わざマシン08 119
まひなおし 46
わざマシン36 113
わざマシン01 不問

コード内容

3E xx ; ld a,xx
0E yy ; ld c,yy
21 36 D0 ; ld hl,D036
77 ; ld (hl),a
0F ; rrra これ自体は無意味
2E EC ; ld l,EC
71 ; ld (hl),c
C9 ; ret

ミックスオレの個数に応じた種族のポケモンがねむけざましの個数に応じたレベルで出現する。こちらのコードは初代全バージョン対応。


無限イーブイモード

バイナリエディタ導入チャートなどで使われるあれを既存データでやるコード。
イーブイ部屋で実行することでイーブイ復活とボール消失防止を同時に行えるため、一度の実行で大量のイーブイを入手できる。ニックネームコーディングの補助に。
ボールが消えなくてもイーブイ入手フラグは立つため、一度部屋を出るとボールは消える。

道具版

直接入力でもコードを変える必要はない。おじさんは助かる。

無限イーブイ
種類 個数 参考・文字
かみなりのいし 77 あ゛┗
わざマシン13 52 ゆど
ヨクアタール 45 ぜず
わざマシン03 174 ひュ
わざマシン01 不問

コード内容

21 4D D5 ; ld hl,D54D
34 ; inc (hl) アイテムボールを消えなくする。
2E 2D ; ld l,2D
CB AE ; res 5,(hl) イーブイ復活
C9 ; ret

ニックネーム版(手持ち推奨)

  1. ぜヒひゼョ
  2. がゆづぜず
  3. ひュの
; ぜヒひゼョ
2E 9A ; ld l,9A
CB 0D ; rrc l 9A→4D
AF ; xor a
50 ; ld d,b
; がゆづぜず
26 D5 ; ld h,D5
32 ; ldd (hl),a アイテムボールを消えなくする。
2E 2D ; ld l.2D
50 ; ld d,b
; ひュの
CB AE ; res 5,(hl)イーブイ復活
C9 ; ret

マスターボール生成

※重大なミスがあったので修正しました!申し訳ありません。

  1. がめぜモぼ
  2. よぶせねリ
  3. どぷぽ
  4. ひヅズゴべ
  5. づづぶぶ空
  6. づの
; がめぜモぼ
26 D2 ; ld h,D2
2E A1 ; ld l,A1
3E 50 ; ld a,50
; よぶせねリ
D6 3C ; sub a,3C 50→14
BE ; cp (hl) 道具総数チェック
C8 ; ret z 20種なら終了
D8 ; ret c 21種以上でも終了
50 ; ld d,b
; どぷぽョぺ
34 ; inc (hl)
46 ; ld b,(hl)
48 ; ld c,b
AF ; xor a
47 ; ld b,a
50 ; ld d,b
; ひヅズゴべ
CB 11 ; rl c
0C ; inc c
09 ; add hl,bc
3D ; dec a 00→FF
50 ; ld d,b
; づづぶぶ空
32 ; ldd (hl),a 「やめる」
32 ; ldd (hl),a 「×255」
3C ; inc a FF→00
3C ; inc a 00→01
7F ; ld a,a アイテム変更用スペース
50 ; ld d,b
; づの
32 ; ldd (hl),a 「マスターボール」
C9 ; ret

道具欄の末尾にマスターボール255個を生成するコード。道具が20種(以上)あるときは何も起こらない。任意エンカウントの補助に。

1・2匹目で道具が20種未満かの判定を行い、3・4匹目で道具欄の末尾に移動しながらaレジスタをFFhにできる。
5匹目の「ぶぶ空」の部分を変えれば他のアイテムを255個生成することも可能。(アイテムリスト数値の作り方を参照)

  • ぼぐ空→ふしぎなアメ(28h)
  • ぼぷダ→マックスアップ(23h)
  • ぼブグ→げんきのかたまり(36h)
  • ぼミダ→ポイントアップ(4Fh)

ちなみに最短のコードはこうなる。

アイテム追加コード(22バイト)
数値 ニモニック 備考
21 ld hl,D6A1 道具総数参照
A1    
D6    
7E ld a,(hl) aレジスタに総数を代入
3C inc a 01h足してみる
FE cp a,14 21(15h)以上ならキャリーフラグが立つ
14    
D8 ret c キャリーフラグが立ったら終了
77 ld (hl),a 道具総数書き換え
07 rlca aレジスタを道具総数の2倍に
4E ld c,(hl) 道具総数の2倍をcレジスタに代入
0C inc c 01h足すことで道具欄末尾を指せるように
AF xor a aレジスタリセット
47 ld b,a 00hにしたaレジスタでbレジスタを上書き
09 add hl,bc hlレジスタの位置を道具欄末尾に
3D dec a 00h→FFh
32 ldd (hl),a 末尾を「やめる」に
32 ldd (hl),a 個数を255個に
3E ld a,01  
01   ここで加えたいアイテムを指定(この例ではマスターボール)
77 ld (hl),a アイテムの種類書き換え
C9 ret  

道具2番目の個数を0個にする

14番目バグでやっていることの応用的な奴。あらかじめ2番目に増やしたい(0個にしたい)道具を置いておくこと。
初代ポケモンにおける0個は256個としても扱え、1個減らすと255個になるが、1個増やすと1個になってしまうことと、0個のアイテムはポケスタ金銀で表示されないことに注意。
あと255個のアイテムがあるときに上のアイテムを消さないようにすること。システムがアイテムの255個を「やめる」と誤認して所持数がずれてしまう。

直接入力版(5バイト)

環境次第で頻繁に使うコードになるため、ポケモンのステータス内で仕込んでおくとスムーズに実行できるかも?
ちなみにAFhではなく97hを使っているのは、技「とける」に相当するため。
5かい用プリンの技を、とける→わざマシン34→わるあがき→わざマシン10の順にし、ID上桁にC9hを仕込むことでコンパクトにまとまる。
プリンをオムスターにして、(りゅうのウロコ)→わざマシン34→わるあがき→わざマシン10→わざマシン01でもいい。

97 EA A5 D2 C9
97 ;sub a
EA A5 D2 ; ld (D2A5),a
C9 ; ret

ニックネーム版

  1. ヅラめ
; ヅラめョデ
11 A5 D2 ; ld de,D2A5
AF ; xor a
12 ; ld (de),a
50 ; ld d,b
; の
C9 ; ret

14番目バグでわざマシン01を埋め込むなどの方法で6文字目に「の(C9h)」を仕込めれば一応1匹に収まる。


特定アドレスに任意の数値を入れる

  1. がめぜレぷ
  2. ぽじじぷじ
  3. じごなむデ
  4. づぜレ
  5. どたじじど
; がめぜレぷ
26 D2 ; ld h,D2
2E A7 ; ld l,A7
46 ; ld b,(hl)
50 ; ld d,b
; ぽじじぷじ
48 ; ld c,b
2C ; inc l
2C ; inc l
46 ; ld b,(hl)
2C ; inc l
50 ; ld d,b
; じごなむデ
2C ; inc l
2A ; ldi (hl),a
C5 ; push bc
D1 ; pop de
11 ; ld (de),a
50 ; ld d,b
; ざョづぜレ
2B ; dec hl
AF ; xor a
32 ; ldd (hl),a
2E A7 ; ld l,A7
50 ; ld d,b
; どたじじど
34 ; inc (hl)
C0 ; ret nz
2C ; inc l
2C ; inc l
34 ; inc (hl)
50 ; ld d,b
; の
C9 ; ret

道具3番目の個数をアドレス下位、4番目の個数をアドレス上位とし、5番目の個数をそのアドレスに書き込むコード。
実行後、アドレスを一つ進め、5番目の個数を0にする処理まで行っている。
バイナリエディタがある現在はそこまで需要の無いコードだが…

事前の個数調整は一部を除いて14番目バグで行える。上記の道具2番目の個数を0個にするコードを利用してもいい。
手持ち4匹目のニックネームを弄りたい場合はD269h~D26Ehを指定することになるので、
道具3番目の個数を105個(入力不能文字なので空白から127を採って22個減らす)、道具4番目の個数を210個(「め」に相当)にすればいい。

道具でやる場合は以下の感じだろうか。

道具版(手持ち2番目~)
種類 個数
むしよけスプレー xx
ねむけざまし yy
ミックスオレ zz
かみなりのいし 169
わざマシン10 67
ハイパーボール 175
ポイントアップ(偽) 43
なんでもなおし 192
ヨクアタール 165
どくけし 51
わざマシン01 不問

コード内容

1E xx ; ld e,xx
3E 0E yy ; ld c,yy
zz ; ld a,zz
21 A9 D2 ; ld hl,D2A9
43 ; ld b,e
02 : ld (bc),a
AF ; xor a
32 ; ldd (hl),a
2B ; dec hl
34 ; inc (hl)
C0 ; ret nz
2E A5 ; ld l,A5
0B ; dec bc
34 ; inc (hl)
C9 ; ret

むしよけスプレーの個数をアドレス上位、ねむけざましの個数をアドレス下位とし、4番目の個数をそのアドレスに書き込む形式にしている。
実行後、ミックスオレの個数を0個にしつつアドレスを一つ進める処理まで行う。
処理の都合上、ニックネーム版とはアドレスの上下を逆にしている。


メッセージ送り最速

直接入力版(8バイト)

11 D4 D2 1A E6 F0 12 C9
11 D4 D2 ;ld de,D2D4
1A ; ld a,(de)
E6 F0 ; and a,F0
12 ; ld (de),a
C9 ; ret

ニックネーム版

  1. がめぜやぼ
  2. にメぺござ
  3. メづの
; がめぜやぼ
26 D2 ; ld h,D2
2E D4 ; ld l.D4
3E 50 ; ld a,50
; にメぺござ
C6 A0 ; add a,A0 50→F0
47 ; ld b,a
2A ; ldi (hl),a
2B ; dec hl
50 ; ld d,b
; メづの
A0 ; and b
32 ; ldd (hl),a
C9 ; ret

解説

D2D4hの下位4bitを(F0hとの論理積で)0にすることで、他の設定を保持したままメッセージ送りを一瞬で行えるようにする。
「せってい」を開くとメッセージ送りが「ふつう」に戻されてしまう点に注意。


バッジ全取得

  1. がめぜゆ
  2. べづの
; がめぜやョ
21 D2 ; ld h,D2
2E D4 ; ld l.D4
AF ; xor a
50 ; ld d,b
; べづの
3D ; dec a 00→FF

32 ; ldd (hl),a
C9 ; ret

D2D5hをFFhにすることで、ジムバッジをすべて取得した状態にする。
ジム戦のフラグは弄っていない。


そらをとぶフラグ全開放

  1. がよぜシ
  2. べづづの
; がよぜショ
21 D6 ; ld h,D6
2E 8B ; ld l.8B
AF ; xor a
50 ; ld d,b
; べづづの
3D ; dec a 00→FF

32 ; ldd (hl),a
32 ; ldd (hl),a

C9 ; ret

D68AhとD68Bhをffhにすることで、そらをとぶの行き先をすべて開放する。


ニビジム誘導員復活

タケシスルーのページより引用。

  1. がゆぜがざ
  2. ひルの
; がゆぜがざ
26 D5 ; ld h,D5
2E 26 ; ld l,26
2B ; dec hl
50 ; ld d,b
; ひルの
CB A6 ; res 4,(hl)
C9 ; ret

タケシ撃破後に消失する、ニビジムに連行してくるNPCだけを復活させることで、お手軽に超壁抜けを行えるようになる。
(強制的に連行されるのはタケシ未撃破の時のみ)


超壁抜け

壁抜けのページより引用。

直接入力版(8バイト)

11 38 DC 1A EE 02 12 C9
11 38 CD ; ld de,CD38
1A ; ld a,(de)
EE 02 ; xor a,02
12 ; ld (de),a
C9 ; ret

ニックネーム版

  1. がへぜボ
  2. ひガぶぶぺ
  3. ござロづの
; がへぜボョ
26 CD ; ld h,CD
2E 1C ; ld l,1C
AF ; xor a
50 ; ld d,b
; ひガぶぶぺ
CB 05 ; rlc l
3C ; inc a
3C ; inc a
47 ; ld b,a
50 ; ld d,b
; ござロづの
2A ; ldi a,(hl)
2B ; dec hl
A8 ; xor b
32 ; ldd (hl),a
C9 ; ret

道具欄版

超壁抜け
道具 個数
マスターボール 56
わざマシン05 10
わざマシン38 2
ハイパーボール 2
わざマシン01 不問

コード内容

01 38 CD ; ld bc,CD38
0A ; ld a,(bc) 現在の移動モード取得
EE 02 ; xor a,02 移動モードの切り替えをxor演算で行う。
02 ; ld (bc),a 切り替えた数値を移動モードに代入。
02 ; ld (bc),a 201個除けのための二重書き込み。特に意味はない。
C9 ; ret

解説

アドレスCD38hを02hにすることで、障害物を無視して歩き回れるようになる。
実行するたびに壁抜け状態のON/OFFを切り替え可能。トレーナーに見つかるか建物に入ると壁抜け状態は終了する。
壁にぶつかって出る必要のある屋内などではOFFにしてから出ないとマップをはみ出してフリーズする。


どこでもそらをとぶ(赤緑後期版用)

; てッブ
C3 AC 1B ; jp 1BAC

1BAChを実行することで、そらをとぶの処理を直接行う。ハマリからの脱出用に。
…というかこれだけ短いならボックスに入れるまでもない。
そらをとぶだけなら1BB1hからでもいいのだが、エンカ不可フラグを折っているようなので念のため。

仕様上、行き先を選択した後飛び立つのはメニューを閉じてからになる。
サブルーチンの都合上、他のバージョンではコードの内容を変える必要がある。

ちなみに行先選択後すぐ飛べるようにするには以下のようにする。

  1. がてぜワゾ
  2. ギボゴぼね
  3. づて
; がてぜワゾ
26 C3 ; ld h,C3
2E A9 ; ld l,A9
0E 50 ; ld c,50
; ギボゴぼね
06 1C ; ld b,1C
09 ; add hl,bc
3E C8 ; ld a,C8
50 ; ld d,b
; づてッブ
32 ; ldd (hl),a
C3 AC 1B ; jp 1BAC

DFF9h(スタック内の戻り先アドレスの一部)の値をC8hにすることで、使用後メニューを閉じるアイテムのように振舞わせる。
(本来04h:5EB7hに帰ってくるところを04h:5EC8hに書き換える)
初代ではF9hが入力できないので、C3A9h+1C50hでDFF9hを作っている。(50hは終端文字から採る)

なお、直接数値を入力する形なら7バイトで済むので、努力値などにも収まる。その場合は以下の通り。
(バイナリエディタなどで間接的に実行する場合は「F8 04」→「21 F9 DF」でDFF9hを直接指定した方が無難)

F8 04 ; ld hl,sp+04 ここでDFF9を指す
36 C8 ; ld (hl),C8
C3 AC 1B ; jp 1BAC

以下、旧版(というかここの一連の処理を1BB1hで行える)

  1. べべぺぽ
  2. ぼロダぺな
  3. ゾゾ
  4. ぺなギボの
; ョべべぺぽ
AF ; xor a
3D ; dec a
3D ; dec a
47 ; ld b,a
48 ; ld c,b
50 ; ld d,b
; ぼロダぺな
3E A8 ; ld a,A8
0F ; rrca A8→54
47 ; ld b,a
C5 ; push bc 54FEをスタックに
50 ; ld d,b
; ゅにょゾゾ
E1 ; pop hl 54FEを代入
C6 E2 ; add a,E2
0E 0E ; ld c,0E
50 ; ld d,b
; ぺなギボの
47 ; ld b,a
C5 ; push bc 360Eをスタックに
06 1C ; ld b,1C
C9 ; ret
スタックしておいた360Eへ

360Eh経由でバンク1Chの54FEhを実行し、そらをとぶの処理を直接行う。
jp 360Eが直接入力できないため、スタックに入れてretしている。

  • FEh→「ョべべ」で作る。
  • 54h→「ぼロダ」でA8hを右ローテートして作る。
  • 36h→「にょ」で先ほど作った54hにE2hを足して作る。

はやぶさバッヂ(赤緑)再現(青版用)

  1. てかガ
; てかガ
C3 B6 05 ; jp 05B6

05B6hに飛ぶことで、赤緑のはやぶさバッヂと同じ挙動(メニューを強制的に開く等)をするコード。
下記のコードだと06EAhに飛んでいるが、これだと「てゥギ」で入力できない。(実際には「めゥギ」になっているけれど)

502名前:名無しさん、君に決めた!2010/07/26() 16:09:30 ID:???0
はやぶさバッヂ再現できたよー
青以外では動作しないかも

・わざマシン10×234
・じてんしゃ

コード内容

D2 EA 06 ; jp nc,06EA

化石変換

道具欄版

化石変換(化石不要)
種類 個数
ミックスオレ xx
かみなりのいし 34
わざマシン15 5
わざマシン03 198
わざマシン34 143
わざマシン14 201

コード内容

3E xx ; ld a,xx
21 22 D7 ; ld hl,D722
05 ; dec b これ自体に意味は無し
CB C6 ; set 0,(hl) 化石預けフラグを立てる
EA 8F D6 ; ld (D68F),a 復元ポケモン変更
C9 ; ret

道具からコードを実行すると、ミックスオレの個数に対応する内部コードのポケモンが化石から復元される。
化石を預ける必要が無いため、もはや変換ではない…?
ちなみにわざマシン15が5個なのは、14番目バグで「らガ」から取れるため。「らパ」でも「ら 」でも問題ない。

直接入力版(12バイト)

HP努力値上桁から書きだせば、すばやさ・とくしゅ個体値までに収まるサイズ。

21 22 D7 CB C6 FA A5 D2 EA 8F D6 C9
21 22 D7 ; ld hl,D722
CB C6 ; set 0,(hl) 化石預けフラグを立てる
FA A5 D2 ; ld a,(D2A5) 道具2番目個数参照
EA 8F D6 ; ld (D68F),a 復元ポケモン変更
C9 ; ret

道具2番目の個数に応じた内部コードのポケモンが化石から復元される。
set 0,(hl)を使っているため、復元したポケモンを引き取らずに連続実行しても大丈夫…なはず。

395名前:名無しさん、君に決めた!2010/04/23() 18:15:38 ID:???
5かいバグのプログラムを作ろうと頑張ってプログラムの勉強をしたが
この程度のプログラムしか作れねぇ・・・

化石変換
わざマシン50×163
わざマシン10×
わざマシン34×143
わざマシン14×201

使い方
グレンの研究所で博士に化石を渡してから5かいを使用する
すると貰えるポケモンが道具の1番目の個数に対応する
内部コードのポケモンに変化する
 

コード内容

FA A3 D2 ; ld a,(D2A3) 手持ち道具1番目個数を参照(5かい置く前提じゃ…)
00 ; nop
EA 8F D6 ; ld (D68F),a 復元ポケモンを書き換え
C9 ; ret

これをニックネームで再現しようとすると以下のようになる。

; がめぜユご
26 D2 ; ld h,D2
2E A3 ; ld l,A3
2A ; ldi (hl),a
50 ; ld d,b
; がよぜタづ
26 D6 ; ld h,D6
2E 8F ; ld l,8F
32 ; ldd (hl),a
50 ; ld d,b
; の
C9 ; ret

個体値・努力値MAX

手持ちのポケモンを変更する場合、アドレスは以下の値となる。

  1. D13Ch~D147h(3Fhが入力不能文字)
  2. D168h~D173h(68h~73hがすべて入力不能文字)
  3. D194h~D19Fh
  4. D1C0h~D1CBh
  5. D1ECh~D1F7h(ECh~F7hがすべて入力不能文字)
  6. D218h~D223h(18hおよび1Dh~23hが入力不能文字)

このため、アドレスの指定がやりやすく、5かいでも実行可能な手持ち4匹目(D1C0h~D1CBh)を例にする。

ニックネーム版

  1. がむぜひ
  2. べづづづづ
  3. づづづづづ
  4. づづづの
; がむぜひョ
26 D1 ; ld h,D1
2E CB ; ld l,CB
AF ; xor a 50 ; ld d,b
; べづづづづ
3D ; dec a 00→FF
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a
50 ; ld d,b
; づづづづづ
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a
50 ; ld d,b
; づづづの
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a
C9 ; ret

努力値・個体値版

手持ち4匹目努力値・個体値MAX
努力値
個体値
数値 ニモニック
H上 21 ld hl,D1C0
H下 C0
A上 D1
A下 3E ld a,FF
B上 FF
B下 06 ld b,0C
S上 0C
S下 22 ldi (hl),a
C上 05 dec b
C下 C8 ret z
AB個 20 jr nz,FB
SC個 FB
653名前:名無しさん、君に決めた!2010/09/29() 22:24:45 ID:???0
>>649
ミックスオレ*255
むしよけスプレー*12
かみなりのいし*60
わざマシン09*34
あなぬけのヒモ*32
わざマシン52*201

2番目から並べて5かい使えばおk

 

コード内容

3E FF ; ld a,FF
1E 0C ; ld e,0C ループ回数を指定 努力値と個体値を書き換えるので12回
21 3C D1 ; ld hl,D13C 手持ち1匹目のHP努力値上桁を指す
22 ; ldi (hl),a ループ開始位置
1D ; dec e
20 FC ; jr nz,FC ループ点
C9 ; ret

レベル100にする

7番目バグの再現的な奴。詳細は左記のページへ。

手持ち4匹目の経験値上桁を13hにする

経験値上桁を直接弄ることで、再計算によるレベルアップを目指す。

  1. がむぜすそ
  2. ぼドづの
; がむぜすそ
26 D1 ; ld h,D1
2E BD ; ld l,BD
BF ; cp a 事実上のnop
50 ; ld d,b
; ぼドづの
3E 13 ; ld a,13
32 ; ldd (hl),a
C9 ; ret

手持ち4匹目のレベルを99にする

レベルの数値を直接書き換えた後、ふしぎなアメを使うことで、Lv.100を目指す。

  1. がむぜみぼ
  2. にドづの
; がむぜみぼ
26 D1 ; ld h,D1
2E D0 ; ld l,D0
3E 50 ; ld a,50
; にドづの
C6 13 ; add a,13 50→63
32 ; ldd (hl),a
C9 ; ret

好きな技を覚えさせる

手持ち4匹目の技1をポイントアップ3回、PP0の任意のもの(例では10まんボルト)に書き換えるコード。技1を00hにしないように。
詳細は9番目バグのページへ。

  1. がむぜ
  2. ぺゾじひげ
  3. よンづゴ
  4. ぼたづの
; がむぜきョ
26 D1 ; ld h,D1
2E B7 ; ld l,B7
AF ; xor a
50 ; ld d,b
; ぺゾじひげ
47 ; ld b,a
0E 2C ; ld c,2C
CB 29 ; sra c
50 ; ld d,b
; ョよンづゴ
AF ; xor a
D6 AB ; sub a,AB 00→55
32 ; ldd (hl),a
09 ; add hl,bc
50 ; ld d,b
; ぼたづの
3E C0 ; ld a,C0
32 ; ldd (hl),a
C9 ; ret

習得する技を変えたい場合は赤字の部分を技コードに合わせ、技の位置を変えたい場合は緑字の「き」を「く」~「こ」に変更する。
ポイントアップ1回にしたい場合はコード4匹目の「ぼた」を「ぼパ」に、ポイントアップ2回にしたい場合は「ぼた」を「ぼア」にすればいい。


裏ワザスレ11より抜粋させて戴いた道具欄レシピ集。下準備Aを使う。道具の2番目から並べましょう。
※同スレ内で訂正があったものは正した。
どこでもいあいぎり+最後に見たポケモンを捕獲
434名前:名無しさん、君に決めた!2010/06/19() 09:45:27 ID:???
道具欄適当にいじってたら5かいバグのレシピ見つけた
道具欄の二番目から並べてね

・どこでもいあいぎり
わざマシン10 x229
プチマスター

・最後に見たポケモンを捕獲する
わざマシン10 x221(赤・緑後期では189
3かい

これをトレーナーと戦ってる時に使えば、相手のポケモンを奪える。
あと、これを使ってポケモンを捕まえると、次に会うポケモンの体力が捕まえたポケモンと同じになる
436名前:名無しさん、君に決めた!:2010/06/20(日) 09:43:36 ID:???
>>434

サファリとかでポケモンに逃げられても捕獲できるってことか

 
437名前:名無しさん、君に決めた!:2010/06/20(日) 09:48:19 ID:???
もはやプロアクションリプレイ(笑)だな
>>434
最後に見たポケモン捕獲ってのがよくわからないけど
最後に見たポケモンと戦闘するって解釈でおk?

 
438名前:名無しさん、君に決めた!:2010/06/20(日) 12:27:32 ID:???
>>437
最後に見たポケモンと戦うんじゃなくて、「やったー! ○○をつかまえたぞ!」ってなる
それと最後に見たポケモンをコレを使って捕まえた後に、もう一回これ使うと何故かメタモンが手に入るよ

 
440名前:名無しさん、君に決めた!:2010/06/20(日) 12:34:57 ID:???
>>438
隼バッジ使って戦闘脱出してからマスターボール投げるようなものか。
一回捕まえてそれ使えばもう一回捕まえられるってことでいいの?

 
441名前:名無しさん、君に決めた!:2010/06/20(日) 15:32:17 ID:???
>>440
マスボとかで捕獲→コレ使って再捕獲は可能です 
 

444 名前:名無しさん、君に決めた!:2010/06/30(水) 13:33:30 ID:???
>>434は化石を復元した後に使っても捕獲可能みたい

 
461名前:名無しさん、君に決めた!:2010/07/08(木) 17:33:54 ID:???
>>434,445
後期赤だがわざマシン10を32個捨てたらできた(つまり189個)
だがトレーナー戦中に使うと技がカオス
 
462名前:名無しさん、君に決めた!:2010/07/09(金) 20:56:57 ID:???
>>461
後期緑で正常に動作したことを確認
ちなみに一度もポケモンと戦ってない状態で実行するとイ゛ゃゾが捕まえられるようだ
またその後野生のポケモンと遭遇するとポケモンがHP0(瀕死)の状態で現れて
勝手に死んでいくという珍しい現象が起こった

 
463名前:名無しさん@そうだ選挙に行こう:2010/07/10(土) 13:07:39 ID:???
>>462
それを利用したらゆうれい倒せた


 

 
ポケモン所持数変更
510名前:名無しさん、君に決めた!2010/07/31() 11:16:09 ID:???0
ポケモンの所持数変更する5かいバグ見つけたよ
青版で作ったから赤では出来ないかも

わざマシン50x163
3
かいx140
げんきのかたまりxX

ポケモンの所持数がげんきのかたまりの数になるよ 
 
相手の技変更
629名前:名無しさん、君に決めた!2010/09/27() 11:06:15 ID:???0
需要あるかは知らないけど一応書いとく

相手の技変更

わざマシン50x163
わざマシン10x207
わざマシン1215x213
わざマシン1

一番目の道具の個数が技の内部コードに対応
3番目のわざマシンの種類を変えると技を変更する場所が変わるます

名前
上のレシピの三番目の道具を内部コードC1C5の道具x207にする
一番目の個数が文字の内部コードに対応

ちなみにどちらも戦闘中にしか効果は無いよ

 
指定した座標のマップタイル変更
603名前:名無しさん、君に決めた!2010/09/26() 19:12:06 ID:???0
いろいろやってみてわかった事をまとめてみた
ttp://www1.axfc.net/uploader/Sc/so/157127.txt
672名前:名無しさん、君に決めた!2010/10/03() 12:23:20 ID:???0
>>603を改良(?)したよー
道具欄の二番目から並べてね

わざマシン50x163
わざマシン10x71
わざマシン34xXX
ひでんマシン4x201

わざマシン34の数が変更するマップタイルの座標に対応してますん
(一番目の道具の個数がタイル番号に対応している)

 
★新たに作った物・見つけたもの等あれば


〇先頭のポケモンを「ヂバぶイ゛ダ」に変える
わざマシン10 ×169
がくしゅうそうち×1

ヂバぶイ゛ダ;内部コードF6(246)、図鑑No.40(プクリン)
 

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2024年04月20日 12:40