川のぬし釣り4

「4」では3からそのまま流用or一部を改変して流用しているルーチンがかなりあるため、このページでは主に「川のぬし釣り3」との違いについて説明しようと思います。
用語については3の方で定義したものをそのまま用いていますので、必要に応じて3のページを参照してください。


 ~MoKuZee~

 魚の体長算出ルーチン
 現在フィールドに存在する魚データの初期化ルーチン
 仕掛け(エサなど)の種類とビット割り当て
 魚の基準体長とピピ限界時間の関係
 フィールド中に咲いている花の情報
 虫の存在範囲と発見判定
 花が咲くタイミング
 マップの深度と釣りについて
 ファイト中の魚の挙動について
 花たちのメロディー(お庭のガーデニング)
 ぬし釣り4版の分布マップ



魚の体長算出ルーチン
アドレスと定数の違いを除いて「」と全く同じです。
(魚の体長算出ルーチンに限らず、3からそのまま流用or一部を改変して流用しているルーチンはかなりあります。)
魚の体長は1:5A1AH~のルーチンの中で算出されます。
ただし、3の体長は魚を釣り上げたあとで算出されていたのに対し、4ではフィールド中で魚がかかってファイト画面に遷移する直前に算出されます。

4では「ばらつきテーブル」の絶対最大ばらつき量が変更されています。
また、基準体長が101cm以上の場合も追加されています。

ばらつきテーブル
 DB 02H,06H08H,0CH,10H,14H

基準体長とばらつきテーブルのインデックスとの関係

条件式 IDX
   0cm<基準体長<11cm?
  11cm≦基準体長<21cm?
  21cm≦基準体長<41cm?
  41cm≦基準体長<61cm?
  61cm≦基準体長<101cm?
 101cm≦基準体長?

3では幻湖で釣ったときにだけボーナス値が加算されましたが、4では離島で釣ったときにだけ同様のボーナス値が加算されます。

ボーナス値のばらつきテーブル
 DB 01H04H06H,08H,0CH,10H

3の幻湖では大物判定が行われませんでしたが、4の離島では大物判定が行われます(釣り上げた総数も更新されます)。
最大体長の算出方式は離島でも離島以外でも同じで、最大体長は離島ボーナスとは無関係に決まります。
4では体長が最大体長以上であれば大物と判定されるように変更されたため、離島では大物が釣れやすくなっています。



現在フィールドに存在する魚データの初期化ルーチン
アドレスと定数の違いを除いて「」と本質的に同じです。
初期生成座標の算出方式も全く同じで、魚テーブルおよび魚データの構造も同じですが、4ではひとつのマップに対し、昼と夜とで別の魚テーブルが用意されています。
昼の魚テーブルはD:5DCDH~、 夜の魚テーブルはD:61E6H~にそれぞれ定義されています。
魚データはD601H~です。



仕掛け(エサなど)の種類とビット割り当て
仕掛けの合致条件は魚のIDごとに決まっていて、26E4H~のテーブルに定義されています。
このテーブルデータでは魚1種類あたりの情報がバイトで次のように構成されています。

以下の表のアドレスは、各魚の情報の先頭アドレスを基準とした相対アドレスです。

アドレス 内容
+0H 釣れるエサ(川)
+1H 釣れるエサ(海)
+2H 釣れるルアー
+3H 釣れるフライ
+4H 釣れるギジバリ
+5H 基準体長

現在の釣りの種類がウキ釣りor投げ釣りならばエサの条件が、ルアー釣りならばルアーの条件が、フライ釣りならばフライの条件がそれぞれ適用されます。
現在の釣りの種類は(CF3BH)に格納されていて、0:ウキ釣り/1:投げ釣り/2:ルアー釣り/3:フライ釣り となっています。
各条件は1バイトで、それぞれのビットが食いつく/食いつかないの判定条件を正論理で表しています。
エサ(川)の判定条件におけるビット割り当ては次のようになっています。

[7] [6] [5] [4] [3] [2] [1] [0]
ミミズ サシ こんちゅう アカムシ カワムシ ネリエ こざかな カエル

エサ(海)の判定条件におけるビット割り当ては次のようになっています。

[7] [6] [5] [4] [3] [2] [1] [0]
ゴカイ フクロイソメ イガイ オキアミ イソガニ アジ アジのきりみ サバ

ルアーの判定条件におけるビット割り当ては次のようになっています。

