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以上で全修正が完了となります。