0.とりあえずサンプル
複数箇所を弄る上に、追加ファイルは無いのでサンプルを置いておきます。
なるべくサンプルを見ながら何処を弄ったかの解説をご覧下さい。
なお、大人数対応版に沿ってありますが、大人数対応版でなくても実装可能です。
1.;キャラカードを持っているか?
;キャラカードを持っているか? C = 0 ;ver1.40風新キャラ対応 REPEAT 50 ;既に登場中のキャラと同じキャラNOは排除 B = COUNT+1 IF CHARANUM >= 2 SIF NO:1 == B CONTINUE ENDIF IF CHARANUM >= 3 SIF NO:2 == B CONTINUE ENDIF IF CHARANUM >= 4 SIF NO:3 == B CONTINUE ENDIF IF CHARANUM >= 5 SIF NO:4 == B CONTINUE ENDIF IF CHARANUM >= 6 SIF NO:5 == B CONTINUE ENDIF IF CHARANUM >= 7 SIF NO:6 == B CONTINUE ENDIF IF CHARANUM >= 8 SIF NO:7 == B CONTINUE ENDIF IF CHARANUM >= 9 SIF NO:8 == B CONTINUE ENDIF IF CHARANUM >= 10 SIF NO:9 == B CONTINUE ENDIF IF CHARANUM >= 11 SIF NO:10 == B CONTINUE ENDIF N = 100+COUNT IF ITEM:N C = 1 BREAK ENDIF RENDCHARANUMは、登録CHARA数を返り値とする実数です。
IF ASSI >= 0 (ASSIが2番目(1)なのでIF文内が実行される) T = TARGET (TARGETが3番目(2)なので、Tに2が入る) TARGET = ASSI (TARGETに2番目(1)の人が入る) CALL SALE_CHARA (TARGET=2番目(1)の人の売却計算をする) DELCHARA ASSI (ASSI=2番目(1)の人を削除する、CHARANUMが1減って、最初のTARGETが2番目(1)に置き換わる) ASSI = T-1 (Tが2なので、T-1=1、つまり2番目(1)の人がASSIになる) ELSEという風に案外複雑な処理をしていたわけです。
※変更前 B = COUNT+1 ※変更後 IF COUNT == 50 B = 15 ELSE B = COUNT+1 ENDIFerakanonのように同数のSPキャラが存在する場合は以下のような修正が必要です。
※変更前 B = COUNT+1 IF CHARANUM >= 2 SIF NO:1 == B CONTINUE ENDIF ※変更後 B = COUNT+1 D = COUNT+21 IF CHARANUM >= 2 SIF NO:1 == B CONTINUE SIF NO:1 == D CONTINUE ENDIF (以下略)
2.助手可能キャラ数と、調教可能キャラ数の確認
;現助手+元助手のキャラ数の確認 S = 0 REPEAT CHARANUM SIF ISASSI:COUNT == 1 S += 1 REND ;TIMEに合った調教キャラが居るか E = 0 REPEAT CHARANUM ;主人公と助手と奴隷は排除 SIF COUNT == 0 CONTINUE SIF COUNT == ASSI CONTINUE ; A = TIME+1 ; SIF COUNT == TARGET && CFLAG:COUNT:A == 0 ; TARGET = -1 SIF COUNT == TARGET CONTINUE ; SIF CFLAG:COUNT:A == 0 ; CONTINUE E += 1 RENDISASSIというものはFINISH.ERBにもありますが、
3.コマンド
SIF赤太字のものは後述する実行コマンドです。C ||TARGET >= 0 PRINTL [100] - 調教する SIF CHARANUM > 1 PRINTL [101] - 能力の表示 SIF TARGET >= 0 PRINTL [102] - 休憩 SIF C && CHARANUM < 11 PRINTL [105] - 新規調教 SIF S >= 2 PRINTL [109] - 助手変更 SIF E >= 1 PRINTL [110] - 調教対象切り替え PRINTL [111] - 人身売買 PRINTL [200] - セーブ PRINTL [300] - ロード @USERSHOP IF RESULT == 100 &&(C ||TARGET >= 0)BEGIN TRAIN RETURN 1 ELSEIF RESULT == 101 && CHARANUM > 1 CALL LIFE_LIST WAIT IF TARGET >= 0 PRINTSL NAME:TARGET CALL SHOW_JUEL CALL SHOW_INFO ENDIF ELSEIF RESULT == 102 && TARGET >= 0 ;休憩フラグを立てる FLAG:0 = 1 BEGIN TURNEND RETURN 1 ELSEIF RESULT == 105 && C && CHARANUM < 11 PRINTL SELECT_CHARACTER CALL SELECT_TARGET ELSEIF RESULT == 109 && S >= 2 CALL SELECT_ASSI ELSEIF RESULT == 110 && E >= 1 CALL CHANGE_TARGET ELSEIF RESULT == 111 CALL CHARA_BUY ELSEIF RESULT == 200 SAVEGAME ELSEIF RESULT == 300 LOADGAME ENDIF RETURN 0
4.@SELECT_TARGETの改造
元々ある@SELECT_TARGET(キャラクターの登録)を改造します。
サンプル版ではちょっと先に飛びます。
;調教するキャラを選ぶ @SELECT_TARGET ;ver1.45大人数対応版 ;REPEAT数は人数より多ければ問題ない REPEAT 60 ;既に登場中のキャラと同じキャラNOは排除 B = COUNT+1 IF CHARANUM >= 2 SIF NO:1 == B CONTINUE ENDIF IF CHARANUM >= 3 SIF NO:2 == B CONTINUE ENDIF IF CHARANUM >= 4 SIF NO:3 == B CONTINUE ENDIF IF CHARANUM >= 5 SIF NO:4 == B CONTINUE ENDIF IF CHARANUM >= 6 SIF NO:5 == B CONTINUE ENDIF IF CHARANUM >= 7 SIF NO:6 == B CONTINUE ENDIF IF CHARANUM >= 8 SIF NO:7 == B CONTINUE ENDIF IF CHARANUM >= 9 SIF NO:8 == B CONTINUE ENDIF IF CHARANUM >= 10 SIF NO:9 == B CONTINUE ENDIF IF CHARANUM >= 11 SIF NO:10 == B CONTINUE ENDIF N = 100+COUNT IF ITEM:N PRINTFORML [{COUNT}]%ITEMNAME:N% ENDIF ;SPキャラ用処理 ; N = 200+COUNT ; IF ITEM:N ; PRINTFORML [{COUNT+100}]%ITEMNAME:N% ; ENDIF REND $INPUT_LOOP INPUT ;既に登場中のキャラと同じキャラNOは排除 R = RESULT + 1 REPEAT CHARANUM SIF NO:COUNT == R GOTO INPUT_LOOP REND (以下略)前半部は1.で行ったことの繰り返しです。
5.@LIFE_LISTの追加
サンプル版だとさらに飛びます。
@LIFE_LISTの実行部分です。
@LIFE_LIST IF TARGET >= 0 PRINT 体力 A = BASE:TARGET:0 SIF BASE:TARGET:0 < 0 A = 0 BAR A,MAXBASE:TARGET:0,32 PRINTFORM ({A}/{MAXBASE:TARGET:0}) PRINTFORM [0]%NAME:TARGET% SIF ISASSI:TARGET == 1 PRINT 助手可 PRINTL ENDIF REPEAT CHARANUM ;主人公と助手対象と調教中キャラは排除 SIF COUNT == 0 CONTINUE SIF COUNT == ASSI CONTINUE SIF COUNT == TARGET CONTINUE PRINT 体力 A = BASE:COUNT:0 SIF BASE:COUNT:0 < 0 A = 0 BAR A,MAXBASE:COUNT:0,16 PRINTFORM ({A}/{MAXBASE:COUNT:0}) PRINTFORM [{COUNT}]%NAME:COUNT% SIF ISASSI:COUNT == 1 PRINT 助手可 PRINTL RENDやっていることはINFO.ERBにある@LIFE_BARのコピーと改造です。
6.@CHANGE_TARGETの追加
サンプル版だと戻ります。
コマンド110で追加した調教対象の変更コマンドの実行部分です。
;調教対象選択(eratohoR+ 1.31) @CHANGE_TARGET IF TARGET >= 0 PRINT 現在 PRINTFORML %NAME:TARGET%を調教中 ENDIF PRINTL 今回は誰を調教しますか? CALL LIFE_LIST $INPUT_LOOP INPUT IF RESULT < 0 GOTO INPUT_LOOP ELSEIF RESULT >= CHARANUM GOTO INPUT_LOOP ELSEIF RESULT == ASSI GOTO INPUT_LOOP ELSEIF RESULT == 0 && TARGET < 0 GOTO INPUT_LOOP ENDIF SIF RESULT != 0 TARGET = RESULT2.でも少し触れましたが、1番目の人(番号は0基準なので0)はMASTERです。
7.@CHANGE_TARGETの追加
更に助手の変更動作です。
@SELECT_ASSI PRINT 現在 PRINTFORML [{ASSI}]%NAME:ASSI%が助手 PRINTL 今回は誰を助手にしますか? REPEAT CHARANUM ;0(主人公)とASSI以外は排除 SIF COUNT == 0 CONTINUE SIF ISASSI:COUNT == 0 CONTINUE PRINTFORML [{COUNT}]%NAME:COUNT% REND PRINTFORML [100]%NAME:ASSI%を売却 $INPUT_LOOP INPUT IF RESULT <= 0 GOTO INPUT_LOOP ELSEIF RESULT >= CHARANUM && RESULT != 100 GOTO INPUT_LOOP ELSEIF RESULT != 100 SIF ISASSI:RESULT == 0 GOTO INPUT_LOOP ENDIF IF RESULT == 100 T = TARGET TARGET = ASSI CALL SALE_CHARA DELCHARA ASSI REPEAT CHARANUM SIF ISASSI:COUNT == 1 ASSI = COUNT REND PRINTFORMW %NAME:ASSI%を新しい助手にします TARGET = T-1 ELSE ASSI = RESULT ENDIFやってることは助手可能フラグがある人の一覧を出し、
8.FINISH.ERBの変更
サンプル版にはついておりませんが、FINISH.ERBの変更も必要です。
と言っても、調教対象を助手にした際に、元助手を残すかどうかの選択肢くらいです。
※変更後 IF RESULT == 2 IF ASSI >= 0 PRINTFORML %NAME:ASSI%をどうしますか? PRINTFORML [0]%NAME:ASSI%を残す PRINTFORML [1]%NAME:ASSI%を売る $INPUT_LOOP INPUT SIF RESULT < 0 || RESULT > 1 GOTO INPUT_LOOP IF RESULT == 1 T = TARGET TARGET = ASSI CALL SALE_CHARA DELCHARA ASSI ASSI = T-1 ELSE ASSI = TARGET ENDIF ELSE ASSI = TARGET ENDIF以上で全修正が完了となります。