code:
;M感覚

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_10(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_10(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 10

;素質などによる補正
IF TALENT:(ARG:0):105 == -1
	LOCAL:0 = LOCAL:0 * 7 / 10
ELSEIF TALENT:(ARG:0):105 == 1
	LOCAL:0 = LOCAL:0 * 13 / 10
ELSEIF TALENT:(ARG:0):105 == 2
	LOCAL:0 = LOCAL:0 * 175 / 100
ELSEIF TALENT:(ARG:0):105 == 3
	LOCAL:0 = LOCAL:0 * 200 / 100
ENDIF

IF TALENT:(ARG:0):27 && ABL:(ARG:0):(LOCAL:1) == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):(LOCAL:1) == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF

IF TALENT:(ARG:0):54
	LOCAL:0 = LOCAL:0 * 11 / 10
ENDIF
IF TALENT:(ARG:0):70
	LOCAL:0 = LOCAL:0 * 12 / 10
ENDIF
IF TALENT:(ARG:0):71
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

IF TALENT:(ARG:0):79
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;自慰中毒

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_11(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 100
ELSEIF ARG:0 == 2
	LOCAL:0 = 500
ELSEIF ARG:0 == 3
	LOCAL:0 = 2500
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_11(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 11

;素質などによる補正
IF TALENT:(ARG:0):60
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF

IF TALENT:(ARG:0):27 && ABL:(ARG:0):10 == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):10 == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
IF TALENT:(ARG:0):72
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF

;自慰経験が増えるたび自慰回数+1、どんなに激しくやっても一回は一回
EXP:(ARG:0):25 += 1

repo_name: mcstone/syokushuhenth

license: unknown


code:
;触手中毒
;肌感覚でも参照

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_12(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 100
ELSEIF ARG:0 == 2
	LOCAL:0 = 500
ELSEIF ARG:0 == 3
	LOCAL:0 = 2500
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_12(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 12

;素質などによる補正
IF TALENT:(ARG:0):27 && ABL:(ARG:0):11 == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):11 == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
IF TALENT:(ARG:0):72
	LOCAL:0 = LOCAL:0 * 15 / 10 + 1
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;射精中毒

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_13(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3
ELSEIF ARG:0 == 2
	LOCAL:0 = 15
ELSEIF ARG:0 == 3
	LOCAL:0 = 50
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_13(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 13

;素質などによる補正
IF TALENT:(ARG:0):157 == 1 && ( FLAG:520 == 0 || FLAG:520 == 2 )
	LOCAL:0 = 0
ENDIF

IF TALENT:(ARG:0):120
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF

IF TALENT:(ARG:0):72
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF

IF LOCAL:0 > 0
	EXP:(ARG:0):(LOCAL:1) += LOCAL:0
ENDIF

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;レズ中毒

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_14(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 200
ELSEIF ARG:0 == 2
	LOCAL:0 = 600
ELSEIF ARG:0 == 3
	LOCAL:0 = 3000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_14(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 14

;素質などによる補正

;男の娘は増えない
IF TALENT:(ARG:0):122
	LOCAL:0 = 0
	RETURN
ENDIF
;一線超えない
IF TALENT:(ARG:0):27 && ABL:(ARG:0):13 == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):13 == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
;中毒しやすい
IF TALENT:(ARG:0):72
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF
;両刀
IF TALENT:(ARG:0):81
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF
;中毒レベルが高いと加速
IF ABL:(ARG:0):13 >= 3
	LOCAL:0 = LOCAL:0 * 25 / 10 + 3
ELSEIF ABL:(ARG:0):13 >= 2
	LOCAL:0 = LOCAL:0 * 20 / 10 + 2
ELSEIF ABL:(ARG:0):13 >= 1
	LOCAL:0 = LOCAL:0 * 15 / 10 + 1
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF

;経験値獲得チェック
;ARG:0-3	キャラID
;LOCAL:0	LOOP
;LOCAL:1	男でないキャラの人数 ふたり以上居なければレズ中毒が増えない
;結果が0だと正常（女性キャラ二人以上）に処理
@CHACK_ADD_ABL_EXP_13(ARG:0, ARG:1, ARG:2, ARG:3)
#FUNCTION
LOCAL:1 = 0
IF TALENT:(ARG:0):122 == 0
	LOCAL:1 += 1
ENDIF
IF TALENT:(ARG:1):122 == 0 && ARG:1 > 0
	LOCAL:1 += 1
ENDIF
IF TALENT:(ARG:2):122 == 0 && ARG:2 > 0
	LOCAL:1 += 1
ENDIF
IF TALENT:(ARG:3):122 == 0 && ARG:2 > 0
	LOCAL:1 += 1
ENDIF
IF LOCAL:1 >1
	RETURNF 0
ELSE
	RETURNF 1
ENDIF


code:
;精液中毒

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_15(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 100
ELSEIF ARG:0 == 2
	LOCAL:0 = 500
ELSEIF ARG:0 == 3
	LOCAL:0 = 2500
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_15(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 15

;素質などによる補正
IF TALENT:(ARG:0):27 && ABL:(ARG:0):11 == 1
	LOCAL:0 = LOCAL:0 * 5 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):11 == 2
	LOCAL:0 = LOCAL:0 * 3 / 10
ENDIF
IF TALENT:(ARG:0):62
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
IF TALENT:(ARG:0):72
	LOCAL:0 = LOCAL:0 * 15 / 10 + 1
ENDIF
IF TALENT:(ARG:0):152
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

IF LOCAL:0 >= 1
	EXP:(ARG:0):(LOCAL:1) += LOCAL:0
ENDIF

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT) && FLAG:503 == 0
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;噴乳中毒

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_16(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 200
ELSEIF ARG:0 == 2
	LOCAL:0 = 600
ELSEIF ARG:0 == 3
	LOCAL:0 = 3000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_16(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 16

;素質などによる補正
IF TALENT:(ARG:0):27 && ABL:(ARG:0):11 == 1
	LOCAL:0 = LOCAL:0 * 5 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):11 == 2
	LOCAL:0 = LOCAL:0 * 3 / 10
ENDIF
IF TALENT:(ARG:0):72
	LOCAL:0 = LOCAL:0 * 15 / 10 + 1
ENDIF
IF TALENT:(ARG:0):76
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

;母乳体質がないなら0
IF TALENT:(ARG:0):130 == 0
	LOCAL:0 = 0
ENDIF

IF LOCAL:0 >= 1
	EXP:(ARG:0):(LOCAL:1) += LOCAL:0
ENDIF

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT) && FLAG:503 == 0
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;異変察知

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_1(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_1(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 1

;素質などによる補正
IF ABL:(ARG:0):98 < 50
	LOCAL:0 = LOCAL:0 * (250 - ABL:(ARG:0):98 * 3) / 100
ELSEIF ABL:(ARG:0):98 < 100
	LOCAL:0 = LOCAL:0 * (150 - ABL:(ARG:0):98) / 100
ELSE
	LOCAL:0 = LOCAL:0 / 2
ENDIF

IF TALENT:(ARG:0):51
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;話術

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_2(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_2(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 2

;素質などによる補正
IF ABL:(ARG:0):98 < 50
	LOCAL:0 = LOCAL:0 * (250 - ABL:(ARG:0):98 * 3) / 100
ELSEIF ABL:(ARG:0):98 < 100
	LOCAL:0 = LOCAL:0 * (150 - ABL:(ARG:0):98) / 100
ELSE
	LOCAL:0 = LOCAL:0 / 2
ENDIF

IF TALENT:(ARG:0):52
	LOCAL:0 = LOCAL:0 * 14 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;弾幕戦闘

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_3(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_3(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 3

;素質などによる補正
IF ABL:(ARG:0):98 > 50
	LOCAL:0 = LOCAL:0 * (20 + ABL:(ARG:0):98 * 2) / 100
ELSE
	LOCAL:0 = LOCAL:0 * (70 + ABL:(ARG:0):98) / 100
ENDIF

IF TALENT:(ARG:0):50
	LOCAL:0 = LOCAL:0 * 13 / 10
ENDIF
IF TALENT:(ARG:0):51
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		; PRINTFORML %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;道具戦闘

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_4(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_4(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 4

;素質などによる補正
IF TALENT:(ARG:0):50
	LOCAL:0 = LOCAL:0 * 13 / 10
ENDIF
IF TALENT:(ARG:0):51
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;危機回避

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_5(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_5(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 5

;素質などによる補正
IF ABL:(ARG:0):98 < 50
	LOCAL:0 = LOCAL:0 * (250 - ABL:(ARG:0):98 * 3) / 100
ELSEIF ABL:(ARG:0):98 < 100
	LOCAL:0 = LOCAL:0 * (150 - ABL:(ARG:0):98) / 100
ELSE
	LOCAL:0 = LOCAL:0 / 2
ENDIF

IF TALENT:(ARG:0):51
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;A感覚

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_6(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_6(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 6

;素質などによる補正
IF TALENT:(ARG:0):101 == -1
	LOCAL:0 = LOCAL:0 * 7 / 10
ELSEIF TALENT:(ARG:0):101 == 1
	LOCAL:0 = LOCAL:0 * 13 / 10
ELSEIF TALENT:(ARG:0):101 == 2
	LOCAL:0 = LOCAL:0 * 175 / 100
ELSEIF TALENT:(ARG:0):101 == 3
	LOCAL:0 = LOCAL:0 * 200 / 100
ENDIF

IF TALENT:(ARG:0):27 && ABL:(ARG:0):6 == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):6 == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
IF TALENT:(ARG:0):70
	LOCAL:0 = LOCAL:0 * 12 / 10
ENDIF
IF TALENT:(ARG:0):71
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

IF TALENT:(ARG:0):75
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;B感覚

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_7(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_7(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 7

;素質などによる補正
IF TALENT:(ARG:0):102 == -1
	LOCAL:0 = LOCAL:0 * 7 / 10
ELSEIF TALENT:(ARG:0):102 == 1
	LOCAL:0 = LOCAL:0 * 13 / 10
ELSEIF TALENT:(ARG:0):102 == 2
	LOCAL:0 = LOCAL:0 * 175 / 100
ELSEIF TALENT:(ARG:0):102 == 3
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

IF TALENT:(ARG:0):27 && ABL:(ARG:0):7 == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):7 == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
IF TALENT:(ARG:0):70
	LOCAL:0 = LOCAL:0 * 12 / 10
ENDIF
IF TALENT:(ARG:0):71
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

IF TALENT:(ARG:0):76
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;C感覚

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_8(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_8(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 8

;素質などによる補正
IF TALENT:(ARG:0):103 == -1
	LOCAL:0 = LOCAL:0 * 7 / 10
ELSEIF TALENT:(ARG:0):103 == 1
	LOCAL:0 = LOCAL:0 * 13 / 10
ELSEIF TALENT:(ARG:0):103 == 2
	LOCAL:0 = LOCAL:0 * 175 / 100
ELSEIF TALENT:(ARG:0):103 == 3
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

IF TALENT:(ARG:0):27 && ABL:(ARG:0):8 == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):8 == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
IF TALENT:(ARG:0):70
	LOCAL:0 = LOCAL:0 * 12 / 10
ENDIF
IF TALENT:(ARG:0):71
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

IF TALENT:(ARG:0):77
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;V感覚

;指定されたレベルに必要な経験取得
;ARG:0	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP_9(ARG:0)
LOCAL:0 = 0

IF ARG:0 == 1
	LOCAL:0 = 3000
ELSEIF ARG:0 == 2
	LOCAL:0 = 15000
ELSEIF ARG:0 == 3
	LOCAL:0 = 50000
ELSEIF ARG:0 > 3
	LOCAL:0 = -1
ENDIF

IF LOCAL:0 > 0
	;素質などによる補正
ENDIF

RETURN LOCAL:0

;経験値獲得
;ARG:0	獲得したキャラ（IDを指定　つまり1～10）
;ARG:1	獲得量
@ADD_ABL_EXP_9(ARG:0, ARG:1)
LOCAL:0 = ARG:1
;ソースコード変更量を抑えるために、ABLNOを入れておく
LOCAL:1 = 9

;素質などによる補正
;男にVはない
SIF TALENT:(ARG:0):122
	RETURN
IF TALENT:(ARG:0):104 == -1
	LOCAL:0 = LOCAL:0 * 7 / 10
ELSEIF TALENT:(ARG:0):104 == 1
	LOCAL:0 = LOCAL:0 * 13 / 10
ELSEIF TALENT:(ARG:0):104 == 2
	LOCAL:0 = LOCAL:0 * 175 / 100
ELSEIF TALENT:(ARG:0):104 == 3
	LOCAL:0 = LOCAL:0 * 20 / 10
ENDIF

IF TALENT:(ARG:0):27 && ABL:(ARG:0):9 == 1
	LOCAL:0 = LOCAL:0 * 8 / 10
ELSEIF TALENT:(ARG:0):27 && ABL:(ARG:0):9 == 2
	LOCAL:0 = LOCAL:0 * 5 / 10
ENDIF
IF TALENT:(ARG:0):70
	LOCAL:0 = LOCAL:0 * 12 / 10
ENDIF
IF TALENT:(ARG:0):71
	LOCAL:0 = LOCAL:0 * 8 / 10
ENDIF

IF TALENT:(ARG:0):78
	LOCAL:0 = LOCAL:0 * 15 / 10
ENDIF

EXP:(ARG:0):(LOCAL:1) += LOCAL:0

CALLFORM GET_NEED_EXP_{LOCAL:1}(ABL:(ARG:0):(LOCAL:1) + 1)
LOCAL:2 = RESULT
IF (RESULT > 0) && (EXP:(ARG:0):(LOCAL:1) >= RESULT)
	ABL:(ARG:0):(LOCAL:1) += 1
	IF FLAG:503 == 0
		PRINTFORML %CALLNAME:(ARG:0)%的%ABLNAME:(LOCAL:1)%變為了Lv{ABL:(ARG:0):(LOCAL:1)}！
		;TranslatedMark %CALLNAME:(ARG:0)%の%ABLNAME:(LOCAL:1)%がLv{ABL:(ARG:0):(LOCAL:1)}になった！
		;ログに改行挟む用のフラグ、@END_PHASE内で使用
		MESSAGE_DISPLAY_FLAG = 1
	ENDIF
ENDIF


code:
;ABL関係の共通関数

;指定されたレベルに必要な経験取得
;ARG:0	能力の種類
;ARG:1	調べたいレベル（要するに１～３を指定することになる）
@GET_NEED_EXP(ARG:0, ARG:1)

IF ARG:1 == 0
	RETURN 0
ENDIF

TRYCCALLFORM GET_NEED_EXP_{ARG:0}(ARG:1)
	RETURN RESULT
CATCH
	PRINTFORMW (GET_NEED_EXP) 無法處理未實裝的能力(ID:{ARG:0})
	;TranslatedMark (GET_NEED_EXP) 未実装の能力(ID:{ARG:0})のため、処理できません
	RETURN 0
ENDCATCH

;経験値獲得
;ARG:0	能力の種類
;ARG:1	獲得したキャラ（IDを指定　つまり1～10）
;ARG:2	獲得量
@ADD_ABL_EXP(ARG:0, ARG:1, ARG:2)

TRYCCALLFORM ADD_ABL_EXP_{ARG:0}(ARG:1, ARG:2)
	RETURN 1
CATCH
	PRINTFORMW (ADD_ABL_EXP) 無法處理未實裝的能力(ID:{ARG:0})
	;TranslatedMark (ADD_ABL_EXP) 未実装の能力(ID:{ARG:0})のため、処理できません
	RETURN 0
ENDCATCH

;PTメンバー全員が経験値獲得
;ARG:0	能力の種類
;ARG:1	獲得量
@ADD_ABL_EXP_PT(ARG:0, ARG:1)

CALL ADD_ABL_EXP(ARG:0, 1, ARG:1)
IF FLAG:10
	CALL ADD_ABL_EXP(ARG:0, FLAG:10, ARG:1)
ENDIF
IF FLAG:11
	CALL ADD_ABL_EXP(ARG:0, FLAG:11, ARG:1)
ENDIF


code:
;会いに行ける相手
;@ADDRESS
;#DIM LCOUNT, 2;ループ用
;#DIM CHARA_ID
;#DIM PHYSICAL_DEVELOP_POINT

;FLAG:5		初期宿主のID
;CFLAG:2	侵食済フラグ
;CFLAG:3	支配済フラグ
;CFLAG:初期宿主	所属勢力
;CFLAG:6	主人公が会いに行けるフラグ(住所特定フラグ)
;CFLAG:300* 友好度フラグ(101以上で知り合い以上の関係)

;FLAG:(50 + CFLAG:CHARA_ID:5)	触手侵食済みキャラの所属地域の状態
;FOR LCOUNT , 1 , CHARANUM
	;CHARA_IDの更新
	;CHARA_ID = LCOUNT

	;触手侵食済みだと会いに行ける
	;IF CFLAG:CHARA_ID:2
	;	CFLAG:CHARA_ID:6 = 1
	;ENDIF

	;初期宿主キャラと所属地域が一緒だと会いに行ける
	;IF CFLAG:CHARA_ID:5 ==  CFLAG:(FLAG:5):5
	;	CFLAG:CHARA_ID:6 = 1
	;ENDIF

	;支配済みキャラ、初期宿主キャラの知り合いに会いに行ける
	;IF CFLAG:CHARA_ID:3 || LCOUNT == FLAG:5
	;	FOR LCOUNT:1, 1, CHARANUM
	;		IF CFLAG:CHARA_ID:(300+LCOUNT:1) > 100
	;			CFLAG:(LCOUNT:1):6 = 1
	;		ENDIF
	;	NEXT
	;ENDIF

;NEXT

;住所特定を追加する処理
@ADD_ADDRESS(CHARA_ID)
#DIM LCOUNT;ループ用
#DIM CHARA_ID

;■FLAG一覧
;FLAG:5		初期宿主のキャラID
;■CFLAG一覧
;CFLAG:2	侵食済フラグ
;CFLAG:3	支配済フラグ
;CFLAG:5	所属地域フラグ
;CFLAG:6	主人公が会いに行けるフラグ(住所特定フラグ)
;CFLAG:300* 友好度フラグ(101以上で知り合い以上の関係)

;未侵食、未支配以外の不適切なキャラIDの引数がきたらエラーコードを出力
;開発状況によって条件がそぐわない場合は適時条件を変更すること
IF CFLAG:CHARA_ID:2 == 0 && CFLAG:CHARA_ID:3 == 0
	SETCOLOR 0xFF0000
	PRINTFORML 【ERROR:預期外的引用】 ADDRESS > %CALLNAME:CHARA_ID%未受到侵蝕或支配！
	;TranslatedMark 【ERROR:予期せぬ引数】ADDRESS > %CALLNAME:CHARA_ID%は侵食、支配されていないキャラです！
	PRINTFORML 【ERROR:預期外的引用】侵蝕Flag > {CFLAG:CHARA_ID:2}　支配Flag > {CFLAG:CHARA_ID:3}
	;TranslatedMark 【ERROR:予期せぬ引数】侵食フラグ > {CFLAG:CHARA_ID:2}　支配フラグ > {CFLAG:CHARA_ID:3}
ENDIF

;引数のキャラに会えるようになる
CFLAG:CHARA_ID:6 = 1

;初期宿主だった場合、知り合い、所属地域のキャラに会いにいける
IF CHARA_ID == FLAG:5
	FOR	LCOUNT, 1, CHARANUM
		IF CFLAG:CHARA_ID:(300+LCOUNT) > 100 || CFLAG:LCOUNT:5 == CFLAG:(FLAG:5):5
			CFLAG:(LCOUNT):6 = 1
		ENDIF
	NEXT
;引数のキャラが支配済みだった場合、知り合いに会いにいける
ELSEIF CFLAG:CHARA_ID:3 == 1
	FOR	LCOUNT, 1, CHARANUM
		IF CFLAG:CHARA_ID:(300+LCOUNT) > 100
			CFLAG:(LCOUNT):6 = 1
		ENDIF
	NEXT
ENDIF


code:
;東方少女の自己回復
@AUTO_HEAL(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM HEAL_HP
#DIM HEAL_MP
#DIM HEAL_PP
#DIM HEAL_SP

IF TALENT:CHARA_ID:犠牲者
	RETURN
ENDIF

HEAL_HP = MAXBASE:CHARA_ID:HP / 5
HEAL_MP = MAXBASE:CHARA_ID:MP / 10
HEAL_PP = 10
HEAL_SP = 5

;素質による回復量増減
IF TALENT:CHARA_ID:プライド高い
	HEAL_PP += 10
ENDIF
IF TALENT:CHARA_ID:プライド低い
	HEAL_PP += -5
ENDIF
IF TALENT:CHARA_ID:真面目
	HEAL_SP += 1
ENDIF
IF TALENT:CHARA_ID:回復早い
	HEAL_HP += 100
	HEAL_MP += 50
ENDIF
IF TALENT:CHARA_ID:回復遅い
	HEAL_HP += -100
	HEAL_MP += -50
ENDIF
IF TALENT:CHARA_ID:吸血鬼
	HEAL_HP += HEAL_HP * 15 / 10
	HEAL_MP += HEAL_MP * 15 / 10
ENDIF
IF TALENT:CHARA_ID:日光浴
	HEAL_HP += HEAL_HP * 15 / 10
	HEAL_MP += HEAL_MP * 12 / 10
ENDIF
IF TALENT:CHARA_ID:月光浴
	HEAL_HP += HEAL_HP * 12 / 10
	HEAL_MP += HEAL_MP * 15 / 10
ENDIF
IF TALENT:CHARA_ID:治療
	HEAL_HP += HEAL_HP * 12 / 10
ENDIF
IF TALENT:CHARA_ID:鼓舞
	HEAL_MP += HEAL_MP * 12 / 10
ENDIF
IF TALENT:CHARA_ID:蓬莱人
	IF BASE:CHARA_ID:HP < MAXBASE:CHARA_ID:HP / 10
		HEAL_HP += MAXBASE:CHARA_ID:HP
	ENDIF
ENDIF
IF TALENT:CHARA_ID:妖精 && FLAG:難易度 > 1
	IF BASE:CHARA_ID:HP < MAXBASE:CHARA_ID:HP / 10
		HEAL_HP += MAXBASE:CHARA_ID:HP
	ENDIF
ENDIF
IF TALENT:CHARA_ID:異形耐性
	HEAL_MP += 50
	HEAL_PP += 1
	HEAL_SP += 1
ENDIF
IF TALENT:CHARA_ID:浄化知識
	HEAL_HP += HEAL_HP * (10 + TALENT:CHARA_ID:浄化知識) / 10
	HEAL_SP += TALENT:CHARA_ID:浄化知識
ENDIF
IF TALENT:CHARA_ID:術式知識
	HEAL_HP += HEAL_HP * (10 + TALENT:CHARA_ID:術式知識) / 10
	HEAL_PP += TALENT:CHARA_ID:術式知識
ENDIF
IF TALENT:CHARA_ID:神気
	HEAL_HP += HEAL_HP * 13 / 10
	HEAL_MP += HEAL_MP * 13 / 10
ENDIF

;プライドと正気は失ったら触手により0以下を維持される
IF BASE:CHARA_ID:PP <= 0
	HEAL_PP = 0
ENDIF
IF BASE:CHARA_ID:SP <= 0
	HEAL_SP = 0
ENDIF

IF FLAG:難易度 > 1
	HEAL_HP += HEAL_HP * 13 / 10
	HEAL_MP += HEAL_MP * 13 / 10
	HEAL_PP += HEAL_PP * 13 / 10
	HEAL_SP += HEAL_SP * 13 / 10
ENDIF

BASE:CHARA_ID:HP = MIN(BASE:CHARA_ID:HP + HEAL_HP , MAXBASE:CHARA_ID:HP)
BASE:CHARA_ID:MP = MIN(BASE:CHARA_ID:MP + HEAL_MP , MAXBASE:CHARA_ID:MP)
BASE:CHARA_ID:PP = MIN(BASE:CHARA_ID:PP + HEAL_PP , MAXBASE:CHARA_ID:PP)
BASE:CHARA_ID:SP = MIN(BASE:CHARA_ID:SP + HEAL_SP , MAXBASE:CHARA_ID:SP)

;状態異常回復
CFLAG:CHARA_ID:21 = MAX(0, CFLAG:CHARA_ID:21 - 1)
CFLAG:CHARA_ID:24 = MAX(0, CFLAG:CHARA_ID:24 - 1)
CFLAG:CHARA_ID:25 = MAX(0, CFLAG:CHARA_ID:25 - 1)
CFLAG:CHARA_ID:26 = MAX(0, CFLAG:CHARA_ID:26 - 1)
CFLAG:CHARA_ID:28 = MAX(0, CFLAG:CHARA_ID:28 - 1)
CFLAG:CHARA_ID:29 = MAX(0, CFLAG:CHARA_ID:29 - 1)
CFLAG:CHARA_ID:39 = MAX(0, CFLAG:CHARA_ID:39 - 1)
CFLAG:CHARA_ID:32 = MAX(0, CFLAG:CHARA_ID:32 - 1)

;ダメージつき状態異常回復
IF CFLAG:CHARA_ID:20
	CFLAG:CHARA_ID:20 = MAX(0, CFLAG:CHARA_ID:20 - 1 - TALENT:CHARA_ID:解放)
	TFLAG:部位 = 13
	CALL CALC_ECSTASY(CHARA_ID, 20)
	CALL ECSTASY(CHARA_ID)
	TFLAG:部位 = 0
ENDIF
IF CFLAG:CHARA_ID:27
	CFLAG:CHARA_ID:27 = MAX(0, CFLAG:CHARA_ID:27 - 1)
	TFLAG:部位 = RAND:16 + RAND:17
	CALL CALC_ECSTASY(CHARA_ID, 20)
	CALL ECSTASY(CHARA_ID)
	TFLAG:部位 = 0
ENDIF
IF CFLAG:CHARA_ID:30
	CFLAG:CHARA_ID:30 = MAX(0, CFLAG:CHARA_ID:30 - 1)
	TFLAG:部位 = CFLAG:CHARA_ID:9
	CALL CALC_ECSTASY(CHARA_ID, 20)
	CALL ECSTASY(CHARA_ID)
	TFLAG:部位 = 0
ENDIF
IF CFLAG:CHARA_ID:42
	TFLAG:部位 = RAND:33
	CALL CALC_ECSTASY(CHARA_ID, 20)
	CALL ECSTASY(CHARA_ID)
	TFLAG:部位 = 0
ENDIF
IF CFLAG:CHARA_ID:43
	TFLAG:部位 = RAND:33
	CALL CALC_ECSTASY(CHARA_ID, 20)
	CALL ECSTASY(CHARA_ID)
	TFLAG:部位 = 0
ENDIF

IF CFLAG:CHARA_ID:31
	CFLAG:CHARA_ID:31 = MAX(0, CFLAG:CHARA_ID:31 - 1)
	CALL MENTAL_DEVELOP(CHARA_ID, 10,  10)
ENDIF

CALL BREAKOUT_DOMINATE(CHARA_ID)

;屈服はこのタイミングで起きるが支配はダメージ時
IF BASE:CHARA_ID:HP <= -1000 && CFLAG:CHARA_ID:3 && TALENT:CHARA_ID:蓬莱人 == 0 && TALENT:CHARA_ID:妖精 == 0 && ITEM:10 == 0
	CALL SURRENDER(CHARA_ID, 2)
ENDIF


code:
;成長点増加処理
@CHECK_GROWTH
#DIM LCOUNT	;ループ用
#DIM GROWTH_POWER

IF FLAG:12 < 6
	GROWTH_POWER = 1 + (FLAG:12 * 2 / 3)
ELSEIF FLAG:12 < 11
	GROWTH_POWER = 3 + (FLAG:12 / 2)
ELSEIF FLAG:12 < 16
	GROWTH_POWER = 5 + (FLAG:12 / 3)
ELSEIF FLAG:12 < 26
	GROWTH_POWER = 7 + (FLAG:12 / 4)
ELSE
	GROWTH_POWER = 9 + (FLAG:12 / 5)
ENDIF

FOR LCOUNT, 1, CHARANUM
	;犠牲者は成長点を算出しない
	IF TALENT:LCOUNT:犠牲者
		CONTINUE
	ENDIF
	;傀儡は家畜が産出量が多いが他は算出しない
	IF TALENT:LCOUNT:傀儡 == 2
		FLAG:7 += GROWTH_POWER
	ELSEIF TALENT:LCOUNT:傀儡 > 0
		CONTINUE
	ENDIF
	;侵食済みのキャラは毎日成長点の元を成長力に応じて算出
	IF CFLAG:LCOUNT:2
		FLAG:7 += GROWTH_POWER
	ENDIF
	;支配済みだと侵食と重複してさらに算出
	IF CFLAG:LCOUNT:3
		FLAG:7 += GROWTH_POWER
	ENDIF
NEXT

;一人しか侵食していない時補正をかけておく
IF GROWTH_POWER >= FLAG:7
	FLAG:7 += GROWTH_POWER * 2
ENDIF

;成長点は、侵食済み人数+支配済み人数+難易度補正+√上記の成長点の元
FLAG:8 = FLAG:0 + FLAG:1 + SQRT(FLAG:7 + FLAG:ドレイン)
;難易度補正　初期点数でもある（最初の宿主の侵食分は能力を一つ持たせているので相殺）
IF FLAG:4 == -1
	FLAG:8 += 52
ELSEIF FLAG:4 == 0
	FLAG:8 += 22
ELSEIF FLAG:4 >= 1
	FLAG:8 += 17
ENDIF

;残り成長点
@CHECK_GROWTH_2
#DIM LCOUNT	;ループ用

FLAG:6 = FLAG:8
FOR LCOUNT, 0, 800
	;特殊能力を取る度残りの成長点減少
	IF ITEM:LCOUNT
		FLAG:6 += -3
	ENDIF
NEXT


code:
;寄生処理
@CHECK_PARASITE(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID

IF CFLAG:CHARA_ID:寄生 <= 0
	RETURN
ENDIF
IF ITEM:61 <= 0
	CFLAG:CHARA_ID:寄生 = 0
	RETURN
ENDIF
;出産タイマー進め
CFLAG:CHARA_ID:寄生 -= 1

;寄生発覚前
IF CFLAG:CHARA_ID:寄生 > 14
	RETURN
ENDIF

IF CFLAG:CHARA_ID:寄生 == 14
	CALL PRINT_MESSAGE(CHARA_ID, "寄生", 0, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:寄生 == 10
	CALL PRINT_MESSAGE(CHARA_ID, "寄生", 1, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:寄生 == 7
	CALL PRINT_MESSAGE(CHARA_ID, "寄生", 2, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:寄生 == 4
	CALL PRINT_MESSAGE(CHARA_ID, "寄生", 3, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:寄生 == 1
	CALL PRINT_MESSAGE(CHARA_ID, "寄生", 4, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ENDIF

;疑似出産処理
IF CFLAG:CHARA_ID:寄生 <= 0
	CALL CALC_ECSTASY(CHARA_ID, 80)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "寄生出産", 0, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
	RESETCOLOR

	CALL ECSTASY(CHARA_ID)

	IF ITEM:213
		CALL ADD_BUST(CHARA_ID, 1, "メッセージ表示")
	ENDIF

	CALL MILK_COME(CHARA_ID, 1 + ITEM:220)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "寄生出産", 1, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
	RESETCOLOR
	FLAG:寄生繁殖数 ++
ENDIF

@GET_PARASITE(CHARA_ID, CARRIER)
#DIM CHARA_ID
#DIM CHANCE
#DIMS CARRIER

;妊娠能力があると寄生でも半々で妊娠判定
IF ITEM:62 && RAND:2
	CALL GET_PREGNANCY(CHARA_ID, CARRIER)
ENDIF

;寄生能力がなかったり妊娠寄生済なら戻る
IF CFLAG:CHARA_ID:寄生 > 0 || !ITEM:61 || CFLAG:CHARA_ID:妊娠 > 0
	RETURN
ENDIF

;当初の仕様通り20%とするが、能力などで補正をかけたいところ
CHANCE = 20

IF ITEM:289
	CHANCE += (FLAG:支配力 / 5)
ENDIF
IF ITEM:290
	CHANCE += (FLAG:支配力 / 5)
ENDIF

SIF CARRIER == ""
	CARRIER = 触手
IF RAND:100 > CHANCE
	RETURN
ENDIF
CFLAG:CHARA_ID:寄生 = 14 + RAND:6
CSTR:CHARA_ID:キャリア = %CARRIER%


code:
;寄生処理
@CHECK_PARASITE_BOMB(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID

IF CFLAG:CHARA_ID:媚薬爆弾 <= 0
	RETURN
ENDIF
;出産タイマー進め
CFLAG:CHARA_ID:媚薬爆弾 -= 1

;寄生発覚前
IF CFLAG:CHARA_ID:媚薬爆弾 > 0
	RETURN
ENDIF

;媚薬爆弾
;発動が遅い代わりに大ダメージ
IF CFLAG:CHARA_ID:媚薬爆弾 <= 0
	CALL CALC_ECSTASY(CHARA_ID, 1000)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "媚薬爆弾", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	RESETCOLOR
	CALL ECSTASY(CHARA_ID)

	IF ITEM:213
		CALL ADD_BUST(CHARA_ID, 1, "メッセージ表示")
	ENDIF

	CALL MILK_COME(CHARA_ID, 1 + ITEM:220)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "媚薬爆弾", 1, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	RESETCOLOR
ENDIF


code:
;睾丸寄生処理
@CHECK_PARASITE_C(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID

IF CFLAG:CHARA_ID:44 <= 0
	RETURN
ENDIF
IF ITEM:226 <= 0
	CFLAG:CHARA_ID:44 = 0
	RETURN
ENDIF
;出産タイマー進め
CFLAG:CHARA_ID:44 -= 1

;睾丸寄生発覚前
IF CFLAG:CHARA_ID:44 > 14
	RETURN
ENDIF

IF CFLAG:CHARA_ID:44 == 14
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸寄生", 0, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:44 == 10
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸寄生", 1, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:44 == 7
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸寄生", 2, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:44 == 4
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸寄生", 3, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ELSEIF CFLAG:CHARA_ID:44 == 1
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸寄生", 4, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
ENDIF

;疑似出産処理
IF CFLAG:CHARA_ID:44 <= 0
	TFLAG:部位 = 4
	CALL CALC_ECSTASY(CHARA_ID, 80)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸寄生出産", 0, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
	RESETCOLOR

	CALL ECSTASY(CHARA_ID)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸寄生出産", 1, CALLNAME:CHARA_ID, CSTR:CHARA_ID:キャリア)
	RESETCOLOR
	FLAG:寄生繁殖数 ++
	TFLAG:部位 = 0
ENDIF

@GET_PARASITE_C(CHARA_ID, CARRIER)
#DIM CHARA_ID
#DIM CHANCE
#DIMS CARRIER

;睾丸寄生能力がなかったり睾丸寄生済なら戻る、玉は2つあるので睾丸妊娠と寄生は同時に起きる
IF CFLAG:CHARA_ID:44 > 0 || !ITEM:226
	RETURN
ENDIF

;当初の仕様通り20%とするが、能力などで補正をかけたいところ
CHANCE = 20

SIF CARRIER == ""
	CARRIER = 触手
IF RAND:100 > CHANCE
	RETURN
ENDIF
CFLAG:CHARA_ID:44 = 10 + RAND:6
CSTR:CHARA_ID:キャリア = %CARRIER%


code:
;妊娠処理
@CHECK_PREGNANT(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID

IF CFLAG:CHARA_ID:妊娠 <= 0
	RETURN
ENDIF

;出産タイマー進め
IF ITEM:210
	;30の倍数にしてから進める
	CFLAG:CHARA_ID:妊娠 = CFLAG:CHARA_ID:妊娠 / 30 * 30
	CFLAG:CHARA_ID:妊娠 -= 30
ELSEIF ITEM:209
	;10の倍数にしてから進める
	CFLAG:CHARA_ID:妊娠 = CFLAG:CHARA_ID:妊娠 / 10 * 10
	CFLAG:CHARA_ID:妊娠 -= 10
ELSE
	CFLAG:CHARA_ID:妊娠 -= 1
ENDIF

;妊娠発覚前
IF CFLAG:CHARA_ID:妊娠 > 200 + RAND:20 + RAND:20
	RETURN
ENDIF

IF CFLAG:CHARA_ID:妊娠 == 240
	CALL PRINT_MESSAGE(CHARA_ID, "妊娠", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ELSEIF CFLAG:CHARA_ID:妊娠 == 210
	CALL PRINT_MESSAGE(CHARA_ID, "妊娠", 1, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ELSEIF CFLAG:CHARA_ID:妊娠 == 150
	CALL PRINT_MESSAGE(CHARA_ID, "妊娠", 2, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ELSEIF CFLAG:CHARA_ID:妊娠 == 90
	CALL PRINT_MESSAGE(CHARA_ID, "妊娠", 3, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ELSEIF CFLAG:CHARA_ID:妊娠 == 60
	CALL PRINT_MESSAGE(CHARA_ID, "妊娠", 4, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ELSEIF CFLAG:CHARA_ID:妊娠 == 5 || (ITEM:209 && CFLAG:CHARA_ID:妊娠 == 30)
	CALL PRINT_MESSAGE(CHARA_ID, "妊娠", 5, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ENDIF

;出産処理
IF CFLAG:CHARA_ID:妊娠 <= 0
	CALL CALC_ECSTASY(CHARA_ID, 80)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "出産", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	RESETCOLOR
	CALL ECSTASY(CHARA_ID)
	EXP:CHARA_ID:出産回数 ++
	CFLAG:CHARA_ID:妊娠 = 0
	CSTR:CHARA_ID:父親 =
	IF ITEM:213
		CALL ADD_BUST(CHARA_ID, 1, "メッセージ表示")
	ENDIF
	FLAG:出産繁殖数 ++
	CALL MILK_COME(CHARA_ID, 1 + ITEM:220)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "出産", 1, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	RESETCOLOR
ENDIF

;妊娠処理
@GET_PREGNANCY(CHARA_ID, FATHER)
#DIM CHARA_ID
#DIM CHANCE
#DIMS Father

IF CFLAG:CHARA_ID:妊娠 > 0 || !ITEM:62 || CFLAG:CHARA_ID:寄生 > 0
	RETURN
ENDIF

;当初の仕様通り20%とするが、能力・精液量などで補正をかけたいところ
CHANCE = 20

;生理周期補正
CALL ESTRUS_CYCLE(CHARA_ID)
CHANCE = CHANCE * RESULT / 100

IF ITEM:205
	CHANCE += 5
ENDIF
IF ITEM:251
	CHANCE += 5
ENDIF
IF ITEM:289
	CHANCE += (FLAG:支配力 / 5)
ENDIF
IF ITEM:290
	CHANCE += (FLAG:支配力 / 5)
ENDIF

SIF TALENT:CHARA_ID:非生物 || TALENT:CHARA_ID:機械
	CHANCE -= 15
IF RAND:100 > CHANCE
	RETURN
ENDIF
CFLAG:CHARA_ID:妊娠 = 280 + RAND:40
IF FATHER == ""
	CSTR:CHARA_ID:父親 = %SAVESTR:0%
ELSE
	CSTR:CHARA_ID:父親 = %FATHER%
ENDIF


code:
;睾丸妊娠処理
@CHECK_PREGNANT_C(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID

IF CFLAG:CHARA_ID:睾丸妊娠 <= 0
	RETURN
ENDIF

;出産タイマー進め
CFLAG:CHARA_ID:睾丸妊娠 -= 1

;睾丸妊娠発覚前
IF CFLAG:CHARA_ID:睾丸妊娠 > 10
	RETURN
ENDIF

IF CFLAG:CHARA_ID:睾丸妊娠 == 10
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸妊娠", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ELSEIF CFLAG:CHARA_ID:睾丸妊娠 == 5
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸妊娠", 1, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ELSEIF CFLAG:CHARA_ID:睾丸妊娠 == 3
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸妊娠", 2, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
ENDIF

;出産処理
IF CFLAG:CHARA_ID:睾丸妊娠 <= 0
	CALL CALC_ECSTASY(CHARA_ID, 80)
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸出産", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	RESETCOLOR
	CALL ECSTASY(CHARA_ID)
	EXP:CHARA_ID:出産回数 ++
	CFLAG:CHARA_ID:睾丸妊娠 = 0
	CSTR:CHARA_ID:父親 =
	FLAG:出産繁殖数 ++
	SETCOLOR 0xE02020
	CALL PRINT_MESSAGE(CHARA_ID, "睾丸出産", 1, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	RESETCOLOR
ENDIF

;睾丸妊娠処理
@GET_PREGNANCY_C(CHARA_ID, FATHER)
#DIM CHARA_ID
#DIM CHANCE
#DIMS FATHER

IF CFLAG:CHARA_ID:睾丸妊娠 > 0 || !ITEM:227
	RETURN
ENDIF

;当初の仕様通り20%とするが、能力・精液量などで補正をかけたいところ
CHANCE = 20

;生理周期補正
CALL ESTRUS_CYCLE(CHARA_ID)
CHANCE = CHANCE * RESULT / 100

SIF TALENT:CHARA_ID:非生物 || TALENT:CHARA_ID:機械
	CHANCE -= 15
IF RAND:100 > CHANCE
	RETURN
ENDIF
CFLAG:CHARA_ID:睾丸妊娠 = 10 + RAND:20
IF FATHER == ""
	CSTR:CHARA_ID:父親 = %SAVESTR:0%
ELSE
	CSTR:CHARA_ID:父親 = %FATHER%
ENDIF


code:
;支配処理
@CHECK_TENTACLE_SUIT(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM
#DIM LOCALRESULT
#DIM CHARA_ID

IF CFLAG:CHARA_ID:触手服 == 0
	RETURN
ENDIF

VARSET LOCALQUETE
VARSET LOCALIDNUM

LOCALRESULT = 1

;末路の条件1つ追加ごとに
;LOCALQUETE:LOCALIDNUM = XX
;LOCALIDNUM += 1
;と書けば良し（XXは空いている番号）

IF ITEM:21
	LOCALQUETE:LOCALIDNUM = 21
	LOCALIDNUM += 1
ENDIF

IF ITEM:25
	LOCALQUETE:LOCALIDNUM = 25
	LOCALIDNUM += 1
ENDIF

IF ITEM:61
	LOCALQUETE:LOCALIDNUM = 61
	LOCALIDNUM += 1
ENDIF
IF ITEM:62
	LOCALQUETE:LOCALIDNUM = 62
	LOCALIDNUM += 1
ENDIF

IF ITEM:75
	LOCALQUETE:LOCALIDNUM = 75
	LOCALIDNUM += 1
ENDIF
IF ITEM:76
	LOCALQUETE:LOCALIDNUM = 76
	LOCALIDNUM += 1
ENDIF

IF ITEM:128
	LOCALQUETE:LOCALIDNUM = 128
	LOCALIDNUM += 1
ENDIF

IF ITEM:135
	LOCALQUETE:LOCALIDNUM = 135
	LOCALIDNUM += 1
ENDIF

IF ITEM:212
	LOCALQUETE:LOCALIDNUM = 212
	LOCALIDNUM += 1
ENDIF
IF ITEM:213
	LOCALQUETE:LOCALIDNUM = 213
	LOCALIDNUM += 1
ENDIF

IF ITEM:222 && ITEM:224
	LOCALQUETE:LOCALIDNUM = 224
	LOCALIDNUM += 1
ENDIF
IF ITEM:222 && ITEM:225
	LOCALQUETE:LOCALIDNUM = 225
	LOCALIDNUM += 1
ENDIF

IF ITEM:291
	LOCALQUETE:LOCALIDNUM = 291
	LOCALIDNUM += 1
ENDIF
IF ITEM:292
	LOCALQUETE:LOCALIDNUM = 292
	LOCALIDNUM += 1
ENDIF
IF ITEM:293
	LOCALQUETE:LOCALIDNUM = 293
	LOCALIDNUM += 1
ENDIF
IF ITEM:294
	LOCALQUETE:LOCALIDNUM = 294
	LOCALIDNUM += 1
ENDIF
IF ITEM:295
	LOCALQUETE:LOCALIDNUM = 295
	LOCALIDNUM += 1
ENDIF
IF ITEM:296
	LOCALQUETE:LOCALIDNUM = 296
	LOCALIDNUM += 1
ENDIF
IF ITEM:297
	LOCALQUETE:LOCALIDNUM = 297
	LOCALIDNUM += 1
ENDIF

IF ITEM:303
	LOCALQUETE:LOCALIDNUM = 303
	LOCALIDNUM += 1
ENDIF

IF ITEM:327
	LOCALQUETE:LOCALIDNUM = 327
	LOCALIDNUM += 1
ENDIF

IF LOCALIDNUM == 0
	LOCALQUETE:LOCALIDNUM = 0
	LOCALIDNUM += 1
ENDIF

CALL TENTACLE_SUIT_EVENT(CHARA_ID, (LOCALQUETE:(RAND:LOCALIDNUM)) )


code:
;反乱
;支配済みのキャラクターは反乱ポイントを生産し触手に一斉に襲いかかろうとする
@COUP(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM COUP_POINT
#DIM SEARCH_TARGET_VALUE

;初期宿主は当たり前だが反乱しない
IF CHARA_ID == FLAG:初期宿主
	RETURN
ENDIF

;支配済みでないと無視
IF CFLAG:CHARA_ID:支配済 == 0
	RETURN
ENDIF

;屈服済みは反乱に参加しない
IF CFLAG:CHARA_ID:屈服済
	RETURN
ENDIF

;異変に気づいていないと反乱しない
IF CFLAG:CHARA_ID:異変察知 == 0
	RETURN
ENDIF

;犠牲者だと反乱しない
IF TALENT:CHARA_ID:犠牲者
	RETURN
ENDIF

;首謀者が決まっていない場合首謀者にふさわしいかチェック
IF FLAG:首謀者 == 0
	CALL DECIDE_LEADER(CHARA_ID)
	IF FLAG:首謀者 == 0
		RETURN
	ENDIF
ENDIF

;数値リセット
COUP_POINT = 0

;TP補正
IF BASE:CHARA_ID:TP > 150
	COUP_POINT += 2
ELSEIF BASE:CHARA_ID:TP > 120
	COUP_POINT += 1
ELSEIF BASE:CHARA_ID:TP < 100
	COUP_POINT += 0
ELSEIF BASE:CHARA_ID:TP < 60
	COUP_POINT += -1
ELSEIF BASE:CHARA_ID:TP < 40
	COUP_POINT += -2
ENDIF

;戦闘素質補正
IF ABL:CHARA_ID:戦闘素質 > 70
	COUP_POINT += 2
ELSEIF ABL:CHARA_ID:戦闘素質 >= 50
	COUP_POINT += 1
ELSEIF ABL:CHARA_ID:戦闘素質 > 30
	COUP_POINT += 0
ELSE
	COUP_POINT += -1
ENDIF

;素質補正
IF TALENT:CHARA_ID:反抗的
	COUP_POINT += 1
ENDIF
IF TALENT:CHARA_ID:気丈
	COUP_POINT += 1
ENDIF
IF TALENT:CHARA_ID:プライド高い
	COUP_POINT += 1
ENDIF
IF TALENT:CHARA_ID:生意気
	COUP_POINT += 1
ENDIF
IF TALENT:CHARA_ID:真面目
	COUP_POINT += 1
ENDIF

;元凶隠蔽度補正
IF FLAG:元凶隠蔽力 > 0
	COUP_POINT += MAX(-2, FLAG:元凶隠蔽力 / 20)
ENDIF

;難易度補正
IF FLAG:難易度 <= 0
	COUP_POINT /= 2
ENDIF

;睡眠・戦意喪失状態だと気づくことも探すこともない
IF CFLAG:CHARA_ID:睡眠
	COUP_POINT = 0
ENDIF
IF CFLAG:CHARA_ID:戦意喪失
	COUP_POINT = 0
ENDIF

;反乱ポイント生成
IF COUP_POINT > 0
	FLAG:反乱度 += MAX(COUP_POINT, 0)
ENDIF

;反乱度が一定を越えたら反乱発生
IF FLAG:難易度 <= 0
	IF FLAG:反乱度 > 250
		CALL COUP_BATTLE
	ENDIF
ELSE
	IF FLAG:反乱度 > 130
		CALL COUP_BATTLE
	ENDIF
ENDIF


code:
;支配処理
@DOMINATE_RESULT
#DIM LCOUNT	;ループ用
#DIM NUMBER_OF_VICTIM,15	;とりあえず15くらい用意
#DIM VICTIM
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM
#DIM LOCALRESULT
#DIM NUMBER_OF_VICTIM_RESULT,10000

VICTIM = 0
VARSET NUMBER_OF_VICTIM
VARSET NUMBER_OF_VICTIM_RESULT

FOR LCOUNT, 1, CHARANUM
	IF TALENT:LCOUNT:犠牲者
		NUMBER_OF_VICTIM:10 ++
		VICTIM ++
	ELSEIF CFLAG:LCOUNT:支配理由
		NUMBER_OF_VICTIM:(CFLAG:LCOUNT:支配理由) ++
		VICTIM ++
	ENDIF
NEXT

IF VICTIM != FLAG:キャラ人数
	RETURN
ENDIF

PRINTFORML
PRINTFORML 異變第{DAY}天
;TranslatedMark {DAY}日目
PRINTFORML 幻想郷的一切都已被觸手覆盖...
;TranslatedMark 幻想郷のすべてが触手に覆われた……
PRINTFORML
PRINTFORML %@"因直接的戰鬥被打敗",40,LEFT% %@"{NUMBER_OF_VICTIM:1}人",8,RIGHT%
PRINTFORML %@"身體到達承受極限",40,LEFT% %@"{NUMBER_OF_VICTIM:2}人",8,RIGHT%
PRINTFORML %@"精神受到完全汚染",40,LEFT% %@"{NUMBER_OF_VICTIM:3}人",8,RIGHT%
PRINTFORML %@"自尊被徹底粉碎",40,LEFT% %@"{NUMBER_OF_VICTIM:4}人",8,RIGHT%
PRINTFORML %@"失去理性并接受了與觸手的共存",40,LEFT% %@"{NUMBER_OF_VICTIM:5}人",8,RIGHT%
PRINTFORML %@"臣服于觸手引人墮落的快感",40,LEFT% %@"{NUMBER_OF_VICTIM:6}人",8,RIGHT%
PRINTFORML %@"受深愛之人背叛后關閉心之窗",40,LEFT% %@"{NUMBER_OF_VICTIM:7}人",8,RIGHT%
PRINTFORML %@"觸手異變的犠牲者",40,LEFT% %@"{NUMBER_OF_VICTIM:10}人",8,RIGHT%
PRINTFORMW

;支配の傾向を保存しておく
FLAG:全体支配済 = 1
IF NUMBER_OF_VICTIM:1 < NUMBER_OF_VICTIM:2
	FLAG:全体支配済 = 2
ENDIF
IF NUMBER_OF_VICTIM:(FLAG:全体支配済) < NUMBER_OF_VICTIM:3
	FLAG:全体支配済 = 3
ENDIF
IF NUMBER_OF_VICTIM:(FLAG:全体支配済) < NUMBER_OF_VICTIM:4
	FLAG:全体支配済 = 4
ENDIF
IF NUMBER_OF_VICTIM:(FLAG:全体支配済) < NUMBER_OF_VICTIM:5
	FLAG:全体支配済 = 5
ENDIF
IF NUMBER_OF_VICTIM:(FLAG:全体支配済) < NUMBER_OF_VICTIM:6
	FLAG:全体支配済 = 6
ENDIF


code:
;深い呼び出し階層かつループ内で呼び出される可能性がある関数内でBEGINするため、終了処理のための変数を追加する
#DIM IS_DOMINATED


code:
@DOMINATE_VICTIM_RESULT(ARG:0)

SELECTCASE ARG:0
	CASE 0
		RESULTS = 触手的奴隶
		;TranslatedMark 触手の奴隷になった
	CASE 1
		RESULTS = 史莱姆的苗床
		;TranslatedMark スライムの苗床になった
	CASE 2
		RESULTS = 屈服于犬的肉棒
		;TranslatedMark 犬ちんぽの奴隷になった
	CASE 3
		RESULTS = 白鹳之妻
		;TranslatedMark コウノトリの嫁になった
	CASE 4
		RESULTS = 被植物吸收
		;TranslatedMark 植物に取り込まれた
	CASE 5
		RESULTS = 被强制高潮装置每天榨取着爱液
		;TranslatedMark 強制絶頂装置を毎日愛液で濡らした
	CASE 6
		RESULTS = 虫之妻
		;TranslatedMark 虫の嫁になった
	CASE 7
		RESULTS = 沉迷于触手百合的淫戏之中
		;TranslatedMark レズ触手プレイにハマった

	CASE 11
		RESULTS = 一直被雌性史莱姆玩弄着
		;TranslatedMark 女性型スライムにおもちゃにされ続けた

	CASE 29
		RESULTS = 被触手丸吞
		;TranslatedMark 触手に丸呑みされた

	CASE 49
		RESULTS = 生活在对触手的恐惧之中
		;TranslatedMark 触手に怯えて過ごした
	CASE 50
		RESULTS = 与触手建立了友谊
		;TranslatedMark 触手と友情を育んだ

	CASE 84
		RESULTS = 成为了永久的壁尻
		;TranslatedMark 永久壁尻当番になった

	CASE 95
		RESULTS = 成为了触手异变的牺牲者
		;TranslatedMark 触手異変の犠牲者となった

	CASE 124
		RESULTS = 每天要用十六个小时自慰
		;TranslatedMark 一日16時間自慰をして過ごした

	CASE 131
		RESULTS = 精于堕落之道
		;TranslatedMark 精通が趣味になった

	CASE 168
		RESULTS = 被寄生的植物占据了身体
		;TranslatedMark 植物に寄生され身体が乗っ取られた

	CASE 180
		RESULTS = 失踪
		;TranslatedMark 行方不明になった

	CASE 187
		RESULTS = 已经被转化成了飞机杯
		;TranslatedMark オナホ化し使われるだけの存在になった

	CASE 218
		RESULTS = 已经被转化成了贮奶罐
		;TranslatedMark ミルクタンクになった

	CASE 223
		RESULTS = 成为了扶她强奸魔
		;TranslatedMark ふたなりレイプ魔になった
	CASE 224
		RESULTS = 扶她肉棒射精成瘾
		;TranslatedMark ふたなり射精中毒になった

	CASE 263
		RESULTS = 身体已被完全兽化
		;TranslatedMark 身体が完全に獣と化した

	CASE 267
		RESULTS = 变成了淫荡的石像
		;TranslatedMark 卑猥な石像と化した

	CASE 309
		RESULTS = 崇拜触手
		;TranslatedMark 触手を崇拝した

	CASE 325
		RESULTS = 每天都沉浸于以触手为对手的色情战斗中
		;TranslatedMark 触手相手にエロバトルで挑む日々を過ごした
	CASE 326
		RESULTS = 作为魔法少女日以继夜地工作
		;TranslatedMark 魔法少女として日夜活動した

	CASE 351
		RESULTS = 被剥夺记忆，成为了触手的性奴隶
		;TranslatedMark 触手によって記憶を失い性奴隷となった
	CASE 352
		RESULTS = 记忆被改写，成为了触手的新娘
		;TranslatedMark 記憶が書き換えられ触手の花嫁となった

ENDSELECT


code:
;エンディング
;条件を満たした中からランダム
@ENDING(NUMBER_OF_VICTIM:1, NUMBER_OF_VICTIM:2, NUMBER_OF_VICTIM:3, NUMBER_OF_VICTIM:4, NUMBER_OF_VICTIM:5, NUMBER_OF_VICTIM:6, NUMBER_OF_VICTIM:7)
#DIM LCOUNT	;ループ用
#DIM NUMBER_OF_VICTIM,15	;とりあえず15くらい用意
#DIM VICTIM
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM
#DIM LOCALIDNUM_COUNT
#DIM LOCALRESULT
#DIM ENDING_NUMBER
#DIM FIND_ENDING_NUMBER
#DIM NUMBER_OF_VICTIM_RESULT,10000

VARSET LOCALQUETE
VARSET LOCALIDNUM
VARSET LOCALIDNUM_COUNT
VARSET FIND_ENDING_NUMBER

LOCALRESULT = 1

;条件1つ追加ごとに
;LOCALQUETE:LOCALIDNUM = XX
;LOCALIDNUM += 1
;LOCALIDNUM_COUNT += 1
;と書けば良し（XXは空いている番号）

IF DAY >= 200 && ITEM:50
	LOCALQUETE:LOCALIDNUM = 1
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:59
	LOCALQUETE:LOCALIDNUM = 2
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:84
	LOCALQUETE:LOCALIDNUM = 3
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF ITEM:85
	LOCALQUETE:LOCALIDNUM = 4
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF NUMBER_OF_VICTIM:6 > 60 && ITEM:8 && ITEM:134
	LOCALQUETE:LOCALIDNUM = 5
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:168
	LOCALQUETE:LOCALIDNUM = 6
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF NUMBER_OF_VICTIM:6 > 60 && ITEM:191
	LOCALQUETE:LOCALIDNUM = 7
	LOCALIDNUM += 1
	CALL RANDOM_INU_TYPE
ENDIF
LOCALIDNUM_COUNT += 1

IF NUMBER_OF_VICTIM:6 > 60 && ITEM:193 && ITEM:61
	LOCALQUETE:LOCALIDNUM = 8
	LOCALIDNUM += 1
	CALL RANDOM_INSECT_TYPE
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:213
	LOCALQUETE:LOCALIDNUM = 9
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF ITEM:218
	LOCALQUETE:LOCALIDNUM = 10
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:263
	LOCALQUETE:LOCALIDNUM = 11
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:267
	LOCALQUETE:LOCALIDNUM = 12
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF ITEM:267 && ITEM:45
	LOCALQUETE:LOCALIDNUM = 13
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:311
	LOCALQUETE:LOCALIDNUM = 14
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:324
	LOCALQUETE:LOCALIDNUM = 15
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF NUMBER_OF_VICTIM:5 > 60 && ITEM:325
	LOCALQUETE:LOCALIDNUM = 16
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF NUMBER_OF_VICTIM:5 > 60 && ITEM:326
	LOCALQUETE:LOCALIDNUM = 17
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF NUMBER_OF_VICTIM:5 > 60 && ITEM:327
	LOCALQUETE:LOCALIDNUM = 18
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF ITEM:361
	LOCALQUETE:LOCALIDNUM = 19
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF NUMBER_OF_VICTIM:1 > 60 && DAY <= 31
	LOCALQUETE:LOCALIDNUM = 20
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF NUMBER_OF_VICTIM:5 > 60
	LOCALQUETE:LOCALIDNUM = 21
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF NUMBER_OF_VICTIM:6 > 60
	LOCALQUETE:LOCALIDNUM = 22
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF NUMBER_OF_VICTIM:6 > 60 && ITEM:7 && ITEM:241
	LOCALQUETE:LOCALIDNUM = 23
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

IF NUMBER_OF_VICTIM:6 > 60 && ITEM:7 && ITEM:222 && ITEM:62
	LOCALQUETE:LOCALIDNUM = 24
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1
IF NUMBER_OF_VICTIM:1 > 50 && ITEM:29
	LOCALQUETE:LOCALIDNUM = 25
	LOCALIDNUM += 1
ENDIF

IF LOCALIDNUM == 0
	LOCALQUETE:LOCALIDNUM = 0
	LOCALIDNUM += 1
ENDIF
LOCALIDNUM_COUNT += 1

ENDING_NUMBER = LOCALQUETE:(RAND:LOCALIDNUM)

FLAG:(600 + ENDING_NUMBER) = 1

FOR LCOUNT , 0, 101
	IF FLAG:(600 + LCOUNT)
		FIND_ENDING_NUMBER += 1
	ENDIF
NEXT

CALL PRINT_MESSAGE(FLAG:初期宿主, "エンディング", ENDING_NUMBER, CALLNAME:(FLAG:初期宿主), CALLNAME:(FLAG:30))
PRINTFORML
PRINTFORMW 達成結局序號{ENDING_NUMBER + 1} 達成的結局數{FIND_ENDING_NUMBER} 結局總數{LOCALIDNUM_COUNT}
;TranslatedMark 達成エンディング番号{ENDING_NUMBER + 1} 達成エンディング数{FIND_ENDING_NUMBER} エンディング総数{LOCALIDNUM_COUNT}


code:
;フェイズの終了処理
@END_PHASE
#DIM LCOUNT,3	;ループ用
#DIM CHARA_SPEED,300
#DIM CHARA_ID

PRINTW

CALL CHECK_GROWTH
CALL CHECK_GROWTH_2

;ログに改行挟む用のフラグ
MESSAGE_DISPLAY_FLAG = 0

IF FLAG:0 * 100 / FLAG:2 > MAX(50, FLAG:支配力 * 2)
	PRINTFORMW 似乎因支配力不足實際的支配並未覆蓋到各個方面……
	;TranslatedMark どうやら支配力が足りず支配が隅々まで届かないようだ……
ENDIF

FOR LCOUNT, 1, CHARANUM
	CALL CHECK_PREGNANT(LCOUNT)
	CALL CHECK_PARASITE(LCOUNT)
	CALL CHECK_PREGNANT_C(LCOUNT)
	CALL CHECK_PARASITE_C(LCOUNT)
	CALL CHECK_PARASITE_BOMB(LCOUNT)
	CALL RANDOM_EVENT(LCOUNT)
	CALL NPC_MOVE(LCOUNT)

	;口上のウェイト機能を優先
	IF KOJOWAIT:CHARA_ID
		;実処理は@PRINT_MESSAGE内で行われているので空行、
	ELSEIF LOG_AUTO_SCROLL == 1 && MESSAGE_DISPLAY_FLAG == 1
		TWAIT MAX(FLAG:502, 1200), 0
	ENDIF
	;メッセージ表示があったなら改行してフラグを０に
	IF MESSAGE_DISPLAY_FLAG == 1 && LOG_NEWLINE == 1
		PRINTL
	ENDIF
	MESSAGE_DISPLAY_FLAG = 0
NEXT

IF ITEM:186
	CALL PARASITE_TENTACLE_ORDER
ELSE
	CALL PARASITE_TENTACLE
ENDIF

CALL TENTACLE_RENEW

;エロいログのところで一回とめる
;自動スクロールあるときはいらないかも
SIF LOG_AUTO_SCROLL == 0
	TWAIT MAX(FLAG:502, 1200), 0

FOR CHARA_ID, 1,CHARANUM
	CHARA_SPEED:CHARA_ID = RAND:300
NEXT

FOR LCOUNT, 300, 0, -1
	FOR CHARA_ID, 1,CHARANUM
		IF CHARA_SPEED:(CHARA_ID) == LCOUNT
			CALL NOTICE_STRANGE(CHARA_ID)
			CALL COUP(CHARA_ID)
			IF ITEM:0 == 0
				BREAK
			ENDIF
		ENDIF
	NEXT
	IF ITEM:0 == 0
		BREAK
	ENDIF
NEXT

FOR LCOUNT, 300, 0, -1
	FOR CHARA_ID, 1, CHARANUM
		IF CHARA_SPEED:(CHARA_ID) == LCOUNT
			CALL AUTO_HEAL(CHARA_ID)
			CALL CHECK_TENTACLE_SUIT(CHARA_ID)
			CALL MENTAL_ATTACK(CHARA_ID)
		ENDIF
	NEXT
NEXT

FOR LCOUNT, 1, CHARANUM
	CALL KAMIKAZE(LCOUNT)
NEXT

PRINTL

CALL POSITION_RENEW()

;時間進行
TIME:0 += 4

IF TIME:0 >= 4
	;日数を進める
	TIME:0 = 0
	DAY += 1
	;ログ読みたいので強制停止
	PRINTL
	PRINTFORML 時間流過
	;TranslatedMark 日数が進んだ
	FORCEWAIT
ENDIF

IF FLAG:全体支配済 == 0
	CALL DOMINATE_RESULT
ENDIF
IF FLAG:全体支配済 && FLAG:全体屈服済 == 0
	CALL SURRENDER_RESULT
ENDIF


code:
;特攻
@KAMIKAZE(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID

;特攻隊以外は戻る
IF CFLAG:CHARA_ID:傀儡 < 100
	RETURN
ENDIF
CALL CALC_ECSTASY(CHARA_ID, 10000)

CALL PRINT_MESSAGE(CHARA_ID, "潜入隊", 0, CALLNAME:CHARA_ID, POSITION_NAME(CFLAG:CHARA_ID:傀儡 - 100))

CALL ECSTASY(CHARA_ID)

;特攻対象拠点の汚染上昇
FLAG:(CFLAG:CHARA_ID:傀儡 - 30) += FLAG:支配力 + FLAG:侵食力

;拠点所属者に侵食チャンスが有る代わりに異変がバレる
FOR LCOUNT, 1, CHARANUM
	IF CFLAG:LCOUNT:所属 == CFLAG:CHARA_ID:傀儡 - 100
		CALL PARASITE_TENTACLE_RATE(LCOUNT)
		IF FLAG:侵食力 - RAND:10 > RESULT
			CALL POLLUTED(LCOUNT)
		ENDIF
		IF CFLAG:LCOUNT:異変察知 == 0
			CFLAG:LCOUNT:異変察知 = 1
			PRINTFORML %CALLNAME:LCOUNT%開始重視異變！
			;TranslatedMark %CALLNAME:LCOUNT%は異変に気づいた！
		ENDIF
	ENDIF
NEXT

CALL SURRENDER(CHARA_ID, 1)

FLAG:(100 + (FLAG:傀儡数)) = 0
TALENT:CHARA_ID:傀儡 = 0
CFLAG:CHARA_ID:傀儡 = 0
SAVESTR:(FLAG:傀儡数) =
FLAG:傀儡数 -= 1


code:
;東方少女への精神汚染
;毎日の自動回復が5なのである程度重ねないと意味が薄いけれど重ねると凶悪な減り

@MENTAL_ATTACK(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM SP_DAMAGE

SP_DAMAGE = 0

IF TALENT:CHARA_ID:犠牲者
	RETURN
ENDIF
;侵食済みだったり異変察知済みだと異変の影響でダメージを受ける
IF CFLAG:CHARA_ID:侵食済 == 0 && CFLAG:CHARA_ID:異変察知 == 0
	RETURN
ENDIF

IF ITEM:47
	SP_DAMAGE += 1
ENDIF
IF ITEM:48
	SP_DAMAGE += 1
ENDIF
IF ITEM:300
	SP_DAMAGE += 1
ENDIF
IF ITEM:301
	SP_DAMAGE += 1
ENDIF
IF ITEM:311
	SP_DAMAGE += 1
ENDIF
IF ITEM:312
	SP_DAMAGE += 1
ENDIF
IF ITEM:313
	SP_DAMAGE += 1
ENDIF

;状態異常による追加
IF CFLAG:CHARA_ID:寄生
	SP_DAMAGE += 1
ENDIF
IF CFLAG:CHARA_ID:妊娠
	SP_DAMAGE += 1
ENDIF

IF TALENT:CHARA_ID:気丈
	SP_DAMAGE = SP_DAMAGE * 9 / 10
ENDIF
IF TALENT:CHARA_ID:素直
	SP_DAMAGE = SP_DAMAGE * 11 / 10
ENDIF
IF TALENT:CHARA_ID:感情乏しい
	SP_DAMAGE = SP_DAMAGE * 8 / 10
ENDIF
IF TALENT:CHARA_ID:機械
	SP_DAMAGE = SP_DAMAGE * 9 / 10
ENDIF

;侵食されてからが長いとダメージが増えていく
IF CFLAG:CHARA_ID:侵食済
	IF DAY - CFLAG:CHARA_ID:16 >= 10
		SP_DAMAGE += 1
	ELSEIF DAY  - CFLAG:CHARA_ID:16 >= 20
		SP_DAMAGE += 2
	ELSEIF DAY  - CFLAG:CHARA_ID:16 >= 30
		SP_DAMAGE += 3
	ENDIF
ENDIF

;周囲に異変に侵食されているが異変に気づいていない人間が多いと補正
FOR LCOUNT, 1, CHARANUM
	;侵食されたキャラが友人にいると補正
	IF CHARA_ID == LCOUNT
		CONTINUE
	ENDIF
	IF CFLAG:CHARA_ID:(300+LCOUNT) > 100 && CFLAG:LCOUNT:侵食済 && CFLAG:LCOUNT:異変察知 == 0
		SP_DAMAGE += 1
	ENDIF
NEXT

;催眠は5固定させる
IF CFLAG:CHARA_ID:催眠
	SP_DAMAGE = 5
ENDIF

CALL SP_DAMAGE(CHARA_ID, SP_DAMAGE)

IF BASE:CHARA_ID:SP <= 0
	CALL DOMINATE(CHARA_ID, 5)
ENDIF
IF FLAG:支配力 > 20
	IF BASE:CHARA_ID:SP <= 50 && BASE:CHARA_ID:SP >= 35
		CALL PRINT_MESSAGE(CHARA_ID, "狂気", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	ELSEIF BASE:CHARA_ID:SP <= 35 && BASE:CHARA_ID:SP >= 20
		CALL PRINT_MESSAGE(CHARA_ID, "狂気", 1, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	ELSEIF BASE:CHARA_ID:SP <= 20 && BASE:CHARA_ID:SP >= 0
		CALL PRINT_MESSAGE(CHARA_ID, "狂気", 2, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	ENDIF
ENDIF


code:
;精神的な開発処理
@MENTAL_DEVELOP(CHARA_ID, PP_POWER, SP_POWER)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM PP_DAMAGE
#DIM SP_DAMAGE
#DIM MP_DAMAGE
#DIM PP_POWER
#DIM SP_POWER
#DIM MP_DOMINATE
#DIM ANTI_MP_DOMINATE

;リセット
PP_DAMAGE = 0
SP_DAMAGE = 0
MP_DAMAGE = 0

MP_DOMINATE = (FLAG:支配力 + FLAG:精神支配力) * 3

MP_DOMINATE += FLAG:監視者数 * 2

;ダメージは支配力のRANDを使って幅を持たせる
;POWERは5で弱い、20で普通、100だと最高峰、くらい

ANTI_MP_DOMINATE = MAX(MAXBASE:CHARA_ID:MP / 100 , ABL:CHARA_ID:戦闘素質)

IF MP_DOMINATE > ANTI_MP_DOMINATE + 10
	MP_DOMINATE = MP_DOMINATE + 10
ELSEIF MP_DOMINATE > ANTI_MP_DOMINATE
	MP_DOMINATE = MP_DOMINATE + 5
ELSEIF MP_DOMINATE + 10 <= ANTI_MP_DOMINATE
	MP_DOMINATE = MP_DOMINATE / 4
ELSEIF MP_DOMINATE <= ANTI_MP_DOMINATE
	MP_DOMINATE = MP_DOMINATE / 2
ENDIF

;最低1
MP_DOMINATE = MAX(MP_DOMINATE , 1)

;MPダメージ
MP_DAMAGE = MAX(PP_POWER * (RAND:(MP_DOMINATE) + RAND:(MP_DOMINATE) - RAND:(MP_DOMINATE)) / 10 , 100)
;PPダメージ
PP_DAMAGE = MAX(PP_POWER * (RAND:(MP_DOMINATE) + RAND:(MP_DOMINATE) - RAND:(MP_DOMINATE)) / 18 , 5)
;SPダメージ
SP_DAMAGE = MAX(SP_POWER * (RAND:(MP_DOMINATE) + RAND:(MP_DOMINATE) - RAND:(MP_DOMINATE)) / 36 , 0)

;MPダメージは回復量が少ない
;PP(プライド)やSP(正気度)でダメージ軽減があるが代わりにこの二種類を削っていく

MP_DAMAGE = (MP_DAMAGE + PP_DAMAGE + SP_DAMAGE)

IF TALENT:CHARA_ID:気丈
	PP_DAMAGE = PP_DAMAGE * 9 / 10
	SP_DAMAGE = SP_DAMAGE * 9 / 10
	MP_DAMAGE = MP_DAMAGE * 9 / 10
ENDIF
IF TALENT:CHARA_ID:素直
	SP_DAMAGE = SP_DAMAGE * 11 / 10
	MP_DAMAGE = MP_DAMAGE * 11 / 10
ENDIF
IF TALENT:CHARA_ID:感情乏しい
	PP_DAMAGE = PP_DAMAGE * 8 / 10
	SP_DAMAGE = SP_DAMAGE * 8 / 10
ENDIF
IF TALENT:CHARA_ID:機械
	SP_DAMAGE = SP_DAMAGE * 9 / 10
	MP_DAMAGE = MP_DAMAGE * 7 / 10
ENDIF
IF CFLAG:CHARA_ID:発情
	PP_DAMAGE = PP_DAMAGE * 105 / 100
ENDIF
IF CFLAG:CHARA_ID:催眠
	SP_DAMAGE = SP_DAMAGE * 11 / 10
ENDIF

;PPとSPはマイナスにいく
;ただし減りづらい
CALL PP_DAMAGE(CHARA_ID, PP_DAMAGE)
CALL SP_DAMAGE(CHARA_ID, SP_DAMAGE)

;どちらかが尽きた場合残りのダメージがMPに直接行く
IF BASE:CHARA_ID:PP <= 0 && PP_DAMAGE
	BASE:CHARA_ID:MP += BASE:CHARA_ID:PP
ENDIF
IF BASE:CHARA_ID:SP <= 0 && SP_DAMAGE
	BASE:CHARA_ID:MP += BASE:CHARA_ID:SP
ENDIF

BASE:CHARA_ID:MP = MAX(BASE:CHARA_ID:MP - MP_DAMAGE , 0)

IF BASE:CHARA_ID:MP <= 0
	IF BASE:CHARA_ID:PP <= -100
		CALL SURRENDER(CHARA_ID, 4)
	ELSEIF BASE:CHARA_ID:SP <= -100
		CALL SURRENDER(CHARA_ID, 5)
	ELSEIF BASE:CHARA_ID:MP <= -1000
		CALL SURRENDER(CHARA_ID, 3)
	ELSEIF BASE:CHARA_ID:PP <= 0
		CALL DOMINATE(CHARA_ID, 4)
	ELSEIF BASE:CHARA_ID:SP <= 0
		CALL DOMINATE(CHARA_ID, 5)
	ELSEIF BASE:CHARA_ID:MP <= 0
		CALL DOMINATE(CHARA_ID, 3)
	ENDIF
ENDIF


code:
;異変に気づいたり探す処理
@NOTICE_STRANGE(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM NOTICE_POINT
#DIM SEARCH_POINT
#DIM SEARCH_TARGET_VALUE

;9日目までは準備期間
IF DAY < 10
	RETURN
ENDIF
;初期宿主は当たり前だが探さない
IF CHARA_ID == FLAG:初期宿主
	RETURN
ENDIF

;支配済みだと気づくことも探索することもない
IF CFLAG:CHARA_ID:支配済
	RETURN
ENDIF

;犠牲者だと気づくことも探索することもない
IF TALENT:CHARA_ID:犠牲者
	RETURN
ENDIF

;数値リセット
NOTICE_POINT = ABL:CHARA_ID:異變發覺
SEARCH_POINT = ABL:CHARA_ID:探索技能

FOR LCOUNT, 1, CHARANUM
	;侵食されたキャラが友人にいると補正
	IF CFLAG:CHARA_ID:(300+LCOUNT) > 100 && CFLAG:LCOUNT:侵食済
		NOTICE_POINT ++
		;さとり様には速攻でバレる
		IF TALENT:CHARA_ID:覚
			NOTICE_POINT += 100
			SEARCH_POINT += 10
		ENDIF
	ENDIF
	;支配されたキャラの友人はさらに補正
	IF CFLAG:CHARA_ID:(300+LCOUNT) > 100 && CFLAG:LCOUNT:支配済
		NOTICE_POINT ++
	ENDIF

	;異変に気づいている人数が多いほど補正
	IF CFLAG:LCOUNT:異変察知 && CFLAG:LCOUNT:支配済 == 0
		SEARCH_POINT ++
	ENDIF

NEXT

;霊夢は侵食に気づきやすい
IF CALLNAME:(CHARA_ID) == "霊夢" && FLAG:難易度 > 1 && CFLAG:CHARA_ID:侵食済 == 0
	NOTICE_POINT += FLAG:侵食人数 / 3
ENDIF
;ドレミーは夢の異変に気づきやすい
IF CALLNAME:(CHARA_ID) == "ドレミー" && FLAG:難易度 > 1 && CFLAG:CHARA_ID:侵食済 == 0 && ITEM:301
	NOTICE_POINT += FLAG:侵食人数 / 3
ENDIF

;幻想郷全体の補正
SEARCH_POINT += FLAG:探索度

;素質補正
IF TALENT:CHARA_ID:好奇心
	NOTICE_POINT += 3
	SEARCH_POINT += 3
ENDIF
IF TALENT:CHARA_ID:羽
	NOTICE_POINT += TALENT:CHARA_ID:羽
	SEARCH_POINT += TALENT:CHARA_ID:羽
ENDIF

IF ITEM:80
	IF GETBIT(FLAG:(CFLAG:CHARA_ID:所属 + 50), 3)
		NOTICE_POINT += FLAG:支配力 / 3
		SEARCH_POINT += FLAG:支配力 / 3
	ELSE
		NOTICE_POINT -= FLAG:支配力 / 3
		SEARCH_POINT -= FLAG:支配力 / 3
	ENDIF
ENDIF

IF CFLAG:CHARA_ID:情報
	NOTICE_POINT -= CFLAG:CHARA_ID:情報 * 3
	SEARCH_POINT -= CFLAG:CHARA_ID:情報 * 3
ENDIF

;拠点が警戒していると補正
IF GETBIT(FLAG:(CFLAG:CHARA_ID:所属 + 50), 4) && GETBIT(FLAG:(CFLAG:CHARA_ID:所属 + 50), 1) == 0
	NOTICE_POINT += 5 + RAND:10
ENDIF

;弱気なほど異変に気づきやすく、強気なほど探索を進めやすい
IF BASE:CHARA_ID:TP > 150
	SEARCH_POINT += 3 + RAND:10
ELSEIF BASE:CHARA_ID:TP > 120
	SEARCH_POINT += RAND:10
ELSEIF BASE:CHARA_ID:TP < 100
	NOTICE_POINT += RAND:5
ELSEIF BASE:CHARA_ID:TP < 60
	NOTICE_POINT += 2 + RAND:3
ELSEIF BASE:CHARA_ID:TP < 40
	NOTICE_POINT += 4
ENDIF

;難易度補正
IF FLAG:難易度 <= 0
	NOTICE_POINT = NOTICE_POINT * 9 / 10
	SEARCH_POINT = SEARCH_POINT * 9 / 10
ENDIF

;各種ペナルティは気づくまでは阻害しにくいが探索にはペナルティがかかりやすい

;拘束・恐慌なら探さない
IF CFLAG:CHARA_ID:拘束
	SEARCH_POINT = 0
ENDIF
IF CFLAG:CHARA_ID:恐慌
	SEARCH_POINT = 0
ENDIF
;睡眠・戦意喪失状態だと気づくことも探すこともない
IF CFLAG:CHARA_ID:睡眠
	NOTICE_POINT = 0
	SEARCH_POINT = 0
ENDIF
IF CFLAG:CHARA_ID:戦意喪失
	NOTICE_POINT = 0
	SEARCH_POINT = 0
ENDIF
;寄生・妊娠は進行しているとうまく探せない
IF CFLAG:CHARA_ID:寄生 && CFLAG:CHARA_ID:寄生 < 4
	SEARCH_POINT = SEARCH_POINT / 2
ENDIF
IF CFLAG:CHARA_ID:妊娠 && CFLAG:CHARA_ID:妊娠 < 180
	SEARCH_POINT = SEARCH_POINT / 2
ENDIF

;発情・絶頂・強制自慰状態だとペナルティ
IF CFLAG:CHARA_ID:発情
	SEARCH_POINT = SEARCH_POINT / 2
ENDIF
IF CFLAG:CHARA_ID:絶頂
	SEARCH_POINT = SEARCH_POINT / 2
ENDIF
IF CFLAG:CHARA_ID:強制自慰
	SEARCH_POINT = SEARCH_POINT / 2
ENDIF

SEARCH_TARGET_VALUE = (FLAG:元凶隠蔽力 * 5) + 310
IF FLAG:4 <= 0
	SEARCH_TARGET_VALUE += RAND:80
ELSEIF FLAG:4 == 1
	SEARCH_TARGET_VALUE += 20 + RAND:40
ELSEIF FLAG:4 == 2
	SEARCH_TARGET_VALUE += 30 + RAND:20
ENDIF
IF ITEM:177 && RAND:100 == 0
	SEARCH_TARGET_VALUE += 400
ENDIF

;元凶を見つける判定、成功したら襲いかかってくる、失敗しても幻想郷全体の異変探索値にボーナス
;元凶隠蔽力は補正あり、探索開始から実際に発見するまでの時間補正
;異変察知してから襲撃してくるまで最低1日のラグがある
IF SEARCH_TARGET_VALUE < SEARCH_POINT && CFLAG:CHARA_ID:異変察知 == 1 && SEARCH_POINT > 0
	CALL ADD_ABL_EXP(0, CHARA_ID, 100 + RAND:100)
	CALL BATTLE(CHARA_ID, 1)
ELSEIF SEARCH_POINT && CFLAG:CHARA_ID:異変察知 == 1
	FLAG:探索度 ++
	;元凶隠蔽力による補正
	IF FLAG:元凶隠蔽力 < -50
		FLAG:探索度 += 5
	ELSEIF FLAG:元凶隠蔽力 < -50
		FLAG:探索度 += 4
	ELSEIF FLAG:元凶隠蔽力 < -35
		FLAG:探索度 += 3
	ELSEIF FLAG:元凶隠蔽力 < -20
		FLAG:探索度 += 2
	ELSEIF FLAG:元凶隠蔽力 < -10
		FLAG:探索度 += 1
	ENDIF
	IF FLAG:支配力 > SEARCH_POINT
		CALL PRINT_MESSAGE(CHARA_ID, "諜報", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL SHOW_TUTORIAL(6)
	ELSEIF SEARCH_POINT >= 30
		CALL PRINT_MESSAGE(CHARA_ID, "探索察知", 0, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL SHOW_TUTORIAL(6)
	ENDIF
	IF 100 > FLAG:元凶隠蔽力
		CALL ADD_ABL_EXP(0, CHARA_ID, 100 + RAND:200 - FLAG:元凶隠蔽力)
	ENDIF
ENDIF

;異変に気づく判定、失敗しても察知力経験入手
IF FLAG:異変隠蔽力 < NOTICE_POINT && CFLAG:CHARA_ID:異変察知 == 0
	CFLAG:CHARA_ID:異変察知 = 1
	CALL ADD_TP(CHARA_ID, 10)
	IF 50 > FLAG:異変隠蔽力
		CALL ADD_ABL_EXP(1, CHARA_ID, 50 + RAND:100 - FLAG:異変隠蔽力)
	ENDIF
	IF FLAG:支配力 > NOTICE_POINT
		CALL PRINT_MESSAGE(CHARA_ID, "諜報", 1, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	ENDIF
ELSEIF NOTICE_POINT
	IF 50 > FLAG:異変隠蔽力
		CALL ADD_ABL_EXP(1, CHARA_ID, 50 + RAND:200 - FLAG:異変隠蔽力)
	ENDIF
ENDIF


code:
;NPCランダムイベント
@NPC_MOVE(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM PHYSICAL_DEVELOP_POINT
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM

VARSET LOCALQUETE
VARSET LOCALIDNUM

FLAG:28 = 0

;屈服済みキャラは戻る
IF CFLAG:CHARA_ID:屈服済
	RETURN
ENDIF

IF TALENT:CHARA_ID:犠牲者
	RETURN
ENDIF

;ドッペルゲンガーがなければ初期宿主は戻る
IF ITEM:149 == 0 && CHARA_ID == FLAG:初期宿主
	RETURN
ENDIF

;拘束・恐慌・睡眠・戦意喪失・絶頂・強制自慰状態だと発生しない
IF CFLAG:CHARA_ID:拘束
	RETURN
ENDIF
IF CFLAG:CHARA_ID:恐慌
	RETURN
ENDIF
IF CFLAG:CHARA_ID:睡眠
	RETURN
ENDIF
IF CFLAG:CHARA_ID:戦意喪失
	RETURN
ENDIF
IF CFLAG:CHARA_ID:絶頂
	RETURN
ENDIF
IF CFLAG:CHARA_ID:強制自慰
	RETURN
ENDIF

FOR LCOUNT , 1, 450
	FLAG:28 = 0
	TRYCCALLFORM NPCEVENTABLE{LCOUNT}(CHARA_ID)
		IF FLAG:28
			LOCALQUETE:LOCALIDNUM = LCOUNT
			LOCALIDNUM += 1
		ENDIF
	CATCH

	ENDCATCH
NEXT
IF LOCALIDNUM == 0
	CALLFORM NPCEVENT0(CHARA_ID)
ELSE
	CALLFORM NPCEVENT{LOCALQUETE:(RAND:LOCALIDNUM)}(CHARA_ID)
ENDIF

VARSET TFLAG

RETURN


code:
;毎日の自動侵食処理
@PARASITE_TENTACLE(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM CHARA_CON
#DIM LOCALQUETE,1000
#DIM LOCALIDNUM

VARSET LOCALQUETE
VARSET LOCALIDNUM

;侵食力が0だと勝手に侵食しない
IF FLAG:10 == 0
	RETURN
ENDIF

;CHARA_IDがあれば特定のキャラ、CHARA_IDがなければランダムなキャラに侵食判定
;ランダムなキャラも初期宿主に親しいキャラから優先して侵食する
;高難易度だとレミリアはランダム侵食されない
IF CHARA_ID == 0

	FOR LCOUNT , 1, CHARANUM
		IF CALLNAME:(CHARA_ID) == "レミリア" && FLAG:難易度 > 1

		ELSEIF CFLAG:(FLAG:初期宿主):所属 == CFLAG:LCOUNT:所属 && CFLAG:LCOUNT:侵食済 == 0
			LOCALQUETE:LOCALIDNUM = LCOUNT
			LOCALIDNUM += 1
		ELSEIF CFLAG:(FLAG:初期宿主):(300+LCOUNT) > 100 && CFLAG:LCOUNT:侵食済 == 0
			LOCALQUETE:LOCALIDNUM = LCOUNT
			LOCALIDNUM += 1
		ELSEIF CFLAG:LCOUNT:住所特定 && CFLAG:LCOUNT:侵食済 == 0
			LOCALQUETE:LOCALIDNUM = LCOUNT
			LOCALIDNUM += 1
		ENDIF
	NEXT
	IF LOCALIDNUM == 0
		CHARA_ID = RAND:(CHARANUM - 1) + 1

		;月と幻想郷外にいるキャラは不可
		IF CFLAG:CHARA_ID:所属 == 8 || CFLAG:CHARA_ID:所属 == 15
			RETURN
		ENDIF
		IF CALLNAME:(CHARA_ID) == "レミリア" && FLAG:難易度 > 1
			RETURN
		ENDIF
	ELSE
		CHARA_ID = LOCALQUETE:(RAND:LOCALIDNUM)
	ENDIF
ENDIF

;すでに侵食していると不可
IF CFLAG:CHARA_ID:侵食済 == 1
	RETURN
ENDIF

;封鎖地域の外にいるキャラは不可
IF ITEM:80 && GETBIT(FLAG:(CFLAG:CHARA_ID:所属 + 50), 3) == 0
	RETURN
ENDIF

CALL PARASITE_TENTACLE_RATE(CHARA_ID)
CHARA_CON = RESULT

;失敗した場合察知力と隠蔽度合いを比較
IF CHARA_CON > FLAG:10 + 5
	PRINTFORML 對%CALLNAME:CHARA_ID%的侵蝕失敗了
	;TranslatedMark %CALLNAME:CHARA_ID%の侵食に失敗した

	;異変に気づく判定、失敗しても察知力経験入手
	;隠蔽失敗した場合、異変がばれて元凶を探され始める
	IF FLAG:異変隠蔽力 < ABL:CHARA_ID:異變發覺 && CFLAG:CHARA_ID:異変察知 == 0
		CFLAG:CHARA_ID:異変察知 = 1
		CALL ADD_ABL_EXP(1, CHARA_ID, 200 + RAND:200)
		CALL ADD_ABL_EXP(4, CHARA_ID, 200 + RAND:200)
	ELSE
		CALL ADD_ABL_EXP(1, CHARA_ID, 200 + RAND:300)
		CALL ADD_ABL_EXP(4, CHARA_ID, 200 + RAND:300)
	ENDIF

	;ログに改行挟む用のフラグ、@END_PHASE内で使用
	MESSAGE_DISPLAY_FLAG = 1

	RETURN

ENDIF

;成功すれば侵食
CALL POLLUTED(CHARA_ID)


code:
;侵食指令の指定先
@PARASITE_TENTACLE_ORDER
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM ALIGN_BUTTON

VARSET LOCAL
VARSET ALIGN_BUTTON

PRINTFORML
DRAWLINE
PRINTFORML 今天要侵蝕誰？
;TranslatedMark 今日は誰に侵食しますか？
PRINTFORML

FOR LCOUNT , 1 , CHARANUM
	IF CFLAG:LCOUNT:住所特定
		IF TALENT:LCOUNT:犠牲者 || CFLAG:LCOUNT:支配済 || CFLAG:LCOUNT:侵食済

		ELSE
			PRINTFORM 　[{LCOUNT:LOCAL,3}] %CSVNAME(NO:LCOUNT),16,LEFT%
			LOCAL:LCOUNT = 1
			ALIGN_BUTTON += 1
			IF (ALIGN_BUTTON % 4) == 0
				PRINTL
			ENDIF
		ENDIF
	ENDIF

NEXT
PRINTL
DRAWLINE
PRINTFORML [ 0] 放棄侵蝕
;TranslatedMark [ 0] 侵食しない
$INPUT_LOOP
INPUT

IF RESULT == 0
	RETURN
ELSEIF RESULT > 0 && RESULT <= FLAG:キャラ人数 && LOCAL:RESULT
	CALL PARASITE_TENTACLE(RESULT)
ELSE
	GOTO INPUT_LOOP
ENDIF


code:
;肉体的なダメージ処理
@PHYSICAL_DEVELOP(CHARA_ID, PHY_POWER)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM PHY_DAMAGE
#DIM PHY_POWER
#DIM PHY_DOMINATE
#DIM ANTI_PHY_DOMINATE
#DIM MIN_PHY_POWER

PHY_DAMAGE = 0

PHY_DOMINATE = (FLAG:支配力 + FLAG:肉体支配力) * 3

PHY_DOMINATE += FLAG:監視者数 * 2

ANTI_PHY_DOMINATE = MAX(MAXBASE:CHARA_ID:HP / 100 , ABL:CHARA_ID:戦闘素質)

;HPはMPより軽減率が高い
IF PHY_DOMINATE > ANTI_PHY_DOMINATE + 10
	PHY_DOMINATE = PHY_DOMINATE + 10
ELSEIF PHY_DOMINATE > ANTI_PHY_DOMINATE
	PHY_DOMINATE = PHY_DOMINATE + 5
ELSEIF PHY_DOMINATE + 10 <= ANTI_PHY_DOMINATE
	PHY_DOMINATE = PHY_DOMINATE / 6
ELSEIF PHY_DOMINATE <= ANTI_PHY_DOMINATE
	PHY_DOMINATE = PHY_DOMINATE / 3
ENDIF

;最低1
PHY_DOMINATE = MAX(PHY_DOMINATE, 1)

;ダメージは支配力のRANDを使って幅を持たせる
;POWERは5で弱い、20で普通、100だと最高峰、くらい

IF BASE:CHARA_ID:HP <= 0
	MIN_PHY_POWER = 250 + RAND:50
ELSE
	MIN_PHY_POWER = 350 + RAND:500
ENDIF

PHY_DAMAGE = MAX(PHY_POWER * (RAND:(PHY_DOMINATE) + RAND:(PHY_DOMINATE) - RAND:(PHY_DOMINATE)) / 8 , MIN_PHY_POWER)

IF TALENT:CHARA_ID:痛みに弱い
	PHY_DAMAGE += PHY_DAMAGE * 11 / 10
ENDIF
IF TALENT:CHARA_ID:痛みに強い
	PHY_DAMAGE += PHY_DAMAGE * 9 / 10
ENDIF
IF TALENT:CHARA_ID:機械
	PHY_DAMAGE += PHY_DAMAGE * 8 / 10
ENDIF

BASE:CHARA_ID:HP = BASE:CHARA_ID:HP - PHY_DAMAGE

;支配はこのタイミングで起きるが屈服は自動回復後
IF BASE:CHARA_ID:HP <= 0
	CALL DOMINATE(CHARA_ID, 2)
ENDIF


code:
;ランダムイベント
@RANDOM_EVENT(CHARA_ID)
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM PHYSICAL_DEVELOP_POINT
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM

VARSET LOCALQUETE
VARSET LOCALIDNUM

FLAG:21 = 0

;侵食していないキャラは戻る
IF CFLAG:CHARA_ID:侵食済 == 0
	RETURN
ENDIF

IF TALENT:CHARA_ID:犠牲者
	RETURN
ENDIF

;支配済みになると自力で動けないし侵食が半分行くまでしか表示せずそれ以上は発生しなくなる
IF CFLAG:CHARA_ID:支配済 == 1 && FLAG:0 * 100 / FLAG:2 > MAX(50, FLAG:支配力 * 2)
	RETURN
ENDIF

;拘束・恐慌・睡眠・戦意喪失・絶頂・強制自慰状態だと発生しない
IF CFLAG:CHARA_ID:拘束
	CALL PRINT_MESSAGE(CHARA_ID, "状態異常", 20, CALLNAME:CHARA_ID, "拘束")
	RETURN
ENDIF
IF CFLAG:CHARA_ID:恐慌
	CALL PRINT_MESSAGE(CHARA_ID, "状態異常", 24, CALLNAME:CHARA_ID, "恐慌")
	RETURN
ENDIF
IF CFLAG:CHARA_ID:睡眠
	CALL PRINT_MESSAGE(CHARA_ID, "状態異常", 25, CALLNAME:CHARA_ID, "睡眠")
	RETURN
ENDIF
IF CFLAG:CHARA_ID:戦意喪失
	CALL PRINT_MESSAGE(CHARA_ID, "状態異常", 28, CALLNAME:CHARA_ID, "戦意喪失")
	RETURN
ENDIF
IF CFLAG:CHARA_ID:絶頂 && TALENT:CHARA_ID:淫乱 == 0
	CALL PRINT_MESSAGE(CHARA_ID, "状態異常", 29, CALLNAME:CHARA_ID, "絶頂")
	RETURN
ENDIF
IF CFLAG:CHARA_ID:強制自慰 && (TALENT:CHARA_ID:淫乱 == 0 || ITEM:189 == 0)
	CALL PRINT_MESSAGE(CHARA_ID, "状態異常", 30, CALLNAME:CHARA_ID, "強制自慰")
	RETURN
ENDIF

FOR LCOUNT , 1, 450
	FLAG:21 = 0
	TRYCCALLFORM EVENTABLE{LCOUNT}(CHARA_ID)
		IF FLAG:21
			LOCALQUETE:LOCALIDNUM = LCOUNT
			LOCALIDNUM += 1
		ENDIF
	CATCH

	ENDCATCH
NEXT
IF LOCALIDNUM == 0
	CALLFORM EVENT0(CHARA_ID)
ELSE
	CALLFORM EVENT{LOCALQUETE:(RAND:LOCALIDNUM)}(CHARA_ID)
ENDIF

VARSET TFLAG

RETURN


code:
;屈服処理
@SURRENDER_RESULT
#DIM LCOUNT	;ループ用
#DIM NUMBER_OF_VICTIM,15	;とりあえず15くらい用意
#DIM VICTIM
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM
#DIM LOCALRESULT
#DIM NUMBER_OF_VICTIM_RESULT,10000

IF FLAG:全体支配済 == 0
	RETURN
ENDIF

VICTIM = 0
VARSET NUMBER_OF_VICTIM
VARSET NUMBER_OF_VICTIM_RESULT

FOR LCOUNT, 1, CHARANUM
	IF TALENT:LCOUNT:犠牲者
		NUMBER_OF_VICTIM:10 ++
		VICTIM ++
	ELSEIF CFLAG:LCOUNT:屈服理由
		NUMBER_OF_VICTIM:(CFLAG:LCOUNT:屈服理由) ++
		VICTIM ++
	ENDIF
NEXT

IF VICTIM != FLAG:キャラ人数
	RETURN
ENDIF

FLAG:全体屈服済 = 1

PRINTFORML
PRINTFORML 少女們的末路
;TranslatedMark 少女たちの末路
PRINTFORML

VARSET LOCALQUETE
VARSET LOCALIDNUM

LOCALRESULT = 1

;末路の条件1つ追加ごとに
;LOCALQUETE:LOCALIDNUM = XX
;LOCALIDNUM += 1
;と書けば良し（XXは空いている番号）

IF ITEM:1
	LOCALQUETE:LOCALIDNUM = 1
	LOCALIDNUM += 1
ENDIF
IF ITEM:2
	LOCALQUETE:LOCALIDNUM = 2
	LOCALIDNUM += 1
ENDIF
IF ITEM:3
	LOCALQUETE:LOCALIDNUM = 3
	LOCALIDNUM += 1
ENDIF
IF ITEM:4
	LOCALQUETE:LOCALIDNUM = 4
	LOCALIDNUM += 1
ENDIF
IF ITEM:5
	LOCALQUETE:LOCALIDNUM = 5
	LOCALIDNUM += 1
ENDIF
IF ITEM:6
	LOCALQUETE:LOCALIDNUM = 6
	LOCALIDNUM += 1
ENDIF
IF ITEM:7
	LOCALQUETE:LOCALIDNUM = 7
	LOCALIDNUM += 1
ENDIF

IF ITEM:7 && ITEM:1
	LOCALQUETE:LOCALIDNUM = 11
	LOCALIDNUM += 1
ENDIF

IF ITEM:29
	LOCALQUETE:LOCALIDNUM = 29
	LOCALIDNUM += 1
ENDIF

IF ITEM:49
	LOCALQUETE:LOCALIDNUM = 49
	LOCALIDNUM += 1
ENDIF
IF ITEM:50
	LOCALQUETE:LOCALIDNUM = 50
	LOCALIDNUM += 1
ENDIF

IF ITEM:84
	LOCALQUETE:LOCALIDNUM = 84
	LOCALIDNUM += 1
ENDIF

IF ITEM:124
	LOCALQUETE:LOCALIDNUM = 124
	LOCALIDNUM += 1
ENDIF

IF ITEM:131
	LOCALQUETE:LOCALIDNUM = 131
	LOCALIDNUM += 1
ENDIF

IF ITEM:168
	LOCALQUETE:LOCALIDNUM = 168
	LOCALIDNUM += 1
ENDIF

IF ITEM:180
	LOCALQUETE:LOCALIDNUM = 180
	LOCALIDNUM += 1
ENDIF

IF ITEM:187
	LOCALQUETE:LOCALIDNUM = 187
	LOCALIDNUM += 1
ENDIF

IF ITEM:218 && ITEM:220
	LOCALQUETE:LOCALIDNUM = 218
	LOCALIDNUM += 1
ENDIF

IF ITEM:222 && ITEM:223
	LOCALQUETE:LOCALIDNUM = 223
	LOCALIDNUM += 1
ENDIF
IF ITEM:222 && ITEM:224
	LOCALQUETE:LOCALIDNUM = 224
	LOCALIDNUM += 1
ENDIF

IF ITEM:263
	LOCALQUETE:LOCALIDNUM = 263
	LOCALIDNUM += 1
ENDIF

IF ITEM:267
	LOCALQUETE:LOCALIDNUM = 267
	LOCALIDNUM += 1
ENDIF

IF ITEM:309
	LOCALQUETE:LOCALIDNUM = 309
	LOCALIDNUM += 1
ENDIF

IF ITEM:325
	LOCALQUETE:LOCALIDNUM = 325
	LOCALIDNUM += 1
ENDIF
IF ITEM:326
	LOCALQUETE:LOCALIDNUM = 326
	LOCALIDNUM += 1
ENDIF

IF ITEM:351 && ITEM:352 == 0
	LOCALQUETE:LOCALIDNUM = 351
	LOCALIDNUM += 1
ENDIF
IF ITEM:352
	LOCALQUETE:LOCALIDNUM = 352
	LOCALIDNUM += 1
ENDIF

IF LOCALIDNUM == 0
	LOCALQUETE:LOCALIDNUM = 0
	LOCALIDNUM += 1
ENDIF

FOR LCOUNT, 1, CHARANUM
	IF CFLAG:LCOUNT:屈服理由 == 7
		NUMBER_OF_VICTIM_RESULT:168 ++
	ELSEIF CFLAG:LCOUNT:屈服理由 == 8
		NUMBER_OF_VICTIM_RESULT:263 ++
	ELSEIF CFLAG:LCOUNT:屈服理由 == 9
		NUMBER_OF_VICTIM_RESULT:267 ++
	ELSEIF CFLAG:LCOUNT:屈服理由 == 10
		NUMBER_OF_VICTIM_RESULT:84 ++
	ELSEIF CFLAG:LCOUNT:屈服理由 == 11
		NUMBER_OF_VICTIM_RESULT:187 ++
	ELSEIF CFLAG:LCOUNT:屈服理由 == 12
		NUMBER_OF_VICTIM_RESULT:180 ++
	ELSEIF TALENT:LCOUNT:犠牲者
		NUMBER_OF_VICTIM_RESULT:95 ++
	ELSE
		NUMBER_OF_VICTIM_RESULT:(LOCALQUETE:(RAND:LOCALIDNUM)) ++
	ENDIF
NEXT

;元は支配でクリアだった名残で支配とかDOMINATEとかあるけどそのままにしておく
FOR LCOUNT, 1, 400
	IF NUMBER_OF_VICTIM_RESULT:LCOUNT
		CALL DOMINATE_VICTIM_RESULT(LCOUNT)
		PRINTFORML %RESULTS,40,LEFT% %@"{NUMBER_OF_VICTIM_RESULT:LCOUNT}人",8,RIGHT%
	ENDIF
NEXT
PRINTFORML
CALL PRINT_MESSAGE(FLAG:初期宿主, "全支配", 0, CALLNAME:(FLAG:初期宿主))
PRINTFORMW

CALL ENDING(NUMBER_OF_VICTIM:1, NUMBER_OF_VICTIM:2, NUMBER_OF_VICTIM:3, NUMBER_OF_VICTIM:4, NUMBER_OF_VICTIM:5, NUMBER_OF_VICTIM:6, NUMBER_OF_VICTIM:7)

$INPUT_LOOP
PRINTFORML
PRINTFORML [ 1]返回標題（如選擇重新開始，將繼承遊戲設置與結局達成情況）
;TranslatedMark [ 1]タイトルに戻る(最初からを選ぶとコンフィグとエンディング達成状況がセーブされます)
PRINTFORML [ 2]就這樣繼續
;TranslatedMark [ 2]このまま続ける
PRINTFORML

INPUT
IF RESULT == 1
	;深い階層から脱出をするため脱出している状態であることを関数外部に通知する
	FOR LOCAL:0, 0, 201
		GLOBAL:(LOCAL:0) = FLAG:(LOCAL:0 + 500)
	NEXT
	SAVEGLOBAL
	PRINTFORMW 已保存
	;TranslatedMark 保存しました
	IS_DOMINATED = 1
	BEGIN TITLE
ELSEIF RESULT == 2

ELSE
	CLEARLINE 1
	REUSELASTLINE 輸入値不可用。請重新輸入
	GOTO INPUT_LOOP
ENDIF


code:
;支配処理
@TENTACLE_SUIT_EVENT(CHARA_ID, SUIT_EVENT)
#DIM LCOUNT	;ループ用
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM
#DIM LOCALRESULT
#DIM CHARA_ID
#DIM SUIT_EVENT

SELECTCASE SUIT_EVENT
	CASE 0
		TFLAG:部位 = RAND:32
		CALL CALC_ECSTASY(CHARA_ID, 20)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

	CASE 21
		CFLAG:CHARA_ID:発情 += RAND:3 + 1
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))

	CASE 25
		TFLAG:部位 = 14
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

	CASE 61
		TFLAG:部位 = 8
		CALL CALC_ECSTASY(CHARA_ID, 20)
		CALL GET_PARASITE(CHARA_ID, "触手")
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 62
		TFLAG:部位 = 8
		CALL CALC_ECSTASY(CHARA_ID, 20)
		CALL GET_PREGNANCY(CHARA_ID, "触手")
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

	CASE 75
		TFLAG:部位 = RAND:16
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

	CASE 76
		TFLAG:部位 = RAND:16
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

	CASE 128
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 135
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))

	CASE 212
		CALL MILK_COME(CHARA_ID, 1 + ITEM:220)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
	CASE 213
		CALL ADD_BUST(CHARA_ID, 1, "メッセージ表示")
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))

	CASE 224
		TFLAG:部位 = 4
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(11, CHARA_ID, 5 + RAND:10)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 225
		TFLAG:部位 = 4
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL GET_PREGNANCY(CHARA_ID, "自分")
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

	CASE 291
		TFLAG:部位 = 1
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 292
		TFLAG:部位 = 1
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 293
		TFLAG:部位 = 1
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 294
		TFLAG:部位 = 2
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 295
		TFLAG:部位 = 2
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 296
		TFLAG:部位 = 4
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 297
		TFLAG:部位 = 8
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

	CASE 303
		CFLAG:CHARA_ID:催眠 = RAND:3 + 1
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL MENTAL_DEVELOP(CHARA_ID, 10, 10)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)
	CASE 327
		TFLAG:部位 = 4
		CALL CALC_ECSTASY(CHARA_ID, 25)
		CALL MENTAL_DEVELOP(CHARA_ID, 5, 10)
		CALL ADD_ABL_EXP(12, CHARA_ID, 5 + RAND:10)
		CALL PRINT_MESSAGE(CHARA_ID, "触手服", SUIT_EVENT, CALLNAME:CHARA_ID, CALLNAME:(FLAG:初期宿主))
		CALL ECSTASY(CHARA_ID)

ENDSELECT

TFLAG:部位 = 0


code:
;=================================================
;ニューゲーム時の処理
;関数を呼び出す場合は初期設定フォルダに入れる
;=================================================
@EVENTFIRST
#DIM LCOUNT
#DIM QUICK
;LCOUNT	ループ用
;LOCAL:5	処女モードの際の行数

	;開始時の時刻取得
	TIME:2 = GETMILLISECOND() / 1000

	;最初は１日目
	DAY = 1

	;最初は1周目
	FLAG:3 = 1

	;アイテム命を付与　なくなるとゲームオーバー
	ITEM:0 = 1

	;管理するキャラの人数設定
	CALL GET_CSVCHARA

	;＝＝＝ グローバルセーブから設定を読み込む ＝＝＝
	LOADGLOBAL
	IF RESULT
		FOR LCOUNT, 0, 251
			FLAG:(LCOUNT + 500) = GLOBAL:(LCOUNT)
		NEXT
	ENDIF
	IF FLAG:509
		LOCAL = ANIME_CONFIG("FORCE", 2)
	ELSE
		LOCAL = ANIME_CONFIG("FORCE", 0)
	ENDIF

	;---難易度設定---
	PRINTFORML 选择游戏的难易度
	;TranslatedMark ゲームの難易度を選択してください
	PRINTFORML [ 0] %"cheat",12,LEFT%		%"从头开始就是最强的模式",10,LEFT%
	;TranslatedMark [ 0] %"cheat",12,LEFT%		%"最初から強いモードです",10,LEFT%
	PRINTFORML [ 1] %"Easy",12,LEFT%		%"想折磨幻想少女的人请选择",10,LEFT%
	;TranslatedMark [ 1] %"Easy",12,LEFT%		%"幻想郷を苛めたい人向け",10,LEFT%
	PRINTFORML [ 2] %"Normal",12,LEFT%		%"中规中矩的普通难度",10,LEFT%
	;TranslatedMark [ 2] %"Normal",12,LEFT%		%"普通",10,LEFT%
	PRINTFORML [ 3] %"Hard",12,LEFT%		%"部分角色都将会拥有特殊补正",10,LEFT%
	;TranslatedMark [ 3] %"Hard",12,LEFT%		%"色々なキャラが特殊補正を持っているモードです",10,LEFT%

	$INPUT_LOOP_DIF
	INPUT
	IF RESULT >= 0 && RESULT <= 3
		FLAG:4 = RESULT - 1
	ELSE
		CLEARLINE 1
		REUSELASTLINE 入力値が不正です。再入力してください
		GOTO INPUT_LOOP_DIF
	ENDIF

	;＝＝＝ チュートリアル設定 ＝＝＝
	;チュートリアル確認だけはグローバルセーブの管轄外とする
	PRINTL
	PRINTL ～第一次玩的人へ～
	;TranslatedMark ～初めてプレイされる方へ～
	PRINTL 这个游戏有着许多不同要素的存在
	;TranslatedMark このゲームは割と色んな要素が存在します。
	PRINTL 如果是第一次玩的话，建议你仔细查看游戏内的教程
	;TranslatedMark 初めてプレイされる方は、ゲーム中のチュートリアルを良く確認しておくことをオススメします。
	PRINTL
	PRINTL

	PRINTFORML 那么，要开启游戏内教程吗？
	;TranslatedMark というわけでチュートリアルをONにしますか？
	PRINTFORML [0] 开启
	;TranslatedMark [0] はい
	PRINTFORML [1] 不开启
	;TranslatedMark [1] いいえ

	INPUT
	IF RESULT == 1
		PRINTFORMW 教程已禁用
		;TranslatedMark チュートリアルを無効にしました
		FOR LCOUNT, 400, 500
			FLAG:(LCOUNT) |= 2
		NEXT
	ELSE
		FLAG:500 = 1
		PRINTFORMW 教程已开启
		;TranslatedMark チュートリアルを有効にしました
		CALL SHOW_TUTORIAL(0)
	ENDIF

	;＝＝＝ 元凶触手設定 ＝＝＝
	PRINTL
	PRINTL 要为引起异变的元凶触手起一个名字吗？
	;TranslatedMark 異変の元凶となる触手の名前を自分で決めますか？
	PRINTL 如果你不起名字的话，触手的名称默认为「元凶触手」
	;TranslatedMark 自分で決定しない場合「元凶触手」と呼ばれます。

	PRINTFORML
	PRINTFORML [0] 自己决定
	;TranslatedMark [0] 自分で決める
	PRINTFORML [1] 元凶触手

	INPUT
	IF RESULT == 1
		SAVESTR:0 = 元凶触手
		PRINTFORMW 现在是默认名称%SAVESTR:0%
		;TranslatedMark 愛称はデフォルト名%SAVESTR:0%になりました
		PRINTFORML
		PRINTFORML
	ELSE
		SAVESTR:0 = 元凶触手
		PRINTFORML 请为引起异变的元凶触手输入名称（若要取消，按下Enter即可）
		;TranslatedMark 異変の元凶となる触手の愛称を入力してください（キャンセルする場合はそのままEnterを押してください）
		INPUTS
		IF RESULTS == ""
			PRINTFORMW 现在是默认名称%SAVESTR:0%
			;TranslatedMark 愛称はデフォルト名%SAVESTR:0%になりました
		ELSE
			SAVESTR:0 = %RESULTS%
			PRINTFORMW 引起异变的触手名称已被更改为%SAVESTR:0%
			;TranslatedMark 異変の元凶となる触手の愛称を%SAVESTR:0%に変更しました
		ENDIF
		PRINTFORML
		PRINTFORML
	ENDIF

	;--- 初期処理開始 ------------------
	;キャラ登録番号メモ
	;0			「あなた」
	;1～		幻想少女
	;敵データは配列DAにて管理する

	TARGET = -1
	ASSI = -1

	CALL SHOW_TUTORIAL(1)
	CALL START_CHARA_SELECT

	;各種初期化処理
	CALL INITIALIZE
	CALL CHARA_INITIALIZE
	CALL POLLUTED(FLAG:初期宿主)
	FLAG:初期ボーナス = MAX( (160 - ABL:(FLAG:初期宿主):戦闘素質 - ABL:(FLAG:初期宿主):速度) / 20 ,0)
	PRINTFORML 根据宿主的初始能力，获得{FLAG:初期ボーナス}点成长力与元凶隐藏力的补正
	;TranslatedMark 宿主の初期能力に応じて、成長力と元凶隠蔽力に{FLAG:初期ボーナス}の補正を得た
	CALL CHECK_GROWTH
	CALL CHECK_GROWTH_2

	PRINTFORML 可自由設置最初宿主的性格
	;TranslatedMark 最初の宿主のみ性格を自由に設定することができます
	CALL CHANGE_PERSONALITY(FLAG:初期宿主)

	CALL CONFIGURE_FIRST_TALENT
	CALL CHARA_INITIALIZE_2

	$START_OP

	PRINTL
	;ストーリー
	PRINTL 是否觀看開場導入？
	;TranslatedMark オープニングを見ますか？
	CALL ASK_YN
	IF RESULT == 0
		CALL PRINT_MESSAGE(FLAG:初期宿主, "オープニング", 0, CALLNAME:(FLAG:5), "")
	ENDIF

	;ゲーム開始時
	CALL PRINT_MESSAGE(FLAG:初期宿主, "キャラ別オープニング", 0, CALLNAME:(FLAG:5), "")

	;開始前成長
	CALL SHOW_TUTORIAL(2)
	CALL GROWTH_TENTACLE

	BEGIN SHOP
;=================================================


code:
;各フェイズのメイン処理
@MAIN_PHASE
;ループ用

;メインフェイズ処理

CALL WORLD_EVENT

;行動処理終了
CALL END_PHASE

;SHOPへ戻る


code:
;[ライセンス]パブリックドメイン
;本ファイルに係る著作権を放棄する。
;本ファイルに係る著作人格権は行使しない。
;2009/3/28 MinorShift(Emuera作者)

;独自のセーブ・ロードシステムの例（Emuera  ver 1.50以降対象）
;LOADGAMEの代わりにCALL LOADGAME_EX、SAVEGAMEの代わりにCALL SAVEGAME_EXを実行してください。
;実際に使用するには旧来の@SAVEINFOに合わせて@SAVEINFO_EXを編集する必要があります。
;使用している命令の詳細についてはEmueraの拡張文法.txtを参照してください。
;

@SAVEGAME_EX
#DIM TEMP
#DIM SLOT_LIMIT

;セーブする前に、プレイ時間反映
TIME:1 += GETMILLISECOND() / 1000 - TIME:2
TIME:2 = GETMILLISECOND() / 1000

REDRAW 0

; 見出し表示
FONTSTYLE 4
PRINTFORM \s\s
FONTSTYLE 0
PRINT  要將存档保存在何處？
;TranslatedMark 何番にセーブしますか？
FONTSTYLE 4
FOR TEMP, 0, 74
	PRINTFORM \s
NEXT
FONTSTYLE 0
PRINTL
PRINTL

; セーブモードで表示
CALL PRINT_SAVEDATA(1)
REDRAW 1

SAVENOS SLOT_LIMIT
INPUT
; 戻る
IF (RESULT == 999)
	RETURN

; 前のページへ
ELSEIF RESULT == 101
	CALL MOVE_SAVEDATA(GLOBAL:900 - 10)
	RESTART

; 次のページへ
ELSEIF RESULT == 102
	CALL MOVE_SAVEDATA(GLOBAL:900 + 10)
	RESTART

; 入力不可の数字
ELSEIF ((RESULT < 0) || (RESULT >= SLOT_LIMIT))
	RESTART
ELSE
	LOCAL = RESULT
	CHKDATA LOCAL
	;RESULT == 1は"ファイルが存在しない"
	IF RESULT != 1
		PRINTL 此處已有存档，是否確認覆盖？
		;TranslatedMark 既にデータが存在します。上書きしますか？
		PRINTL [0] 確定
		;TranslatedMark [0] はい
		PRINTL [1] 取消
		;TranslatedMark [1] いいえ
$INPUT_LOOP
		INPUT
		IF RESULT == 1
			RESTART
		ELSEIF RESULT != 0
			GOTO INPUT_LOOP
		ENDIF
	ENDIF
	CALL SAVEINFO_EX
	SAVEDATA LOCAL, RESULTS
ENDIF

@LOADGAME_EX
#DIM TEMP
#DIM SLOT_LIMIT

REDRAW 0

; 見出し表示
PRINTL 要讀取那个存档？
;TranslatedMark 何番をロードしますか？
FONTSTYLE 4
FOR TEMP, 0, 100
	PRINTFORM \s
NEXT
FONTSTYLE 0
PRINTL
PRINTL

; ロードモードで表示
CALL PRINT_SAVEDATA
REDRAW 1

SAVENOS SLOT_LIMIT
INPUT
; 戻る
IF (RESULT == 999)
	RETURN

; 前のページへ
ELSEIF RESULT == 101
	CALL MOVE_SAVEDATA(GLOBAL:900 - 10)
	RESTART

; 次のページへ
ELSEIF RESULT == 102
	CALL MOVE_SAVEDATA(GLOBAL:900 + 10)
	RESTART

; 入力不可の数字
ELSEIF ((RESULT < 0) || (RESULT >= SLOT_LIMIT)) && (RESULT != 99)
	RESTART

ELSE
	LOCAL = RESULT
	CHKDATA LOCAL
	;RESULT == 0ならロード可能
	IF RESULT != 0
		RESTART
	ENDIF
	LOADDATA LOCAL
ENDIF

@PRINT_SAVEDATA(MODE = 0)
#DIM	MODE	; 0:LOAD 1:SAVE
#DIM	LCOUNT
#DIM	TEMP
#DIM	TEMP2

	; セーブデータを表示
	; セーブデータの表示はデザインを優先した為、結構な力業です
	FOR LCOUNT, GLOBAL:900, (GLOBAL:900 + 5)

		; セーブデータのコメント読み込み & 分割
		; 前周のゴミを引き継がないよう毎回初期化
		; 左情報表示
		VARSET SAVE_ARRAY
		CHKDATA LCOUNT
		SPLIT RESULTS:0, ",", SAVE_ARRAY
		CALL SHOW_SAVEINFO(LCOUNT)

		; 右情報表示
		VARSET SAVE_ARRAY
		CHKDATA (LCOUNT + 5)
		SPLIT RESULTS:0, ",", SAVE_ARRAY
		CALL SHOW_SAVEINFO(LCOUNT + 5)

		PRINTL

		; 左PT表示
		VARSET SAVE_ARRAY
		CHKDATA LCOUNT
		SPLIT RESULTS:0, ",", SAVE_ARRAY
		CALL SHOW_SAVEPT(LCOUNT)

		; 右PT表示
		VARSET SAVE_ARRAY
		CHKDATA (LCOUNT + 5)
		SPLIT RESULTS:0, ",", SAVE_ARRAY
		CALL SHOW_SAVEPT(LCOUNT + 5)

		PRINTL

		; 左時間表示
		VARSET SAVE_ARRAY
		CHKDATA LCOUNT
		SPLIT RESULTS:0, ",", SAVE_ARRAY
		CALL SHOW_SAVETIME(LCOUNT)

		; 右時間表示
		VARSET SAVE_ARRAY
		CHKDATA (LCOUNT + 5)
		SPLIT RESULTS:0, ",", SAVE_ARRAY
		CALL SHOW_SAVETIME(LCOUNT + 5)

		PRINTL
		PRINTL
	NEXT

	; オートセーブの表示(ロード時のみ)
	IF MODE == 0
		VARSET SAVE_ARRAY
		CHKDATA 99
		SPLIT RESULTS:0, ",", SAVE_ARRAY

		PRINTFORM %"", 25, LEFT%
		SETCOLOR RGBCOLOR(137, 163, 255)
		PRINTL 《AutoSave》
		RESETCOLOR

		PRINTFORM %"", 25, LEFT%
		CALL SHOW_SAVEINFO(99)
		PRINTL

		PRINTFORM %"", 25, LEFT%
		CALL SHOW_SAVEPT(99)
		PRINTL

		PRINTFORM %"", 25, LEFT%
		CALL SHOW_SAVETIME(99)
		PRINTL
	ENDIF

	PRINTL
	DRAWLINEFORM .
	PRINTFORML %" [101] 上一頁", 50, LEFT%%"[102] 下一頁 ", 50, RIGHT%

	; 罫線
	FONTSTYLE 4
	FOR TEMP, 0, 100
		PRINTFORM \s
	NEXT
	PRINTL
	FONTSTYLE 0

	PRINTL [999] 返回
RETURN

;SAVEDATA命令は@SAVEINFO関数を呼ばないのでPUTFORMの代わりの文字列を用意する必要がある
@SAVEINFO_EX
#DIMS VALUE
	; 初期化
	VARSET VALUE

	; 旧バージョンデータ
	; RESULTS:0 = %RESULTS:0% %NAME:1, 20, LEFT%  {DAY}日目：%CONVERT_TIME()%  プレイ時間 %PRINT_TIME(TIME:1)%

	; 新バージョンデータ
	; EXセーブ判断用文字列"EX", ゲーム内日付, ゲーム内時間, デバッグモードの有無
	VALUE = EX,{DAY},%CONVERT_TIME()%,{FLAG:9}

	; 難易度
	CALL SET_CONFIGURE_96(0)
	VALUE = %VALUE%,%RESULTS:1%

	; キャラデータ
	; 主人公
	VALUE = %VALUE%,%CALLNAME:(FLAG:初期宿主)%,{CFLAG:1:700}

	; セーブ時間, プレイ時間
	GETTIMES
	VALUE = %VALUE%,%GETTIMES_CUSTOM()%,%PRINT_TIME(TIME:1)%

	RESULTS:0 = %VALUE%
RETURN

@TITLE_LOADGAME
;タイトル画面のロードでも独自のロード画面を使う場合、@TITLE_LOADGAMEを定義する
;@TITLE_LOADGAMEが定義されていると、標準のロード画面の代わりにTITLE_LOADGAMEが呼ばれる。
CALL LOADGAME_EX
RETURN
;RETURNするとタイトルへ戻る。

@SYSTEM_AUTOSAVE
;オートセーブの処理を独自に行う場合、@SYSTEM_AUTOSAVEを定義する
;@SYSTEM_AUTOSAVEが定義されていると、標準のオートセーブの代わりにSYSTEM_AUTOSAVEが呼ばれる。
CALL AUTO_SAVE

;独自のオートセーブ処理
@AUTO_SAVE
CALL SAVEINFO_EX
SAVEDATA 99, RESULTS

; 見出し表示
@SHOW_SAVEINFO(ARG)
#DIM TEMP
#DIM TEMP2

	; セーブスロットよりも大きい数字で呼び出された場合は空白表示で帰る(AutoSaveのARG==99は除く)
	SAVENOS TEMP
	IF ARG > (TEMP - 1) && ARG != 99
		PRINTFORM %"", 50, LEFT%
		RETURN
	ENDIF

	PRINTBUTTON "  ", ARG

	; セーブデータが読み込めない
	CHKDATA ARG
	IF RESULT:0 != 0
		SETCOLOR 0x444444
		FONTSTYLE 4
		PRINTS "  "
		FONTSTYLE 0
		PRINTFORM  [{ARG, 2, RIGHT}]  NO DATA
		FONTSTYLE 4
		FOR TEMP, 0, 29
			PRINTFORM \s
		NEXT
		FONTSTYLE 0
		PRINTS "  "
		RESETCOLOR
		RETURN
	ENDIF

	; EX拡張フォーマットではない
	IF SAVE_ARRAY:0 != "EX"
		FONTSTYLE 4
		PRINTS "  "
		FONTSTYLE 0
		PRINTFORM  [{ARG, 2, RIGHT}]  可互換存档
		; PRINTFORM  [{ARG, 2, RIGHT}]  互換セーブデータ
		FONTSTYLE 4
		FOR TEMP, 0, 20
			PRINTFORM \s
		NEXT
		FONTSTYLE 0
		PRINTS "  "
		RETURN
	ENDIF

	; 罫線の長さを調整するための変数
	TEMP2 = 46

	; 先頭罫線 + ゲーム内経過日数 + ゲーム内時間表示
	FONTSTYLE 4
	PRINTS "  "
	FONTSTYLE 0
	PRINTFORM  [{ARG, 2, RIGHT}]第%SAVE_ARRAY:1, 4, RIGHT%日
	; PRINTFORM  [{ARG, 2, RIGHT}]%SAVE_ARRAY:1, 4, RIGHT%日目：%SAVE_ARRAY:2%
	TEMP2 -= 19

	; デバッグモード表示
	TOINT SAVE_ARRAY:3
	IF RESULT:0 == 1
		PRINT 《Debug》
		TEMP2 -= 9
	ELSE
		PRINTS " "
		TEMP2 -= 1
	ENDIF

	; 罫線表示
	; 罫線後にも可変長な文字列を表示するので、先に文字の長さを出しておく
	STRLENS SAVE_ARRAY:4
	FONTSTYLE 4
	FOR TEMP, 0, (TEMP2 - RESULT:0 - 4)
		PRINTFORM \s
	NEXT
	FONTSTYLE 0

	PRINTFORM  %SAVE_ARRAY:4%

	FONTSTYLE 4
	PRINTS "  "
	FONTSTYLE 0
	PRINTS "  "
RETURN

; PT表示
@SHOW_SAVEPT(ARG)
#DIM TEMP
#DIM LIMIT_COUNT

	; セーブスロットよりも大きい数字で呼び出された場合は空白表示で帰る(AutoSaveのARG==99は除く)
	SAVENOS TEMP
	IF ARG > (TEMP - 1) && ARG != 99
		PRINTFORM %"", 50, LEFT%
		RETURN
	ENDIF

	PRINTS "     "

	; セーブデータが読み込めない
	CHKDATA ARG
	IF RESULT:0 != 0
		SETCOLOR 0x444444
		PRINTFORM …………… …………… …………… ……………
		RESETCOLOR
		RETURN
	ENDIF

	; EX拡張フォーマットではない
	; 旧型の表示を行う
	IF SAVE_ARRAY:0 != "EX"
		SETCOLOR 0x999999
		CHKDATA ARG
		SUBSTRING RESULTS:0, 0, 40
		PRINTFORM %RESULTS:0%
		RETURN
	ENDIF

	; PT表示領域は43文字までOK
	LIMIT_COUNT = 33

	PRINTFORM 初始宿主：
	; キャラ3人 + ペット分ループ
	FOR TEMP, 0, 4
		; データあり
		IF SAVE_ARRAY:(5 + (TEMP * 2)) != ""
			; 2つめ以降の要素なら区切りを表示(LIMIT_COUNT 3以上)
			IF TEMP != 0 && LIMIT_COUNT >= 3
				;PRINTS " / "
				LIMIT_COUNT = LIMIT(LIMIT_COUNT - 3, 0, 43)
			ENDIF

			TOINT SAVE_ARRAY:(6 + (TEMP * 2))
			SETCOLOR RESULT:0

			STRLENS SAVE_ARRAY:(5 + (TEMP * 2))
			; 文字数限界を超えていないので通常表示
			IF RESULT:0 <= LIMIT_COUNT
				PRINTFORM %SAVE_ARRAY:(5 + (TEMP * 2))%
				LIMIT_COUNT = LIMIT(LIMIT_COUNT - RESULT:0, 0, 43)

			; 文字数限界を超えてしまったので表示を省略
			ELSE
				; 文字数限界が奇数だと表示が狂うので調整
				SIF LIMIT_COUNT % 2
					LIMIT_COUNT = LIMIT(LIMIT_COUNT - 1, 0, 43)

				SUBSTRING SAVE_ARRAY:(5 + (TEMP * 2)), 0, LIMIT_COUNT
				PRINTFORM %RESULTS:0%
				LIMIT_COUNT = 0
			ENDIF
			RESETCOLOR
		ENDIF
	NEXT

	; 表示ズレ防止の空白を表示
	FOR TEMP, 0, LIMIT_COUNT
		PRINTS " "
	NEXT

	PRINTS " "
RETURN

; 時間表示
@SHOW_SAVETIME(ARG)
#DIM TEMP

	; セーブスロットよりも大きい数字で呼び出された場合は空白表示で帰る(AutoSaveのARG==99は除く)
	SAVENOS TEMP
	IF ARG > (TEMP - 1) && ARG != 99
		PRINTFORM %"", 50, LEFT%
		RETURN
	ENDIF

	; セーブデータが読み込めない
	CHKDATA ARG
	IF RESULT:0 != 0
		SETCOLOR 0x444444
		PRINTFORM        ----/--/-- --:--:--   遊玩時間 --:--:--
		RESETCOLOR
		RETURN
	ENDIF

	; EX拡張フォーマットではない
	; 旧型の表示を行う
	IF SAVE_ARRAY:0 != "EX"
		; 旧セーブデータの文字列長は可変なので41文字目から最後まで
		SETCOLOR 0x999999
		CHKDATA ARG
		LOCALS:0 = %RESULTS:0%
		STRLENS LOCALS:0
		SUBSTRING LOCALS:0, 41, RESULT:0
		PRINTFORM %RESULTS:0, 49, RIGHT%
		RETURN
	ENDIF

	SETCOLOR 0x999999
	PRINTFORM     %SAVE_ARRAY:7%  遊玩時間 %SAVE_ARRAY:8%
	;TranslatedMark %SAVE_ARRAY:13%   プレイ時間 %SAVE_ARRAY:14%
	RESETCOLOR
RETURN

; セーブデータの参照ページを変更します
@MOVE_SAVEDATA(ARG)
#DIM TEMP
#DIM SLOT_LIMIT
#DIM LCOUNT

	; 変更したページが有効かどうかチェック
	; 0以下 もしくはCONFIGのセーブ数超なら変更失敗
	SAVENOS SLOT_LIMIT
	; 0未満
	IF ARG < 0
		; 最終ページを参照するように
		; 引数の1桁目を丸める
		TEMP = (SLOT_LIMIT - 1) / 10
		TEMP = TEMP * 10
		LCOUNT = TEMP

	; CONFIGのセーブ設定数超
	ELSEIF ARG >= SLOT_LIMIT
		; 初期ページを参照するように
		LCOUNT = 0

	; 通常処理
	ELSE
		; 指定されたページを参照する
		; 引数の1桁目を丸める
		TEMP = ARG / 10
		TEMP = TEMP * 10
		LCOUNT = TEMP
	ENDIF

	; 変更したらGLOBAL書き換え
	LOADGLOBAL
	GLOBAL:900 = LCOUNT
	SAVEGLOBAL

RETURN

@GETTIMES_CUSTOM()
#FUNCTIONS
#DIMS TIMEINFO
;カスタム時間表示の例
;年
TIMEINFO = {(GETTIME() / 10000000000000) }
;月
LOCAL = (GETTIME() / 100000000000) % 100
TIMEINFO = %TIMEINFO%年\@ LOCAL < 10 ? 0 # \@{LOCAL}
;日
LOCAL = (GETTIME() / 1000000000) % 100
TIMEINFO = %TIMEINFO%月\@ LOCAL < 10 ? 0 # \@{LOCAL}
;時
LOCAL = ((GETTIME() / 10000000) % 100) % 24
TIMEINFO = %TIMEINFO%日 \@ LOCAL < 10 ? 0 # \@{LOCAL}
;分
LOCAL = (GETTIME() / 100000) % 100
TIMEINFO = %TIMEINFO%:\@ LOCAL < 10 ? 0 # \@{LOCAL}
;秒
LOCAL = (GETTIME() / 1000) % 100
TIMEINFO = %TIMEINFO%:\@ LOCAL < 10 ? 0 # \@{LOCAL}

RETURNF TIMEINFO


code: #DIMS	SAVE_ARRAY, 100


code:
;お店（という名の待機画面）処理

@EVENTSHOP
DRAWLINE

@SHOW_SHOP
#DIM LCOUNT,3	;ループ用
#DIM LINECOUNTBAK
#DIM DOMINATE_RATE
#DIM POLLUTED_RATE
#DIM SURRENDER_RATE

;ここで触手の能力を更新しておく
CALL TENTACLE_RENEW
;拠点の状態もここでやっておく
FOR LCOUNT , 1, 17
	CALL TODAY_POSITION(LCOUNT)
NEXT

CALL SHOW_TUTORIAL(3)

IF DAY > 1
	CALL SHOW_TUTORIAL(5)
ENDIF

;＝＝＝メイン画面描画処理ここから＝＝＝
REDRAW 0
DRAWLINEFORM =

CALL PRINT_MESSAGE(FLAG:初期宿主, "日常", 0, CALLNAME:(FLAG:初期宿主), CALLNAME:(FLAG:初期宿主))

PRINTFORM 第{DAY}天
;TranslatedMark {DAY}日目
PRINTFORML 初始宿主　%CALLNAME:(FLAG:初期宿主)%
PRINTFORML

;///ウォッチャー君機能///
CALL WATCHER_SYSTEM(WATCHER_FLAG)

PRINTFORML
PRINTFORML %@"剩余成長點　{FLAG:6}",17,LEFT%
;TranslatedMark %@"残り成長点　{FLAG:6}",17,LEFT%
PRINTFORM %@"侵蝕力　　　{FLAG:10}",17,LEFT%
;TranslatedMark %@"侵食力　　　{FLAG:10}",17,LEFT%
PRINTFORM %@"支配力　　　{FLAG:11}",17,LEFT%
PRINTFORM %@"成長力　　　{FLAG:12}",17,LEFT%
;TranslatedMark %@"成長力　　　{FLAG:12}",17,LEFT%
PRINTFORML %@"戰鬥力　　　{FLAG:13}",17,LEFT%
;TranslatedMark %@"戦闘力　　　{FLAG:13}",17,LEFT%
PRINTFORM %@"異變隱藏力　{FLAG:14}",17,LEFT%
;TranslatedMark %@"異変隠蔽力　{FLAG:14}",17,LEFT%
PRINTFORM %@"元兇隱藏力　{FLAG:15}",17,LEFT%
;TranslatedMark %@"元凶隠蔽力　{FLAG:15}",17,LEFT%

POLLUTED_RATE = FLAG:侵食人数 * 100 / (CHARANUM - 1)
DOMINATE_RATE = FLAG:支配人数 * 100 / (CHARANUM - 1)
SURRENDER_RATE = FLAG:屈服人数 * 100 / (CHARANUM - 1)

PRINTFORM %@"侵蝕度　　　{POLLUTED_RATE} ％",17,LEFT%
;TranslatedMark %@"侵食率　　　{POLLUTED_RATE} ％",17,LEFT%
PRINTFORM %@"支配度　　　{DOMINATE_RATE} ％",17,LEFT%
PRINTFORML %@"屈服度　　　{SURRENDER_RATE} ％",17,LEFT%
PRINTFORML

CALL PRINT_LCL(1)
CALL PRINT_LCL(0, "[  9] - 推進一日")
CALL PRINT_LCL(0, "[101] - 開始行動")
CALL PRINT_LCL(0, "[102] - 觸手成長")

CALL PRINT_LCL(0, "[  5] - 推進十日")
CALL PRINT_LCL(0, "[110] - 確認能力")
CALL PRINT_LCL(0, "[111] - 確認圖鑒")

CALL PRINT_LCL(0, "[112] - 確認少女")
CALL PRINT_LCL(0, "[113] - 確認據點")
CALL PRINT_LCL(0, "[114] - 確認初始宿主")
CALL PRINT_LCL(2)

DRAWLINE
CALL PRINT_LCL(1)

CALL PRINT_LCL(0, "[200] - 系統")
CALL PRINT_LCL(0, "　")
CALL PRINT_LCL(0, "[202] - 設置")
CALL PRINT_LCL(2)

REDRAW 1
;＝＝＝メイン画面描画ここまで＝＝＝

CALL AUTO_SAVE

IF RESULT
	RESTART
ENDIF

@USERSHOP
#DIM LCOUNT

IF RESULT == 5
	FOR LCOUNT, 0, 10
		CALL MAIN_PHASE
		;BEGIN TITLEされた場合残りは実行せず終わる
		IF IS_DOMINATED
			RETURN
		ENDIF
	NEXT
ELSEIF RESULT == 9
	CALL MAIN_PHASE
ELSEIF RESULT == 101
	CALL TALK_SELECT
	IF RESULT == 1

	ELSE
		CALL END_PHASE
	ENDIF
ELSEIF RESULT == 102
	CALL GROWTH_TENTACLE

;------
;能力確認
ELSEIF RESULT == 110
	CALL CHECK_TENTACLE_STATUS
ELSEIF RESULT == 111
	CALL WIKI
ELSEIF RESULT == 112
	CALL CHECK_STATUS_CARRIER
ELSEIF RESULT == 113
	CALL CHECK_STATUS_POSISION
ELSEIF RESULT == 114
	CALL CHECK_STATUS(FLAG:初期宿主)
ELSEIF RESULT == 200
	CALL SYSTEM_COMMAND
	RETURN
ELSEIF RESULT == 202
	CALL SET_CONFIGURE
	RETURN
;------
;ウォッチャー君機能
;出力は メインメニュー（SHOP）\ SYSTEM_WATCHER \ SYSTEM_WATCHER.ERB に記述
ELSEIF RESULT == 100
	IF TALENT:WATCHER_ID:犠牲者
		PRINTFORMW 無法觀察已成為犧牲者的角色
		RETURN
	ELSE
		IF WATCHER_ID != FLAG:5 && !CFLAG:WATCHER_ID:3
			CALL TALK(WATCHER_ID)
			CALL END_PHASE
		ELSEIF WATCHER_ID == FLAG:5 || CFLAG:WATCHER_ID:3
			CALL TALK_2(WATCHER_ID)
			CALL END_PHASE
		ENDIF
	ENDIF
ELSEIF RESULT == 81
	WATCHER_FLAG++
	SIF WATCHER_FLAG > 1
		WATCHER_FLAG = 0
	RETURN
ELSEIF RESULT == 80
	DRAWLINEFORM =
	CALL PALAMSPREAD_WSELECT
	RETURN
;------

ELSEIF RESULT == 999
	IF FLAG:9
		PRINTFORMW 關閉調試模式
		FLAG:9 = 0
	ELSE
		PRINTFORMW 打開調試模式
		FLAG:9 = 1
	ENDIF
	RETURN

ELSE
	PRINTW 輸入錯誤
	;TranslatedMark 入力値が不正です！
	RETURN
ENDIF

;=================================================
;システムコマンド
;=================================================
@SYSTEM_COMMAND

WHILE 1
	REDRAW 0
	DRAWLINE
	PRINTL
	PRINTL [ 1] 存档
	PRINTL
	PRINTL [ 2] 讀档
	PRINTL
	PRINTL [ 3] 返回標題
	PRINTL
	PRINTL
	PRINTL [ 0] 取消
	REDRAW 1

	$INPUT_LOOP
	INPUT

	IF RESULT == 0
		RETURN
	ELSEIF RESULT == 1
		CALL SAVEGAME_EX
	ELSEIF RESULT == 2
		CALL LOADGAME_EX
	ELSEIF RESULT == 3
		PRINTL 是否確定返回標題？※未保存内容將消失！
		PRINTL
		PRINTL [ 1] 確定
		PRINTL
		PRINTL [ 0] 取消
		$INPUT_LOOP2
		INPUT
		IF RESULT == 0

		ELSEIF RESULT == 1
			RESETDATA
			BEGIN TITLE
		ELSE
			GOTO INPUT_LOOP2
		ENDIF
	ELSE
		GOTO INPUT_LOOP
	ENDIF

WEND

;=================================================


code:
;[ライセンス]パブリックドメイン
;本ファイルに係る著作権を放棄する。
;本ファイルに係る著作人格権は行使しない。
;2009/6/13 MinorShift(Emuera作者)

;独自のタイトル画面の例（Emuera ver 1.700以降対象）
;LOADGAME_EXが定義されていることが前提なので、SAVELOAD.ERBと同時に使用してください。
;SAVELOAD.ERBを使用しない場合、CALL LOADGAME_EXをLOADGAMEに置き換えてください。
;なお、SYSTEM_TITLEが定義されているとTITLE_LOADGAMEは呼ばれなくなります。
;使用している命令、変数の詳細についてはEmueraの拡張文法.txtを参照してください。

@SYSTEM_TITLE
#DIMS Lambda
;@SYSTEM_TITLEが定義されていると、標準のタイトル画面の代わりにSYSTEM_TITLEが呼ばれる。

;このタイミングでグローバル変数を読んでおけば取りこぼしが無くなる。
;GLOBALはRESETDATAやLOADDATAによって初期化・上書きされない。
;必要に応じてコメントアウトを解除すること。
;LOADGLOBAL

;ツールチップの表示時間を設定
;signed 16bitの最大値が設定上限の為、実値で設定
TOOLTIP_SETDURATION 32767

;バージョン表記をLOCALS:0に作成。
;1001なら1.001、1100なら1.10と表示されるように。
;ここで使用した変数はRESETDATAかLOADDATAによってクリアされるのでローカル変数を使わなくてもよい。
LOCAL:0 = GAMEBASE_VERSION / 1000
LOCAL:1 = GAMEBASE_VERSION % 1000 / 10
LOCAL:2 = GAMEBASE_VERSION % 10
STRLENFORM {LOCAL:1}
LOCALS:1 = %"0" * (2 - RESULT:0)%{LOCAL:1}
LOCALS:0 = v{LOCAL:0}.%LOCALS:1%
SIF LOCAL:2 != 0
	LOCALS:0 = %LOCALS:0%.{LOCAL:2}

; タイトル表示前にGLOBALSAVEを読み込んでおく
; セーブデータの参照ページ確認で使う
LOADGLOBAL

SELECTCASE RAND:16
	CASE 0
		Lambda = LambdaDelta
	CASE 1
		Lambda = 拉姆达戴露塔酱
	CASE 2
		Lambda = 最可爱最恶劣の绝对之魔女
	CASE 3
		Lambda = 拉姆达戴露塔
	CASE 4
		Lambda = 拉姆达大人
	CASE 5
		Lambda = 拉姆达戴露塔卿
	CASE 6
		Lambda = ラムダデルタ
	CASE 7
		Lambda = 绝対の魔女
	CASE 8
		Lambda = 金发贫乳但是超级可爱的拉姆达戴露塔卿
	CASE 9
		Lambda = 元老院的最强魔女
	CASE 10
		Lambda = 宇宙最强的魔女大人
	CASE 11
		Lambda = 正在撸猫的拉姆达大人
	CASE 12
		Lambda = 正在缠着贝伦一起玩的拉姆达酱
	CASE 13
		Lambda = 正在无聊地自己和自己下棋的拉姆达酱
	CASE 14
		Lambda = 看够了没呀，就算你再翻也不会得到什么的哦？
	CASE 15
		Lambda = 就算再翻也不会给你金平糖吃的哦？
ENDSELECT

;エンディングからタイトルに戻る際の後始末　どのように呼び出されていても必ずここを通るのでここで行う
IS_DOMINATED = 0

;タイトル表示。
DRAWLINE

ALIGNMENT CENTER
PRINTFORML %GAMEBASE_TITLE%
PRINTFORML %LOCALS:0% - λΔ＋α
PRINTFORML %GAMEBASE_AUTHOR%
PRINTFORML 漢化-%Lambda%
PRINTFORML 潤色&補完-MCStone
PRINTFORML (%GAMEBASE_YEAR%)
PRINTL
PRINTFORML %GAMEBASE_INFO%
ALIGNMENT LEFT

DRAWLINE

;選択肢表示。_Rename.csvで指定した値を読むことはできないのでここで指定する必要がある。
$TITLE_SELECT
PRINTL [0] 從頭開始
;TranslatedMark [0] 最初からはじめる
PRINTL [1] 讀取存档
;TranslatedMark [1] ロードしてはじめる

$TITLE_INPUT
INPUT
IF RESULT == 0
	RESETDATA
	SIF GAMEBASE_DEFAULTCHARA >= 0
		ADDCHARA GAMEBASE_DEFAULTCHARA
	BEGIN FIRST
	RETURN
ELSEIF RESULT == 1
	CALL LOADGAME_EX
	RESTART
	;LOADGAME_EXでLOADを行わずに戻ってきた場合、もう一度選択しなおす。
ELSE
	REUSELASTLINE 輸入無效
	GOTO TITLE_INPUT
ENDIF

;SYSTEM_TITLE中でRETURNすると次に実行する行が無くなり、エラーになる。
;必ずBEGIN命令かLOADGAMEを行うこと。


code:
;世界全体イベント
@WORLD_EVENT
#DIM LCOUNT	;ループ用
#DIM CHARA_ID
#DIM PHYSICAL_DEVELOP_POINT
#DIM LOCALQUETE,10000
#DIM LOCALIDNUM

VARSET LOCALQUETE
VARSET LOCALIDNUM

FOR LCOUNT , 0, 350
	FLAG:21 = 0
	TRYCCALLFORM WORLD_EVENTABLE{LCOUNT}
		IF FLAG:21
			LOCALQUETE:LOCALIDNUM = LCOUNT
			LOCALIDNUM += 1
		ENDIF
	CATCH

	ENDCATCH
NEXT
IF LOCALIDNUM == 0
	RETURN
ENDIF

CALLFORM WORLD_EVENT{LOCALQUETE:(RAND:LOCALIDNUM)}

VARSET TFLAG
FLAG:21 = 0

FLAG:20 = MAX(FLAG:20 - 20, FLAG:20 * 9 / 10 , 0)
PRINTFORML
PRINTFORML 似乎由於大規模異變的發生，對異變元兇的搜索進度變慢了……
;TranslatedMark 大規模な異変が発生し、異変の元凶の探索が遅れたようだ……
PRINTFORML

TWAIT 1200, 0