; 並び替え関数 ;  この関数はサブルーチンとして使われる事を前提としたシナリオナンバー、および構成となっている。 ; 各キャラの人数や配置を記憶する事で、自由且つ動的な並び替えを実現する。 ; ここでは、登場キャラ8人、最大4人のパーティを想定している。もし登場キャラが9人になる場合、現状ではかなりの手術をしなければならない。 ; ; 使用するスイッチ 401 402 403 404 405 406 407 408 409 416 417 418 419 500 ; スイッチ401〜408までには、各キャラがすでに仲間に加わっているかを1か0で設定する。1にすると、リストボックスに名前が載る。 ; スイッチ409は、仲間の総人数を記憶している。リストボックスのサイズを決定する時に用いる。 ; スイッチ416〜419は、各キャラの立ち位置を記憶する。自由に並び替えができるようにするには必須条件。 ; スイッチ500は汎用のカウンタとして使う。ここでは、ループする回数を記憶している。別に無くても良さそうだが。 ; ; 処理モード1 = 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1 ; 選択 ウィンドータイトル パーティ関連 スイッチ メッセージ 音。 ; ; 処理の流れ ; A 予め現在仲間になっているキャラの人数を計算し、またそのキャラを全て表に出す。こうする事で、後のリストボックスにキャラ名を確実に表示する。 ; B リストボックスで何番目のキャラが選択されたかを拾ってくる。重要なのは、キャラの名前を拾うのではなく、あくまで何番目か?という事。 ; C リストボックスから得た番号を元に、どのキャラを選択したのかを特定する。キャラの存在をしらみ潰しに探し、見つけた時に1番目でなかったら次のキャラを探しに行く。 ; D キャラをアドレスに格納する。この地点では、実際のキャラ変更は行わない。 ; E 上記B〜Dまでの処理を規定回数(ここでは4回)繰り返す。なおBにて「決定」を選択すると自動的にブレイクされる。 ; F 取得しているアドレスを元に、実際のキャラ並び替えを行う。重複登録があると少しおかしな表示になるが、内部的には問題無し。 ; G 最後に、キャラの並びを確認してもらう。気に入らなければ、最初から組み直してもらおうという魂胆。 ; ; 初期化・pt9にダミーキャラを設置する。 s99001/モード=1 s99002/=409,0,416,0,500,0 s99003pts=0,0,0,0,0,0,0,0,1 s99003pts順=0,0,0,0,0,0,0,0,1 ; キャラの人数の計算および、加入キャラの確認 ; 401 キャラ1 s99006もし/=401,0,99009 s99007pt=1,1 s99008/+=409,1 ; 402 キャラ2 s99009もし/=402,0,99012 s99010pt=2,1 s99011/+=409,1 ; 403 キャラ3 s99012もし/=403,0,99015 s99013pt=3,1 s99014/+=409,1 ; 404 キャラ4 s99015もし/=404,0,99018 s99016pt=4,1 s99017/+=409,1 ; 405 キャラ5 s99018もし/=405,0,99021 s99019pt=5,1 s99020/+=409,1 ; 406 キャラ6 s99021もし/=406,0,99024 s99022pt=6,1 s99023/+=409,1 ; 407 キャラ7 s99024もし/=407,0,99027 s99025pt=7,1 s99026/+=409,1 ; 408 キャラ8 s99027もし/=408,0,99030 s99028pt=8,1 s99029/+=409,1 ; ここでダミーを外す。最低一人はキャラがいるはずだ。 s99030pt=9,0 ; キャラ人数に応じてリストボックスを生成 s99031音=3 s99032もし/=409,8,99049 s99033もし/=409,7,99047 s99034もし/=409,6,99045 s99035もし/=409,5,99044 s99036もし/=409,4,99043 s99037もし/=409,3,99042 s99038もし/=409,2,99041 s99039m= 今は一人だった… s99040gosub=return s99041t= 並び替え s99041?6=99171,99181,99246@1 %順名1_$2 %順名2_$A 決定 s99042t= 並び替え s99042?6=99171,99181,99191,99246@1 %順名1_$2 %順名2_$3 %順名3_$A 決定 s99043t= 並び替え s99043?6=99171,99181,99191,99201,99246@1 %順名1_$2 %順名2_$3 %順名3_$4 %順名4_$A 決定 s99044t= 並び替え s99044?6=99171,99181,99191,99201,99211,99246@1 %順名1_$2 %順名2_$3 %順名3_$4 %順名4_$5 %順名5_$A 決定 s99045t= 並び替え s99045?6=99171,99181,99191,99046,99246@1 %順名1_$2 %順名2_$3 %順名3_$N 次へ$A 決定 s99046t= 並び替え s99046?6=99201,99211,99221,99045,99246@4 %順名4_$5 %順名5_$6 %順名6_$N 次へ$A 決定 s99047t= 並び替え s99047?6=99171,99181,99191,99201,99048,99246@1 %順名1_$2 %順名2_$3 %順名3_$4 %順名4_$N 次へ$A 決定 s99048t= 並び替え s99048?6=99211,99221,99231,99047,99246@5 %順名5_$6 %順名6_$7 %順名7_$N 次へ$A 決定 s99049t= 並び替え s99049?6=99051,99066,99081,99096,99050,99246@1 %順名1_$2 %順名2_$3 %順名3_$4 %順名4_$N 次へ$A 決定 s99050t= 並び替え s99050?6=99111,99126,99141,99156,99049,99246@5 %順名5_$6 %順名6_$7 %順名7_$8 %順名8_$N 次へ$A 決定 ; 各キャラを立ち位置アドレスに格納する ; 基本的にキャラが入っていないアドレスは0なので、0であるかどうかを見て格納先アドレスを決定する。 ; キャラ1 s99051もし/=416,0,99056 s99052もし/=417,0,99058 s99053もし/=418,0,99060 s99054go=99062 s99056/=416,1,417,0,418,0,419,0 s99057go=99241 s99058/=417,1,418,0,419,0 s99059go=99241 s99060/=418,1,419,0 s99061go=99241 s99062/=419,1 s99063go=99241 ; キャラ2 s99066もし/=416,0,99071 s99067もし/=417,0,99073 s99068もし/=418,0,99075 s99069go=99077 s99071/=416,2,417,0,418,0,419,0 s99072go=99241 s99073/=417,2,418,0,419,0 s99074go=99241 s99075/=418,2,419,0 s99076go=99241 s99077/=419,2 s99078go=99241 ; キャラ3 s99081もし/=416,0,99086 s99082もし/=417,0,99088 s99083もし/=418,0,99090 s99084go=99092 s99086/=416,3,417,0,418,0,419,0 s99087go=99241 s99088/=417,3,418,0,419,0 s99089go=99241 s99090/=418,3,419,0 s99091go=99241 s99092/=419,3 s99093go=99241 ; キャラ4 s99096もし/=416,0,99101 s99097もし/=417,0,99103 s99098もし/=418,0,99105 s99099go=99107 s99101/=416,4,417,0,418,0,419,0 s99102go=99241 s99103/=417,4,418,0,419,0 s99104go=99241 s99105/=418,4,419,0 s99106go=99241 s99107/=419,4 s99108go=99241 ; キャラ5 s99111もし/=416,0,99116 s99112もし/=417,0,99118 s99113もし/=418,0,99120 s99114go=99122 s99116/=416,5,417,0,418,0,419,0 s99117go=99241 s99118/=417,5,418,0,419,0 s99119go=99241 s99120/=418,5,419,0 s99121go=99241 s99122/=419,5 s99123go=99241 ; キャラ6 s99126もし/=416,0,99131 s99127もし/=417,0,99133 s99128もし/=418,0,99135 s99129go=99137 s99131/=416,6,417,0,418,0,419,0 s99132go=99241 s99133/=417,6,418,0,419,0 s99134go=99241 s99135/=418,6,419,0 s99136go=99241 s99137/=419,6 s99138go=99241 ; キャラ7 s99141もし/=416,0,99146 s99142もし/=417,0,99148 s99143もし/=418,0,99150 s99144go=99152 s99146/=416,7,417,0,418,0,419,0 s99147go=99241 s99148/=417,7,418,0,419,0 s99149go=99241 s99150/=418,7,419,0 s99151go=99241 s99152/=419,7 s99153go=99241 ; キャラ8 s99156もし/=416,0,99161 s99157もし/=417,0,99163 s99158もし/=418,0,99165 s99159go=99167 s99161/=416,8,417,0,418,0,419,0 s99162go=99241 s99163/=417,8,418,0,419,0 s99164go=99241 s99165/=418,8,419,0 s99166go=99241 s99167/=419,8 s99168go=99241 ; リストボックスで選択されたキャラをパーティ格納用アドレスに繋ぐ。 ; 1番目のキャラが選択された(そのままアドレスへ渡す)。 s99171もし/=401,1,99051 s99172もし/=402,1,99066 s99173もし/=403,1,99081 s99174もし/=404,1,99096 s99175もし/=405,1,99111 s99176もし/=406,1,99126 s99177もし/=407,1,99141 s99178もし/=408,1,99156 s99179go=99096 ; 2番目のキャラが選択された(頭から検索し、該当キャラがいた場合はその次のキャラを探しに行く。なぜならヒットしたキャラは1番目のキャラだから) s99181もし/=401,1,99172 s99182もし/=402,1,99173 s99183もし/=403,1,99174 s99184もし/=404,1,99175 s99185もし/=405,1,99176 s99186もし/=406,1,99177 s99187もし/=407,1,99178 s99188もし/=408,1,99156 ; 3番目のキャラが選択された(上に同じ)。 s99191もし/=401,1,99182 s99192もし/=402,1,99183 s99193もし/=403,1,99184 s99194もし/=404,1,99185 s99195もし/=405,1,99186 s99196もし/=406,1,99187 s99197もし/=407,1,99188 ; 4番目のキャラが選択された(上に同じ)。 s99201もし/=401,1,99192 s99202もし/=402,1,99193 s99203もし/=403,1,99194 s99204もし/=404,1,99195 s99205もし/=405,1,99196 s99206もし/=406,1,99197 ; 5番目のキャラが選択された(上に同じ)。 s99211もし/=401,1,99202 s99212もし/=402,1,99203 s99213もし/=403,1,99204 s99214もし/=404,1,99205 s99215もし/=405,1,99206 ; 6番目のキャラが選択された(上に同じ)。 s99221もし/=401,1,99212 s99222もし/=402,1,99213 s99223もし/=403,1,99214 s99224もし/=404,1,99215 ; 7番目のキャラが選択された(上に同じ) s99231もし/=401,1,99222 s99232もし/=402,1,99223 s99233もし/=403,1,99224 ; ループ(人数が4人に達するまで上記のキャラ登録を続ける) s99241/+=500,1 s99242もし/=500,4,99251 s99243go=99031 ; 決定ボタンを押した時(もしキャラがいない場合はエラーになるので弾いてしまう) s99246もし/=416,0,99248 s99247go=99251 s99248音=4 s99249m= 誰もいません。もう一度パーティ設定をやり直して下さい。 s99250go=99001 ; キャラのアドレスからパーティを生成する。 ; 1人目(ここはptsで固定しちゃう) s99251もし/=416,1,99261 s99252もし/=416,2,99263 s99253もし/=416,3,99265 s99254もし/=416,4,99267 s99255もし/=416,5,99269 s99256もし/=416,6,99271 s99257もし/=416,7,99273 s99258もし/=416,8,99275 s99261pts=1,0,0,0,0,0,0,0,0 s99261pts順=1,0,0,0,0,0,0,0,0 s99262go=99281 s99263pts=0,1,0,0,0,0,0,0,0 s99263pts順=0,1,0,0,0,0,0,0,0 s99264go=99281 s99265pts=0,0,1,0,0,0,0,0,0 s99265pts順=0,0,1,0,0,0,0,0,0 s99266go=99281 s99267pts=0,0,0,1,0,0,0,0,0 s99267pts順=0,0,0,1,0,0,0,0,0 s99268go=99281 s99269pts=0,0,0,0,1,0,0,0,0 s99269pts順=0,0,0,0,1,0,0,0,0 s99270go=99281 s99271pts=0,0,0,0,0,1,0,0,0 s99271pts順=0,0,0,0,0,1,0,0,0 s99272go=99281 s99273pts=0,0,0,0,0,0,1,0,0 s99273pts順=0,0,0,0,0,0,1,0,0 s99274go=99281 s99275pts=0,0,0,0,0,0,0,1,0 s99275pts順=0,0,0,0,0,0,0,1,0 s99276go=99281 ; 2人目(ここからはfor文で書きたい) s99281もし/=417,1,99291 s99282もし/=417,2,99293 s99283もし/=417,3,99295 s99284もし/=417,4,99297 s99285もし/=417,5,99299 s99286もし/=417,6,99301 s99287もし/=417,7,99303 s99288もし/=417,8,99305 s99289go=99371 s99291pt=1,1 s99292go=99311 s99293pt=2,1 s99294go=99311 s99295pt=3,1 s99296go=99311 s99297pt=4,1 s99298go=99311 s99299pt=5,1 s99300go=99311 s99301pt=6,1 s99302go=99311 s99303pt=7,1 s99304go=99311 s99305pt=8,1 s99306go=99311 ; 3人目 s99311もし/=418,1,99321 s99312もし/=418,2,99323 s99313もし/=418,3,99325 s99314もし/=418,4,99327 s99315もし/=418,5,99329 s99316もし/=418,6,99331 s99317もし/=418,7,99333 s99318もし/=418,8,99335 s99319go=99371 s99321pt=1,1 s99322go=99341 s99323pt=2,1 s99324go=99341 s99325pt=3,1 s99326go=99341 s99327pt=4,1 s99328go=99341 s99329pt=5,1 s99330go=99341 s99331pt=6,1 s99332go=99341 s99333pt=7,1 s99334go=99341 s99335pt=8,1 s99336go=99341 ; 4人目(これで最後) s99341もし/=419,1,99351 s99342もし/=419,2,99353 s99343もし/=419,3,99355 s99344もし/=419,4,99357 s99345もし/=419,5,99359 s99346もし/=419,6,99361 s99347もし/=419,7,99363 s99348もし/=419,8,99365 s99349go=99371 s99351pt=1,1 s99352go=99371 s99353pt=2,1 s99354go=99371 s99355pt=3,1 s99356go=99371 s99357pt=4,1 s99358go=99371 s99359pt=5,1 s99360go=99371 s99361pt=6,1 s99362go=99371 s99363pt=7,1 s99364go=99371 s99365pt=8,1 s99366go=99371 ; 最後に登録キャラの確認画面を出す。「組み直す」以外を選択すると決定となり処理終了。 s99371音=6 s99372もし/=500,4,99378 s99373もし/=500,3,99377 s99374もし/=500,2,99376 s99375t= 確認 s99375?6=99379,99001@%順名1_$組み直す s99376t= 確認 s99376?6=99379,99379,99001@%順名1_$%順名2_$組み直す s99377t= 確認 s99377?6=99379,99379,99379,99001@%順名1_$%順名2_$%順名3_$組み直す s99378t= 確認 s99378?6=99379,99379,99379,99379,99001@%順名1_$%順名2_$%順名3_$%順名4_$組み直す s99379モード=0 s99380音=134 s99381gosub=return