code:
;文字列がlimitSizeより長ければTOHALFする。それだけ。
@GET_SHORTED_STRING(targetString,limitSize)
#FUNCTIONS
#DIMS targetString
#DIM limitSize
RETURNF \@ STRLENS(targetString) > limitSize ? %TOHALF(targetString)% # %targetString% \@

;改行コード(LF)を返すラッパー関数
@GET_CHAR_LF()
#FUNCTIONS
RETURNF UNICODE(10)

;改行コード(CR)を返すラッパー関数
@GET_CHAR_CR()
#FUNCTIONS
RETURNF UNICODE(13)

;改行コード(CRLF)を返すラッパー関数
@GET_CHAR_CRLF()
#FUNCTIONS
RETURNF GET_CHAR_CR() + GET_CHAR_LF()

;ダブルクォート(")を返すラッパー関数
@GET_CHAR_DBLQUOTE()
#FUNCTIONS
RETURNF UNICODE(34)

@TRIM(targetString,trimChara=" ")
#FUNCTIONS
#DIMS targetString
#DIMS trimChara
RETURNF LTRIM(RTRIM(targetString,trimChara),trimChara)

@LTRIM(targetString,trimChara=" ")
#FUNCTIONS
#DIMS targetString
#DIMS trimChara
RETURNF REPLACE(targetString,"^[" + trimChara + "]*","")

@RTRIM(targetString,trimChara=" ")
#FUNCTIONS
#DIMS targetString
#DIMS trimChara
RETURNF REPLACE(targetString,"[" + trimChara + "]*$","")

;位置揃えしたボタンを作成する。positionが0:範囲内で左揃え、1:中央揃え、2:右揃え
;buttonLengthが足りない場合は右にはみ出す
@CREATE_FLATTED_BUTTON(buttonCaption,buttonLength,keyword,position = 0,isActiveButton = 1,isEmphasis = 0,spacer = " ")
#DIMS buttonCaption
#DIM buttonLength
#DIMS keyword
#DIM position
#DIMS spacer
#DIM beforeLength
#DIM afterLength
#DIM isActiveButton
#DIM isEmphasis
SELECTCASE position
	CASE 0
		beforeLength = 0
		afterLength = buttonLength - STRLENS(buttonCaption)
	CASE 1
		beforeLength = ((buttonLength - STRLENS(buttonCaption)) + ((buttonLength - STRLENS(buttonCaption))) % 2) / 2
		afterLength = buttonLength - STRLENS(buttonCaption) - beforeLength
	CASE 2
		beforeLength = buttonLength - STRLENS(buttonCaption)
		afterLength = 0
	CASEELSE
		THROW position가 부정합니다。 : {position}
ENDSELECT

SIF isEmphasis
	FONTBOLD
IF isActiveButton
	SETCOLOR 144,144,144
ELSE
	SETCOLOR 255,255,255
ENDIF

IF isActiveButton
	PRINTPLAINFORM %spacer * beforeLength%
	PRINTBUTTON buttonCaption,keyword
	PRINTPLAINFORM %spacer * afterLength%
ELSE
	PRINTPLAINFORM %spacer * beforeLength + buttonCaption + spacer * afterLength%
ENDIF
FONTREGULAR
RESETCOLOR

;空文字列。FINDELEMENTの空文字列検索バグ対応。Emueraのバージョンを上げればこのバグは直るので、この関数は不要になる。valueが空文字列固定なことを除き、FINDELEMENTと同じ
@FINDEMPTYSTR(targetStringArray,startIndex = 0,lastIndex = -1)
#FUNCTION
#DIMS REF targetStringArray
#DIM startIndex
#DIM lastIndex
#DIM index
SIF lastIndex == -1
	lastIndex = VARSIZE("targetStringArray")
FOR index,startIndex,lastIndex
	SIF targetStringArray:index == ""
		RETURNF index
NEXT
RETURNF -1

;なんかキャラ型配列だとダメらしい
@FINDEMPTYSTR_CSTR(targetChara,startIndex = 0,lastIndex = -1)
#FUNCTION
#DIM targetChara
#DIM startIndex
#DIM lastIndex
#DIM index
SIF lastIndex == -1
	lastIndex = VARSIZE("CSTR",0)
FOR index,startIndex,lastIndex
	SIF CSTR:targetChara:index == ""
		RETURNF index
NEXT
RETURNF -1

;ruleを満たす場合は指定した色で、そうでない場合はデフォルトの色で表示する。数は今後必要になったら場当たり的に増やす
;複数満たす場合は最初のみ有効。targetCharaはruleの評価に使うキャラ番号で、rule中ではindexとして処理される
;改行なし版のみ。必要なら後でPRINTLでもやってくれい
@PRINT_RULE_COLORED_STRING(targetString,targetChara,rules:0,colorRGB:0 = -1,styleFont:0 = -1,rules:1 = "",colorRGB:1 = -1,styleFont:1 = -1)
#DIMS targetString
#DIM targetChara
#DIMS rules,RULE_COLORED_STRING_RULE_COUNT
#DIM colorRGB,RULE_COLORED_STRING_RULE_COUNT
#DIM styleFont,RULE_COLORED_STRING_RULE_COUNT
#DIM index
FOR index,0,RULE_COLORED_STRING_RULE_COUNT
	IF rules:index != "" && EVALUATE(rules:index,targetChara)
		SIF colorRGB:index > 0
			SETCOLOR colorRGB:index
		SIF styleFont:index > 0
			FONTSTYLE styleFont:index
		BREAK
	ENDIF
NEXT
PRINTFORM %targetString%
RESETCOLOR
FONTREGULAR

@PRINT_UPDOWN_BOTTNED_VALUE(value,caption,suffix,minValue = 0,maxValue = 10,upKey = "8",downKey = "2")
#DIM value
#DIMS caption
#DIMS suffix
#DIM minValue
#DIM maxValue
#DIMS upKey
#DIMS downKey
IF value == minValue
	SETCOLOR 128,128,128
	PRINTPLAINFORM [↓%downKey%]
ELSE
	PRINTBUTTON "[↓" + downKey +"]",downKey
ENDIF
RESETCOLOR
PRINTPLAINFORM  %caption%:{value,(maxValue == 0 ? 1 # LOG10(maxValue)),LEFT}%suffix%
IF value == maxValue
	SETCOLOR 128,128,128
	PRINTPLAINFORM [%upKey%↑]
ELSE
	PRINTBUTTON "[" + upkey + "↑]",upKey
ENDIF
RESETCOLOR
RETURN


code:
;pattern=1:遭遇時調教。移動不可、道具使用不可
;pattern=2:특수調教。移動可(日中は学校内外をまたぐ移動は不可)、道具使用可
@SP_TRAIN_START(targetChara,pattern=1)
#DIM targetChara
#DIM pattern
IS_IN_SPECIAL_TRAIN = pattern
SPECIAL_TRAIN_LOCATION = GET_SP_TRAIN_FIRST_LOCATION(targetChara)
normalTarget = TARGET
normalAssi = ASSI
TARGET = targetChara
ASSI = -1 ;IS_UPPER_FALLEN(ASSI) ? ASSI # -1 ;一応助손はいないことにしておく
FLAG:10 = 0
SPECIAL_TRAIN_TRACKED = 0
CALLFORM SP_TRAIN_LOCATION_INIT_{SPECIAL_TRAIN_LOCATION}()
RETURN 1

@GET_SP_TRAIN_FIRST_LOCATION(targetChara,isOutschoolOnly = 0)
#FUNCTION
#DIM targetChara
#DIM isOutschoolOnly
#DIMS DYNAMIC answer = ""
SIF IS_GO_SAMESCHOOL(targetChara) && !isOutschoolOnly
	answer = \@ IS_DAYTIME() && !IS_HOLIDAY() ? %CSTR:targetChara:일중특수조교개시위치% # %CSTR:targetChara:야간특수조교개시위치% \@
SIF answer != ""
	RETURNF GET_SP_TRAIN_LOCATION_INDEX(answer)
IF IS_NIGHT() || IS_HOLIDAY()
	IF GET_SP_TRAIN_LOCAION_REQUIRED_AROUND_MIN_LEVEL(GET_SP_TRAIN_LOCATION_INDEX("뒷골목")) <= GET_SCHOOL_AROUND_DEVELOP_LEVEL(GET_CHARA_GO_SCHOOL_INDEX(MASTER))
		RETURNF GET_SP_TRAIN_LOCATION_INDEX("뒷골목")
	ELSE
		RETURNF GET_SP_TRAIN_LOCATION_INDEX("폐허")
	ENDIF
ENDIF
SIF !isOutschoolOnly
	answer = %GET_SCHOOL_EVENT_SP_TRAIN_START(GET_CHARA_GO_SCHOOL_INDEX(MASTER))%
SIF answer != ""
	RETURNF GET_SP_TRAIN_LOCATION_INDEX(answer)
IF IS_GO_SAMESCHOOL(targetChara) && GET_SCHOOL_ORDER_LEVEL(GET_CHARA_GO_SCHOOL_INDEX(MASTER)) >= 7 && !isOutschoolOnly
	RETURNF GET_SP_TRAIN_LOCATION_INDEX("빈교실")
ELSE
	IF GET_SP_TRAIN_LOCAION_REQUIRED_AROUND_MIN_LEVEL(GET_SP_TRAIN_LOCATION_INDEX("뒷골목")) <= GET_SCHOOL_AROUND_DEVELOP_LEVEL(GET_CHARA_GO_SCHOOL_INDEX(MASTER))
		RETURNF GET_SP_TRAIN_LOCATION_INDEX("뒷골목")
	ELSE
		RETURNF GET_SP_TRAIN_LOCATION_INDEX("폐허")
	ENDIF
ENDIF

@IS_CHARA_FIRSTROOM(roomName,targetChara = -1)
#FUNCTION
#DIM targetChara
#DIMS roomName
SIF targetChara == -1
	targetChara = TARGET
SIF roomName == ""
	RETURNF 0
RETURNF CSTR:targetChara:일중특수조교개시위치 == roomName || CSTR:targetChara:야간특수조교개시위치 == roomName

@SP_TRAIN_RESET
IS_IN_SPECIAL_TRAIN = 0
TARGET = normalTarget
ASSI = normalAssi
SPECIAL_TRAIN_TRACKED = 0
CALL AFTER_SPTRAIN_EVENT
RETURN

@GET_SLAVE_REACTION(targetChara = -1,locationIndex = -1)
#DIM targetChara
#DIM locationIndex
SIF targetChara < 0
	targetChara=TARGET
SIF locationIndex < 0
	locationIndex = SPECIAL_TRAIN_LOCATION
PRINTL
SELECTCASE RAND:3
	CASE 0
		CALL SLAVE_REACTION_CROWD(targetChara,locationIndex)
	CASE 1
		CALL SLAVE_REACTION_SOUND(targetChara,locationIndex)
	CASE 2
		CALL SLAVE_REACTION_SHOWN(targetChara,locationIndex)
ENDSELECT
PRINTL

@SLAVE_REACTION_CROWD(targetChara = -1,locationIndex = -1)
#DIM targetChara
#DIM locationIndex
#DIM crowdLevel
#DIM desireLevel
SIF !IS_SP_TRAIN_OUTSIDE_PLAY()
	RETURN 1
SIF targetChara < 0
	targetChara=TARGET
SIF locationIndex < 0
	locationIndex = SPECIAL_TRAIN_LOCATION
RESULT=0
TRYCALLFORM SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_{locationIndex}(targetChara)
SIF RESULT == 1
	RETURN 1
crowdLevel = GET_SP_TRAIN_CROWDLEVEL(locationIndex)
desireLevel = GETPALAMLV(PALAM:욕정,11) * (IS_SP_TRAIN_WEARING_ITEMS() > 0)
SELECTCASE crowdLevel
	CASE IS >= 8
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은% 낯선 사람들에게 경멸 어린 시선을 받으면서도、꼴사납게 허리를 떨면서 느끼고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、주변 사람들이 눈치채지 못하게 목소리를 억누르면서、뜨거운 한숨을 흘리고 있다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、주위에서 이상함을 깨닫지 못하게 하려고 안간힘을 쓰고 있다。
		ENDSELECT
	CASE IS >= 3
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、지나친 쾌락에 주위를 속이지도 못하고 주저앉았다。
				PRINTFORML ････낯선사람이 걱정해서 괜찮냐고 물어보는데、 그게 오히려 %CALLNAME:targetChara%의 욕정을 부추기고 있는 것 같다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、주변에 눈치채지 않을까 불안하게 둘러보면서、엄습해 오는 쾌락을 참고 있다････。
			CASEELSE
				PRINTFORML %타겟캐릭은%、주위에서 이상함을 깨닫지 못하게 하려고 냉정한 체하고 있다････。
		ENDSELECT
	CASE IS >= 1
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、머리를 흩날리면서도 입은 손으로 막은 채、필사적으로 목소리를 억누르고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、바로 근처를 지나는 사람들이 눈치 채지 못하도록 입술을 꽉 깨물고 목소리를 억제하고 있다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、언제 누가 찾아올지 조마조마한가 보다。
		ENDSELECT
	CASEELSE
		;아무것도안한다(通常の調教と同じ扱い)
ENDSELECT
RETURN 0

@SLAVE_REACTION_SOUND(targetChara = -1,locationIndex = -1)
#DIM targetChara
#DIM locationIndex
#DIM soundLevel
#DIM desireLevel
SIF !IS_SP_TRAIN_OUTSIDE_PLAY()
	RETURN 1
SIF targetChara < 0
	targetChara=TARGET
SIF locationIndex < 0
	locationIndex = SPECIAL_TRAIN_LOCATION
RESULT=0
TRYCALLFORM SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_{locationIndex}(targetChara)
SIF RESULT == 1
	RETURN 1
soundLevel = GET_SP_TRAIN_SOUNDLEVEL(locationIndex)
desireLevel = GETPALAMLV(PALAM:욕정,11) * (IS_SP_TRAIN_WEARING_ITEMS() > 0)
SELECTCASE soundLevel
	CASE IS >= 9
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、주변을 신경 쓸 여유도 없어져서、소리를 지르며 마구 느끼고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、주위의 폭음에 뒤섞여 들키지 않기를 바라는 듯、이를 악물고 허덕인다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、주변의 큰 소리 때문에、오히려 긴장하고 있는 것 같다。
		ENDSELECT
	CASE IS >= 3
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、헐떡이는 소리를 억누를 수도 없게 되어、질척거리며 추잡한 소리를 내고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、주변 소리에 자신의 음란한 소리가 지워지기를 기도하며、질끈 눈을 감고 있다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、눈에 띄지 않게 불필요한 소리를 내지 않으려고、몸을 굳힌다。
		ENDSELECT
	CASE IS >= 1
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、적어도 가까운 사람에게 들리지 않도록 입을 누르고、헐떡이는 소리를 억제하고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、누군가 오지 않도록、필사적으로 몸을 굳힌다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、주위에서 소리가 날 때마다 들킨 줄 알고、긴장한다。
		ENDSELECT
	CASEELSE
		;아무것도안한다(通常の調教と同じ扱い)
ENDSELECT
RETURN 0

@SLAVE_REACTION_SHOWN(targetChara = -1,locationIndex = -1)
#DIM targetChara
#DIM locationIndex
#DIM shownLevel
#DIM desireLevel
SIF !IS_SP_TRAIN_OUTSIDE_PLAY()
	RETURN 1
SIF targetChara < 0
	targetChara=TARGET
SIF locationIndex < 0
	locationIndex = SPECIAL_TRAIN_LOCATION
RESULT=0
TRYCALLFORM SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_{locationIndex}(targetChara)
SIF RESULT == 1
	RETURN 1
shownLevel = GET_SP_TRAIN_VIEWLEVEL(locationIndex)
desireLevel = GETPALAMLV(PALAM:욕정,11) * (IS_SP_TRAIN_WEARING_ITEMS() > 0)
SELECTCASE shownLevel
	CASE IS >= 8
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、많은 사람들이 보는 가운데 괴롭혀지는 비정상적인 상황에 허리를 하염없이 부들부들 떨며 느끼고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、낯선 사람이 눈치채지 못하게、필사적으로 평정을 가장하고 있다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、어찌되든 주위의 주목을 받게 되는 상황에、공포를 느끼는 모양이다。
		ENDSELECT
	CASE IS >= 5
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、의아해하는 주변 사람의 시선에 형언할 수 없는 수치를 느끼면서도 상스럽게 느끼고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、질끈 눈을 감고、주위에 주목받지 않도록 평정을 가장하고 있다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、눈치채지 않기를 빌 듯 주위를 조심스레 살피고 있다。
		ENDSELECT
	CASE IS >= 1
		SELECTCASE desireLevel
			CASE IS > 10
				PRINTFORML %타겟캐릭은%、이젠 주변 시선을 신경 쓸 겨를도 없이、음란하게 허리를 비비 꼬고 있다。
			CASE IS > 5
				PRINTFORML %타겟캐릭은%、누군가가 이상한 점을 눈치채지 못하도록、필사적으로 움직임을 누르며 견디고 있다。
			CASEELSE
				PRINTFORML %타겟캐릭은%、누군가가 이쪽을 향하지 않도록 빌듯이 눈을 감고 있다。
		ENDSELECT
	CASEELSE
		;아무것도안한다(通常の調教と同じ扱い)
ENDSELECT
RETURN 0

;調教継続チェック。やりすぎると騒ぎになって継続できなくなる(0なら継続可能、1なら継続不可(強制終了))
;確率で警察に捕まるとかもありかな？
@GET_SP_TRAIN_CONTINUABLE()
SIF !IS_SP_TRAIN_OUTSIDE_PLAY()
	RETURN 0
SPECIAL_TRAIN_TRACKED = MAX(SPECIAL_TRAIN_TRACKED + (GET_SP_TRAIN_LOCATION_PENALTY() * (10 + TFLAG:301) / 10) + GET_TOTAL_NOWEX(),0)
SELECTCASE SPECIAL_TRAIN_TRACKED
	CASE 0 TO 40 ;ならしているので0未満は考慮しなくてよい
		PRINTFORML 주변에서는 아직 이 이상한 광경을 눈치채지 못한 것 같다。
		IF ABL:TARGET:노출증 >= 6
			PRINTFORML %타겟호칭은% 불만스러운 듯이 입술을 삐죽 내밀고 있다。
		ELSE
			PRINTFORML %타겟호칭은% 들키지 않을까 하고 긴장하며 떨고 있다。
		ENDIF
	CASE 40 TO 80
		PRINTFORML 가까이 있는 사람이 가끔씩 주위를 둘러보다가 고개를 갸웃한다。
		IF ABL:TARGET:노출증 >= 6
			PRINTFORMW 그 시선이 %타겟호칭을% 스칠 때마다、%타겟호칭은% 뺨에 홍조를 띠며 흠칫 떨고 있다。
		ELSE
			PRINTFORMW %타겟호칭은% 그때마다、몸을 흠칫 떨며 겁을 먹고 있다。
		ENDIF
	CASE 80 TO 130
		PRINTFORML 여기저기서 사람들이 이상한 소리가 들리지 않냐고 이야기하고 있다。
		IF ABL:TARGET:노출증 >= 6
			PRINTFORMW %타겟호칭은% 그걸 들을 때마다、무언가 기대하는 듯이 숨을 헐떡이고 있다。
		ELSE
			PRINTFORMW %타겟호칭은% 언제 들킬까 하고 안절부절 못한다････。
		ENDIF
	CASE 130 TO 160
		PRINTFORML 가끔씩 누군가가 가만히 %타겟호칭을% 보고 있는 듯한 기분이 든다････。
		IF ABL:TARGET:노출증 >= 6
			PRINTFORMW %타겟호칭은% 그 시선에 의미심장한 추파를 던지고 있다････。
		ELSE
			PRINTFORMW %타겟호칭은% 그 시선을 느끼고、눈물을 참으며 자신을 꼭 껴안고 있다。
		ENDIF
	CASE 160 TO 200
		PRINTFORML 주변에서 나직이 속닥이는 소리가 들린다。아무래도 들킨 모양이다。
		PRINTFORML 슬슬 이동해야 될 것 같은데････
		IF ABL:TARGET:노출증 >= 6
			PRINTFORMW %타겟호칭은% 주위로부터 변태 취급을 받는 것에 흥분해서、그것만으로 절정할 것 같다。
		ELSE
			PRINTFORMW %타겟호칭은% 절망적인 표정으로 울면서도、쾌락에 몸을 떨고 있다。
		ENDIF
	CASE IS >= 200
		PRINTFORML 눈치채면 주변 사람들이 이쪽을 제각기 가리키며 이야기하고 있다。경찰을 부르라는 소리도 들린다。
		PRINTFORMW 이대로는 안 되겠다。바로 철수하자････
		PRINTFORML
		PRINTFORMW ････････････
		PRINTFORMW ････････
		PRINTFORMW ････
		PRINTFORMW
		RETURN 1
ENDSELECT
;何もしていない場合、時間経過で減衰
SIF TFLAG:301 == 0
	SPECIAL_TRAIN_TRACKED = MAX(0,SPECIAL_TRAIN_TRACKED - 5)
TFLAG:301 = 0 ;システム側でクリアされるハズだが、一応
RETURN 0

;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@GET_SP_TRAIN_LOCATION_NAME(targetLocation=-1,isSimpleNameRequested=0)
#FUNCTIONS
#DIM targetLocation
#DIM isSimpleNameRequested
RETURNF GET_SP_TRAIN_LOCATION_STRINGS("NAME",targetLocation,isSimpleNameRequested)

@GET_SP_TRAIN_LOCAION_TYPE(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("TYPE",locationIndex)

@GET_SP_TRAIN_LOCATION_IS_SCHOOL_FACILITY(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF (GET_SP_TRAIN_LOCAION_TYPE(locationIndex) & 1) > 0

@GET_SP_TRAIN_LOCAION_REQUIRED_SCHOOL_MIN_LEVEL(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("REQUIRED_SCHOOL_MIN_LEVEL",locationIndex)

@GET_SP_TRAIN_LOCAION_REQUIRED_SCHOOL_MAX_LEVEL(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("REQUIRED_SCHOOL_MAX_LEVEL",locationIndex)

@GET_SP_TRAIN_LOCAION_REQUIRED_AROUND_MIN_LEVEL(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("REQUIRED_AROUND_MIN_LEVEL",locationIndex)

@GET_SP_TRAIN_LOCAION_REQUIRED_AROUND_MAX_LEVEL(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("REQUIRED_AROUND_MAX_LEVEL",locationIndex)

@GET_SP_TRAIN_LOCAION_IS_INTRUDABLE(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("IS_INTRUDABLE",locationIndex)

@GET_SP_TRAIN_LOCATION_MOVE_TO(targetLocation=-1,searchKey=0)
#FUNCTIONS
#DIM targetLocation
#DIM searchKey
RETURNF GET_SP_TRAIN_LOCATION_STRINGS("MOVE_TO",targetLocation,searchKey)

@GET_SP_TRAIN_LOCATION_STRINGS(keyword,targetLocation=-1,optionalValue)
#FUNCTIONS
#DIM targetLocation
#DIMS keyword
#DIM optionalValue
SIF targetLocation < 0
	targetLocation = SPECIAL_TRAIN_LOCATION
RETURNF EVALUATE_STR("SP_TRAIN_LOCATION_" + keyword + "_" + TOSTR(targetLocation) + "(" + TOSTR(optionalValue) + ")")

;どれくらい気づかれる두려움があるかを返す。発見判定用。高いほど気づかれやすい。0-100
@GET_SP_TRAIN_LOCATION_PENALTY(locationIndex = -1)
#FUNCTION
#DIM DYNAMIC soundPenalty = 0
#DIM DYNAMIC viewPenalty = 0
#DIM locationIndex
;装備しているものの音レベルをベースに、衣服と環境による減衰分を加味。0-40(マイナスは後で0にならす)
soundPenalty += COUNT_BIT(IS_SP_TRAIN_WORKING_ITEMS(8)) * (10 - GET_CLOTH_SOUNDKEEP(3) - GET_CLOTH_SOUNDKEEP(5) - GET_CLOTH_SOUNDKEEP(6)) * 2 - GET_SP_TRAIN_SOUNDLEVEL() ;上半身分。가슴装備品から상반신 속옷・상반신 겉옷・전신 겉옷・環境減衰を引く
soundPenalty += COUNT_BIT(IS_SP_TRAIN_WORKING_ITEMS(7)) * (10 - GET_CLOTH_SOUNDKEEP(2) - GET_CLOTH_SOUNDKEEP(4) - GET_CLOTH_SOUNDKEEP(6)) * 2 - GET_SP_TRAIN_SOUNDLEVEL() ;下半身分。가슴以外の装備品から하반신 속옷・하반신 겉옷・전신 겉옷・環境減衰を引く
;装備している衣服の状態をベースに、装備品と環境で減衰。전신 겉옷はベース値高めかつ両方に効き、最低1保障。0-36(マイナスは後でry
viewPenalty += GET_CLOTH_VISIBILITY(3) + GET_CLOTH_VISIBILITY(5) * 2 + GET_CLOTH_VISIBILITY(6) * 3 - COUNT_BIT(IS_SP_TRAIN_WEARING_ITEMS(8)) * 2 - GET_SP_TRAIN_VIEWLEVEL()
viewPenalty += GET_CLOTH_VISIBILITY(2) + GET_CLOTH_VISIBILITY(4) * 2 + GET_CLOTH_VISIBILITY(6) * 3 - COUNT_BIT(IS_SP_TRAIN_WEARING_ITEMS(7)) * 2 - GET_SP_TRAIN_VIEWLEVEL()
RETURNF GET_SP_TRAIN_CROWDLEVEL(locationIndex) * (MAX(soundPenalty,0) + MAX(viewPenalty,0)) * 10 / 76

;どれくらい気づかれる두려움があるかの奴隷の主観を返す。ソースの算出用。発見判定に近いが、衣服効果はもっとも重いものを採用する。(何か気になるとそこばっか気になるってあるよね) 0-100
@GET_SP_TRAIN_LOCATION_SLAVE_PENALTY(locationIndex = -1)
#FUNCTION
#DIM soundPenalty
#DIM viewPenalty
#DIM locationIndex
;装備しているものの音レベルをベースに、衣服と環境による減衰分を加味。0-40(マイナスは後で0にならす)
soundPenalty += COUNT_BIT(IS_SP_TRAIN_WORKING_ITEMS(8)) * (10 - MIN(GET_CLOTH_SOUNDKEEP(3),GET_CLOTH_SOUNDKEEP(5),MAX(GET_CLOTH_SOUNDKEEP(6),1)) * 4) - GET_SP_TRAIN_SOUNDLEVEL() ;上半身分。가슴装備品から상반신 속옷・상반신 겉옷・전신 겉옷・環境減衰を引く
soundPenalty += COUNT_BIT(IS_SP_TRAIN_WORKING_ITEMS(7)) * (10 - MIN(GET_CLOTH_SOUNDKEEP(2),GET_CLOTH_SOUNDKEEP(4),MAX(GET_CLOTH_SOUNDKEEP(6),1)) * 4) - GET_SP_TRAIN_SOUNDLEVEL() ;下半身分。가슴以外の装備品から하반신 속옷・하반신 겉옷・전신 겉옷・環境減衰を引く
;装備している衣服の状態をベースに、装備品と環境で減衰。전신 겉옷はベース値高めかつ両方に効き、最低1保障。0-36(マイナスは後でry
viewPenalty += MIN(GET_CLOTH_VISIBILITY(3),GET_CLOTH_VISIBILITY(5),MAX(GET_CLOTH_VISIBILITY(6),1)) * 6 - COUNT_BIT(IS_SP_TRAIN_WEARING_ITEMS(8)) * 2 - GET_SP_TRAIN_VIEWLEVEL()
viewPenalty += MIN(GET_CLOTH_VISIBILITY(2),GET_CLOTH_VISIBILITY(4),MAX(GET_CLOTH_VISIBILITY(6),1)) * 6 - COUNT_BIT(IS_SP_TRAIN_WEARING_ITEMS(7)) * 2 - GET_SP_TRAIN_VIEWLEVEL()
RETURNF GET_SP_TRAIN_CROWDLEVEL(locationIndex) * (MAX(soundPenalty,0) + MAX(viewPenalty,0)) * 10 / 76

@GET_SP_TRAIN_CROWDLEVEL(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("CROWDLEVEL",locationIndex)

@GET_SP_TRAIN_SOUNDLEVEL(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("SOUNDLEVEL",locationIndex)

@GET_SP_TRAIN_VIEWLEVEL(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VALUES("VIEWLEVEL",locationIndex)

@GET_SP_TRAIN_VALUES(keyword,locationIndex = -1)
#FUNCTION
#DIMS keyword
#DIM locationIndex
SIF locationIndex < 0
	locationIndex = SPECIAL_TRAIN_LOCATION
RETURNF EVALUATE("SP_TRAIN_LOCATION_" + keyword +"_" + TOSTR(locationIndex) + "()")

;部位別のアイテム装備状況
;itemTypeは検査する部位。1：膣、2：クリ、4：애널、8：가슴のbit演算で指定。該当するbitに何か装着していれば、1を立てたbit列で返す。
@IS_SP_TRAIN_WEARING_ITEMS(itemType=15)
#FUNCTION
#DIM itemType
#DIM index
#DIM dynamic answer = 0
FOR index,0,4
	answer |= (GETBIT(itemType,index) & (GET_SP_TRAIN_WEARING_ITEMS(index) > 0)) * power(2,index)
NEXT
RETURNF answer

;部位別のアイテム作動状況
;itemTypeは検査する部位。1：膣、2：クリ、4：애널、8：가슴のbit演算で指定。該当するbit着けたアイテムが作動していれば、1を立てたbit列で返す。
@IS_SP_TRAIN_WORKING_ITEMS(itemType=15)
#FUNCTION
#DIM itemType
#DIM index
#DIM dynamic answer = 0
FOR index,0,4
	answer |= (GETBIT(itemType,index) & IS_SP_TRAIN_WORKING_ONE_ITEM(index)) * power(2,index)
NEXT
RETURNF answer

;itemTypeは検査する部位。0：膣、１：クリ、2：애널、3：가슴。IS_WEARING_ITEMSのとは2を底とするlogを介して互換性あり。
@IS_SP_TRAIN_WORKING_ONE_ITEM(itemType)
#FUNCTION
#DIM itemType
RETURNF (TEQUIP:(SP_TRAIN_WEARING_ITEM_INDEX_FROM + itemType) & SP_TRAIN_ITEM_WORKING_MASK) > 0

;itemTypeは検査する部位。0：膣、１：クリ、2：애널、3：가슴。IS_WEARING_ITEMSのとは2を底とするlogを介して互換性あり。
@GET_SP_TRAIN_WEARING_ITEMS(itemType)
#FUNCTION
#DIM itemType
RETURNF INRANGE(itemType,0,3) ? (TEQUIP:(SP_TRAIN_WEARING_ITEM_INDEX_FROM + itemType) & ~SP_TRAIN_ITEM_WORKING_MASK) # -1

;itemTypeはセットする部位。0：膣、１：クリ、2：애널、3：가슴。IS_WEARING_ITEMSのとは2を底とするlogを介して互換性あり。
@SET_SP_TRAIN_WORKING_ONE_STATUS(value,itemType)
#DIM value
#DIM itemType
SELECTCASE value
	CASE -1 ;invert
		TEQUIP:(SP_TRAIN_WEARING_ITEM_INDEX_FROM + itemType) ^= SP_TRAIN_ITEM_WORKING_MASK
	CASE 0  ;stop
		TEQUIP:(SP_TRAIN_WEARING_ITEM_INDEX_FROM + itemType) &= ~SP_TRAIN_ITEM_WORKING_MASK
	CASE 1  ;start
		TEQUIP:(SP_TRAIN_WEARING_ITEM_INDEX_FROM + itemType) |= SP_TRAIN_ITEM_WORKING_MASK
	CASEELSE
		throw 動作指定が不正です
ENDSELECT
RETURN IS_SP_TRAIN_WORKING_ITEMS(itemType)

@SET_SP_TRAIN_WORKING_STATUS(value,itemType=15)
#DIM itemType
#DIM value
#DIM index
SIF !INRANGE(itemType,0,3)
	RETURN -1
FOR index,0,4
	SIF GETBIT(itemType,index)
		CONTINUE
	SIF GET_SP_TRAIN_WEARING_ITEMS(index) == 0
		CONTINUE
	CALL SET_SP_TRAIN_WORKING_ONE_STATUS(value,itemType)
NEXT
RETURN IS_SP_TRAIN_WORKING_ITEMS(itemType)

@IS_IN_SPECIAL_TRAIN_PLAYING()
#FUNCTION
RETURNF IS_IN_SPECIAL_TRAIN != 0

;특수調教モードかつ移動可能な場合(呼びだした場合)に1を返す
@IS_IN_SPECIAL_TRAIN_READIED()
#FUNCTION
RETURNF IS_IN_SPECIAL_TRAIN == 2 ;2=呼びだした場合

;接触系の調教が可能か。
@IS_SP_TRAIN_TOUCHABLE(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VIEWLEVEL(locationIndex) <= 4 || !INRANGE(GET_SP_TRAIN_CROWDLEVEL(locationIndex),2,8) ;視線レベルが4以下(視線があまり向かないが、見えている)で、周囲に人がある程度いると不可(満員전차レベルだと逆に可能)

;裸になっても大丈夫か。たとえば착유기つけたままなど、外見的にどう見ても異常な状態でも大丈夫か。
@IS_SP_TRAIN_BEARABLE(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF GET_SP_TRAIN_VIEWLEVEL(locationIndex) <= 4 || GET_SP_TRAIN_CROWDLEVEL(locationIndex) <= 1 ;視線レベルが6以上(周囲から普通に見えている)で、周囲に人がいると不可

;自分でこっそりとやらせる調教が可能か。자위、秘貝노출など
@IS_SP_TRAIN_SECRETLY_SELF(locationIndex = -1)
#FUNCTION
#DIM locationIndex
RETURNF !TALENT:TARGET:붕괴 && ((GET_SP_TRAIN_VIEWLEVEL(locationIndex) <= 7 && GET_SP_TRAIN_CROWDLEVEL(locationIndex) <= 6) || GET_SP_TRAIN_CROWDLEVEL(locationIndex) <= 1) ;視線レベルが7以下(周囲から普通に見えている)かつ周囲の人が一定以下

@GET_SP_TRAIN_LOCATION_INDEX(locationName)
#FUNCTION
#DIMS locationName
#DIM index
FOR index,0,SPECIAL_TRAIN_LOCATION_MAXINDEX + 1
	SIF GET_SP_TRAIN_LOCATION_NAME(index,1) == locationName
		RETURNF index
NEXT
RETURNF -1

@SP_TRAIN_MOVE_TO()
#DIM index
#DIMS splittedString,SPECIAL_TRAIN_LOCATION_MAXINDEX
#DIM locationIndex,SPECIAL_TRAIN_LOCATION_MAXINDEX
#DIMS DYNAMIC locationName,SPECIAL_TRAIN_LOCATION_MAXINDEX
#DIMS DYNAMIC locationRule,SPECIAL_TRAIN_LOCATION_MAXINDEX
#DIM partsCount
#DIM exportIndex
#DIM selectedIndex
index = 0
exportIndex = 0
partsCount = SPLIT_STRING(GET_SP_TRAIN_LOCATION_MOVE_TO(),",",splittedString)
VARSET locationIndex,-1
FOR index,0,partsCount + 1
	locationName:exportIndex = %GET_BETWEEN_STRING(splittedString:index,",",0)%
	locationIndex:exportIndex = GET_SP_TRAIN_LOCATION_INDEX(locationName:exportIndex)
	IF locationIndex:exportIndex == -1
		locationName:exportIndex =
		locationIndex:exportIndex = -1
	ELSE
		exportIndex++
	ENDIF
NEXT
exportIndex--
PRINTFORML 어디로 이동합니까？
WHILE 1
	for index,0,exportIndex + 1
		SIF !IS_FACILITY_EXIST(locationName:index)
			CONTINUE
		SIF !IS_SP_TRAIN_TEQUIP_MOVABLE(locationIndex:index) || !IS_SP_TRAIN_ALLOWED_MOVETO(locationIndex:index)
			SETCOLOR 128,128,128
		PRINTFORML [{index,2}] - %GET_SP_TRAIN_LOCATION_NAME(locationIndex:index,2)%
		RESETCOLOR
	NEXT
	DRAWLINE
	PRINTFORML [999] - 취소
	INPUT
	selectedIndex = RESULT
	SELECTCASE selectedIndex
		CASE 999
			break
		CASE 0 TO exportIndex
			IF IS_FACILITY_EXIST(locationName:selectedIndex) && IS_SP_TRAIN_TEQUIP_MOVABLE(locationIndex:selectedIndex) && IS_SP_TRAIN_ALLOWED_MOVETO(locationIndex:selectedIndex)
				PRINTFORMW %타겟호칭을% 데리고、%조사처리(GET_SP_TRAIN_LOCATION_NAME(locationIndex:selectedIndex,2),"로")% 이동했다････。
				SPECIAL_TRAIN_LOCATION = locationIndex:selectedIndex
				SPECIAL_TRAIN_TRACKED = 0
				CALLFORM SP_TRAIN_LOCATION_INIT_{SPECIAL_TRAIN_LOCATION}()
				break
			ELSE
				PRINTFORMW 今の%CALLNAME:TARGET%의 모습으로는、역시 난처하다････。
			ENDIF
		CASEELSE
			;아무것도안한다
	ENDSELECT
WEND
RETURN 0

@IS_SP_TRAIN_ALLOWED_MOVETO(locationIndex)
#FUNCTION
#DIM locationIndex
;存在チェックは済んでいることを前提する
;侵入可能、かつ(夜間or学内/学外の区分が同一)
RETURNF GET_SP_TRAIN_LOCAION_IS_INTRUDABLE(locationIndex) && ((IS_NIGHT() && GET_SCHOOL_ORDER_LEVEL(GET_CHARA_GO_SCHOOL_INDEX(MASTER)) >= 5) || GET_SP_TRAIN_LOCATION_IS_SCHOOL_FACILITY(locationIndex) == GET_SP_TRAIN_LOCATION_IS_SCHOOL_FACILITY(SPECIAL_TRAIN_LOCATION))

;現在のTEQUIPの状態でlocationIndexに移動できる場合1。たとえば착유기とか着けたままで노상には移動できない。
@IS_SP_TRAIN_TEQUIP_MOVABLE(locationIndex = -1)
#FUNCTION
#DIM locationIndex
SIF TEQUIP:12 || TEQUIP:17 || TEQUIP:19 || TEQUIP:20 || TEQUIP:23 || TEQUIP:24 || TEQUIP:25 || TEQUIP:13 || TEQUIP:30 || TEQUIP:31 || TEQUIP:32 || TEQUIP:33 || TEQUIP:36
	RETURNF 0
SIF TEQUIP:37 || TEQUIP:38 || TEQUIP:39 || TEQUIP:40 || TEQUIP:42 || TEQUIP:44 || TEQUIP:50 || TEQUIP:51 || TEQUIP:52
	RETURNF 0
IF !IS_SP_TRAIN_BEARABLE(locationIndex)
	SIF GET_TOP_TRANSPOSE_LEVEL() < 2 || GET_BOTTOM_TRANSPOSE_LEVEL() < 2
		RETURNF 0
ENDIF
RETURNF 1

@IS_SP_TRAIN_OUTSIDE_PLAY()
#FUNCTION
;屋外・公共の場所・非プライベート空間(誰かが容易に入ってこれる場所。施錠できる部屋の場合はプライベート空間扱い)のいずれかなら屋外調教扱い
RETURNF IS_IN_SPECIAL_TRAIN_PLAYING() && (GET_SP_TRAIN_LOCAION_TYPE(SPECIAL_TRAIN_LOCATION) & 14) > 0

@GET_TOTAL_NOWEX()
#FUNCTION
RETURNF NOWEX:0 + NOWEX:1 + NOWEX:2 + NOWEX:3 + NOWEX:4 + NOWEX:5

repo_name: Catalyst/B

license: unknown


code:
;특수調教中フラグ。1なら通常の특수調教(ってなんだ)。-1なら遭遇時특수調教(場所の移動不可)
#DIM IS_IN_SPECIAL_TRAIN

;특수調教の場所
#DIM SPECIAL_TRAIN_LOCATION

#DIM SPECIAL_TRAIN_LOCATION_PARAM,5

#DIM CONST SPECIAL_TRAIN_LOCATION_MAXINDEX = 46

;周囲から見られているレベル。0-200。200になると継続不可
#DIM SPECIAL_TRAIN_TRACKED

;通常時の調教対象と助손。後で書き戻す用
#DIM normalTarget
#DIM normalAssi

#DIM CONST SP_TRAIN_WEARING_ITEM_INDEX_FROM = 45

#DIM CONST SP_TRAIN_ITEM_WORKING_MASK = 10000

;특수調教中に知人と出会った場合にその番号を管理。引数無し(=添え字ゼロ)が現在値、1が直近以前に出会ったキャラ。
;0:誰とも会っていない 正の数:キャラNo
;-1:モブ生徒(교사・사회인なら同僚、주부なら近所の주부)、-2:モブ교사(교사なら教え子、사회인なら上司、주부なら近所の주부)
;-3:モブ親戚(兄弟姉妹は設定と矛盾しそうだしぼかす)、-4:彼氏・夫(未婚・彼氏なしの場合は0に戻す)
;-5:モブ近所の子供(욕정パラが低い場合はスルー。高い場合は心配して声をかけてくる)
#DIM SP_TRAIN_MEETING_CHARA,2

;どんな状況で会っているか。0なら直接、1なら電話
#DIM SP_TRAIN_MEETING_TYPE

#DIM SP_TRAIN_MEETING_TURNS

;話している相손にどれほど不審に思われているか。MAX_INTの場合は強制終了のフラグとする
#DIM MEETING_CHARA_TRACKED


code:
;何らかの理由で調教を継続できない場合は1を返す
;長ぇ！
@SP_TRAIN_EVENT
#DIM meetingChara
CALL SP_TRAIN_EVENT_MEETING_CHECK()
meetingChara = RESULT
SIF meetingChara == 0
	RETURN 0
IF SP_TRAIN_MEETING_CHARA == 0 && meetingChara != 0
	PRINTFORMW ！！！！
	SELECTCASE SP_TRAIN_MEETING_TYPE
		CASE 0 ;直接遭遇
			PRINTFORMW 不意に、%CALLNAME:TARGET%に誰かが声をかけてきた！
			PRINTFORMW どうやら、%GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara,1)%의 ようだ････。
			IF meetingChara > 0 && IS_FALLEN(meetingChara)
				PRINTFORMW 近づいてきた%CALLNAME:meetingChara%は、%CALLNAME:TARGET%의 모습이 이상하다のに気づいたようだ。
				PRINTFORMW どうしようか････？
				PRINTFORML [00] - 立ち去らせる
				SIF ASSI == -1
					PRINTFORML [01] - 손伝わせる
				WHILE 1
					INPUT
					SELECTCASE RESULT
						CASE 0
							PRINTFORMW %CALLNAME:meetingChara%に声をかけ、今は気にせず立ち去るように\@ TALENT:TARGET:교제 ? 頼んだ # 命じた\@。
							PRINTFORMW %CALLNAME:MASTER%의 姿を見て、%CALLNAME:meetingChara%も%CALLNAME:TARGET%が何をされているのか察したのだろう。
							SELECTCASE 1
								CASE TALENT:meetingChara:교제
									PRINTFORMW 複雑な顔をしながら、%마스터호칭과% %CALLNAME:TARGET%의 姿を見送っていた････。
								CASE TALENT:meetingChara:음란 || TALENT:meetingChara:창녀 || TALENT:meetingChara:동화 || TALENT:meetingChara:모판
									PRINTFORMW %타겟호칭을% 、羨ましそうな目で見ながら去って行った････。
								CASE TALENT:meetingChara:복종
									PRINTFORMW %타겟호칭을% 励まして、逃げるように去っていった。
								CASE TALENT:meetingChara:예속
									PRINTFORMW %CALLNAME:TARGET%にしっかりお仕えするように言うと、命令通りに去っていった。
								CASE GET_SP_TRAIN_RELATION(TARGET,meetingChara) < 90
									PRINTFORMW %타겟호칭을% 蔑んだ目で매도すると、去って行った。
								CASE TALENT:meetingChara:고결 || TALENT:meetingChara:반항적 || TALENT:meetingChara:꿋꿋함 || TALENT:meetingChara:건방짐 || TALENT:meetingChara:정조관념 || TALENT:meetingChara:저항
									PRINTFORMW %마스터호칭을% 小声で매도しながら%타겟호칭을% 励まし、去って行った。
								CASE TALENT:meetingChara:겁쟁이 || TALENT:meetingChara:얌전함 || TALENT:meetingChara:프라이드낮음
									PRINTFORMW %CALLNAME:MASTER%의 視線に怯えながら、逃げるように去って行った。
								CASEELSE
									PRINTFORMW %타겟호칭을% 勇気づけるように励ますと、去って行った。
							ENDSELECT
							SP_TRAIN_MEETING_TYPE = 0
							BREAK
						CASE 1
							PRINTFORMW %CALLNAME:meetingChara%に声をかけ、손伝うように\@ TALENT:meetingChara:교제 ? 頼んだ # 命じた\@
							PRINTFORMW %CALLNAME:MASTER%의 姿を見て、%CALLNAME:meetingChara%も%CALLNAME:TARGET%が何をされているのか察したのだろう。
							SELECTCASE 1
								CASE TALENT:meetingChara:교제
									PRINTFORMW 複雑な顔をしながら、%CALLNAME:MASTER%의 横についた。
								CASE TALENT:meetingChara:음란 || TALENT:meetingChara:창녀 || TALENT:meetingChara:동화 || TALENT:meetingChara:모판
									PRINTFORMW 舌なめずりしながら、%타겟호칭을% 見ている。
								CASE TALENT:meetingChara:복종
									PRINTFORMW 泣きそうな顔で首を振ったが、再度の命令にがっくりと肩を落とし、頷いた。
								CASE TALENT:meetingChara:예속
									PRINTFORMW はい、と순종にうなずき、%CALLNAME:MASTER%의 横についた。
								CASE GET_SP_TRAIN_RELATION(TARGET,meetingChara) < 90
									PRINTFORMW %타겟호칭을% 嘲笑いながら、%CALLNAME:MASTER%의 横についた。
								CASE TALENT:meetingChara:고결 || TALENT:meetingChara:반항적 || TALENT:meetingChara:꿋꿋함 || TALENT:meetingChara:건방짐 || TALENT:meetingChara:정조관념 || TALENT:meetingChara:저항
									PRINTFORMW 眉根を寄せ、%마스터호칭을% 小声で매도しながら横についた。
								CASE TALENT:meetingChara:겁쟁이 || TALENT:meetingChara:얌전함 || TALENT:meetingChara:프라이드낮음
									PRINTFORMW 涙目で俯いたあと、あきらめたように%CALLNAME:MASTER%의 横についた。
								CASEELSE
									PRINTFORMW %타겟호칭을% 心配そうに見ながら%CALLNAME:MASTER%의 横についた。
							ENDSELECT
							ASSI = meetingChara
							SP_TRAIN_MEETING_CHARA = 0
							BREAK
						CASEELSE
							;아무것도안한다
					ENDSELECT
				WEND
			ELSE
				PRINTL
				PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara)%に見えないように、そのまま회화を続けるようサインを出した。
				SELECTCASE 1
					CASE TALENT:TARGET:음란 || TALENT:TARGET:창녀 || TALENT:TARGET:동화 ||  TALENT:TARGET:모판
						PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara,2)%は%GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara,2)%의 前で嬲られることを想像したのか、背筋を震わせている。
						PRINTFORMW ････大丈夫だろうか。
					CASE TALENT:TARGET:복종 || TALENT:TARGET:예속
						PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara,2)%に自分の痴態がばれないよう、身を竦ませている。
						PRINTFORMW さて、いつまで持つだろうか････
					;연모系はこないはずだが一応
					CASE TALENT:TARGET:교제
						PRINTFORMW %타겟호칭은% 必死で笑顔を作りながら誤魔化している。
						PRINTFORMW さて、いつまで持つだろうか････
					;未陥落も来ないはずだが一応書いておく
					CASEELSE
						PRINTFORMW %타겟호칭은% %CALLNAME:MASTER%に助けを求めるように視線を彷徨わせている。
						PRINTFORMW だが、リモコンを見せてやると諦めたように肩を落とした。
				ENDSELECT
				SP_TRAIN_MEETING_CHARA = meetingChara
				SP_TRAIN_MEETING_TURNS = 0
				MEETING_CHARA_TRACKED = 0
				;typeは設定済
			ENDIF
		CASE 1 ;電話
			PRINTFORMW 不意に、%CALLNAME:TARGET%의 携帯電話が鳴り始めた！
			PRINTFORMW どうやら、%GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara,1)%からのようだ････。
			PRINTFORMW どうしようか････？
			PRINTFORML [0] - 切らせる
			PRINTFORML [1] - 繋いだままにする
			WHILE 1
				INPUT
				IF meetingChara > 0 && IS_FALLEN(meetingChara)
					SELECTCASE RESULT
						CASE 0
							PRINTFORMW 電話に出て、今忙しいから電話に出られない、と告げた。
							PRINTFORMW %CALLNAME:meetingChara%は一瞬、息をのんだが、わかりました、と答えて電話を切った。
							SP_TRAIN_MEETING_CHARA = 0
							SP_TRAIN_MEETING_TYPE = 0
							SP_TRAIN_MEETING_TURNS = 0
							MEETING_CHARA_TRACKED = 0
							BREAK
						CASE 1
							PRINTFORMW 電話をスピーカーホンにして、今%타겟호칭을% 調教しているので聞いて\@ TALENT:meetingChara:교제 ? やってくれ、と頼んだ。 # いるように、と命じた。\@
							SELECTCASE 1
								CASE TALENT:meetingChara:음란 || TALENT:meetingChara:창녀 || TALENT:meetingChara:동화 ||  TALENT:meetingChara:모판
									PRINTFORMW %CALLNAME:meetingChara%はごくり、と生唾を飲み込むと、興奮を隠そうともせずにはい、と答えた。
								CASE TALENT:meetingChara:복종
									PRINTFORMW %CALLNAME:meetingChara%は驚いたように息をのんだが、はい、と순종に答えた。
								CASE TALENT:meetingChara:예속
									PRINTFORMW %CALLNAME:meetingChara%は少し黙ったあと、わかりました、と순종に答えた。
								;연모系はこないはずだが一応
								CASE TALENT:meetingChara:교제
									PRINTFORMW %CALLNAME:meetingChara%はもう、と返してきたが、どうやら切るつもりはないらしい。
								CASE TALENT:meetingChara:고결 || TALENT:meetingChara:반항적 || TALENT:meetingChara:꿋꿋함 || TALENT:meetingChara:프라이드높음 || TALENT:meetingChara:건방짐 || TALENT:meetingChara:정조관념 || TALENT:meetingChara:저항 || TALENT:meetingChara:부끄럼쟁이
									PRINTFORMW %CALLNAME:meetingChara%は最低、と%마스터호칭을% 매도してきたが、電話を切るつもりはないようだ。
								CASE TALENT:meetingChara:겁쟁이 || TALENT:meetingChara:얌전함 || TALENT:meetingChara:프라이드낮음
									PRINTFORMW %CALLNAME:meetingChara%はそんな、と泣きそうな声を漏らしている。どうやら逆らうわけにもいかず、固まってしまったようだ。
								CASEELSE
									PRINTFORMW %CALLNAME:meetingChara%は酷い････と辛そうに呟いたが、どうやら逆らうつもりはないようだ。
							ENDSELECT
							SP_TRAIN_MEETING_CHARA = meetingChara
							SP_TRAIN_MEETING_TURNS = 0
							MEETING_CHARA_TRACKED = 0
							;typeは設定済み
							BREAK
						CASEELSE
							;아무것도안한다
					ENDSELECT
				ELSE
					SELECTCASE RESULT
						CASE 0
							PRINTFORMW ヘマをして不審感を持たれるのはまずい････。電話を切らせることにした。
							SIF TALENT:TARGET:음란 || TALENT:TARGET:창녀 || TALENT:TARGET:동화 ||  TALENT:TARGET:모판
								PRINTFORMW ････%타겟호칭은% 、不満そうに唇を尖らせている。
							SP_TRAIN_MEETING_CHARA = 0
							SP_TRAIN_MEETING_TYPE = 0
							SP_TRAIN_MEETING_TURNS = 0
							MEETING_CHARA_TRACKED = 0
							BREAK
						CASE 1
							IF TEQUIP:36 != 0
								PRINTFORM %CALLNAME:TARGET%의 입から촉수を引き抜き、
								TEQUIP:36 = 0
							ENDIF
							IF TEQUIP:20 != 0
								PRINTFORM %CALLNAME:TARGET%의 입からギャグをはずし、
								TEQUIP:20 = 0
							ENDIF
							IF GROUPMATCH(TEQUIP:39,81,88,140)
								PRINTFORM %CALLNAME:TARGET%의 입から페니스を引き抜き、
								TEQUIP:39 = 0
							ENDIF
							PRINTFORMW 電話に出て、お前の淫らな声を%GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara,2)%に聞いてもらえ、と命じた。
							SELECTCASE 1
								CASE TALENT:TARGET:음란 || TALENT:TARGET:창녀 || TALENT:TARGET:동화 ||  TALENT:TARGET:모판
									PRINTFORMW %타겟호칭은% ごくり、と生唾を飲み込むと、震える손で通話ボタンを押した････。
								CASE TALENT:TARGET:복종
									PRINTFORMW %타겟호칭은% 信じられない命令に泣きそうな顔をしたが、逆らうこともできずに通話ボタンを押した。
								CASE TALENT:TARGET:예속
									PRINTFORMW %타겟호칭은% 流石に驚いたようだが、震える손で通話ボタンを押した。
								;연모系はこないはずだが一応
								CASE TALENT:TARGET:교제
									PRINTFORMW %타겟호칭은% 思わず、え、と声を上げたが、再度頼むと眉をひそめながらも通話ボタンを押した。
								CASE TALENT:TARGET:고결 || TALENT:TARGET:반항적 || TALENT:TARGET:꿋꿋함 || TALENT:TARGET:프라이드높음 || TALENT:TARGET:건방짐 || TALENT:TARGET:정조관념 || TALENT:TARGET:저항 || TALENT:TARGET:부끄럼쟁이
									PRINTFORMW %타겟호칭은% 目を見開いて%마스터호칭을% 매도してきたが、再度の命令に唇を噛みしめながら通話ボタンを押した。
								CASE TALENT:TARGET:겁쟁이 || TALENT:TARGET:얌전함 || TALENT:TARGET:프라이드낮음
									PRINTFORMW %타겟호칭은% 泣きながら許しを請うたが、再度の命令に諦めたのか、通話ボタンを押した。
								CASEELSE
									PRINTFORMW %타겟호칭은% 信じられないものを見るような目で%마스터호칭을% 睨んできたが、再度の命令に諦めたように通話ボタンを押した
							ENDSELECT
							SP_TRAIN_MEETING_CHARA = meetingChara
							SP_TRAIN_MEETING_TURNS = 0
							MEETING_CHARA_TRACKED = 0
							;typeは設定済み
							BREAK
						CASEELSE
							;아무것도안한다
					ENDSELECT
				ENDIF
			WEND
		CASEELSE
			THROW MEETING_TYPEが不正です。 : {SP_TRAIN_MEETING_TYPE}
	ENDSELECT
ELSEIF SP_TRAIN_MEETING_CHARA != 0 && RAND:100 < SP_TRAIN_MEETING_TURNS
	SELECTCASE SP_TRAIN_MEETING_TYPE
		CASE 0
			PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は用事があるのか、%CALLNAME:TARGET%に別れを告げて去っていった。
			SELECTCASE 1
				CASE TALENT:TARGET:음란 || TALENT:TARGET:창녀 || TALENT:TARGET:동화 ||  TALENT:TARGET:모판
					PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME()%が気づかなかったことに、少し残念そうだ。
				CASE TALENT:TARGET:복종
					PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME()%が見えなくなると同時に、泣きそうな顔で%CALLNAME:MASTER%의 方を振り返ってきた。
				CASE TALENT:TARGET:예속
					PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME()%が見えなくなると同時に、ふらふらと%CALLNAME:MASTER%にもたれかかってきた。
					PRINTFORMW ････その表情には明らかな快楽と、命令を成し遂げたという달성감がみえる。
				;연모系はこないはずだが一応
				CASE TALENT:TARGET:교제
					PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME()%의 姿が見えなくなるなり、拗ねたようんに頬を膨らませている。
				CASE TALENT:TARGET:고결 || TALENT:TARGET:반항적 || TALENT:TARGET:꿋꿋함 || TALENT:TARGET:프라이드높음 || TALENT:TARGET:건방짐 || TALENT:TARGET:정조관념 || TALENT:TARGET:저항 || TALENT:TARGET:부끄럼쟁이
					PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME()%が見えなくなるや否や、凄まじい表情で%마스터호칭을% 睨みつけてきた。
				CASE TALENT:TARGET:겁쟁이 || TALENT:TARGET:얌전함 || TALENT:TARGET:프라이드낮음
					PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME()%を見送りながら、小さな声で助けを求めた････。
				CASEELSE
					PRINTFORMW %타겟호칭은% %GET_SP_TRAIN_MEETING_CHARA_NAME()%に気づいた様子がないことで、ホッと息をついた。
			ENDSELECT
		CASE 1 ;電話で회화
			IF SP_TRAIN_MEETING_CHARA > 0 && IS_FALLEN(SP_TRAIN_MEETING_CHARA)
				PRINTFORMW 電話の向こうで、%CALLNAME:SP_TRAIN_MEETING_CHARA%は一際甲高い声を上げた。
				PRINTFORMW %GET_RELATIONSHIP_TEXT(SP_TRAIN_MEETING_CHARA,TARGET,0)%が責められる声を聞きながら、絶頂に達してしまったらしい。
				PRINTFORMW 電話の向こうではぁはぁと荒い声を上げる%CALLNAME:SP_TRAIN_MEETING_CHARA%を労ってから、電話を切った････。
			ELSE
				PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は%타겟호칭과% の회화に満足したのか、電話を切ってしまった。
				SELECTCASE 1
					CASE TALENT:TARGET:음란 || TALENT:TARGET:창녀 || TALENT:TARGET:동화 ||  TALENT:TARGET:모판
						PRINTFORMW %타겟호칭은% 名残惜しそうに、自分の携帯電話を見ている。
					CASE TALENT:TARGET:복종
						PRINTFORMW %타겟호칭은% 涙を零しながら、何度も%GET_SP_TRAIN_MEETING_CHARA_NAME()%に謝っている。
					CASE TALENT:TARGET:예속
						PRINTFORMW %타겟호칭은% 携帯電話を放り投げると、笑顔で%CALLNAME:MASTER%의 命令を待っている。
					;연모系はこないはずだが一応
					CASE TALENT:TARGET:교제
						PRINTFORMW %타겟호칭은% 恥ずかしさで真っ赤になった頬を膨らませている。
					CASE TALENT:TARGET:고결 || TALENT:TARGET:반항적 || TALENT:TARGET:꿋꿋함 || TALENT:TARGET:프라이드높음 || TALENT:TARGET:건방짐 || TALENT:TARGET:정조관념 || TALENT:TARGET:저항 || TALENT:TARGET:부끄럼쟁이
						PRINTFORMW %타겟호칭은% ほっと息をつくが、次の瞬間にはもの凄い勢いで%마스터호칭을% 睨みつけてくる。
					CASE TALENT:TARGET:겁쟁이 || TALENT:TARGET:얌전함 || TALENT:TARGET:프라이드낮음
						PRINTFORMW %타겟호칭은% 携帯電話を抱きしめたまま、ぽろぽろと涙を零している。
					CASEELSE
						PRINTFORMW %타겟호칭은% 何とか誤魔化しきれたと、安堵のため息を漏らしている。
				ENDSELECT
			ENDIF
		CASEELSE
			THROW 부정한 TYPEです。 : {SP_TRAIN_MEETING_TYPE}
	ENDSELECT
	SP_TRAIN_MEETING_TURNS = 0
	SP_TRAIN_MEETING_CHARA = 0
	SP_TRAIN_MEETING_TYPE = 0
	MEETING_CHARA_TRACKED = 0
ELSEIF SP_TRAIN_MEETING_CHARA != 0
	IF SP_TRAIN_MEETING_CHARA > 0 && IS_FALLEN(SP_TRAIN_MEETING_CHARA)
		IF SP_TRAIN_MEETING_TYPE == 0
			THROW 부정한 TYPEです。 : {SP_TRAIN_MEETING_TYPE}
		ELSE
			SELECTCASE MEETING_CHARA_TRACKED
				CASE IS >= 400
					PRINTFORMW %CALLNAME:SP_TRAIN_MEETING_CHARA%は、電話の向こうで嬌声を響かせながら、%CALLNAME:TARGET%의 声に合わせるように자위を続けている。
					PRINTFORMW どうやら互いの淫らな声に興奮し、何が何だかわからなくなっているようだ。
				CASE IS >= 320
					PRINTFORMW %CALLNAME:SP_TRAIN_MEETING_CHARA%は、電話の向こうから水音が聞こえるほどに激しい자위を続けている。
					PRINTFORMW もはや、犯されているのが%GET_RELATIONSHIP_TEXT(SP_TRAIN_MEETING_CHARA,TARGET,0)%なのか、自分なのかもわからなくなっているようだ。
				CASE IS >= 240
					PRINTFORMW %타겟호칭과% %CALLNAME:SP_TRAIN_MEETING_CHARA%、二人の喘ぎ声が響いている。
					PRINTFORMW %GET_RELATIONSHIP_TEXT(TARGET,SP_TRAIN_MEETING_CHARA,0)%に声を聞かれながら犯され、また%GET_RELATIONSHIP_TEXT(SP_TRAIN_MEETING_CHARA,TARGET,0)%의 犯されている声を聞きながら자위するという背徳感に、普段より感じてしまっているようだ。
				CASE IS >= 120
					PRINTFORMW %CALLNAME:TARGET%의 喘ぎ声に混ざって、%CALLNAME:SP_TRAIN_MEETING_CHARA%의 熱っぽい吐息も聞こえ始めた。
					PRINTFORMW どうやら、%GET_RELATIONSHIP_TEXT(SP_TRAIN_MEETING_CHARA,TARGET,0)%의 淫らな声で発情してしまい、자위を始めたようだ。
				CASE IS >= 80
					PRINTFORMW 時折、電話の向こうから%CALLNAME:SP_TRAIN_MEETING_CHARA%의 吐息が聞こえる････。
				CASEELSE
					PRINTFORMW %CALLNAME:SP_TRAIN_MEETING_CHARA%は、%CALLNAME:TARGET%의 色っぽい吐息にごくりと生唾を飲み込んでいる。
			ENDSELECT
		ENDIF
	ELSE
		SELECTCASE MEETING_CHARA_TRACKED
			CASE IS >= 200
				PRINTFORMW ！！！！
				meetingChara = SP_TRAIN_MEETING_CHARA
				SP_TRAIN_MEETING_TURNS = 0
				SP_TRAIN_MEETING_CHARA = 0
				MEETING_CHARA_TRACKED = 0
				IF SP_TRAIN_MEETING_TYPE == 0
					PRINTFORMW 限界に達したらしい%CALLNAME:TARGET%がふらつき、倒れそうになるのを%GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara)%が抱き留めた。
					PRINTFORMW 次の瞬間、%GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara)%は眉をひそめ、何かに気づいたように周りをきょろきょろと見回している。
					PRINTFORMW どうやら気づかれたようだ。ここは引き上げることにしよう････。
					PRINTFORML
					SIF meetingChara > 0
							TALENT:meetingChara:경계 += 3
					RETURN 1
				ELSE
					PRINTFORMW 限界に達したらしい%CALLNAME:TARGET%が思わず嬌声を漏らした。
					PRINTFORMW そのあまりの색기に息をのんだ%GET_SP_TRAIN_MEETING_CHARA_NAME(meetingChara)%は、どうしたのかと必死に尋ねている････。
					PRINTFORMW これ以上はもう無理だろう。すぐに電話を切った････。
					PRINTFORML
					SIF meetingChara > 0
						TALENT:meetingChara:경계 += 2
					RETURN 0
				ENDIF
			CASE IS >= 160
				IF SP_TRAIN_MEETING_TYPE == 0
					PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は%타겟호칭을% 抱きかかえるようにしながら、しきりに大丈夫か尋ねている。
				ELSE
					PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は声に焦りを滲ませながら、大丈夫かと尋ねている。
				ENDIF
			CASE IS >= 120
				PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は、%CALLNAME:TARGET%に体調でも悪いのかと心配そうに尋ねている。
			CASE IS >= 80
				PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は모습이 이상하다が、どうしたのかと%CALLNAME:TARGET%に尋ねている。
			CASE IS >= 40
				PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は%CALLNAME:TARGET%의 様子が普段と違うことに、時折首を傾げている。
			CASEELSE
				PRINTFORMW %GET_SP_TRAIN_MEETING_CHARA_NAME()%は異常に気づかないのか、他愛もないことを喋っている。
		ENDSELECT
		SELECTCASE SP_TRAIN_MEETING_TYPE
			CASE 0 ;直接会っている
				SELECTCASE 1
					CASE TALENT:TARGET:음란 || TALENT:TARGET:창녀 || TALENT:TARGET:동화 ||  TALENT:TARGET:모판
						PRINTFORMW %타겟호칭은% 時々意味深な流し目を送りながら、%GET_SP_TRAIN_MEETING_CHARA_NAME()%に返事をしている。
					CASE TALENT:TARGET:복종
						PRINTFORMW %타겟호칭은% 必死に平静を装いながら、表面上はにこやかに答えている。
					CASE TALENT:TARGET:예속
						PRINTFORMW %타겟호칭은% 一見すると普通に答えているようだが、頬はすでに真っ赤に染まっている。
					;연모系はこないはずだが一応
					CASE TALENT:TARGET:교제
						PRINTFORMW %타겟호칭은% 冷や汗を滲ませながら、表面上はにこやかに答えている。
					CASE TALENT:TARGET:고결 || TALENT:TARGET:반항적 || TALENT:TARGET:꿋꿋함 || TALENT:TARGET:프라이드높음 || TALENT:TARGET:건방짐 || TALENT:TARGET:정조관념 || TALENT:TARGET:저항 || TALENT:TARGET:부끄럼쟁이
						PRINTFORMW %타겟호칭은% 生返事を返しながら、腰が動き出さないよう必死に堪えている。
					CASE TALENT:TARGET:겁쟁이 || TALENT:TARGET:얌전함 || TALENT:TARGET:프라이드낮음
						PRINTFORMW %타겟호칭은% 俯きがちながら、なんとか応答を返しているようだ。
					CASEELSE
						PRINTFORMW %타겟호칭은% 必死に自分の身体を抱きしめながら、平静を装っている。
				ENDSELECT
			CASE 1 ;電話で회화
				SELECTCASE 1
					CASE TALENT:TARGET:음란 || TALENT:TARGET:창녀 || TALENT:TARGET:동화 ||  TALENT:TARGET:모판
						PRINTFORMW %타겟호칭은% 時々色っぽい吐息を漏らしながら、おしゃべりを愉しんでいる。
					CASE TALENT:TARGET:복종
						PRINTFORMW %타겟호칭은% 涙を零しながら、懸命に普段の회화をしようとしている。
					CASE TALENT:TARGET:예속
						PRINTFORMW %타겟호칭은% 時折色っぽい吐息を漏らしながら、表面上は完璧に普段通りの회화を続けている。
					;연모系はこないはずだが一応
					CASE TALENT:TARGET:교제
						PRINTFORMW %타겟호칭은% 恥ずかしさで真っ赤になりながら、회화を続けている。
					CASE TALENT:TARGET:고결 || TALENT:TARGET:반항적 || TALENT:TARGET:꿋꿋함 || TALENT:TARGET:프라이드높음 || TALENT:TARGET:건방짐 || TALENT:TARGET:정조관념 || TALENT:TARGET:저항 || TALENT:TARGET:부끄럼쟁이
						PRINTFORMW %타겟호칭은% 生返事を返しながら、目だけは鋭く%마스터호칭을% 睨み続けている。
					CASE TALENT:TARGET:겁쟁이 || TALENT:TARGET:얌전함 || TALENT:TARGET:프라이드낮음
						PRINTFORMW %타겟호칭은% 입を손で抑えながら、なんとか不審を抱かれないよう회화を続けている。
					CASEELSE
						PRINTFORMW %타겟호칭은% 荒くなる呼吸を抑えながら、なんとか普段通りの회화をしようとしているようだ。
				ENDSELECT
			CASEELSE
				THROW 부정한 TYPEです。 : {SP_TRAIN_MEETING_TYPE}
		ENDSELECT
	ENDIF
	MEETING_CHARA_TRACKED = MAX(MEETING_CHARA_TRACKED + (TFLAG:301 + GET_TOTAL_NOWEX()) * ABS(GET_SP_TRAIN_RELATION() - 100) / 10 + GETPALAMLV(GETNUM(PALAM,"욕정"),10),0)
ENDIF
SIF SP_TRAIN_MEETING_CHARA != 0
	SP_TRAIN_MEETING_CHARA:1 = SP_TRAIN_MEETING_CHARA:0
PRINTL
RETURN 0

;특수調教中に誰かと出会うか/通常調教中に電話がかかってくるか判定する関数。
;誰かといる場合はそのキャラ番号(負の数はモブキャラに出会った扱い)、誰とも会わない場合は0を返す。
@SP_TRAIN_EVENT_MEETING_CHECK()
#DIM meetingChara
#DIM meetingType
SIF SP_TRAIN_MEETING_CHARA != 0
	RETURN SP_TRAIN_MEETING_CHARA
SIF RAND:1000 > 5 ;0.1%의 確率で発生
	RETURN 0
meetingChara = 0
DO
	meetingChara = RAND:201 - 100 ;-100～100までの乱数を発生
	SELECTCASE meetingChara
		CASE IS > 0 ;正の数ならキャラのindexとみなし、遭遇の可能性があり、そのキャラがいて、かつ陥落済か対象の知人なら通す
			SIF !INRANGE(meetingChara,1,CHARANUM-1)
				meetingChara = 0
			SIF !IS_CHARA_MEETABLE(TARGET,meetingChara) || meetingChara == ASSI || meetingChara == TARGET
				meetingChara = 0
			SIF !IS_FRIEND(TARGET,meetingChara) && !(IS_FALLEN(meetingChara) && IS_FALLEN(TARGET))
				meetingChara = 0
		CASE IS < 0 ;負の数ならモブキャラ扱いで、定義があり、遭遇の可能性があるなら通す
			RESULT = 0
			TRYCALLFORM SP_TRAIN_MEETING_EXISTS_{-meetingChara}()
			SIF RESULT == 0
				meetingChara = 0
			SIF !IS_CHARA_MEETABLE(TARGET,meetingChara)
				meetingChara = 0
		CASEELSE
			meetingChara = 0 ;0ならやりなおし
	ENDSELECT
LOOP meetingChara == 0
meetingType = GET_SP_TRAIN_MEETING_TYPE()
SELECTCASE meetingChara
	CASE IS > 0 ;名前ありなら、素質に応じて決定
		SIF TALENT:meetingChara:붕괴 || IS_UNCONTACTABLE(meetingChara) || meetingChara == ASSI || meetingChara == TARGET || RELATION:TARGET:(NO:meetingChara) == 100
			RETURN 0
		IF !IS_HOLIDAY() && IS_DAYTIME() && (TALENT:meetingChara:초등학생 || TALENT:meetingChara:중학생 || TALENT:meetingChara:고등학생)
			IF IS_GO_SAMESCHOOL(TARGET,meetingChara)
				meetingType = 0
			ELSE
				RETURN 0 ;他校の学生の場合は全部なし
			ENDIF
		ENDIF
		IF !IS_HOLIDAY() && IS_DAYTIME() && (TALENT:meetingChara:사회인 || TALENT:meetingChara:교사)
			IF IS_GO_SAMESCHOOL(TARGET,meetingChara)
				meetingType = 0
			ELSE
				meetingType = 1 ;必ず電話にする
			ENDIF
		ENDIF
		SIF meetingType == 1 && ((RELATION:TARGET:(NO:meetingChara) < 100 || RELATION:meetingChara:(NO:TARGET) < 100) && (!IS_FALLEN(meetingChara) || RAND:10 != 0));そんな親しくもない、かつ未陥落なら電話しない(陥落済みなら奴隷同士の横のつながり的な何かで、低確率で通る)
			RETURN 0
	CASE IS < 0 ;モブなら定義を参照。meetingTypeに当てはまらないパターンならあきらめる
		SIF !FUNC_INDEX_CALL("SP_TRAIN_MEETING_IS_" + \@ meetingType == 0 ? MEETING # TELEPHONE \@,-meetingChara)
			RETURN 0
	CASEELSE
		THROW 부정한 キャラです。 : {meetingChara}
ENDSELECT
SP_TRAIN_MEETING_TYPE = meetingType
RETURN meetingChara

;遭遇が電話扱いか通常遭遇扱いか。電話扱いなら1
@GET_SP_TRAIN_MEETING_TYPE
#FUNCTION
SIF IS_IN_SPECIAL_TRAIN == 0
	RETURNF 1
RETURNF (!IS_SP_TRAIN_OUTSIDE_PLAY() || RAND:100 > MAX(GET_SP_TRAIN_CROWDLEVEL() - 2,0) * 10)

@GET_SP_TRAIN_MEETING_CHARA_NAME(targetChara = 0,isWithRelation = 0)
#FUNCTIONS
#DIM targetChara
#DIM isWithRelation
SIF targetChara == 0
	targetChara = SP_TRAIN_MEETING_CHARA
SELECTCASE targetChara
	CASE IS > 0
		;同一の分岐はモブ彼氏の返し方定義にもあるので、分岐を追加したらそちらにも追加要
		SELECTCASE isWithRelation
			CASE 1
				RETURNF GET_RELATIONSHIP_TEXT(TARGET,targetChara,0) + "である" + NAME:targetChara
			CASE 2
				RETURNF GET_RELATIONSHIP_TEXT(TARGET,targetChara,0)
			CASE 3
				RETURNF CALLNAME:targetChara
			CASE 4
				RETURNF GET_RELATIONSHIP_TEXT(TARGET,targetChara,0) + "である" + CALLNAME:targetChara
			CASEELSE
				RETURNF NAME:targetChara
		ENDSELECT
	CASE IS < 0
		RETURNF FUNC_STR_INDEX_CALL_V("SP_TRAIN_MEETING_NAME",-targetChara,isWithRelation)
	CASEELSE
		THROW 부정한 targetChara : {targetChara}
ENDSELECT

@GET_SP_TRAIN_RELATION(targetChara=-1,meetingChara = 0)
#FUNCTION
#DIM targetChara
#DIM meetingChara
SIF targetChara < 0
	targetChara = TARGET
SIF meetingChara == 0
	meetingChara = SP_TRAIN_MEETING_CHARA
SELECTCASE meetingChara
	CASE IS > 0
		RETURNF RELATION:targetChara:(NO:meetingChara)
	CASE IS < 0
		RETURNF FUNC_INDEX_CALL("SP_TRAIN_MEETING_RELATION",-meetingChara)
	CASEELSE
		RETURNF 0
ENDSELECT

;meetingTypeに応じて各種ソースの増加割合を返す。返した値の1/10増加する
@GET_SP_TRAIN_MEETING_TYPE_EFFECT(meetingType = -1)
#FUNCTION
#DIM meetingType
SIF meetingType < 0
	meetingType = SP_TRAIN_MEETING_TYPE
SELECTCASE meetingType
	CASE 0
		RETURNF 1
	CASE 1
		RETURNF 0
	CASEELSE
		THROW 부정한 meetingType : {meetingType}
ENDSELECT

;フェラなど입を使用した調教が可能な場合に1を返す。
@IS_SP_TRAIN_MOUTH_PLAYABLE()
#FUNCTION
;誰とも電話などで話していないか、相손が事情を知っている場合
RETURNF SP_TRAIN_MEETING_CHARA == 0 || (SP_TRAIN_MEETING_CHARA > 0 && IS_FALLEN(SP_TRAIN_MEETING_CHARA))

;奴隷に話しかけることが可能な場合に1を返す。
@IS_SP_TRAIN_TALKABLE()
#FUNCTION
;誰とも電話などで話していないか、相손が事情を知っている場合、または電話で話している場合
RETURNF SP_TRAIN_MEETING_CHARA == 0 || (SP_TRAIN_MEETING_CHARA > 0 && IS_FALLEN(SP_TRAIN_MEETING_CHARA)) || SP_TRAIN_MEETING_TYPE != 1

;後始末
@AFTER_SPTRAIN_EVENT()
SP_TRAIN_MEETING_CHARA = 0
SP_TRAIN_MEETING_CHARA:1 = 0
SP_TRAIN_MEETING_TURNS = 0
MEETING_CHARA_TRACKED = 0
RETURN

;隠れてプレイ継続可能か。よくある、普通に회화してると見せかけて、カーテンなんかの裏で犯されてるヤツ
;誰かと話している状況が前提なので、周囲に人がいるかは無視。見えるかどうかだけで決まる。
@IS_SP_TRAIN_HIDEABLE()
#FUNCTION
RETURNF GET_SP_TRAIN_VIEWLEVEL() < 3

;隠れてのプレイにする必要があるか。モブキャラまたは事情を知らない(=未陥落な)キャラの前である場合。
@IS_SP_TRAIN_NEED_HIDE()
#FUNCTION
RETURNF SP_TRAIN_MEETING_CHARA < 0 && (SP_TRAIN_MEETING_CHARA > 0 && !IS_FALLEN(SP_TRAIN_MEETING_CHARA))

;隠れなくてはならない状況で、かつ隠れてプレイ可能な状態である場合に1。一部の(本来なら即バレな)コマンドを実行した場合に判定し、특수メッセージを追加するのに使用
@IS_SP_TRAIN_HIDEPLAY()
#FUNCTION
RETURNF IS_SP_TRAIN_HIDEABLE() && IS_SP_TRAIN_NEED_HIDE()

@IS_CHARA_MEETABLE(targetChara,meetingChara)
#FUNCTION
#DIM targetChara
#DIM meetingChara
SELECTCASE meetingChara
	CASE IS > 0 ;名ありなので素質で判定
		IF !IS_HOLIDAY() && IS_DAYTIME()
			IF IS_GO_SAMESCHOOL(targetChara,MASTER) ;同じ学校=学園内특수調教
				SIF TALENT:meetingChara:사회인 || TALENT:meetingChara:주부
					RETURNF 0
			ELSE ;違う学校=특수調教
				SIF TALENT:meetingChara:초등학생 || TALENT:meetingChara:중학생 || TALENT:meetingChara:고등학생 || (TALENT:meetingChara:교사 && RAND:2 == 0)
					RETURNF 0
			ENDIF
		ELSE
			RETURNF 1
		ENDIF
	CASE IS < 0 ;モブなので定義を参照
		IF !IS_HOLIDAY() && IS_DAYTIME()
			IF IS_GO_SAMESCHOOL(targetChara,MASTER) ;同じ学校=学園内특수調教
				RETURNF FUNC_INDEX_CALL("SP_TRAIN_MEETING_IN_SCHOOL",-meetingChara)
			ELSE
				RETURNF FUNC_INDEX_CALL("SP_TRAIN_MEETING_OUT_SCHOOL",-meetingChara)
			ENDIF
		ELSE
			RETURNF FUNC_INDEX_CALL("SP_TRAIN_MEETING_NIGHT_OR_HOLIDAY",-meetingChara)
		ENDIF
	CASEELSE
		RETURNF 0
ENDSELECT


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_0(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "뒷골목"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_0()
#FUNCTION
RETURNF 14

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_0()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_0()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_0()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_0()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_0()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_0()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_0()
#FUNCTION
RETURNF 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_0()
#FUNCTION
RETURNF 1

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_0()
#FUNCTION
RETURNF 4

;衣服のタイプ別の反応チェック。種類に応じてVIEWLEVELの評価にペナルティ
@SP_TRAIN_LOCATION_WEARTYPE_CHECK_0(wearType)
#FUNCTION
#DIM REF wearType
RETURNF 0

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_0(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_0(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_0(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_0(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "노상,폐빌딩"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_1(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "노상"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_1()
#FUNCTION
RETURNF 14

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_1()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_1()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_1()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_1()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_1()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_1()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_1()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_1()
#FUNCTION
RETURNF IS_DAYTIME() ? 6 # 2

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_1()
#FUNCTION
RETURNF 6

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_1(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_1(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_1(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_1(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "뒷골목,도서관,공원,역전번화가,학교안뜰,주택가"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_2(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "쇼핑몰"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_2()
#FUNCTION
RETURNF 12

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_2()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_2()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_2()
#FUNCTION
RETURNF 7

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_2()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_2()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_2()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_2()
#FUNCTION
RETURNF 5

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_2()
#FUNCTION
RETURNF 4

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_2()
#FUNCTION
RETURNF 7

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_2(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_2(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_2(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_2(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "역전번화가,쇼핑몰화장실,쇼핑몰옥상주차장,쇼핑몰계단뒤"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_3(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "쇼핑몰화장실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_3()
#FUNCTION
RETURNF 4

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_3()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_3()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_3()
#FUNCTION
RETURNF 7

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_3()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_3()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_3()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_3()
#FUNCTION
RETURNF 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_3()
#FUNCTION
RETURNF 5

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_3()
#FUNCTION
RETURNF 0

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_3(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_3(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_3(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_3(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "쇼핑몰"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_4(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "쇼핑몰옥상주차장"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_4()
#FUNCTION
RETURNF 4

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_4()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_4()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_4()
#FUNCTION
RETURNF 7

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_4()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_4()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_4()
SPECIAL_TRAIN_LOCATION_PARAM:0 = GET_VALUE_FROM_RANGED_DATA(RAND:100,"20,0|50,1|80,2|*,3")
SELECTCASE SPECIAL_TRAIN_LOCATION_PARAM:0
	CASE 0
		;아무것도안한다
	CASE 1
		PRINTFORMW 오늘은 웬일인지 사람이 많다････
	CASE 2
		PRINTFORMW 오늘은 거의 차가 없다････
		PRINTFORMW 이래서는 훤히 보이게 되는데、그건 그것대로 좋은가････
	CASE 3
		PRINTFORMW 큼직한 차가 두 대 나란히 서 있다。
		PRINTFORMW ････이 사이에 숨으면 좀처럼 보이지 않을 것이다････
ENDSELECT
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_4()
#FUNCTION
SELECTCASE SPECIAL_TRAIN_LOCATION_PARAM:0
	CASE 1
		RETURNF 6
	CASEELSE
		RETURNF 3
ENDSELECT

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_4()
#FUNCTION
RETURNF 5

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_4()
#FUNCTION
SELECTCASE SPECIAL_TRAIN_LOCATION_PARAM:0
	CASE 2
		RETURNF 6
	CASE 3
		RETURNF 3
	CASEELSE
		RETURNF 5
ENDSELECT

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_4(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_4(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_4(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_4(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "쇼핑몰"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_5(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "쇼핑몰계단뒤"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_5()
#FUNCTION
RETURNF 4

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_5()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_5()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_5()
#FUNCTION
RETURNF 7

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_5()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_5()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_5()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_5()
#FUNCTION
RETURNF 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_5()
#FUNCTION
RETURNF 5

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_5()
#FUNCTION
RETURNF 2

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_5(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_5(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_5(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_5(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "쇼핑몰"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_6(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "역"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_6()
#FUNCTION
RETURNF 12

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_6()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_6()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_6()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_6()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_6()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_6()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_6()
#FUNCTION
RETURNF IS_DAYTIME() ? 7 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_6()
#FUNCTION
RETURNF IS_DAYTIME() ? 7 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_6()
#FUNCTION
RETURNF 6

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_6(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_6(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_6(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_6(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "역전번화가,역의화장실,전차"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_7(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "역의화장실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_7()
#FUNCTION
RETURNF 4

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_7()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_7()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_7()
#FUNCTION
RETURNF 5
;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_7()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_7()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_7()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_7()
#FUNCTION
RETURNF 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_7()
#FUNCTION
RETURNF 7

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_7()
#FUNCTION
RETURNF 0

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_7(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_7(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_7(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_7(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "역"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_8(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
#DIMS crowdCap
IF isSimpleNameRequested != 0
	RETURNF "전차"
ELSE
	SELECTCASE SPECIAL_TRAIN_LOCATION_PARAM:0
		CASE 0
			crowdCap = 거의 아무도 없는
		CASE 1
			crowdCap = 한적한
		CASE 2
			crowdCap = 약간 붐비는
		CASE 3
			crowdCap = 혼잡한
		CASE 4
			crowdCap = 제법 붐비는
		CASEELSE
			crowdCap = 만원전차
	ENDSELECT
	RETURNF "전차(" + crowdCap + ")"
ENDIF

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_8()
#FUNCTION
RETURNF 12

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_8()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_8()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_8()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_8()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_8()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_8()
;0:ほぼ無人 1:空席が目立つ 2,空席なし 3,立っている人がいる 4,立っている人が多数 5,肩が触れあう
SPECIAL_TRAIN_LOCATION_PARAM:0 = GET_VALUE_FROM_RANGED_DATA(RAND:100,"0,0|20,1|50,2|70,3|90,4|*,5")
SELECTCASE SPECIAL_TRAIN_LOCATION_PARAM:0
	CASE 0
		PRINTFORMW 오늘은 승객이 거의 없는 것 같다。
	CASE 1
		PRINTFORMW 오늘은 승객이 뜸하다。
	CASE 2
		PRINTFORMW 오늘은 승객이 그런대로 타고 있다。
	CASE 3
		PRINTFORMW 오늘은 승객이 좀 많은 것 같다。
	CASE 4
		PRINTFORMW 오늘은 승객이 많다。
	CASEELSE
		PRINTFORMW 오늘은 승객이 많아 거의 꼼짝도 할 수 없다。
ENDSELECT
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_8()
#FUNCTION
RETURNF GET_VALUE_FROM_RANGED_DATA(SPECIAL_TRAIN_LOCATION_PARAM:0,"0,2|1,3|2,5|3,6|4,8|*,10")

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_8()
#FUNCTION
RETURNF 8

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_8()
#FUNCTION
RETURNF 7

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_8(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_8(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_8(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_8(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "역"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_9(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "도서관"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_9()
#FUNCTION
RETURNF 12

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_9()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_9()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_9()
#FUNCTION
RETURNF 4

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_9()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_9()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_9()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_9()
#FUNCTION
RETURNF 2

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_9()
#FUNCTION
RETURNF 1

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_9()
#FUNCTION
RETURNF 6

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_9(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_9(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_9(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_9(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "노상,도서관옥상"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_10(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "도서관옥상"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_10()
#FUNCTION
RETURNF 14

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_10()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_10()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_10()
#FUNCTION
RETURNF 4

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_10()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_10()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_10()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_10()
#FUNCTION
RETURNF 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_10()
#FUNCTION
RETURNF 5

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_10()
#FUNCTION
RETURNF 4

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_10(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_10(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_10(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_10(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "도서관"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_11(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "찻집"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_11()
#FUNCTION
RETURNF 12

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_11()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_11()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_11()
#FUNCTION
RETURNF 6

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_11()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_11()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_11()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_11()
#FUNCTION
RETURNF 3

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_11()
#FUNCTION
RETURNF 4

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_11()
#FUNCTION
RETURNF 5

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_11(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_11(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_11(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_11(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "역전번화가"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_12(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "폐빌딩"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_12()
#FUNCTION
RETURNF 12

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_12()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_12()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_12()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_12()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_12()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_12()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_12()
#FUNCTION
RETURNF 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_12()
#FUNCTION
RETURNF 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_12()
#FUNCTION
RETURNF 5

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_12(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_12(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_12(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_12(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "뒷골목"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_13(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "공원"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_13()
#FUNCTION
RETURNF 14

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_13()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_13()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_13()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_13()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_13()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_13()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_13()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_13()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 1

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_13()
#FUNCTION
RETURNF 6

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_13(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_13(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_13(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_13(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "노상,공중화장실,공원의가로등아래"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_14(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "공중화장실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_14()
#FUNCTION
RETURNF 4

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_14()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_14()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_14()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_14()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_14()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_14()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_14()
#FUNCTION
RETURNF IS_DAYTIME() ? 2 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_14()
#FUNCTION
RETURNF IS_DAYTIME() ? 5 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_14()
#FUNCTION
RETURNF 1

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_14(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_14(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_14(targetChara)
#DIM targetChara
RETURN 0

;移動先をカンマ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_14(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "공원,공원의가로등아래"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_15(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "역전번화가"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_15()
#FUNCTION
RETURNF 14

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_15()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_15()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_15()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_15()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_15()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_15()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_15()
#FUNCTION
RETURNF IS_DAYTIME() ? 5 # 6

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_15()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 7

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_15()
#FUNCTION
RETURNF 6

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_15(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_15(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_15(targetChara)
#DIM targetChara
RETURN 0

;移動先をカンマ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_15(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "노상,쇼핑몰,역,찻집"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_16(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "공원의가로등아래"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_16()
#FUNCTION
RETURNF 14

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_16()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_16()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_16()
#FUNCTION
RETURNF 5

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_16()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_16()
#FUNCTION
RETURNF IS_NIGHT()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_16()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_16()
#FUNCTION
RETURNF 1

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_16()
#FUNCTION
RETURNF 1

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_16()
#FUNCTION
RETURNF 9

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_16(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_16(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_16(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_16(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "공원,공중화장실"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_17(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "학교안뜰"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_17()
#FUNCTION
RETURNF 15

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_17()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_17()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_17()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_17()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_17()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_17()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_17()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_17()
#FUNCTION
RETURNF IS_DAYTIME() ? 6 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_17()
#FUNCTION
RETURNF 6

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_17(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_17(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_17(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_17(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "학교뒤,승강구,노상,시골길,궁도장,구교사의계단"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_18(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "학교복도"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_18()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_18()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_18()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_18()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_18()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_18()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_18()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_18()
#FUNCTION
RETURNF IS_DAYTIME() ? 2 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_18()
#FUNCTION
RETURNF IS_DAYTIME() ? 4 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_18()
#FUNCTION
RETURNF 7

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_18(targetChara)
#DIM targetChara
IF IS_DAYTIME() && RAND:3 == 0
	PRINTFORMW %타겟캐릭은% 교실에서 누가 나오지 않기를 바라면서 걷고 있다････。
	RETURN 1
ENDIF
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_18(targetChara)
#DIM targetChara
IF IS_DAYTIME() && RAND:3 == 0
	PRINTFORMW %타겟캐릭은% 수업 소리가 끊길 때마다 소리가 들릴까봐 겁이 난다････。
	RETURN 1
ENDIF
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_18(targetChara)
#DIM targetChara
IF IS_DAYTIME() && RAND:3 == 0
	PRINTFORMW %타겟캐릭은% 학생이 이쪽을 볼까 조바심이 나는 모양이다････。
	RETURN 1
ENDIF
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_18(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "빈교실,승강구,체육관,보건실,교무실,도서실,음악실,理科室,학교옥상,학교화장실,성당,배전"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_19(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF \@ (isSimpleNameRequested & 1) > 0 || IS_DAYTIME() ? 빈 # \@ + "교실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_19()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_19()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_19()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_19()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_19()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_19()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_19()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_19()
#FUNCTION
RETURNF IS_DAYTIME() ? 1 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_19()
#FUNCTION
RETURNF IS_DAYTIME() ? 1 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_19()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 0

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_19(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_19(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_19(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_19(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "학교복도"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_20(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "체육관"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_20()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_20()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_20()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_20()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_20()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_20()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_20()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_20()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_20()
#FUNCTION
RETURNF IS_DAYTIME() ? 5 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_20()
#FUNCTION
RETURNF 7

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_20(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_20(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_20(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_20(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "학교복도,체육창고,검도장,유도장"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_21(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "체육창고"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_21()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_21()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_21()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_21()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_21()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_21()
#FUNCTION
RETURNF 1

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_21()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_21()
#FUNCTION
RETURNF IS_DAYTIME() ? 1 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_21()
#FUNCTION
RETURNF IS_DAYTIME() ? 2 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_21()
#FUNCTION
RETURNF 4

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_21(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_21(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_21(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_21(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "체육관"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_22(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "보건실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_22()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_22()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_22()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_22()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_22()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_22()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_22()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_22()
#FUNCTION
RETURNF IS_DAYTIME() ? 1 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_22()
#FUNCTION
RETURNF IS_DAYTIME() ? 2 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_22()
#FUNCTION
RETURNF 2

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_22(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_22(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_22(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_22(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "학교복도"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_23(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "교무실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_23()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_23()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_23()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_23()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_23()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_23()
#FUNCTION
RETURNF TALENT:TARGET:교사

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_23()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_23()
#FUNCTION
RETURNF IS_DAYTIME() ? 4 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_23()
#FUNCTION
RETURNF IS_DAYTIME() ? 2 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_23()
#FUNCTION
RETURNF 6

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_23(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_23(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_23(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_23(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "학교복도"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_24(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "도서실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_24()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_24()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_24()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_24()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_24()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_24()
#FUNCTION
RETURNF IS_DAYTIME()

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_24()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_24()
#FUNCTION
RETURNF IS_DAYTIME() ? 4 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_24()
#FUNCTION
RETURNF IS_DAYTIME() ? 1 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_24()
#FUNCTION
RETURNF 3

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_24(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_24(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_24(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_24(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "학교복도,도서준비실"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_25(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "도서준비실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_25()
#FUNCTION
RETURNF 5

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_25()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_25()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_25()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_25()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_25()
#FUNCTION
RETURNF CFLAG:TARGET:1002 == GET_CLUBINDEX_FROM_NAME("도서위원")

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_25()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_25()
#FUNCTION
RETURNF IS_DAYTIME() ? 1 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_25()
#FUNCTION
RETURNF 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_25()
#FUNCTION
RETURNF 2

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_25(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_25(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_25(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_25(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "도서실"


code:
;地名
;isSimpleNameRequestedの1ビット目：システム呼び出し(移動先判定で使用)　2ビット目：選択肢呼び出し(選択肢表示で使用)
@SP_TRAIN_LOCATION_NAME_26(isSimpleNameRequested)
#FUNCTIONS
#DIM isSimpleNameRequested
RETURNF "음악실"

;場所の分類
;1bit目:1なら学園内　2bit目：1なら屋外　3bit目：1なら公共施設　4bit目:1なら非プライベート空間
;2～4it目が全て0の場合に限り、屋内調教扱いになる。日中調教の場合、1bit目が同じ施設内しか移動できない
@SP_TRAIN_LOCATION_TYPE_26()
#FUNCTION
RETURNF 13

;学園規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MIN_LEVEL_26()
#FUNCTION
RETURNF 1

;学園規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_SCHOOL_MAX_LEVEL_26()
#FUNCTION
RETURNF 10

;周辺規模レベルの下限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MIN_LEVEL_26()
#FUNCTION
RETURNF 1

;周辺規模レベルの上限。-1なら学園側で特に指定されない限り出ない
@SP_TRAIN_LOCATION_REQUIRED_AROUND_MAX_LEVEL_26()
#FUNCTION
RETURNF 10

;その他の侵入条件。日中/夜間など。1を返せば侵入可能
@SP_TRAIN_LOCATION_IS_INTRUDABLE_26()
#FUNCTION
RETURNF IS_DAYTIME() || IS_CHARA_FIRSTROOM("음악준비실")

;場所固有の初期化処理
@SP_TRAIN_LOCATION_INIT_26()
RETURN 1

;周囲の人の量。0～10で指定。0=無人。1=無人だが、壁の向こうなどにはいる。3=普通の道路。5=繁華街の中。8=ちょっと混んだ전차の中。10=満員전차の中
@SP_TRAIN_LOCATION_CROWDLEVEL_26()
#FUNCTION
RETURNF IS_DAYTIME() ? 3 # 0

;騒音レベル。0～10で指定。0=無音。1=도서관くらい。4=落ち着いた찻집。6=道路。8=전차。10=アミューズメント施設
@SP_TRAIN_LOCATION_SOUNDLEVEL_26()
#FUNCTION
RETURNF IS_DAYTIME() ? 7 # 0

;周囲の目。0～10で指定。0=ほぼ見えない。2=物陰。少し動くと見える。4=建物の屋上。もしそちらを見たら丸見え。6=道路。普通に見えている。8=高台。周囲の目を引く。10=ステージ。注目が集まる
@SP_TRAIN_LOCATION_VIEWLEVEL_26()
#FUNCTION
RETURNF 3

;場所固有の奴隷の反応(周囲の人について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_CROWDED_26(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(音について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_SOUNDED_26(targetChara)
#DIM targetChara
RETURN 0

;場所固有の奴隷の反応(周囲の目について)。何かある場合はRETURN 1すると汎用処理に入らない。
@SP_TRAIN_LOCATION_SLAVEREACTION_VIEWED_26(targetChara)
#DIM targetChara
RETURN 0

;移動先とその条件をセットでカンマ区切り、パイプ区切りで返す
@SP_TRAIN_LOCATION_MOVE_TO_26(searchKey)
#FUNCTIONS
#DIM searchKey
RETURNF "학교복도"