Sa・Ga2の正体

〜Sa・Ga2の作り方〜

 
 
ここでは、Sa・Ga2「秘宝伝説」の徹底解剖を行いたいと思います。
なお、裏技やデータなど、表向きの知識はこちらからご覧下さい。
 
 
        0.はじめに
 
           ここでは主に、「オブジェクト指向」を取り上げて解説をしていく。よって(自分も偉そ
           うなことを言える程知識はないが)、ある程度のプログラミング知識(C++、JAVA等)
           を持って読まれることが望ましい。ただ、それでなくとも意味は分かる文章にしてみ
           るつもりではある。
           また、私は決して本ソフト「秘宝伝説」を改造したり、プログラムを見たりはしていな
           い(一部、他サイトで改造コードを見たことはあるが)。あくまで推測である。よって、
           これが完全・正確な情報だとは思わないでもらいたい。
 
        1.キャラクターについて
 
           まず、キャラクターについて解説する。敵味方問わず、キャラクターには以下のクラ
           ス・変数が設定されていると思われる。
 
               class chara {                     ……クラス・キャラクター
                 char name[4],                  ……名前
                    race[8],                   ……種族(モンスター)名
                    item_name[9][8],             ……装備の名前×8+1個
                    secret_name[8];             ……秘宝の名前
                 int hp,                       ……現在HP
                   max_hp,                    ……最大HP
                   offense,                    ……ちから
                   max_offense,                 ……ちから(戦闘中)
                   defense,                    ……ぼうぎょ
                   max_defense,                 ……ぼうぎょ(戦闘中)
                   speed,                     ……すばやさ
                   max_speed,                  ……すばやさ(戦闘中)
                   magic,                     ……まりょく
                   max_magic,                  ……まりょく(戦闘中)
                   item_num[9],                 ……装備の使用回数×8+1個
                   secret_num; }                ……装備している秘宝の個数
 
           緑の文字は、普通考えて思い浮かばないものである。maxとしているのは正確には
           誤りである。「ちから」と「すばやさ」に関しては、戦闘中は下がることもあるからであ
           る。また、ではなぜ「ぼうぎょ」と「まりょく」があるのか、というと……思い出して欲し
           い。戦闘中にパラメータを上昇させるものがあったことを。そう。「マギ」である。この
           マギを装備すると、「5+マギの個数」ほどパラメータが上がる。これはROTさんの
           サイトの情報を借用してきたものである。
           では、青の文字は何か。実はこれは誤りである。正しくは以下の通りになる。
 
                 int race,                      ……種族(モンスター)コード
                   item_code[8],                 ……アイテムコード×8
                   secret_code;                 ……秘宝コード
 
           つまり、どういうことか。「キャラクター」というクラスの中にわざわざ文字列を保存せ
           ず、(別の所で宣言している)アイテム・秘宝のコード(つけられた番号)を覚えてお
           いて、メニュー・戦闘画面の呼び出し時にはじめて、そのコードに合った名前を表示
           する、というわけである(正確には、名前もコードである。つまり文字に番号をつけて
           おき、2ビット×4を記憶させるわけだが、ここは分かりやすいように文字列とする)。
           で、これらの初期設定であるが、整数値は全て0、文字列はヌル(null)である。ゲ
           ームスタートして、主人公の種族・名前を決定してようやく、パーティ1人目のこれら
           の値が埋まるわけである。この事実は、ある裏技に基づいている。
           それはどんな裏技か。「えのき主人公」である。主人公の名前決定直後にセレクト
           ボタン(またはスタートボタン)を押すと、主人公+えのき3匹のメニュー画面が出る。
           だがこの時のえのきは、パラメータ全てが0であるばかりかHPも0、装備は全て「バ
           トルハンマー」で使用回数はやはり0になっている。そして注視したいのは名前で、
           戦闘に入るとよく分かるが「スペース4つ」で埋められているのではなく、正真正銘
           の名無し、文字数なしである。これがヌル、数値でいう0のことである。つまり、ゲー
           ムスタート直後は、クラス・キャラクター内の全ての変数が0であることが分かる。
           ちなみに、これはあるサイトを検索して分かったことだが、アイテムコードの00(2ビ
           ット)が「バトルハンマー」であり、種族コードの00(同じく2ビット)が「えのきもどき」
           である。つまり、こういったコードも全て初期値が0であることが分かる。
           また、この裏技から、新たな変数を発見することもできる。「えのき主人公」の裏技
           をやったことのない人には分かりにくいと思うが、このえのきは人間種族と同様、
           パラメータアップすることができる。またアイテムも装備でき、モンスターのように食
           肉ができない。このことから、種族コードとは別に「体質変数(仮名)」があると予想
           される。つまりこれが0なわけで、その内容は以下の通りと思われる。
 
               0:人間種族。アイテムを装備でき、パラメータアップする。
               1:エスパー種族。アイテムを装備でき、パラメータアップ、能力を取得する。
               2:モンスター種族。宿に泊まると能力が回復、食肉ができる。
               3:メカ種族。装備によってパラメータが変動、宿に泊まると装備が1/2回復。
               4:NPC種族。装備できるが外せない。パラメータアップもない。
              (5:「せんせい」。装備も食肉もできない)
 
           最初、これらは種族コードで決められることかと思っていたが、そうするとえのきも
           食肉できるはずだし、アイテム装備もできないはずである。つまり、このことにより、
           種族コードとは別の、「パラメータアップできる」と判別する変数が存在することが
           分かるわけである。
           だか、1つ分からないことがある。このえのき、モンスターの「えのきもどき」と1つ、
           共通することがある。それは「ドレイン防止」という性質である。これは「とかす」
           以外のHP吸収能力(「ちをすう」は未確認)を、ダメージは受けるがHPを吸い取ら
           れないというものである。これがえのきにもあるということは、このことはひょっとし
           て種族コードで特別に決定すことなのかもしれない。
 
 
 
           (ここから話は全く別になります^^;)
           ところで、秘宝伝説の改造プレイレポートなるものを作成してみました(ただしエ○
           ュを、バイナリエディタを用いてですが)。
           興味がある方はご覧下さい。パスワードは「重戦車」という英単語(11文字)です。
           リターンキーを押すとエラーとなるので、ボタンをクリックして下さい。
 
                         パスワードを入力して下さい。