[7] [6] [5] [4] [3] [2] [1] [0]
スピナーベイト ミノー ポッパー バイブレーション クランクベイト ジグ ワーム カエル

フライの判定条件におけるビット割り当ては次のようになっています。

[7] [6] [5] [4] [3] [2] [1] [0]
メイフライW メイフライD カディスW カディスD ディプテラW ディプテラD ストーンフライW ストーンフライD

ギジバリの判定条件におけるビット割り当ては次のようになっています。

[7] [6] [5] [4] [3] [2] [1] [0]
カグラ・イナダ カグラ・カツオ カグラ・メジ カグラ・マカジキ カグラ・クロカジキ ツノバリ イカ トビウオ



魚の基準体長とピピ限界時間の関係
エサ釣りにおけるピピ限界時間(単位:フレーム)は「魚の基準体長を10で割ったときの商」とハリの大きさによってのみ一意に決まり、次の表中の値となります。(C:483EH~
ただし、この表における値はすべて10進数で表記しています。

/10商  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
ハリ小 50 60 50 40 20  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
ハリ中  0  0 30 35 40 50 60 50 40  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
ハリ大  0  0  0  0  0  0  0 30 40 50 60 50 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40




フィールド中に咲いている花の情報
フィールド中に咲いている花の情報はE:43C4H~にテーブル形式で定義されています。
(以降、このテーブルデータを「花テーブル」と呼びます。)
花テーブルの先頭アドレスは、フィールド別にそれぞれ次のようになっています。
 自宅    E:43C4H~
 下流湖   E:43C5H~
 清流    E:440AH~
 渓流    E:443BH~
 山上湖   E:4474H~
 砂浜    E:44A9H~
 沿岸    E:44DAH~
 外洋    E:44DBH~
 離島    E:44DCH~
花テーブル内の情報1件あたりの構成は次のようになっています。

以下の表のアドレスは、花テーブルの各データの先頭アドレスを基準とした相対アドレスです。

アドレス 内容
+0H X座標を16で割った値
+1H Y座標を16で割った値
+2H 花のID
+3H フィールド内での通し番号(0H、1H、2H・・・)

花は位置の決まっている固定シンボルです。魚と違って生成座標のばらつきはありません。

花が咲いているかどうか(摘み取られたあとかどうか)の情報はD119H~のRAMエリヤーに格納されています。
このエリヤー内では上記の「フィールド内での通し番号」をインデックスとして、各花の情報が1バイトで表現されています。
花が咲いているときはFFHで、摘み取られると0Hになります。



虫の存在範囲と発見判定
フィールド中に存在する虫の情報はD:6E4FH~にテーブル形式で定義されています。
(以降、このテーブルデータを「虫テーブル」と呼びます。)
虫テーブルの先頭アドレスは、フィールド別にそれぞれ次のようになっています。
 自宅    D:6E4FH~
 下流湖   D:6E50H~
 清流    D:6EB1H~
 渓流    D:6F2AH~
 山上湖   D:6FA3H~
 砂浜    D:7014H~
 沿岸    D:705DH~
 外洋    D:705EH~
 離島    D:705FH~
虫テーブル内の情報1件あたりの構成は次のようになっています。

以下の表のアドレスは、虫テーブルの各データの先頭アドレスを基準とした相対アドレスです。

アドレス 内容
+0H 存在範囲の左端のX座標を16で割った値
+1H 存在範囲の左端のY座標を16で割った値
+2H 存在範囲の横幅を16で割った値ー1
+3H 存在範囲の縦幅を16で割った値ー1
+4H 虫のID
+5H 発見確率(昼)
+6H 発見確率(夜)
+7H 0H

虫の存在範囲は固定されていて、魚と違い移動して変化することはありません。座標範囲のばらつきもありません。
また、魚データに相当するRAMエリヤーは存在せず、位置ごとの捕獲済みフラグなどはありませんから、同じ場所で何度でも虫を採集することができます。
ただし、詳しくは後述しますが、虫の存在範囲内だからといって必ずしも虫が見つかるとは限りません。

虫が見つかるかどうかは、フィールド上で「虫とり」コマンドが決定された直後に次のような流れで判定されます。

   

ここで「虫番号配列」とは、魚の魚番号配列に相当する概念で、C8DCH~の16バイトの領域のことを指します。
「虫番号」は、魚の「魚番号」に相当する概念で、虫テーブル内の各データの先頭アドレスから虫テーブルの先頭アドレスを引いて8で割ったときの商のことです。
虫番号は「虫のID」とは明確に異なる概念です。

虫番号配列の設定はD:678CH~のサブルーチンの中で行われ、具体的には次のような流れになっています。

   

プレイヤーの座標がフィールド内のどの虫の存在範囲内にも含まれていないとき、虫番号配列は空となります。
このサブルーチンを抜けた直後は、虫番号配列内の虫番号は昇順に並んでいます。
次に、D:6819H~のサブルーチンの中で虫番号配列を「シャッフル」します。

   

シャッフル後の虫番号配列の先頭アドレスの中身の値がFFHのとき、「このあたりに虫はいないようだ・・・」と表示され、虫捕り画面に遷移しません。
この状態のことを「虫が存在しない」状態と定義します。
虫が存在しないことは虫番号配列が空であることと同値です。
また、シャッフル後の虫番号配列の先頭アドレスの中身の値がFFHではない状態のことを「虫が存在する」状態と定義します。
虫が存在することは虫番号配列が空ではないことと同値です。

虫が存在するとき、E:461FH~のルーチンの中で虫番号配列の先頭の虫番号に対応する虫が見つかるかどうかの判定を行います。
虫の発見判定は次のような流れになっています。
発見確率は虫テーブルの中で虫のIDごとに昼のものと夜のものとがそれぞれ1バイトずつ(計2バイト)定義されています。
虫が見つかる場合も見つからない場合も、虫捕り画面には遷移します。
なお、作中には「たいがいの虫は よるにはでてこうへんから おぼえときや。」という発言をするNPCが登場しますが、実際には夜でもすべての虫が少なくとも1%の確率で出現します。


これは大抵の虫の発見確率(夜)の値が「0H」に設定されているためで、虫が見つかるのは「乱数値を100で割った余り」が「発見確率」以下のときだからです。
仕様なのか不具合なのかの判断は難しいですが、虫が見つかる条件を「発見確率」未満となるように修正すればカヌー名人の言う通りになります。
ちなみに、昼間でも夜でも虫の存在範囲は全く同じです。



花が咲くタイミング
花が咲くのは、
のいずれかのタイミングです。


フィールドというのは「下流湖」や「渓流」などのことを指していて、お店や民家から出入りするだけではフィールドは変わったことにはなりません。
時計による時間変更で昼夜が入れ替わったとき(たとえば、AM 05:55からAM 06:00に変更したとき)にも花が咲きますが、歩行中に昼夜が入れ替わったときは花は咲きません。
また、宿屋に泊まって昼夜が入れ替わったときも花は咲きません。



マップの深度と釣りについて
マップの各地点ごとに水の深さ(深度)がテーブルで定義されています。
テーブルはマップごとに定義されていて、各先頭アドレスはそれぞれ次のようになっています。
 自宅    D:6A14H~
 下流湖   D:6A15H~
 清流    D:6A7EH~
 渓流    D:6AC7H~
 山上湖   D:6AF8H~
 砂浜    D:6B81H~
 沿岸    D:6BFAH~
 外洋    D:6CFBH~
 離島    D:6DBCH~
テーブル内の情報1件あたりの構成は虫や貝のテーブルと類似していて、テーブル内の各データの先頭アドレス+0H~+3Hに座標に関する情報が定義されています。
+7Hに深度の値が定義されていますが、この値はその地点における仕掛け(ウキなど)の沈む「最大深度」の値となっています。
この値が大きければ大きいほど水深が深いということを意味します。

仕掛けが実際にどの深度まで沈むのかは、釣りの種類(エサ釣り、ルアー釣りなど)と仕掛け(ウキ大、おもり小など)、そして地点ごとの最大深度に依存します。
仕掛けの現在の深度は(CFCCH)に格納されています。
エサ釣り、ルアー釣り、ケバリ釣り、トローリングのときは仕掛けが沈まず、深度は常に5~6Hになります。
投げ竿+おもりの投げ釣りの場合、「おもり大」を装備しているときは、その地点の最大深度まで仕掛けが沈みます。
おもり小を装備しているときは、たとえ地点の深度が32H以上でも、仕掛けは31Hより深くは沈みません。
ふりだし竿+おもりの投げ釣りの場合、「おもり大」を装備していても32Hより深くは沈みません。
おもり小のときは全く沈まず、深度は5Hになります。
なお、地点の最大深度はプレイヤーの現在の座標を参照して算出されます。したがって、深いところからキャストすれば最大深度は深くなります。

船釣りのときは深度を自由に調整できますが、上限はその地点の最大深度です。
船釣りをしている最中に画面上に表示される値が現在の仕掛けの深度で、(CFCCH)に1を足した値になっています。

また、魚のIDごとに「深いところに棲んでいるかどうか?」を表す情報が用意されています。
これはD:5C3BH~のテーブルに魚のIDごとに2バイトずつデータが定義されていて、それぞれ昼/夜の深海フラグです(0:浅いところに棲んでいる/1:深いところに棲んでいる)。
深いところに棲んでいる魚を釣るためには仕掛けの深度が31H以上である必要があります。
仕掛けの深度が31H未満のときは、深いところに棲んでいる魚は絶対にかかりません。
逆に、浅いところに棲んでいる魚を釣るためには仕掛けの深度が30H以下である必要があり、深度が31H以上のときは浅いところに棲んでいる魚は絶対にかかりません。
仕掛けの深度による魚のアタリ判定はD:5C15H~のサブルーチンの中で行われています。

ほとんどの魚は浅いところに棲んでいますが(深海フラグ=0)、「ヒラメ」「シロアマダイ」「マダコ」「ウツボ」「キンメダイ」「クエ」「メバル」だけは深いところに棲んでいます。
よって、これらの魚たちを釣り上げるには投げ釣りor船釣りを選択する必要があります。
特に、ウツボとメバルは昼と夜とで深海フラグが異なっていて、昼間の深海フラグは1ですが、夜の深海フラグは0になっています。
メバルのいる砂浜では船釣りができないので、昼間に釣る場合は投げ釣り一択となります。夜はルアーでも釣れます。

マップごとの各地点における最大深度を分布マップにまとめました。
深いところほど濃い青色で表示しています。
領域が重なっていたり、色のついていない未定義の地点があったりしますが、これは実際にデータ上でこのようになっているためで、設定ミスの可能性があります。
ちなみに、未定義の地点の最大深度はデフォルト値の「5H」となります。



ファイト中の魚の挙動について
基本的には「」とほぼ同じですが、一部変更/追加となっている処理がありますので、フローチャート上に変更点を追記しました。
赤色の文字の箇所が4にて変更/追加された部分です。

まずは、Bボタンの押下状況による状態遷移ルーチン(C:5179H~)のフロー図を示します。

   

「魚カウンター値」による分岐と、職人に作ってもらった特別なルアーの装備状態による分岐が追加されています。
魚カウンター値というのはわたしの造語です。
これは(D598H),(D599H)にリトルエンディアンで格納されている値(以降、これを「魚カウンターのベース値」と呼ぶ。)に追従して決まる、ファイト中において(FFAEH),(FFAFH)にリトルエンディアンで格納されているカウンター値のことを指しています。
また、魚カウンターと魚カウンターのベースとを総称して「魚カウンター群」と呼ぶことにします。 魚カウンター群の値は魚の抵抗中に単調減少し、魚の安静状態中にプレイヤーが引っ張っているときに単調増加します(C:5D27H~)。
なお、「タイマー値」とは別の概念ですので混同しないように気をつけてください。
魚カウンター群の最大値((D5A4H),(D5A5H)にリトルエンディアンで格納される)は装備中の竿によって決まります(C:463D~)。

竿のIDと名前、魚カウンター群の最大値(表中では「値」と略記)の一覧を以下に示します。

ID 名前
00 ふりだしざお小 0618
01 ふりだしざお大 0960
02 なげざお小 0780
03 なげざお大 0B7C
04 ルアーロッド6ft 0780
05 ルアーロッド8ft 0B7C
06 ルアーロッド10ft 0E10
07 フライロッド5ft 0618
08 フライロッド7ft 0960
09 ふねづりざお小モノ 0960
0A ふねづりざお大モノ 0E10
0B トローリングロッド30b 0B7C
0C トローリングロッド80b 1068
0D ルアーロッド14ft 12C0
0E フライロッド11ft 1068
0F トローリングロッド130b 1518


ルアー釣りとトローリング以外のときは魚カウンター群の最大値が魚カウンター群の初期値になります。
ルアー釣りorトローリングのときは、魚カウンター群の最大値を半分にした値が魚カウンター群の初期値になります。
「魚カウンターのベース値」が「魚カウンター群の最大値から8を引いた値」以上になったとき、またそのときに限り、魚を釣り上げることができます。
魚カウンター値が255以下になると、「ピピーーーッッ!!!!!」と鳴って魚は針から離れて逃げてゆきます。
Bボタンを押していないにも関わらず逃げ出すため「何もしていないのに急に逃げられた」という感じがしますが、実際は魚カウンター値が255以下になると強制的にBボタンを押しているときと同じルートを辿らせられることになります。
わたしはこれを「ピピ切り」と呼んでいます(突然ピピ音がなってファイトが打ち切られるため)。

ピピ切りを回避するためには、
ことが重要です。
性能のいい竿の方が魚カウンター群の最大値が高く設定されているため、こういった竿を使えばピピ切りまでの猶予が増します。
ただし、ルアー釣りorトローリングのときは性能のいい竿を使うと釣りあげるまでに引っ張らなければならない量も増えますので、引きの弱い(=基準抵抗時間の短い)魚を釣る場合はあえて小型の魚向けの竿を使うのもアリです。
そして、魚が安静状態のときにプレイヤーが引っ張っている時間が長いほど魚カウンター群の値は多く回復するので、魚が安静状態に入ったらなるべく早く引っ張るようにするのがコツです。
これはとても大切なことです。1F早く引っ張り始めると、4F余分に引っ張ることができます。
つまり、1秒早く引っ張り始めると4秒間も余分に引っ張れるのです。
抵抗時間を短く抑えることも大切ですが、これは乱数によって決まるので調整は難しいです。
抵抗時間の長い方・・・ロングが選ばれる確率は1/4なので、ロングが選ばれたときはBボタンを軽く押して(押し続けないように注意!)抵抗時間の短い方・・・ショートが選ばれるまで再抽選を繰り返すのもひとつの手です。
しかし、ロングかどうかをすぐに見抜くのは難しいですし、何度も再抽選するのは逆効果です。
それに、ピピ音発生回数が増加するため、仕掛けを盗られてしまうリスクも高まります。

次に、職人に作ってもらった特別なルアーの装備状態による分岐について説明します。
といっても、これはもう文字通りですが・・・。(*^O^*)
詳細に書くと、「現在の釣りの種類がルアー釣り&装備中のルアーがフロッグ&フラグ(D503H)が立っている」ときはピピ音発生回数を増加させない、ということになります。
フラグ情報は(D4E3H)~の83Hバイトに格納されています。
(D503H)はルアーの職人さんに特別なルアーを作ってもらったとき、またそのときに限り、オンになります。
フラグが折れている状態では0、フラグが立つと1になります。フラグはすべて正論理で、それぞれのフラグは1バイトで表現されています。

最後に、タイマー値がゼロになったときの状態遷移ルーチン(C:5179H~)のフロー図を示します。

   

図の右下に、職人に作ってもらった特別なルアーの装備状態による分岐が追加されています。



花たちのメロディー(お庭のガーデニング)
お庭に咲いている花にお水をあげるとメロディーを奏でてくれます(1:5595H~ いわゆる「花たちのメロディー」)。
それぞれの花には固有の音があり、音の高さ(音階)と音の長さ(長い音or短い音)が花の種類によって異なります。
音の高さはF1~G3までの16段階で、それぞれに長い音と短い音が存在します。
音階は固定ドのドレミファソラシのみで、ド#のような黒鍵の音は存在しません。

1本の花が奏でる音の長さは17フレーム(約283ms)です。
長音の場合は17フレームの間ずっと音が鳴り続けます。短音の場合は初めの14フレーム(約233ms)だけ音が鳴り、残りの3フレーム(約50ms)は休符となります。
お庭に植えられる花は最大で32本ですので、花たちのメロディーの長さは最大で約9秒までです。
同じ音の花が連続する場合は、音符がタイで繋がっているときのように音が途切れずに流れます。

お庭に咲いている花の情報は1本につき1バイトで表されていて、花壇の左上の花から右下の花に向かって(CFD2H)~の20Hバイトの領域内に順に格納されています。
格納される値は対象の位置に花が咲いていないときはFFHとなり、花が咲いているときはその花のIDとなります。

花たちのメロディーを効率的に作成するための補助ツールを作成しました。
Google Chrome上では動作することを確認しましたが、他のブラウザでは動くかどうかわかりません。
花たちのメロディー作成ツール



ぬし釣り4版の分布マップ
魚の生成時の座標範囲、花の咲いている範囲、虫の存在範囲をマップ上にまとめてみました。

魚、花、虫の分布マップ(川のぬし釣り4)