code:
;캐캐릭터리스트
;요소명→ID변환용 함수의 존부 확인용 함수
;변환 가능(ID와 요소명의 관계가 항상 변화하지 않는다)이라면 설치
;상황에 의해 이름이 바뀌는 것 같은 것은 불가능
@EXIST_캐릭터리스트_ID
#LOCALSIZE 1
#LOCALSSIZE 1

;요소명→ID변환용 함수
;필요하면 각 오브젝트로와 같이  작성
@캐릭터리스트_ID(ARG:0, ARGS:0, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS V_NAME                  ;작성하는 변수명
#DIMS C_NAME, OBJ_ID_LAST + 1 ;데이터 보유
#DIM  O_ID                    ;참조용
IF ARGS:0 == "RESET"
	VARSET C_NAME
	FOR O_ID, 1, OBJ_ID_LAST + 1
		C_NAME:O_ID = %GET_STR(, "캐릭터리스트", O_ID, "이름")%
	NEXT
ELSE
	O_ID = FINDELEMENT(C_NAME, ESCAPE(ARGS:0), , , 1)
	CALLF MAKE_INT(V_NAME, O_ID)
ENDIF

@EXIST_캐릭터리스트1
#LOCALSIZE 1
#LOCALSSIZE 1

;오브젝트 본체
@캐릭터리스트1(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "존재하는 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "존재")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트2
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트2(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "주인공 이외의캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	IF ARG == MASTER || !CHECK_CHARA(ARG, "존재")
	ELSE
		CALLF MAKE_INT(V_NAME, 1)
	ENDIF
ENDSELECT

@EXIST_캐릭터리스트3
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트3(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "함락않다 보고 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	IF !CHECK_CHARA(ARG, "존재")
	ELSEIF CHECK_CHARA(ARG, "함락")
		CALLF MAKE_INT(V_NAME, 1)
	ENDIF
ENDSELECT

@EXIST_캐릭터리스트4
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트4(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "깨끗한교제 취득 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "깨끗한교제")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트6
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트6(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "주인공의 약점을 잡는 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "약점잡음")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트7
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트7(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "주인공에게 약점이 있는 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "약점잡힘")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트8
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트8(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "반발각인 떡캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "반발각인")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트9
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트9(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "시간각인 떡캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "시간각인")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트10
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트10(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "동실에 있는 캐릭터리스트")
CASE "판정"
	SIF CHECK_CHARA(ARG, "동실")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트11
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트11(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "말떡캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "대사실장상황")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트12
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트12(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "임신중 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "임신")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트13
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트13(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "육아중 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "육아중")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

@EXIST_캐릭터리스트14
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트14(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "아이 딸린 사람 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	SIF CHECK_CHARA(ARG, "아이 딸린 사람")
		CALLF MAKE_INT(V_NAME, 1)
ENDSELECT

;복합 조건계

@EXIST_캐릭터리스트31
#LOCALSIZE 1
#LOCALSSIZE 1

;오브젝트 본체
@캐릭터리스트31(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "갈아입히기 가능 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
;갈아입히기일이 생긴다
	IF ARG == MASTER
		CALLF MAKE_INT(V_NAME, 1)
	ELSEIF !CHECK_CHARA(ARG, "존재") || !CHECK_CHARA(ARG, "동실")
	ELSEIF FLAG:시간정지 == 1
		CALLF MAKE_INT(V_NAME, 1)
	ELSEIF 수면시간(ARG)
	ELSEIF CHECK_CHARA(ARG, "함락")
		CALLF MAKE_INT(V_NAME, 1)
	ELSEIF CHECK_CHARA(ARG, "약점잡음")
	ELSEIF CHECK_CHARA(ARG, "약점잡힘")
		CALLF MAKE_INT(V_NAME, 1)
	ELSE
	ENDIF
ENDSELECT

@EXIST_캐릭터리스트32
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트32(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "평상복 모방 가능 캐릭터리스트")
CASE "SHOP 표시"
	CALLF MAKE_INT(V_NAME, 1)
CASE "판정"
	IF ARG == MASTER
	ELSEIF !CHECK_CHARA(ARG, "존재")
	ELSEIF CHECK_CHARA(ARG, "약점잡음")
	ELSEIF CHECK_CHARA(ARG, "함락") || CHECK_CHARA(ARG, "약점잡힘")
		CALLF MAKE_INT(V_NAME, 1)
	ELSE
	ENDIF
ENDSELECT

@EXIST_캐릭터리스트33
#LOCALSIZE 1
#LOCALSSIZE 1

@캐릭터리스트33(ARG, O_DATA, V_NAME)
#FUNCTION
#LOCALSIZE 1
#LOCALSSIZE 1
#DIMS O_DATA
#DIMS V_NAME
SELECTCASE O_DATA
CASE "이름"
	CALLF MAKE_STR(V_NAME, "TARGET 리스트")
CASE "판정"
	IF ARG == MASTER
	ELSEIF !CHECK_CHARA(ARG, "존재") || !CHECK_CHARA(ARG, "동실")
	ELSE
		CALLF MAKE_INT(V_NAME, 1)
	ENDIF
ENDSELECT

repo_name: purugi/eraTWKR

license: mit


code:
;OBJ 존재 설정 함수
@SETLIST_EXIST(CLASS_NAME, O_FIRST = OBJ_ID_FIRST, O_LAST = OBJ_ID_LAST)
#DIMS CLASS_NAME
#DIM O_FIRST
#DIM O_LAST
#DIM O_ID
;변수명 F_NAME를 작성한다
CALLF MAKE_EXIST(CLASS_NAME)

FOR O_ID, O_FIRST, O_LAST + 1
	;개개의 F_NAME:LCOUNT를 설정한다
	TRYCCALLFORM EXIST_%CLASS_NAME%{O_ID}
		;DEBUGPRINTFORML EXIST %CLASS_NAME%{O_ID}
		CALLF SET_EXIST(CLASS_NAME, O_ID)
	CATCH
	ENDCATCH
NEXT

;ID취득 함수용의 설정을 실시한다
TRYCCALLFORM EXIST_%CLASS_NAME%_ID
	;DEBUGPRINTFORML EXIST %CLASS_NAME%NAME_TO_ID
	CALLF OBJNAME_TO_ID(, "RESET", CLASS_NAME)
CATCH
ENDCATCH

;함수의 존재 판정용 함수군
;변수의 의사 정의
@MAKE_EXIST(CLASS_NAME)
#FUNCTION
#DIMS CLASS_NAME
RETURNF OBJ_EXIST("MAKE", CLASS_NAME)

;개개의 함수의 존재 판정을 설정
;먼저 CF_MAKE가 필요
@SET_EXIST(CLASS_NAME, O_ID)
#FUNCTION
#DIMS CLASS_NAME
#DIM  O_ID
RETURNF OBJ_EXIST("SET", CLASS_NAME, O_ID)

;개개의 INDEX의 존재 판정
@GET_EXIST(CLASS_NAME, O_ID)
#FUNCTION
#DIMS CLASS_NAME
#DIM  O_ID
RETURNF OBJ_EXIST("GET", CLASS_NAME, O_ID)

;OBJ의 존재 상태의 보유 함수
;
;거의 일시 변수 보유 변수의 유용으로 일차원 배열로부터 이차원 배열로 했을 뿐
;CLEAR계 명령이 없기 때문에 오소거의 걱정은 없다
@OBJ_EXIST(COMMAND, ARGS:0, ARG:0)
#FUNCTION
#DIMS CLASS_NAME, CLASS_NUM + 1
#DIMS COMMAND
#DIM EXIST, CLASS_NUM + 1, OBJ_ID_LAST + 1
#DIM OBJ_CNT
SELECTCASE COMMAND
;변수의 의사 정의
CASE "MAKE"
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	SIF FINDELEMENT(CLASS_NAME, ESCAPE(ARGS:0) , 1, , 1) > 0
		THROW 벌써 설정 끝난 변수입니다 %ARGS:0%
	SIF OBJ_CNT == CLASS_NUM
		THROW 보유 변수가 상한에 이르고 있습니다
	OBJ_CNT ++
	CLASS_NAME:(OBJ_CNT) = %ARGS:0%
;개개의 변수의 설정
CASE "SET"
	SIF !INRANGE(ARG:0, OBJ_ID_FIRST, OBJ_ID_LAST)
		THROW 배열의 범위외입니다{ARG}
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	LOCAL:0 = FINDELEMENT(CLASS_NAME, ESCAPE(ARGS:0) , 1, , 1)
	SIF LOCAL:0 < 0
		THROW 미설정의 변수입니다 %ARGS:0%
	EXIST:(LOCAL:0):(ARG:0) = 1
;각 함수의 유무 판정
CASE "GET"
	SIF !INRANGE(ARG:0, OBJ_ID_FIRST, OBJ_ID_LAST)
		THROW 배열의 범위외입니다{ARG}
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	LOCAL:0 = FINDELEMENT(CLASS_NAME, ESCAPE(ARGS:0) , 1, , 1)
	SIF LOCAL:0 < 0
		THROW 미설정의 변수입니다 %ARGS:0%
	RETURNF EXIST:(LOCAL:0):(ARG:0)
CASEELSE
	THROW 미설 정명령%COMMAND%
ENDSELECT


code:
;-----------------------------------------------
;오브젝트 참조 함수군
;-----------------------------------------------
;OBJ의 INT 정보의 참조 함수
@GET_INT(ARG, CLASS_NAME, O_ID, O_DATA)
#FUNCTION
#DIMS CLASS_NAME  ;OBJ의 이름(예：WEAPON)
#DIM  O_ID        ;참조하는 OBJ의 ID(예：1)
#DIMS O_DATA      ;참조하고 싶은 정보의 이름(예：가격)
;DEBUGPRINTFORML GET_INT ARG：{ARG}, CLASS_NAME：%CLASS_NAME%, O_ID：{O_ID}, O_DATA：%O_DATA%
LOCALS = %GET_OBJ(ARG, CLASS_NAME, O_ID, O_DATA)%
;DEBUGPRINTFORML GET_INT LOCALS：%LOCALS%
SIF !STRLENS(LOCALS)
	RETURNF 0
SIF !ISNUMERIC(LOCALS)
	RETURNF 0
RETURNF TOINT(LOCALS)

;OBJ의 STR 정보의 참조 함수
@GET_STR(ARG, CLASS_NAME, O_ID, O_DATA)
#FUNCTIONS
#DIMS CLASS_NAME  ;OBJ의 이름(예：WEAPON)
#DIM  O_ID        ;참조하는 OBJ의 ID(예：1)
#DIMS O_DATA      ;참조하고 싶은 정보의 이름(예：이름)
;DEBUGPRINTFORML GET_STR ARG：{ARG}, CLASS_NAME：%CLASS_NAME%, O_ID：{O_ID}, O_DATA：%O_DATA%
RETURNF GET_OBJ(ARG, CLASS_NAME, O_ID, O_DATA)

;-----------------------------------------------
;OBJ 참조 함수
;-----------------------------------------------
;이 함수는 직접 부르지 않고 GET_INT/GET_STR를 개입시켜 참조하는 것
;GET_INT측에서 TOINT 해 두면 참조원에서의 수고를 줄일 수 있다 라는 실마리-도 없는 이유
@GET_OBJ(ARG, CLASS_NAME, O_ID, O_DATA)
#FUNCTIONS
#DIMS CLASS_NAME    ;CLASS의 이름(예：WEAPON)
#DIM  O_ID          ;참조하는 OBJ의 ID(예：1)
#DIMS O_DATA        ;참조하고 싶은 정보의 이름(예：가격)
#DIM  STACK         ;호출 OBJ의 스택 카운터
#DIMS V_NAME , 100  ;VAR 변수명의 보유
#DIMS T_NAME        ;TEMP, 초기화의 형편상 퇴피의 필요가 있으므로

;전OBJ의 ID의 범위외이다
SIF !INRANGE(O_ID, OBJ_ID_FIRST, OBJ_ID_LAST)
	RETURNF
;OBJ에 그 ID가 존재하지 않는다
SIF !GET_EXIST(CLASS_NAME, O_ID)
	RETURNF

STACK ++
V_NAME:STACK = VAR{STACK}_%CLASS_NAME%{O_ID}_%O_DATA%
CALLFORMF %CLASS_NAME%{O_ID}(ARG, O_DATA, V_NAME:STACK)
T_NAME = %V_NAME:STACK%
V_NAME:STACK =
STACK --
;DEBUGPRINTFORML GET_OBJ T_NAME=%T_NAME%

;변수가 작성되지 않았던 때는 연주한다
SIF TEMP_GET("GET_ID", T_NAME) == "0"
	RETURNF

RETURNF TEMP_RE_STR(T_NAME)

;-----------------------------------------------
;OBJ의 ID취득 함수
;-----------------------------------------------
;ARG는 등록 번호 상정
;CLASS의 요소명으로부터 ID를 취득한다(존재하지 않는 경우는―1, 요소 0을 묶지 않았던 탓)
;기동시에 CLASS_NAME 마다 RESET를 걸칠 필요가 있는 것 외에
;사용할 수 있도록(듯이) 하려면  CLASS 마다 전용의 함수가 필요
;일원 관리하고 있지 않는 것은 FINDELEMENT가 1 차원 변수로 밖에 사용할 수 없기 때문에
;이 외 , 상황에 의해 이름이 변화하는 것 같은 CLASS의 이름의 변환에는 향하지 않는다
;
;ERB 문법에 익숙해 있기 위해서(때문에) 가짜 때에―1은 불안정의 온상이 되기 어렵지 라고 생각했지만
;중도의 자작 시스템으로 요소 0을 사용하고 싶기 때문에 불가피
@OBJNAME_TO_ID(ARG, COMMAND, CLASS_NAME, KEY)
#FUNCTION
#DIMS COMMAND     ;처리 내용
#DIMS CLASS_NAME  ;대상의 CLASS명
#DIMS KEY         ;검색하는 캐릭터라인
#DIM  STACK       ;호출 스택
#DIMS V_NAME, 100 ;주는 변수명
#DIMS T_NAME      ;퇴피용
SELECTCASE COMMAND
;@SETLIST_EXIST 이외로부터 RESET를 걸치지 않는 것
CASE "RESET"
	CALLFORMF %CLASS_NAME%_ID(ARG, COMMAND)
CASE "GET"
	STACK ++
	V_NAME:STACK = %CLASS_NAME%{STACK}_%COMMAND%
	CALLFORMF %CLASS_NAME%_ID(ARG, KEY, V_NAME:STACK)
	T_NAME = %V_NAME:STACK%
	V_NAME:STACK =
	STACK --
	RETURNF TEMP_RE_INT(T_NAME)
ENDSELECT

;-----------------------------------------------
;모든 클래스 함수의 존부를 설정한다
;로드/뉴 게임시에 반드시 1회는 설정할 필요가 있지만
;1회이상 설정할 필요는 없다
;-----------------------------------------------
@MAKE_ALL_CLASS_LIST
SIF LOCAL
	RETURN
CALL SETLIST_EXIST("캐릭터데이터", 0, 캐릭터수상한)
CALL SETLIST_EXIST("캐릭터리스트", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("의상세트", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("완부의복", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("머리장비", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("기모노", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("상반신윗도리_는만불가", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("상반신윗도리_는만가능", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("상반신속옷_은만불가", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("상반신속옷_은만가능", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("양말", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("구두", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("외의", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("하반신속옷_비켜놓아불가", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("하반신속옷_비켜놓아가능", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("원피스", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("레오타드", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("보디슈트", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("그외의상", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("바지", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("치마", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("액세서리", 0, OBJ_ID_LAST)
CALL SETLIST_EXIST("일반의뢰", 0, OBJ_ID_LAST)
LOCAL ++


code:
#DIM CONST VAR_TEMP_MAX    = 100 ;일시 변수의 보유 수상한, 100 이하
#DIM CONST CLASS_NUM       =  25 ;클래스(라고 하는 표현으로 좋은 것인지)의 종수, 현상으로 25 종류 이내

#DIM CONST OBJ_ID_FIRST    =   0 ;오브젝트 전체의 ID의 범위, 0~130의 범위내
#DIM CONST OBJ_ID_LAST     = 130 ;각 클래스 내부의 ID는 이 범위로부터 초과하지 않게 해 주세요


code:
[SKIPSTART]
·F함수계에 TRYCALL가 의가 키트이입니다(존재하지 않아도 에러 토하지 않게는 되지 않는 것인가? )
→존부를 사전에 변수로서 보유 해 존재하지 않으면 먼저 거기서 연주하는, 이것으로 k
·F함수계는 하나의 함수에 대해 반환값이 STR 혹은 INT로 한정되어 귀찮아서
→@TEMP_STOCK를 경유한 변통으로 해결
→FUNCTIONS라면 STR형으로 TOSTR(INT)를 돌려줄 수 있는, INT 변수를 준비해 두면 보유 자체는 여유
·정수형·캐릭터라인형 변수를 조합해 참조하고 싶다
→전부 인수의 모습으로 건네주어 하면 된다
·함수간에서의 변수의 유연한 수수(한 글자 변수 지옥은 이야)
→CALLF의 활용에 의해 의사적으로 변수를 정의해 주면 함수를 넘었다 변수의 교환이 가능
→변수명을 매회 자기 부담으로 정의할 수 있기 때문에 한 글자 변수와 달리 덧쓰기의 걱정이 없어!

결점
·변수 관리의 수고가 번잡하게 된다
·메모리 리크의 우려가 있다
·변수를 스택 너무 시키면(자) 에러
·변수 이름에 밤오소거의 우려

·우선 GET_INT/GET_STR 해 사용하는 분에는 너무 신경쓰지 않아도 된다

2017/02/22
·디버그문을 너무 가르쳐 디버그 모드가 제길 무거웠기 때문에 코멘트 아웃

[SKIPEND]

;디버그용, 일시 변수의 열거
;소문의 REF 변수의 유효 활용예
@TEST_TEMPLIST(VAR_NAME, VAR_STR, VAR_INT, VAR_CNT)
#FUNCTIONS
#DIMS REF VAR_NAME ;변수명의 보유
#DIMS REF VAR_STR  ;변수 정보(STR)의 보유
#DIM  REF VAR_INT  ;변수 정보(INT)의 보유
#DIM  REF VAR_CNT  ;변수의 보유 수
#DIM  VAR_ID
DEBUGPRINTFORM TEMPLIST VAR_NAME：%VAR_NAME:VAR_CNT%
DEBUGPRINTFORML VAR_CNT：{VAR_CNT}
DEBUGPRINTFORM
FOR VAR_ID, 1, VAR_TEMP_MAX + 1
	SIF !STRLENS(VAR_NAME:VAR_ID)
		BREAK
	DEBUGPRINTFORM VAR_ID：{VAR_ID}
	DEBUGPRINTFORM VAR_NAME：%VAR_NAME:VAR_ID%
	DEBUGPRINTFORM VAR_STR：%VAR_STR:VAR_ID%
	DEBUGPRINTFORM VAR_INT：%VAR_STR:VAR_ID%
NEXT
DEBUGPRINTFORML

;-----------------------------------------------
;여기에서 본체
;-----------------------------------------------
;일시 변수 보유 함수 본체
;이 함수는 직접 부르지 않는, 참조나 조작은 후술의 함수를 개입시켜 실시하는 것
;-----------------------------------------------
;변수의 보유 함수
;우선 1~99까지의 99개를 사용 가능
;0(을)를 사용하지 않은 것은 ID0를 돌려주었을 때의 거동이 까다로워지기 (위해)때문에
;점점더 THROW가 많은 것은 만약을 위해
@TEMP_STOCK(COMMAND, ARGS:0, ARGS:1, ARG:0, ARG:1)
#FUNCTIONS
#DIMS COMMAND                       ;변수에 대한 실행 커맨드
#DIMS VAR_NAME,  (VAR_TEMP_MAX + 1) ;변수명의 보유
#DIMS VAR_STR,   (VAR_TEMP_MAX + 1) ;변수 정보(STR)의 보유
#DIM  VAR_INT,   (VAR_TEMP_MAX + 1) ;변수 정보(INT)의 보유
#DIM  VAR_CNT                       ;변수의 보유 수
#DIM LCOUNT
#DIM TEMP_ID
#DIM TEMP_CNT
;DEBUGPRINTFORML TEMP_STOCK_%COMMAND%, %ARGS:0%, %ARGS:1%, {ARG:0}, {ARG:1}

SELECTCASE COMMAND
;각종의 취득 커맨드, 돌아가 값에 의미가 있다
;보유 하고 있는 변수의 총수를 돌려준다
CASE "GET_TOTAL"
	;DEBUGPRINTFORML TEMP_STOCK VAR_CNT：{VAR_CNT}
	RETURNF TOSTR(VAR_CNT)

;변수명으로부터 내용을 참조
CASE "GET_VALUE_BY_NAME"
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	TEMP_ID = FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 1)
	SIF TEMP_ID <= 0
		THROW 존재하지 않는 변수를 참조했던 %ARGS:0%
	IF STRLENS(VAR_STR:TEMP_ID)
		;DEBUGPRINTFORML TEMP_STOCK VAR_STR:TEMP_ID：%VAR_STR:TEMP_ID%
		RETURNF VAR_STR:TEMP_ID
	ELSE
		;DEBUGPRINTFORML TEMP_STOCK VAR_INT:TEMP_ID：{VAR_INT:TEMP_ID}
		RETURNF TOSTR(VAR_INT:TEMP_ID)
	ENDIF

;ID로부터 내용을 참조
CASE "GET_VALUE_BY_ID"
	SIF !ARG:0
		THROW ID를 설정해 주세요
	SIF !INRANGE(ARG:0, 1, VAR_CNT)
		THROW 존재하지 않는 변수를 참조했던{ARG:0}
	IF STRLENS(VAR_STR:TEMP_ID)
		;DEBUGPRINTFORML TEMP_STOCK VAR_STR:TEMP_ID：%VAR_STR:TEMP_ID%
		RETURNF VAR_STR:TEMP_ID
	ELSE
		;DEBUGPRINTFORML TEMP_STOCK VAR_INT:TEMP_ID：{VAR_INT:TEMP_ID}
		RETURNF TOSTR(VAR_INT:TEMP_ID)
	ENDIF

;변수명으로부터 변수의 ID를 돌려준다
;존재하지 않을 때는 0
CASE "GET_ID"
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	TEMP_ID = FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 1)
	SIF TEMP_ID <= 0
		TEMP_ID = 0
	;DEBUGPRINTFORML TEMP_STOCK TEMP_ID：{TEMP_ID}
	RETURNF TOSTR(TEMP_ID)

;ARGS:0이 포함되는 변수명의 수를 돌려준다
CASE "GET_CNT_NAME"
	TEMP_CNT = 0
	FOR TEMP_ID, 1, VAR_CNT + 1
		SIF STRCOUNT(VAR_NAME:TEMP_ID, ARGS:0)
			TEMP_CNT ++
	NEXT
	;DEBUGPRINTFORML TEMP_STOCK TEMP_CNT：{TEMP_CNT}
	RETURNF TOSTR(TEMP_CNT)

;변수의 위치로부터 변수명을 돌려준다
;존재하지 않을 때는 하늘의 캐릭터라인을 돌려준다
CASE "GET_NAME"
	TEMP_ID = ARG:0
	SIF !INRANGE(ARG:0, 1, VAR_TEMP_MAX)
		TEMP_ID = 0
	;DEBUGPRINTFORML TEMP_STOCK TEMP_ID：{TEMP_ID}
	RETURNF VAR_NAME:TEMP_ID

;여기에서 명령계, CALLF로 각 함수를 개입시켜 사용
;변수의 작성
CASE "VARMAKE"
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	SIF VAR_CNT >= VAR_TEMP_MAX
		THROW 보유 변수가 상한에 이르고 있기 (위해)때문에 새로운 변수를 정의할 수 없습니다
	SIF ISNUMERIC(ARGS:0)
		THROW 숫자만으로부터 되는 캐릭터라인을 변수 이름에 설정할 수 없습니다 %ARGS:0%
	SIF FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 1) > 0
		THROW 그 변수명은 벌써 존재하는 %ARGS:0%
	VAR_CNT ++
	VAR_NAME:VAR_CNT = %ARGS:0%
	VAR_INT:VAR_CNT  = ARG:0
	VAR_STR:VAR_CNT  = %ARGS:1%
	;#; CALLF TEST_TEMPLIST(VAR_NAME, VAR_STR, VAR_INT, VAR_CNT)

;대입 처리
;ID로 변수를 지정해 대입
CASE "VARSET_BY_ID"
	SIF !INRANGE(ARG:0, 1, VAR_CNT)
		THROW 존재하지 않는 변수를 참조했던{ARG:0}
	VAR_INT:TEMP_ID  = ARG:1
	VAR_STR:TEMP_ID  = %ARGS:0%
;이름으로 변수를 지정해 대입
CASE "VARSET_BY_NAME"
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	TEMP_ID = FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 1)
	SIF !INRANGE(TEMP_ID, 1, VAR_CNT)
		THROW 존재하지 않는 변수를 참조했던 %ARGS:0%
	VAR_INT:TEMP_ID  = ARG:0
	VAR_STR:TEMP_ID  = %ARGS:1%

;하나의 변수를 초기화
;ARGS가 수치의 경우에는 INDEX라고 해석한다
;그 이외라면 일치하는 변수명의 위치를 검색한다
;존재하지 않을 때는 에러

;ID지정으로 변수를 제거
CASE "VARCLEAR_BY_ID"
	SIF !INRANGE(ARG:0, 1, VAR_CNT)
		THROW 존재하지 않는 변수를 참조했던{ARG:0}
	;CALLF TEST_TEMPLIST(VAR_NAME, VAR_STR, VAR_INT, VAR_CNT)
	ARRAYREMOVE VAR_NAME, ARG:0, 1
	ARRAYREMOVE VAR_INT , ARG:0, 1
	ARRAYREMOVE VAR_STR , ARG:0, 1
	VAR_CNT --
	;#; CALLF TEST_TEMPLIST(VAR_NAME, VAR_STR, VAR_INT, VAR_CNT)
;변수명 지정으로 변수를 제거
CASE "VARCLEAR_BY_NAME"
	TEMP_ID = FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 1)
	SIF TEMP_ID <= 0
		THROW 존재하지 않는 변수를 참조했던 %ARGS:0%
	;CALLF TEST_TEMPLIST(VAR_NAME, VAR_STR, VAR_INT, VAR_CNT)
	ARRAYREMOVE VAR_NAME, TEMP_ID, 1
	ARRAYREMOVE VAR_INT , TEMP_ID, 1
	ARRAYREMOVE VAR_STR , TEMP_ID, 1
	VAR_CNT --
	;CALLF TEST_TEMPLIST(VAR_NAME, VAR_STR, VAR_INT, VAR_CNT)
;변수명을 부분 일치 검색해 초기화
;연루 주의
CASE "VARCLEAR_BY_KEYWORD"
	SIF !STRLENS(ARGS:0)
		THROW 검색 어구를 설정해 주세요
	TEMP_ID = FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 0)
	WHILE LOCAL > 0
		ARRAYREMOVE VAR_NAME, TEMP_ID, 1
		ARRAYREMOVE VAR_INT , TEMP_ID, 1
		ARRAYREMOVE VAR_STR , TEMP_ID, 1
		VAR_CNT --
		SIF !VAR_CNT
			BREAK
		TEMP_ID = FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 0)
	WEND
;변수를 모두 초기화
CASE "ALLCLEAR"
	VARSET VAR_NAME
	VARSET VAR_INT
	VARSET VAR_STR
	VARSET VAR_CNT
;산술계는 변수의 위치의 판정이 공통된의로 정리해 먼저
;ARGS가 수치의 경우에는 INDEX라고 해석한다
;그 이외라면 일치하는 변수명의 위치를 검색한다
CASE "ADD_BY_ID", "TIMES_BY_ID", "PERCENT_BY_ID", "PPM_BY_ID",
	SIF !INRANGE(ARG:0, 1, VAR_CNT)
		THROW 존재하지 않는 변수를 참조했던{ARG:0}

	SELECTCASE COMMAND
	;가산, 물론 음수도 가능
	CASE "ADD_BY_ID"
		VAR_INT:(ARG:0) += ARG:1
	;곱셈, 소수치는 건네줄 수 없기 때문에 주의
	CASE "TIMES_BY_ID"
		VAR_INT:(ARG:0) *= ARG:1
	;지정 변수를 ARG 퍼센트로 한다
	CASE "PERCENT_BY_ID"
		VAR_INT:(ARG:0) *= ARG:1
		VAR_INT:(ARG:0) /= 100
	;PPM=백만분 율
	CASE "PPM_BY_ID"
		VAR_INT:(ARG:0) *= ARG:1
		VAR_INT:(ARG:0) /= 1000000
	CASEELSE
		THROW 미설정의 명령 %COMMAND%
	ENDSELECT
CASE "ADD_BY_NAME", "TIMES_BY_NAME", "PERCENT_BY_NAME", "PPM_BY_NAME"
	SIF !STRLENS(ARGS:0)
		THROW 변수명을 설정해 주세요
	TEMP_ID = FINDELEMENT(VAR_NAME, ESCAPE(ARGS:0), 1, , 1)
	SIF TEMP_ID <= 0
		THROW 존재하지 않는 변수를 참조했던 %ARGS:0%

	SELECTCASE COMMAND
	;가산, 물론 음수도 가능
	CASE "ADD_BY_NAME"
		VAR_INT:TEMP_ID += ARG:0
	;곱셈, 소수치는 건네줄 수 없기 때문에 주의
	CASE "TIMES_NAME"
		VAR_INT:TEMP_ID *= ARG:0
	;지정 변수를 ARG 퍼센트로 한다
	CASE "PERCENT_NAME"
		VAR_INT:TEMP_ID *= ARG:0
		VAR_INT:TEMP_ID /= 100
	;PPM=백만분 율
	CASE "PPM_NAME"
		VAR_INT:TEMP_ID *= ARG:0
		VAR_INT:TEMP_ID /= 1000000
	CASEELSE
		THROW 미설정의 명령 %COMMAND%
	ENDSELECT
CASEELSE
	THROW 미설정의 명령 %COMMAND%
ENDSELECT
RETURNF

;-----------------------------------------------
;일시 변수 취득 함수
;-----------------------------------------------
;식중함수
;ID를 건네줄 때에도"3"등 캐릭터라인으로 건네주지 않는다고 에러를 토한다
;INT/STR는 「변수의 내용」에서도 「제일 인수의 형태」도 아닌 것에 주의
;이것은 「반환값의 형태」인(즉 TOINT()의 생략을 하고 싶었다)
;반환값이 STR가 되는 것은 GET_NAME와 GET_VALUE의 내용이 STR때만
@TEMP_INT(COMMAND, ARGS:0)
#FUNCTION
#DIMS COMMAND
RETURNF TOINT(TEMP_GET(COMMAND, ARGS:0))

@TEMP_STR(COMMAND, ARGS:0)
#FUNCTIONS
#DIMS COMMAND
RETURNF TEMP_GET(COMMAND, ARGS:0)

@TEMP_GET(COMMAND = "GET_VALUE", ARGS:0)
#FUNCTIONS
#DIMS COMMAND
SELECTCASE COMMAND
CASE "GET_TOTAL"
	RETURNF TEMP_STOCK("GET_TOTAL")
CASE "GET_VALUE"
	;숫자 같으면 ID로 간주한다
	IF ISNUMERIC(ARGS:0)
		RETURNF TEMP_STOCK("GET_VALUE_BY_ID", , , TOINT(ARGS:0))
	ELSE
		RETURNF TEMP_STOCK("GET_VALUE_BY_NAME", ARGS:0)
	ENDIF
;변수명으로부터 변수의 ID를 돌려준다
;존재하지 않을 때는 0
CASE "GET_ID"
	RETURNF TEMP_STOCK("GET_ID", ARGS:0)
;ARGS:0이 포함되는 변수명의 수를 돌려준다
CASE "GET_CNT_NAME"
	RETURNF TEMP_STOCK("GET_CNT_NAME", ARGS:0)
;변수의 위치로부터 변수명을 돌려준다
;존재하지 않을 때는 하늘의 캐릭터라인을 돌려준다
CASE "GET_NAME"
	RETURNF TEMP_STOCK("GET_NAME", , , TOINT(ARGS:0))
CASEELSE
	THROW 불명한 커맨드 %COMMAND%
ENDSELECT

;-----------------------------------------------
;RETURN계 함수
;-----------------------------------------------
;식중함수
;변수명 혹은 ID를 참조해 그 변수의 내용(INTorSTR)을 취득하는 함수
;F함수로 RETURN계라고 하는 것도 좀 이상하지만 명명 센스가 죽고 있을 뿐이므로 신경쓰지 말아라
;이 함수의 특징은 취득 후에 참조 원래 변수를 소거하는 점, 사용할 기회는 많을 것
;변수 만들 뿐은 곧 가득 되어버리니까
;다른 정보로 취득 직후에 지운다고 하는 처리가 필요라고 생각되지 않기 때문에 VALUE 전용

@TEMP_RE_INT(ARGS)
#FUNCTION
LOCAL = TEMP_INT("GET_VALUE", ARGS)
CALLF TEMP_VARCLEAR(ARGS)
RETURNF LOCAL

@TEMP_RE_STR(ARGS)
#FUNCTIONS
LOCALS = %TEMP_STR("GET_VALUE", ARGS)%
CALLF TEMP_VARCLEAR(ARGS)
RETURNF LOCALS

;-----------------------------------------------
;대입·초기화계 함수
;-----------------------------------------------
;CALLF로 사용
;일시 변수 작성 함수
;이것이 없으면 시작하지 않는다
;변수 작성과 초기치의 설정
;벌써 존재하면(자) 에러
;MAKE_INT로 INT 변수, MAKE_STR로 STR 변수를 작성한다
@MAKE_INT(V_NAME, V_INT)
#FUNCTIONS
#DIMS V_NAME
#DIM  V_INT
RETURNF TEMP_VARMAKE(V_NAME, , V_INT)

@MAKE_STR(V_NAME, V_STR)
#FUNCTIONS
#DIMS V_NAME
#DIMS V_STR
RETURNF TEMP_VARMAKE(V_NAME, V_STR)

@TEMP_VARMAKE(V_NAME, V_STR, V_INT)
#FUNCTIONS
#DIMS V_NAME
#DIMS V_STR
#DIM  V_INT
RETURNF TEMP_STOCK("VARMAKE", V_NAME, V_STR, V_INT)

;대입 함수
;CALLF로 사용
;변수가 존재하지 않으면 에러
;STR와 INT의 양쪽 모두의 VALUE에 정보가 들어가있는 때는 STR가 되돌아 온다
;
;대입 함수 사용하고 싶을 때는
;	CALLF SET_INT/STR
;그리고 사용해주세요
@SET_INT(V_NAME, V_INT)
#FUNCTION
#DIMS V_NAME
#DIM  V_INT
RETURNF TOINT(TEMP_VARSET(V_NAME, , V_INT))

@SET_STR(V_NAME, V_STR)
#FUNCTIONS
#DIMS V_NAME
#DIMS V_STR
RETURNF TEMP_VARSET(V_NAME, V_STR)

@TEMP_VARSET(V_NAME, V_STR, V_INT)
#FUNCTIONS
#DIMS V_NAME
#DIMS V_STR
#DIM  V_INT
;숫자 같으면 ID로 간주한다
IF ISNUMERIC(V_NAME)
	RETURNF TEMP_STOCK("VARSET_BY_ID", , V_STR, TOINT(V_NAME), V_INT)
ELSE
	RETURNF TEMP_STOCK("VARSET_BY_NAME", V_NAME, V_STR, V_INT)
ENDIF

;변수의 초기화 함수
@TEMP_VARCLEAR(ARGS:0, OP = "NORMAL")
#FUNCTIONS
#DIMS OP
SELECTCASE OP
;통상은 변수명, 혹은 ID에 일치하는 변수만을 소거
CASE "NORMAL"
	IF ISNUMERIC(ARGS:0)
		RETURNF TEMP_STOCK("VARCLEAR_BY_ID", , , TOINT(ARGS:0))
	ELSE
		RETURNF TEMP_STOCK("VARCLEAR_BY_NAME", ARGS:0)
	ENDIF
;변수 이름에 키워드를 포함하는 것을 소거, 말려들게 해 주의
CASE "KEY"
		RETURNF TEMP_STOCK("VARCLEAR_BY_KEYWORD", ARGS:0)
;전소거, 너무 강력해 그다지 다용은 할 수 없다
CASE "ALL"
		RETURNF TEMP_STOCK("ALLCLEAR")
ENDSELECT

;-----------------------------------------------
;산술계 함수
;-----------------------------------------------
;솔직히,  존재 의의가 미묘한 생각이 들지만 일단 만들어 두어
;CALLF로 사용
;COMMAND는 ADD, TIMES, PERCENT, PPM
;PPM는 얼마든지 늘릴 수 있어라는 예로 농담으로 만들었다
@TEMP_METH(V_NAME, COMMAND, ARG:0)
#FUNCTIONS
#DIMS V_NAME
#DIMS COMMAND
IF ISNUMERIC(V_NAME)
	RETURNF TEMP_STOCK(@"%COMMAND%_BY_ID", , , TOINT(V_NAME), ARG:0)
ELSE
	RETURNF TEMP_STOCK(@"%COMMAND%_BY_NAME", V_NAME, , ARG:0)
ENDIF


code:
;----------------------------------
;은밀중 플래그 세트 CFLAG:330SET
;호출시의 정합성을 판정해 인수로서 건네받은 값을 플래그에 세트 한다
;ARG=SET치 ARG:1=세트 대상 ARG:2=MASTER 연동
;----------------------------------
@SET_SNEAK(ARG, ARG:1, ARG:2)
SELECTCASE ARG
	;FLAG_OFF
	CASE 0
		;정합성 체크
		CFLAG:(ARG:1):은밀중 = 0
		IF ARG:2 == 1
			CFLAG:MASTER:은밀중 = 0
		ELSEIF ARG:2 == 2
			SIF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치
				CFLAG:MASTER:은밀중 = 0
		ENDIF
	;FLAG_ON
	CASE 1
		;정합성 체크
		;TARGET와 MASTER가 동실 또한 수면중이 아니면 세트는 할 수 없다
		IF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치 && CFLAG:(ARG:1):수면
			CFLAG:(ARG:1):은밀중 = 1
			SIF ARG:2 == 1
				CFLAG:MASTER:은밀중 = 1
		ELSE
		ENDIF
ENDSELECT

;----------------------------------
;장난 플래그 세트 CFLAG:331SET
;호출시의 정합성을 판정해 인수로서 건네받은 값을 플래그에 세트 한다
;ARG=SET치 ARG:1=세트 대상 ARG:2=MASTER 연동 ON
;----------------------------------
@SET_PRANK(ARG, ARG:1, ARG:2)
SELECTCASE ARG
	;FLAG_OFF
	CASE 0
		;정합성 체크
		CFLAG:(ARG:1):장난 = 0
		IF ARG:2 == 1
			CFLAG:MASTER:장난 = 0
		ELSEIF ARG:2 == 2
			SIF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치
				CFLAG:MASTER:장난 = 0
		ENDIF
	;FLAG_ON
	CASE 1
		;정합성 체크
		;TARGET와 MASTER가 동실·은밀중·수면중이 아니면 세트는 할 수 없다
		IF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치 && CFLAG:(ARG:1):은밀중 == CFLAG:MASTER:은밀중 && CFLAG:(ARG:1):수면
			CFLAG:(ARG:1):장난 = 1
			SIF ARG:2 == 1
				CFLAG:MASTER:장난 = 1
		ELSE

		ENDIF
	;과격한 장난 FLAG_ON
	CASE 2
		;정합성 체크
		;TARGET와 MASTER가 동실·은밀중·수면중·이미 장난 FLAG_ON가 아니면 세트는 할 수 없다
		IF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치 && CFLAG:(ARG:1):은밀중 == CFLAG:MASTER:은밀중 && CFLAG:(ARG:1):장난 > 0 && CFLAG:(ARG:1):수면
			CFLAG:(ARG:1):장난 = 2
			SIF ARG:2 == 1
				CFLAG:MASTER:장난 = 2
		ELSE

		ENDIF
ENDSELECT

;----------------------------------
;동침 플래그 세트 CFLAG:334SET
;호출시의 정합성을 판정해 인수로서 건네받은 값을 플래그에 세트 한다
;ARG=SET치 ARG:1=세트 대상 ARG:2=MASTER 연동 ON (1=무조건 일어나는 2=동실이라면 일어난다)
;----------------------------------
@SET_TOGETHER(ARG, ARG:1, ARG:2)
SELECTCASE ARG
	;FLAG_OFF
	CASE 0
		;정합성 체크
		CFLAG:(ARG:1):동침중 = 0
		IF ARG:2 == 1
			CFLAG:MASTER:동침중 = 0
		ELSEIF ARG:2 == 2
			SIF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치
				CFLAG:MASTER:동침중 = 0
		ENDIF
	;FLAG_ON
	CASE 1
		;정합성 체크
		;TARGET와 MASTER가 동실·수면중이 아니면 세트는 할 수 없다
		IF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치 && CFLAG:(ARG:1):수면
			CFLAG:(ARG:1):동침중 = 1
			SIF ARG:2 == 1
				CFLAG:MASTER:동침중 = 1
		ELSE
		ENDIF
ENDSELECT

;----------------------------------
;수면중 플래그 세트 CFLAG:313SET
;호출시의 정합성을 판정해 인수로서 건네받은 값을 플래그에 세트 한다
;ARG=SET치 ARG:1=세트 대상 ARG:2=MASTER 연동 ON
;----------------------------------
@SET_SLEEP(ARG, ARG:1, ARG:2)
SELECTCASE ARG
	;FLAG_OFF
	CASE 0
		;정합성 체크
		CFLAG:(ARG:1):수면 = 0
		;수면 플래그로 MASTER 연동은 사용하지 않겠지 지만… 이라든가 말하고 있으면(자) 동침으로 사용하는 것에…
		IF ARG:2 == 1
			CFLAG:MASTER:수면 = 0
		ELSEIF ARG:2 == 2
			SIF CFLAG:(ARG:1):현재위치 == CFLAG:MASTER:현재위치
				CFLAG:MASTER:수면 = 0
		ENDIF
		SETBIT CFLAG:(ARG:1):갈아입음실행, 0
		CLEARBIT CFLAG:(ARG:1):갈아입음실행, 1
		;피로와 수면심도를 리셋
		TCVAR:ARG:피로도   = 0
		TCVAR:ARG:수면심도 = 0
	;FLAG_ON
	CASE 1
		;정합성 체크
		;데일리중은 세트 할 수 없다
		IF !CFLAG:(ARG:1):데일리 || ARG:1 == MASTER
			CFLAG:(ARG:1):수면 = 1
			CFLAG:(ARG:1):데이트중 = MAIN_MAP
			;MASTER 연동은 사용하는거야 n(ry
			SIF ARG:2 == 1
				CFLAG:MASTER:수면 = 1
		;쇠약시는 데일리중도 잔다
		ELSEIF CFLAG:(ARG:1):쇠약
			CFLAG:(ARG:1):수면 = 1
			CFLAG:(ARG:1):데이트중 = MAIN_MAP
			;MASTER 연동은 사용하는거야 n(ry
			SIF ARG:2 == 1
				CFLAG:MASTER:수면 = 1
		ENDIF
		IF CFLAG:(ARG:1):수면 == 1 && GETBIT(CFLAG:(ARG:1):갈아입음실행, 0)
			TCVAR:(ARG:1):수면심도 = 1200 * (TCVAR:(ARG:1):수면제강도 + 1)
			TCVAR:(ARG:1):수면심도 += TCVAR:(ARG:1):피로도 / 3
		ENDIF
		SETBIT CFLAG:(ARG:1):갈아입음실행, 1
		CLEARBIT CFLAG:(ARG:1):갈아입음실행, 0
		IF CFLAG:(ARG:1):데일리 || !수면시간(ARG:1) || (CFLAG:(ARG:1):쇠약 && CFLAG:(ARG:1):현재위치 != CFLAG:(ARG:1):초기위치)
			SETBIT CFLAG:(ARG:1):갈아입음실행, 0
			CLEARBIT CFLAG:(ARG:1):갈아입음실행, 1
		ENDIF
		SIF ARG:1 == MASTER
			CALL BUFF_RESET
ENDSELECT

;수면 관련 처리로서 여기에 추가
;----------------------------------
;피로도 산출 함수
;DOWNBASE로부터 피로 도를 산출한다
;√0피하고를 위해서(때문에) 작성
;ARG:RETURNF
;_10:_1
;_25:_2
;_50:10
;100:30
;125:36
;150:45
;200:89
;DOWNBASE에는 체력이라면 x12, 기력이라면 x8의 계수가 다해 실제의 피로도 가산치는
;체력 100 소비로 1314, 체력 200 소비로 3718
;기력 100 소비로 715, 기력 200 소비로 2023
;(계산기로 계산했으므로 오차가 나옵니다)
;악천후로 훈련하면(자) 「죽는 만큼 지친다」
;----------------------------------
@CULC_TIRED(ARG)
#FUNCTION
SIF ARG < 10
	RETURNF 0
LOCAL = ARG / 10
RETURNF LOCAL * SQRT(LOCAL)

;----------------------------------
;피로도 가산 함수 TCVAR:151ADD
;주인의 MASTER 피하고와 수면 판정을 위해서(때문에) 작성
;----------------------------------
@ADD_TIRED(CHARA, VALUE)
#DIM CHARA
#DIM VALUE
SIF CHARA == MASTER || CFLAG:CHARA:수면
	RETURN
TCVAR:CHARA:피로도 += VALUE

;----------------------------------
;데이트 플래그 세트 CFLAG:12SET
;호출시의 정합성을 판정해 건네받은 장소에의 데이트 플래그를 세트 한다
;ARG=데이트처 ARG:1=세트 대상
;데이트에서의 행선지 정의는 조금 특수
;XXYZ	XX=데이트처 NO Y=데이트처 파생 장소 Z=이동 소요시간(X*10min)
;----------------------------------
@SET_DATE(ARG, ARG:1)
;FLAG_OFF
IF ARG == 99 || ARG == 9999
;데이트 종료
;신사는 파생 장소가 6까지이므로 괜찮을 것. 이것으로 안 돼라면 ARG == 10000으로 한다
	;정합성 체크
	IF CHK_DATENOW(CFLAG:(ARG:1):데이트중)
		CFLAG:(ARG:1):데이트중 = MAIN_MAP
		CFLAG:MASTER:데이트중 = MAIN_MAP
		FLAG:데이트상대 = 0
		TFLAG:데이트전호감도 = 0
		SIF !AT_HOME(ARG:1)
			CFLAG:(ARG:1):현재위치 = GET_ENTRANCE(MAIN_MAP)
		SIF !AT_HOME(MASTER)
			CFLAG:MASTER:현재위치 = GET_ENTRANCE(MAIN_MAP)
		IF ARG == 9999
			CFLAG:MASTER:현재위치 = 부엌
			CFLAG:(ARG:1):현재위치 = 부엌
		ENDIF
	ENDIF
;FLAG_ON
ELSE
	;정합성 체크
	;쇠약중, 이미 데이트중이라면 처리를 실시하지 않는다
	IF !CHK_DATENOW(CFLAG:(ARG:1):데이트중) || !CFLAG:(ARG:1):쇠약
		;기력이 없으면 데이트는 갈 수 없다
		IF BASE:MASTER:기력 > 0 && BASE:(ARG:1):기력 > 0
			CFLAG:(ARG:1):데이트중 = ARG
			CFLAG:MASTER:데이트중 = ARG
			FLAG:데이트상대 = (ARG:1)
			IF ARG:1 == 0
				CFLAG:MASTER:현재위치 = GET_ENTRANCE(ARG)
			ELSE
				IF ARG == 2
					CALL EX_COSTUME((ARG:1), "마을 데이트")
					SIF RESULT
						PRINTFORMW %CALLNAME:(ARG:1)%는 마을 방향의 옷으로 갈아입었습니다
				ENDIF
				CFLAG:(ARG:1):현재위치 = (ARG * 100) + (TIME_REQUIRED(CFLAG:MASTER:현재위치 / 100, ARG) / 10)
				CFLAG:MASTER:현재위치 = (ARG * 100) + (TIME_REQUIRED(CFLAG:MASTER:현재위치 / 100, ARG) / 10)
				IF !ARG
					CFLAG:(ARG:1):현재위치 += 1100
					CFLAG:MASTER:현재위치 += 1100
				ENDIF
			ENDIF
		ENDIF
	ENDIF
ENDIF

;----------------------------------
;행동 억제 시간 세트 CFLAG:313SET
;현재의 장소에에 세트 한다
;ARG=호출 종류 ARG:1=세트 대상
;----------------------------------
@SET_DERAY(ARG, ARG:1)
IF !CFLAG:(ARG:1):데일리
	;호출 형식에 의해 처리 변경 1=장소에 의한 데일리 2이후=이벤트에 의한 데일리
	SELECTCASE ARG
		;특정의 장소에 들어가면(자) 데일리
		CASE 1
			SELECTCASE CFLAG:(ARG:1):현재위치
				;부엌은 요리하므로 데일리 발생
				CASE 11
					IF ABL:(ARG:1):요리기능 >= 3
						CFLAG:(ARG:1):데일리 = 30
					ELSEIF ABL:(ARG:1):요리기능 > 1 && ABL:(ARG:1):요리기능 < 3
						CFLAG:(ARG:1):데일리 = 60
					ELSE
						CFLAG:(ARG:1):데일리 = 120
					ENDIF
				;목욕을 하면(자) 데일리 발생
				CASE 12
					CFLAG:(ARG:1):데일리 = 60
			ENDSELECT
		;아침에 일어 나면(자) 데일리(아침은 기분이 결정되지 않고 네)
		CASE 2
			CFLAG:(ARG:1):데일리 = 60
		;일종료후는 데일리
		CASE 3
			CFLAG:(ARG:1):데일리 = 20
		;동침 하면(자) 노력해 일어나 준다(쇠약시 이외)
		CASE 4
			SIF !CFLAG:(ARG:1):쇠약
				CFLAG:(ARG:1):데일리 = 60
		;밀어넘어뜨려지고 달래면(자) 데일리
		CASE 5
			CFLAG:(ARG:1):데일리 = 40
		;무릎베개시는 데일리
		CASE 6
			CFLAG:(ARG:1):데일리 = 10
		CASE 99
			;Deray Clear to Do nothing
	ENDSELECT
ELSE
	SELECTCASE ARG
		;데일리를 클리어
		CASE 99
			CFLAG:(ARG:1):데일리 = 0
	ENDSELECT
ENDIF


code:
@BONUS
#DIM PAGE
#DIM CONST MAXPAGE = 7
;PAGE 0=안면 1=호감도 2=팬티 3=함락 4=잉태 5=기능 6=탄막승부 7=어빌

CALL 실적플래그이행
CALL 보너스소질판정

TRYCALLFORM PRINT_BONUS_{PAGE}

DRAWLINE
PRINTFORML
PRINTFORMC [998] 이전페이지
PRINTFORMC 페이지 {PAGE + 1} / {MAXPAGE + 1}
PRINTFORMC [999] 다음페이지
PRINTL
PRINTC
PRINTFORMC [0] 돌아간다
INPUT
SELECTCASE RESULT
	CASE 0
		RETURN
	CASE 998
		PAGE --
	CASE 999
		PAGE ++
	CASEELSE
		TRYCALLFORM REWARD_BONUS_{PAGE}(RESULT)
ENDSELECT
SIF PAGE >= MAXPAGE + 1
	PAGE = 0
SIF PAGE < 0
	PAGE = MAXPAGE
RESTART

@보너스소질판정(ARG)
;안면 2, 위치짐작
IF GETBIT(FLAG:안면보너스취득상황, 2)
	SETBIT TALENT:MASTER:위치짐작, 0
ELSE
	CLEARBIT TALENT:MASTER:위치짐작, 0
ENDIF

;안면 3, 집합
TALENT:MASTER:집합 = GETBIT(FLAG:안면보너스취득상황, 3)

;안면 4, 위치짐작Ⅱ
IF GETBIT(FLAG:안면보너스취득상황, 4)
	SETBIT TALENT:MASTER:위치짐작, 1
ELSE
	CLEARBIT TALENT:MASTER:위치짐작, 1
ENDIF

;안면 5, 천객만래
TALENT:MASTER:천객만래 = GETBIT(FLAG:안면보너스취득상황, 5)

;호감도 5, 오방짐작
TALENT:MASTER:오방짐작 = GETBIT(FLAG:호감도보너스취득상황, 5)

;호감도 6, 팬티밀수
TALENT:MASTER:팬티밀수 = GETBIT(FLAG:호감도보너스취득상황, 6)

;호감도 8, 붉은실
TALENT:MASTER:붉은실 = GETBIT(FLAG:호감도보너스취득상황, 8)

;팬티2, 정욕감지
IF GETBIT(FLAG:팬티보너스취득상황, 2)
	SETBIT TALENT:MASTER:정욕감지, 0
ELSE
	CLEARBIT TALENT:MASTER:정욕감지, 0
ENDIF

;팬티 5, 정욕감지Ⅱ
IF GETBIT(FLAG:팬티보너스취득상황, 5)
	SETBIT TALENT:MASTER:정욕감지, 1
ELSE
	CLEARBIT TALENT:MASTER:정욕감지, 1
ENDIF

TALENT:MASTER:절륜 = GETBIT(FLAG:팬티보너스취득상황, 8)

;함락 1, 일광욕
TALENT:MASTER:일광욕 = GETBIT(FLAG:함락보너스취득상황, 1)

;함락 3, 수수께끼의매력
TALENT:MASTER:수수께끼의매력 = GETBIT(FLAG:함락보너스취득상황, 3)

;함락 4, 회복 빠름
TALENT:MASTER:회복속도 = GETBIT(FLAG:함락보너스취득상황, 4)

;함락 5, 생리주기가시화
FLAG:1007 = GETBIT(FLAG:함락보너스취득상황, 5)

;함락 6, 월광욕
TALENT:MASTER:월광욕 = GETBIT(FLAG:함락보너스취득상황, 6)

;함락 7, 매력
TALENT:MASTER:매력 = GETBIT(FLAG:함락보너스취득상황, 7)

;LOOP 사용해 정리하는 것이 좋을지도 모르지만, 조정하거나 개변하거나 하기 쉽기 때문에 이대로에
;잉태 1, 만능
TALENT:MASTER:만능잉태 = GETBIT(FLAG:잉태보너스취득상황, 1)

;잉태 2, 무녀
TALENT:MASTER:무녀잉태 = GETBIT(FLAG:잉태보너스취득상황, 2)

;잉태 3, 요정
TALENT:MASTER:요정잉태 = GETBIT(FLAG:잉태보너스취득상황, 3)

;잉태 4, 신령
TALENT:MASTER:신령잉태 = GETBIT(FLAG:잉태보너스취득상황, 4)

;잉태 5, 츠쿠모가미
TALENT:MASTER:츠쿠모가미잉태 = GETBIT(FLAG:잉태보너스취득상황, 5)

;잉태 6, 오니
TALENT:MASTER:오니잉태 = GETBIT(FLAG:잉태보너스취득상황, 6)

;잉태 7, 텐구
TALENT:MASTER:텐구잉태 = GETBIT(FLAG:잉태보너스취득상황, 7)

;잉태 8, 봉래
TALENT:MASTER:봉래잉태 = GETBIT(FLAG:잉태보너스취득상황, 8)

;잉태 9, 요괴
TALENT:MASTER:요괴잉태 = GETBIT(FLAG:잉태보너스취득상황, 9)

;;잉태 10, 금단의지식
;TALENT:MASTER:금단의지식 = GETBIT(FLAG:잉태보너스취득상황, 10

;TALENT:MASTER:조합지식 = GETBIT(FLAG:잉태보너스취득상황, 13)

;기능 1, C둔감무시
TALENT:MASTER:C둔감무시 = GETBIT(FLAG:기능보너스취득상황, 1)

;기능 2, B둔감무시
TALENT:MASTER:B둔감무시 = GETBIT(FLAG:기능보너스취득상황, 2)

;기능 3, V둔감무시
TALENT:MASTER:V둔감무시 = GETBIT(FLAG:기능보너스취득상황, 3)

;기능 4, A둔감무시
TALENT:MASTER:A둔감무시 = GETBIT(FLAG:기능보너스취득상황, 4)

;기능 5, 매혹
TALENT:MASTER:매혹 = GETBIT(FLAG:기능보너스취득상황, 5)

;탄막승부 2, 그레이즈능숙함
TALENT:MASTER:그레이즈능숙함 = GETBIT(FLAG:탄막승부보너스취득상황, 2)

;탄막승부 4, 영력충전
TALENT:MASTER:영력충전 = GETBIT(FLAG:탄막승부보너스취득상황, 4)

;탄막승부 5, 익스텐드
TALENT:MASTER:익스텐드 = GETBIT(FLAG:탄막승부보너스취득상황, 5)

;탄막승부 6, 루나슈터
TALENT:MASTER:루나슈터 = GETBIT(FLAG:탄막승부보너스취득상황, 6)

;기술 1, 방중술
TALENT:MASTER:방중술 = GETBIT(FLAG:기술보너스취득상황, 1)
;기술 2, 달변
TALENT:MASTER:달변 = GETBIT(FLAG:기술보너스취득상황, 2)
;기술 3, 채양보음
IF GETBIT(FLAG:기술보너스취득상황, 3)
	SETBIT TALENT:MASTER:179,2
ELSE
	CLEARBIT TALENT:MASTER:179,2
ENDIF
;기술 6, 습득빠름
TALENT:MASTER:습득속도 = GETBIT(FLAG:기술보너스취득상황, 6)
;기술 7, 채음보양
IF GETBIT(FLAG:기술보너스취득상황,7)
	SETBIT TALENT:MASTER:179,3
ELSE
	CLEARBIT TALENT:MASTER:179,3
ENDIF
@BONUS_CAUTION
CALL COLORMESSAGE(@"지금 단계에서 이 실적을 되돌리면 재취득할 수 없습니다", C_ORANGE, 1)
CALL COLORMESSAGE(@"정말 되돌려도 되겠습니까? ", C_ORANGE, 1)
CALL ASK_YN
RETURN RESULT

;----------------------------------------
;안면 보너스
;----------------------------------------
@PRINT_BONUS_0
PRINTFORML ★현재의 안면 인원수：{안면카운트(), 4}명
FOR LOCAL, 1,6
	IF !GETBIT (FLAG:안면보너스취득상황, LOCAL) && !CONDITION_안면보너스(LOCAL, 1)
		PRINTPLAINFORM [{LOCAL}] - 해방 조건：안면 {CONDITION_안면보너스(LOCAL)}명 이상 - %BONUS_NAME_0(LOCAL)%
	ELSE
		IF GETBIT (FLAG:안면보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_0(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - 안면 {CONDITION_안면보너스(LOCAL)}명 보너스【완료】%BONUS_NAME_0(LOCAL)%
			ELSE
				IF !CONDITION_안면보너스(LOCAL, 1)
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				PRINTFORM [{LOCAL}] - 안면 {CONDITION_안면보너스(LOCAL)}명 보너스【완료】%BONUS_NAME_0(LOCAL)%
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			PRINTFORM [{LOCAL}] - 안면 {CONDITION_안면보너스(LOCAL)}명 보너스 - %BONUS_NAME_0(LOCAL)%
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTL
NEXT

@CONDITION_안면보너스(ARG, ARG:1)
;ARG:1이 진이라면 보너스 잡힐까 돌려준다
#FUNCTION
#DIM 필요수

SELECTCASE ARG
	CASE 1
		필요수 = 10
	CASE 2
		필요수 = 30
	CASE 3
		필요수 = 50
	CASE 4
		필요수 = 80
	CASE 5
		필요수 = 120
ENDSELECT

IF ARG:1
	IF 안면카운트() >= 필요수
		RETURNF 1
	ELSE
		RETURNF 0
	ENDIF
ELSE
	RETURNF 필요수
ENDIF

@REWARD_BONUS_0(ARG)
SIF GETBIT (FLAG:안면보너스취득상황, ARG) && !REMOVABLE_BONUS_0(ARG)
	RETURN
IF !CONDITION_안면보너스(ARG, 1)
	;주회 후, 채우지 않지만 취득하고 있는 상태
	IF GETBIT (FLAG:안면보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:안면보너스취득상황, ARG
SIF !GETBIT (FLAG:안면보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTW \5000 얻었습니다.
		MONEY += 5000
	CASE 2
		;호감도로부터 이동
		PRINTW 【소녀가 있는 곳을 짐작하는 정도의 능력】을 얻었습니다.
	CASE 3
		PRINTW 집합 커맨드를 사용할 수 있게 되었습니다.
	CASE 4
		PRINTW 【소녀의 내방을 짐작하는 정도의 능력】을 얻었습니다.
	CASE 5
		;팬티 8으로부터 이행
		PRINTW 【천객만래】를 얻었습니다.
	CASEELSE
		RETURN
ENDSELECT

@BONUS_NAME_0(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "\\5000"
	CASE 2
		RETURNF "【소녀가 있는 곳을 짐작하는 정도의 능력】"
	CASE 3
		RETURNF "집합 커맨드"
	CASE 4
		RETURNF "【소녀의 내방을 짐작하는 정도의 능력】"
	CASE 5
		RETURNF "【천객만래】"
ENDSELECT

@REMOVABLE_BONUS_0(ARG)
#FUNCTION
SELECTCASE ARG
	CASE 2, 3, 4, 5
		RETURNF 1
	CASEELSE
		RETURNF 0
ENDSELECT

@안면카운트
#FUNCTION
#DIM 안면카운트
안면카운트 = 0
FOR LOCAL, 1, CHARANUM
	SIF CFLAG:LOCAL:안면
		안면카운트 ++
NEXT
RETURNF 안면카운트
;----------------------------------------
;호감도보너스
;----------------------------------------

@PRINT_BONUS_1
VARSET RESULT
PRINTFORML ★현재의 최대호감도：{최대호감도(), 7}\@ RESULT:1 ?  (%CALLNAME:(RESULT:1)%) # \@
FOR LOCAL, 1,9
	IF !GETBIT (FLAG:호감도보너스취득상황, LOCAL) && !CONDITION_호감도보너스(LOCAL, 1)
		PRINTPLAINFORM [{LOCAL}] - 해방 조건：호감도 {CONDITION_호감도보너스(LOCAL)} 돌파 - %BONUS_NAME_1(LOCAL)%
	ELSE
		IF GETBIT (FLAG:호감도보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_1(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - 호감도{CONDITION_호감도보너스(LOCAL)} 돌파 보너스【완료】%BONUS_NAME_1(LOCAL)%
			ELSE
				IF !CONDITION_호감도보너스(LOCAL, 1)
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				PRINTFORM [{LOCAL}] - 호감도 {CONDITION_호감도보너스(LOCAL)} 돌파 보너스【완료】%BONUS_NAME_1(LOCAL)%
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			PRINTFORM [{LOCAL}] - 호감도 {CONDITION_호감도보너스(LOCAL)} 돌파 보너스 - %BONUS_NAME_1(LOCAL)%
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTFORML
NEXT

@CONDITION_호감도보너스(ARG, ARG:1)
;ARG:1이 진이라면 호감도보너스 잡힐까 돌려준다
#FUNCTION
#DIM 필요호감도
SELECTCASE ARG
	CASE 1
		필요호감도 = 100
	CASE 2
		필요호감도 = 500
	CASE 3
		필요호감도 = 1000
	CASE 4
		필요호감도 = 10000
	CASE 5
		필요호감도 = 30000
	CASE 6
		필요호감도 = 50000
	CASE 7
		필요호감도 = 100000
	CASE 8
		필요호감도 = 500000
ENDSELECT

IF ARG:1
	IF 최대호감도() >= 필요호감도
		RETURNF 1
	ELSE
		RETURNF 0
	ENDIF
ELSE
	RETURNF 필요호감도
ENDIF

@REWARD_BONUS_1(ARG)
SIF GETBIT (FLAG:호감도보너스취득상황, ARG) && !REMOVABLE_BONUS_1(ARG)
	RETURN
IF !CONDITION_호감도보너스(ARG, 1)
	;주회 후, 채우지 않지만 취득하고 있는 상태
	IF GETBIT (FLAG:호감도보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:호감도보너스취득상황, ARG
SIF !GETBIT (FLAG:호감도보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTW \5000 얻었습니다.
		MONEY += 5000
	CASE 2
		PRINTW 100카리스마 얻었습니다.
		MONEY:2 += 100
	CASE 3
		PRINTW 회화경험이 올랐습니다
		exp:MASTER:회화경험 += 100
	CASE 4
		;4. 620 proto 현재 없어?
		ITEM:미라다의돌 += 1
		PRINTFORMW 애욕을 독점하는 미라다의돌밀레니엄을 얻었습니다.
	CASE 5
		PRINTW 【더러운 방을 짐작하는 정도의 능력】을 얻었습니다.
	CASE 6
		PRINTW 【팬티밀수】를 얻었습니다. 몸 검사를 회피하기 쉬워집니다.
	CASE 7
		PRINTFORMW 기교가 올랐습니다.
		ABL:MASTER:기교 += 1
	CASE 8
		PRINTW 【붉은실】을 얻었습니다. 데이트시 낮은 확률로 좋은 일이 생길지도?
	CASEELSE
		RETURN
ENDSELECT

@BONUS_NAME_1(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "\\5000"
	CASE 2
		RETURNF "100카리스마"
	CASE 3
		RETURNF "회화경험 +50"
	CASE 4
		RETURNF "미라다의 돌"
	CASE 5
		RETURNF "【더러운 방을 짐작하는 정도의 능력】"
	CASE 6
		RETURNF "【팬티밀수】"
	CASE 7
		RETURNF "기교 UP"
	CASE 8
		RETURNF "【붉은실】"
ENDSELECT

@REMOVABLE_BONUS_1(ARG)
#FUNCTION
SELECTCASE ARG
	CASE 5, 6, 8
		RETURNF 1
	CASEELSE
		RETURNF 0
ENDSELECT

@최대호감도
#FUNCTION
#DIM 최대호감도
FOR LOCAL, 1, CHARANUM
	IF CFLAG:LOCAL:호감도 > 최대호감도
		최대호감도 = CFLAG:LOCAL:호감도
		RESULT:1 = LOCAL
	ENDIF
NEXT
RETURNF 최대호감도
;----------------------------------------
;팬티 보너스
;----------------------------------------

@CONDITION_팬티보너스(ARG, ARG:1)
;ARG:1이 진이라면 보너스 잡힐까 돌려준다
#FUNCTION
#DIM 필요종수
SELECTCASE ARG
	CASE 1
		필요종수 = 10
	CASE 2
		필요종수 = 30
	CASE 3
		필요종수 = 100
	CASE 4
		필요종수 = 300
	CASE 5
		필요종수 = 500
	CASE 6
		필요종수 = 700
	CASE 7
		필요종수 = 1000
	CASE 8
		필요종수 = 1200
	CASEELSE
		필요종수 = 9999
ENDSELECT

IF ARG:1
	IF FLAG:획득팬티총수 >= 필요종수
		RETURNF 1
	ELSE
		RETURNF 0
	ENDIF
ELSE
	RETURNF 필요종수
ENDIF

@PRINT_BONUS_2
PRINTFORML ★현재의 획득 팬티 종류수：{FLAG:획득팬티총수, 3}종
FOR LOCAL, 1,9
	IF !GETBIT (FLAG:팬티보너스취득상황, LOCAL) && !CONDITION_팬티보너스(LOCAL, 1)
		PRINTPLAINFORM [{LOCAL}] - 해방 조건：팬티를 {CONDITION_팬티보너스(LOCAL)}종류 모은다 - %BONUS_NAME_2(LOCAL)%
	ELSE
		IF GETBIT (FLAG:팬티보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_2(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - 팬티 {CONDITION_팬티보너스(LOCAL)}종 수집 보너스【완료】%BONUS_NAME_2(LOCAL)%
			ELSE
				IF !CONDITION_팬티보너스(LOCAL, 1)
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				PRINTFORM [{LOCAL}] - 팬티 {CONDITION_팬티보너스(LOCAL)}종 수집 보너스【완료】%BONUS_NAME_2(LOCAL)%
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			PRINTFORM [{LOCAL}] - 팬티 {CONDITION_팬티보너스(LOCAL)}종 수집 보너스 - %BONUS_NAME_2(LOCAL)%
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTL
NEXT

@REWARD_BONUS_2(ARG)
SIF GETBIT (FLAG:팬티보너스취득상황, ARG) && !REMOVABLE_BONUS_2(ARG)
	RETURN
IF !CONDITION_팬티보너스(ARG, 1)
	;주회 후, 채우지 않지만 취득하고 있는 상태(팬티는 인계되므로 현재는 관계없다)
	IF GETBIT (FLAG:팬티보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:팬티보너스취득상황, ARG
SIF !GETBIT (FLAG:팬티보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTW 청소경험을 얻었습니다.
		EXP:MASTER:청소경험 += 30
	CASE 2
		PRINTFORML 신에 대한 헌신을 쌓기 시작한 %마스터는%, 그 기적의 일부에 닿는 것이 허락되었다
		PRINTFORMW %마스터는% 【성욕을 주체 못하고 있는 소녀를 간파하는 정도의 능력】을 얻었다
	CASE 3
		PRINTW 기교가 올랐습니다.
		ABL:MASTER:기교 ++
	CASE 4
		PRINTL 팬티 님에게 제단을 받았습니다.
		PRINTFORMW 자기 방에서 발원하거나 하늘의 소리를 들을 수가 있게 됩니다.
		ITEM:제단 = 1
	CASE 5
		PRINTFORML 신에 대한 헌신을 거듭한 %마스터는% 새로운 기적에 닿는 것이 허락되었다
		PRINTFORMW %마스터는% 【성욕을 주체 못하고 있는 소녀를 찾아내는 정도의 능력】을 얻었다
	CASE 6
	;상승량 500이었던 것을 200으로 해 300을 2000종 보너스에
		PRINTW 기교가 올랐습니다.
		ABL:MASTER:기교 ++
	CASE 7
		;회복 빠름은 연인에 이행, 대신에 새롭게 정력 업
		PRINTW 정력의 상한이 올랐습니다.
		MAXBASE:MASTER:정력 =MAXBASE:MASTER:정력*3/2
	CASE 8
		;천객만래는 면식 5에 이행
		PRINTW 【절륜】을 얻었습니다. 사정량이 증가하며 사정해도 지치지 않습니다.
ENDSELECT

@BONUS_NAME_2(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "청소경험 +30"
	CASE 2
		RETURNF "【성욕을 주체 못하고 있는 소녀를 간파하는 정도의 능력】"
	CASE 3
		RETURNF "기교 UP"
	CASE 4
		RETURNF "제단"
	CASE 5
		RETURNF "【성욕을 주체 못하고 있는 소녀를 찾아내는 정도의 능력】"
	CASE 6
		RETURNF "기교 UP"
	CASE 7
		RETURNF "최대 정력×1.5"
	CASE 8
		RETURNF "【절륜】"
ENDSELECT

@REMOVABLE_BONUS_2(ARG)
#FUNCTION
SELECTCASE ARG
	CASE 2, 5,8
		RETURNF 1
	CASEELSE
		RETURNF 0
ENDSELECT

;----------------------------------------
;함락 보너스
;----------------------------------------
@PRINT_BONUS_3

#DIM 연모카운트
#DIM 섹프카운트
#DIM 위험일삽입
#DIM 순애파
#DIM 합의없음
#DIM 합의Get

연모카운트 = 0
섹프카운트 = 0
위험일삽입 = 0
순애파 = 0
합의Get = 0
VARSET BONUS_3_ABLE

FOR LOCAL, 1, CHARANUM
	SIF TALENT:LOCAL:연모
		연모카운트 ++
	SIF TALENT:LOCAL:섹프
		섹프카운트 ++
	SIF CFLAG:LOCAL:생해금 >= 2
		위험일삽입 ++
	SIF CFLAG:LOCAL:깨끗한교제
		순애파 ++
	SIF CFLAG:LOCAL:대주고말았다
		합의없음 ++
	SIF CFLAG:LOCAL:기정사실 & 합의_우후후
		합의Get ++
NEXT

BONUS_3_DESCRIPTION:1 = 연모 취득
SIF 연모카운트 >= 1
	BONUS_3_ABLE:1 = 1

BONUS_3_DESCRIPTION:2 = 연모 3명
SIF 연모카운트 >= 3
	BONUS_3_ABLE:2 = 1

BONUS_3_DESCRIPTION:3 = 연모 5명
SIF 연모카운트 >= 5
	BONUS_3_ABLE:3 = 1

BONUS_3_DESCRIPTION:4 = 연인 취득
SIF TALENT:MASTER:연인
	BONUS_3_ABLE:4 = 1

BONUS_3_DESCRIPTION:5 = 위험일삽입의 합의 취득
SIF 위험일삽입
	BONUS_3_ABLE:5 = 1

BONUS_3_DESCRIPTION:6 = 섹프 취득
SIF 섹프카운트 >= 1
	BONUS_3_ABLE:6 = 1

BONUS_3_DESCRIPTION:7 = 섹프 3명
SIF 섹프카운트 >= 3
	BONUS_3_ABLE:7 = 1

BONUS_3_DESCRIPTION:8 = 섹프 5명
SIF 섹프카운트 >= 5
	BONUS_3_ABLE:8 = 1

BONUS_3_DESCRIPTION:9 = 범하지 않고 연모 취득
SIF 순애파
	BONUS_3_ABLE:9 = 1

BONUS_3_DESCRIPTION:10 = 섹스의 합의를 얻는다
SIF 합의Get
	BONUS_3_ABLE:10 = 1

BONUS_3_DESCRIPTION:11 = 합의를 얻지 않고 의식이 있는 상대와 행위에 이른다
SIF 합의없음
	BONUS_3_ABLE:11 = 1

PRINTFORML ★현재의 연모：{연모카운트, 3}명/섹프：{섹프카운트, 3}명
FOR LOCAL, 1,12
	IF !BONUS_3_ABLE:LOCAL && !GETBIT (FLAG:함락보너스취득상황, LOCAL)
		PRINTPLAINFORM [{LOCAL}] - 해방 조건：%BONUS_3_DESCRIPTION:LOCAL%  - %BONUS_NAME_3(LOCAL)%
	ELSE
		IF GETBIT (FLAG:함락보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_3(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - %BONUS_3_DESCRIPTION:LOCAL%보너스【완료】%BONUS_NAME_3(LOCAL)%
			ELSE
				IF !BONUS_3_ABLE:LOCAL
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				PRINTFORM [{LOCAL}] - %BONUS_3_DESCRIPTION:LOCAL%보너스【완료】%BONUS_NAME_3(LOCAL)%
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			PRINTFORM [{LOCAL}] - %BONUS_3_DESCRIPTION:LOCAL%보너스 - %BONUS_NAME_3(LOCAL)%
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTL
NEXT

@REWARD_BONUS_3(ARG)
SIF GETBIT (FLAG:함락보너스취득상황, ARG) && !REMOVABLE_BONUS_3(ARG)
	RETURN
IF !BONUS_3_ABLE:ARG
	;주회 후, 채우지 않지만 취득하고 있는 상태
	IF GETBIT (FLAG:함락보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:함락보너스취득상황, ARG
SIF !GETBIT (FLAG:함락보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTW 【일광욕】을 얻었습니다.
	CASE 2
		;생리주기는 생해금에 이행
		;연모 보너스 3번째였던 것을 2번째에 이행
		PRINTW 기교가 올랐습니다.
		ABL:MASTER:기교 ++
	CASE 3
		;4번째로부터 수수께끼의매력을 이행
		;기력 업은 2번째에 이행
		PRINTW 【수수께끼의매력】을 얻었습니다.
	CASE 4
		;팬티 보너스로부터 이행
		PRINTW 【회복 빠름】을 얻었습니다.
	CASE 5
		PRINTW 생리주기를 알 수 있게 되었습니다.
	CASE 6

		PRINTW 【월광욕】을 얻었습니다.
	CASE 7
		;신규
		PRINTW 【매력】을 얻었습니다.
	CASE 8
		;신규
		PRINTW 기교가 올랐습니다.
		ABL:MASTER:기교 ++
	CASE 9
		;신규
		ITEM:미라다의돌 += 1
		PRINTFORMW 애욕을 독점하는 미라다의돌밀레니엄을 얻었습니다.
	CASE 10
		ITEM:미라다의돌 += 1
		PRINTFORMW 애욕을 독점하는 미라다의돌밀레니엄을 얻었습니다.
	CASE 11
		ITEM:미라다의돌 += 1
		PRINTFORMW 애욕을 독점하는 미라다의돌밀레니엄을 얻었습니다.
ENDSELECT

@BONUS_NAME_3(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "【일광욕】"
	CASE 2
		RETURNF "기교 UP"
	CASE 3
		RETURNF "【수수께끼의매력】"
	CASE 4
		RETURNF "【회복 빠름】"
	CASE 5
		RETURNF "생리주기가시화"
	CASE 6
		RETURNF "【월광욕】"
	CASE 7
		RETURNF "【매력】"
	CASE 8
		RETURNF "기교 UP"
	CASE 9
		RETURNF "미라다의 돌"
	CASE 10
		RETURNF "미라다의 돌"
	CASE 11
		RETURNF "미라다의 돌"
ENDSELECT

@REMOVABLE_BONUS_3(ARG)
#FUNCTION
SELECTCASE ARG
	CASE 1,3, 4, 5,6, 7
		RETURNF 1
	CASEELSE
		RETURNF 0
ENDSELECT

;----------------------------------------
;잉태 보너스
;----------------------------------------

@PRINT_BONUS_4
VARSET BONUS_4_ABLE
FOR LOCAL, 1, CHARANUM
	;임신하고 있어 출산경험 있어
	IF CFLAG:LOCAL:임신경과일수 || CFLAG:LOCAL:아이인원수
		IF TALENT:LOCAL:인간 == 3
			BONUS_4_ABLE:2 = 1
		ELSEIF TALENT:LOCAL:요정
			BONUS_4_ABLE:3 = 1
		ELSEIF TALENT:LOCAL:신령
			BONUS_4_ABLE:4 = 1
		ELSEIF TALENT:LOCAL:츠쿠모가미
			BONUS_4_ABLE:5 = 1
		ELSEIF TALENT:LOCAL:오니 || TALENT:LOCAL:흡혈귀
			BONUS_4_ABLE:6 = 1
		ELSEIF TALENT:LOCAL:텐구
			BONUS_4_ABLE:7 = 1
		ELSEIF TALENT:LOCAL:봉래인
			BONUS_4_ABLE:8 = 1
		ELSEIF TALENT:LOCAL:인간 == 2
			BONUS_4_ABLE:10 = 1
		ELSEIF TALENT:LOCAL:인간
			;아직 없음
		ELSE
			BONUS_4_ABLE:9 = 1
		ENDIF
	ENDIF
NEXT
SIF BONUS_4_ABLE:2 + BONUS_4_ABLE:3 + BONUS_4_ABLE:4 + BONUS_4_ABLE:5 + BONUS_4_ABLE:6 + BONUS_4_ABLE:7 + BONUS_4_ABLE:8 + BONUS_4_ABLE:9 >= 5
	BONUS_4_ABLE:1 = 1

BONUS_4_DESCRIPTION:1 = 5 종족 이상
BONUS_4_DESCRIPTION:2 = 무녀
BONUS_4_DESCRIPTION:3 = 요정
BONUS_4_DESCRIPTION:4 = 신령
BONUS_4_DESCRIPTION:5 = 츠쿠모가미
BONUS_4_DESCRIPTION:6 = 오니
BONUS_4_DESCRIPTION:7 = 텐구
BONUS_4_DESCRIPTION:8 = 봉래인
BONUS_4_DESCRIPTION:9 = 요괴
BONUS_4_DESCRIPTION:10 = 마법사

BONUS_4_DESCRIPTION:13 = 스친 상대

SIF FLAG:스침잉태수
	BONUS_4_ABLE:13 = 1

PRINTFORML ★현재의 잉태종족수：{BONUS_4_ABLE:2 + BONUS_4_ABLE:3 + BONUS_4_ABLE:4 + BONUS_4_ABLE:5 + BONUS_4_ABLE:6 + BONUS_4_ABLE:7 + BONUS_4_ABLE:8 + BONUS_4_ABLE:9, 2}종
FOR LOCAL, 1,15
	SIF BONUS_4_DESCRIPTION:LOCAL == ""
		CONTINUE
	IF !BONUS_4_ABLE:LOCAL && !GETBIT (FLAG:잉태보너스취득상황, LOCAL)
		PRINTPLAINFORM [{LOCAL}] - 해방 조건：%BONUS_4_DESCRIPTION:LOCAL% - %BONUS_NAME_4(LOCAL)%
	ELSE
		IF GETBIT (FLAG:잉태보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_4(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - %BONUS_4_DESCRIPTION:LOCAL%잉태 보너스【완료】%BONUS_NAME_4(LOCAL)%
			ELSE
				IF !BONUS_4_ABLE:LOCAL
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				PRINTFORM [{LOCAL}] - %BONUS_4_DESCRIPTION:LOCAL%잉태 보너스【완료】%BONUS_NAME_4(LOCAL)%
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			PRINTFORM [{LOCAL}] - %BONUS_4_DESCRIPTION:LOCAL%를 잉태 - %BONUS_NAME_4(LOCAL)%
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTL
NEXT

@REWARD_BONUS_4(ARG)
SIF GETBIT (FLAG:잉태보너스취득상황, ARG) && !REMOVABLE_BONUS_4(ARG)
	RETURN
IF !BONUS_4_ABLE:ARG
	;주회 후, 채우지 않지만 취득하고 있는 상태
	IF GETBIT (FLAG:잉태보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:잉태보너스취득상황, ARG
SIF !GETBIT (FLAG:잉태보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTW 【만능잉태】를 얻었습니다.
	CASE 2
		PRINTW 【무녀잉태】를 얻었습니다.
	CASE 3
		PRINTW 【요정잉태】를 얻었습니다.
	CASE 4
		PRINTW 【신령잉태】를 얻었습니다.
	CASE 5
		PRINTW 【츠쿠모가미잉태】를 얻었습니다.
	CASE 6
		PRINTW 【오니잉태】를 얻었습니다.
	CASE 7
		PRINTW 【텐구잉태】를 얻었습니다.
	CASE 8
		PRINTW 【봉래잉태】를 얻었습니다.
	CASE 9
		PRINTW 【요괴잉태】를 얻었습니다.
	CASE 10
		PRINTW 【금단의지식】을 얻었습니다.
		TALENT:MASTER:금단의지식 = 1
	CASE 13
		;신규
		IF !TALENT:MASTER:조합지식
			PRINTW 【조합지식】을 얻었습니다.
			TALENT:MASTER:조합지식 = 1
		ELSEIF TALENT:MASTER:조합지식 < 6
			PRINTW 【조합지식】의 레벨이 올랐습니다.
			TALENT:MASTER:조합지식 ++
		ELSE
			PRINTW 【조합지식】의 레벨은 이미 최대입니다.
		ENDIF
ENDSELECT

@BONUS_NAME_4(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "【만능잉태】"
	CASE 2
		RETURNF "【무녀잉태】"
	CASE 3
		RETURNF "【요정잉태】"
	CASE 4
		RETURNF "【신령잉태】"
	CASE 5
		RETURNF "【츠쿠모가미잉태】"
	CASE 6
		RETURNF "【오니잉태】"
	CASE 7
		RETURNF "【텐구잉태】"
	CASE 8
		RETURNF "【봉래잉태】"
	CASE 9
		RETURNF "【요괴잉태】"
	CASE 10
		RETURNF "【금단의지식】"
	CASE 11
		RETURNF ""
	CASE 12
		RETURNF ""
	CASE 13
		RETURNF "【조합지식】"
	CASE 14
		RETURNF ""
ENDSELECT

@REMOVABLE_BONUS_4(ARG)
#FUNCTION
SELECTCASE ARG
	;거의 모두 1이므로 ELSE가 외와는 역
	CASE 10, 11, 12, 13, 14
		RETURNF 0
	CASEELSE
		RETURNF 1
ENDSELECT

;----------------------------------------
;기능 보너스
;----------------------------------------

@PRINT_BONUS_5

#DIM 음유인원수
#DIM 음호인원수
#DIM 항문광인원수
#DIM 키스마인원수
#DIM 자위중독인원수
음유인원수 = 0
음호인원수 = 0
항문광인원수 = 0
키스마인원수 = 0
자위중독인원수 = 0

VARSET BONUS_5_ABLE

FOR LOCAL, 1, CHARANUM
	SIF TALENT:LOCAL:음유 || GETBIT (CFLAG:LOCAL:인계, 5)
		음유인원수 ++
	SIF TALENT:LOCAL:음호 || GETBIT (CFLAG:LOCAL:인계, 3)
		음호인원수 ++
	SIF TALENT:LOCAL:항문광 || GETBIT (CFLAG:LOCAL:인계, 4)
		항문광인원수 ++
	SIF TALENT:LOCAL:키스마 || GETBIT (CFLAG:LOCAL:인계, 6)
		키스마인원수 ++
	SIF TALENT:LOCAL:자위중독
		자위중독인원수 ++
NEXT

BONUS_5_DESCRIPTION:1 = 자위중독 3명
SIF 자위중독인원수 >= 3
	BONUS_5_ABLE:1 = 1

BONUS_5_DESCRIPTION:2 = 음유 3명
SIF 음유인원수 >= 3
	BONUS_5_ABLE:2 = 1

BONUS_5_DESCRIPTION:3 = 음호 3명
SIF 음호인원수 >= 3
	BONUS_5_ABLE:3 = 1

BONUS_5_DESCRIPTION:4 = 항문광 3명
SIF 항문광인원수 >= 3
	BONUS_5_ABLE:4 = 1

BONUS_5_DESCRIPTION:5 = 키스마 3명
SIF 키스마인원수 >= 3
	BONUS_5_ABLE:5 = 1

PRINTFORML ★현재의 자위중독：{자위중독인원수, 3}명/음유：{음유인원수, 3}명/음호：{음호인원수, 3}명/항문광：{항문광인원수, 3}명/키스마：{키스마인원수, 3}명
SIF FLAG:주회수
	PRINTFORML 　(자위중독 이외는 과거에 취득한 것이 있는 캐릭터도 포함됩니다)
FOR LOCAL, 1,6
	;스키마가 없기 때문에
;	SIF BONUS_5_DESCRIPTION:LOCAL == ""
;		CONTINUE
	IF !BONUS_5_ABLE:LOCAL && !GETBIT (FLAG:기능보너스취득상황, LOCAL)
		PRINTPLAINFORM [{LOCAL}] - 해방 조건：%BONUS_5_DESCRIPTION:LOCAL%  - %BONUS_NAME_5(LOCAL)%
	ELSE
		IF GETBIT (FLAG:기능보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_5(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - %BONUS_5_DESCRIPTION:LOCAL%보너스【완료】%BONUS_NAME_5(LOCAL)%
			ELSE
				IF !BONUS_5_ABLE:LOCAL
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				PRINTFORM [{LOCAL}] - %BONUS_5_DESCRIPTION:LOCAL%보너스【완료】%BONUS_NAME_5(LOCAL)%
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			PRINTFORM [{LOCAL}] - %BONUS_5_DESCRIPTION:LOCAL%  - %BONUS_NAME_5(LOCAL)%
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTL
NEXT

@REWARD_BONUS_5(ARG)
SIF GETBIT (FLAG:기능보너스취득상황, ARG) && !REMOVABLE_BONUS_5(ARG)
	RETURN
IF !BONUS_5_ABLE:ARG
	;주회 후, 채우지 않지만 취득하고 있는 상태
	IF GETBIT (FLAG:기능보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:기능보너스취득상황, ARG
SIF !GETBIT (FLAG:기능보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTW 【C둔감무시】를 얻었습니다.
	CASE 2
		PRINTW 【B둔감무시】를 얻었습니다.
	CASE 3
		PRINTW 【V둔감무시】를 얻었습니다.
	CASE 4
		PRINTW 【A둔감무시】를 얻었습니다.
	CASE 5
		PRINTW 【매혹】을 얻었습니다.
ENDSELECT

@BONUS_NAME_5(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "【C둔감무시】"
	CASE 2
		RETURNF "【B둔감무시】"
	CASE 3
		RETURNF "【V둔감무시】"
	CASE 4
		RETURNF "【A둔감무시】"
	CASE 5
		RETURNF "【매혹】"
ENDSELECT

@REMOVABLE_BONUS_5(ARG)
#FUNCTION
;모두 1
RETURNF 1

SELECTCASE ARG
	CASE 0
		RETURNF 0
	CASEELSE
ENDSELECT

;----------------------------------------
;탄막승부 보너스
;----------------------------------------
@PRINT_BONUS_6
PRINTFORML ★현재의 탄막승부승리 인원수：{탄막승부승리카운트(), 4}명
FOR LOCAL, 1,7
	IF !GETBIT (FLAG:탄막승부보너스취득상황, LOCAL) && !CONDITION_탄막승부보너스(LOCAL, 1)
		IF LOCAL != 6
			PRINTPLAINFORM [{LOCAL}] - 해방 조건：탄막승부승리 {CONDITION_탄막승부보너스(LOCAL)}명 이상 - %BONUS_NAME_6(LOCAL)%
		ELSE
			PRINTPLAINFORM [{LOCAL}] - 해방 조건：요리히메와 헤카티아에게 탄막승부로 승리한다 - %BONUS_NAME_6(LOCAL)%
		ENDIF
	ELSE
		IF GETBIT (FLAG:탄막승부보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_6(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - 탄막승부승리 {CONDITION_탄막승부보너스(LOCAL)}명 보너스【완료】%BONUS_NAME_6(LOCAL)%
			ELSE
				IF !CONDITION_탄막승부보너스(LOCAL, 1)
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				IF LOCAL != 6
					PRINTFORM [{LOCAL}] - 탄막승부승리 {CONDITION_탄막승부보너스(LOCAL)}명 보너스【완료】%BONUS_NAME_6(LOCAL)%
				ELSE
					PRINTFORM [{LOCAL}] - 요리히메와 헤카티아에게 탄막승부로 승리한 보너스【완료】%BONUS_NAME_6(LOCAL)%
				ENDIF
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			IF LOCAL != 6
				PRINTFORM [{LOCAL}] - 탄막승부승리 {CONDITION_탄막승부보너스(LOCAL)}명 보너스 - %BONUS_NAME_6(LOCAL)%
			ELSE
				PRINTFORM [{LOCAL}] - 요리히메와 헤카티아에게 탄막승부로 승리한 보너스 - %BONUS_NAME_6(LOCAL)%
			ENDIF
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTL
NEXT

@CONDITION_탄막승부보너스(ARG, ARG:1)
;ARG:1이 진이라면 보너스 잡힐까 돌려준다
#FUNCTION
#DIM 필요수

SELECTCASE ARG
	CASE 1
		필요수 = 10
	CASE 2
		필요수 = 25
	CASE 3
		필요수 = 50
	CASE 4
		필요수 = 75
	CASE 5
		필요수 = 100
ENDSELECT

IF ARG:1
	IF 탄막승부승리카운트() >= 필요수 && ARG < 6
		RETURNF 1
	ELSEIF CFLAG:98:탄막승부승리 && CFLAG:113:탄막승부승리 && ARG == 6
		RETURNF 1
	ELSE
		RETURNF 0
	ENDIF
ELSE
	RETURNF 필요수
ENDIF

@REWARD_BONUS_6(ARG)
SIF GETBIT (FLAG:탄막승부보너스취득상황, ARG)
	RETURN
IF !CONDITION_탄막승부보너스(ARG, 1)
	;주회 후, 채우지 않지만 취득하고 있는 상태
	IF GETBIT (FLAG:탄막승부보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:탄막승부보너스취득상황, ARG
SIF !GETBIT (FLAG:탄막승부보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTW 전투경험을 얻었습니다.
		MAXBASE:MASTER:체력+=30
		EXP:MASTER:전투경험 += 30
	CASE 2
		PRINTL 【그레이즈능숙함】을 얻었습니다.
		PRINTW 탄막승부에서 「회피에 전념한다」를 선택했을 때에 받는 대미지가 줄어듭니다.
	CASE 3
		PRINTW 체력의 상한이 올랐습니다.
		MAXBASE:MASTER:체력 += 300
	CASE 4
		PRINTL 【영력충전】을 얻었습니다.
		PRINTW 탄막승부에서 「회피에 전념한다」를 선택한 직후의 주사위값이 증가합니다.
	CASE 5
		PRINTL 【익스텐드】를 얻었습니다.
		PRINTW 탄막승부에서 초기 잔기가 +1됩니다.
	CASE 6
		PRINTL 【루나슈터】를 얻었습니다.
		PRINTW 탄막승부에서 폭탄의 소지수가 +1되고 폭탄의 효과치가 오릅니다.
	CASEELSE
		RETURN
ENDSELECT

@BONUS_NAME_6(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "전투경험 +30"
	CASE 2
		RETURNF "【그레이즈능숙함】"
	CASE 3
		RETURNF "최대 체력 +300"
	CASE 4
		RETURNF "【영력충전】"
	CASE 5
		RETURNF "【익스텐드】"
	CASE 6
		RETURNF "【루나슈터】"
ENDSELECT

@REMOVABLE_BONUS_6(ARG)
#FUNCTION
;모두 1
RETURNF 1

SELECTCASE ARG
	CASE 0
		RETURNF 0
	CASEELSE
ENDSELECT

@탄막승부승리카운트
#FUNCTION
#DIM 탄막승부승리카운트
탄막승부승리카운트 = 0
FOR LOCAL, 1, CHARANUM
	SIF CFLAG:LOCAL:탄막승부승리
		탄막승부승리카운트 ++
NEXT
RETURNF 탄막승부승리카운트

@PRINT_BONUS_7
VARSET BONUS_7_ABLE

BONUS_7_DESCRIPTION:1 = 교양 5이상
SIF ABL:MASTER:교양 >= 5
	BONUS_7_ABLE:1 = 1

BONUS_7_DESCRIPTION:2 = 화술기능 5이상
SIF ABL:MASTER:화술기능 >= 5
	BONUS_7_ABLE:2 = 1

BONUS_7_DESCRIPTION:3 = 전투능력 5이상
SIF ABL:MASTER:전투능력 >= 5
	BONUS_7_ABLE:3 = 1

BONUS_7_DESCRIPTION:4 = 청소기능 5이상
SIF ABL:MASTER:청소기능 >= 5
	BONUS_7_ABLE:4 = 1

BONUS_7_DESCRIPTION:5 = 요리기능 5이상
SIF ABL:MASTER:요리기능 >= 5
	BONUS_7_ABLE:5 = 1

BONUS_7_DESCRIPTION:6 = 음악기능 5이상
SIF ABL:MASTER:음악기능 >=5
	BONUS_7_ABLE:6 = 1

BONUS_7_DESCRIPTION:7 = 허리기술 5이상
SIF ABL:MASTER:허리 >= 5
	BONUS_7_ABLE:7 = 1

PRINTFORML ★교양: {ABL:MASTER:교양} / 화술기능: {ABL:MASTER:화술기능} / 전투능력: {ABL:MASTER:전투능력} / 청소기능: {ABL:MASTER:청소기능} / 음악기능: {ABL:MASTER:음악기능} / 허리기술: {ABL:MASTER:허리}
FOR LOCAL, 1,8
	IF !BONUS_7_ABLE:LOCAL && !GETBIT (FLAG:기술보너스취득상황, LOCAL)
		PRINTPLAINFORM [{LOCAL}] - 해방 조건：%BONUS_7_DESCRIPTION:LOCAL%  - %BONUS_NAME_7(LOCAL)%
	ELSE
		IF GETBIT (FLAG:기술보너스취득상황, LOCAL)
			IF !REMOVABLE_BONUS_7(LOCAL)
				SETCOLOR 100, 100, 100
				PRINTPLAINFORM [{LOCAL}] - %BONUS_7_DESCRIPTION:LOCAL%보너스【완료】%BONUS_NAME_7(LOCAL)%
			ELSE
				IF !BONUS_7_ABLE:LOCAL
					SETCOLOR C_ORANGE
				ELSE
					SETCOLOR C_P_BLUE
				ENDIF
				PRINTFORM [{LOCAL}] - %BONUS_7_DESCRIPTION:LOCAL%보너스【완료】%BONUS_NAME_7(LOCAL)%
			ENDIF
		ELSE
			SETCOLOR C_AQUA
			PRINTFORM [{LOCAL}] - %BONUS_7_DESCRIPTION:LOCAL%보너스 - %BONUS_NAME_7(LOCAL)%
		ENDIF
		RESETCOLOR
	ENDIF
	PRINTL
NEXT

@REWARD_BONUS_7(ARG)
SIF GETBIT (FLAG:기술보너스취득상황, ARG) && !REMOVABLE_BONUS_7(ARG)
	RETURN
IF !BONUS_7_ABLE:ARG
	;주회 후, 채우지 않지만 취득하고 있는 상태
	IF GETBIT (FLAG:기술보너스취득상황, ARG)
		CALL BONUS_CAUTION
		SIF RESULT
			RETURN
	ELSE
		RETURN
	ENDIF
ENDIF
INVERTBIT FLAG:기술보너스취득상황, ARG
SIF !GETBIT (FLAG:기술보너스취득상황, ARG)
	RETURN
SELECTCASE ARG
	CASE 1
		PRINTL 【방중술】을 얻었습니다.
		PRINTW 사정시 사정자와 피사정자의 기력이 소량 회복되며 총 기력이 소량 증가합니다.
	CASE 2
		PRINTL 【달변】를 얻었습니다.
		PRINTW 대화하다가 어색해지지 않습니다.
	CASE 3
		PRINTL 【채양보음】를 얻었습니다.
		PRINTW 사정시 피사정자의 체력을 사정자가 일부 가져가며 사정자의 총 체력이 오릅니다.
	CASE 4
		PRINTL 청소기를 얻었습니다.
		PRINTW 청소 시간이 빨라집니다
		ITEM:910=1
	CASE 5
		PRINTL 간편 요리 도구를 얻었습니다.
		PRINTW 어디서든 요리할 수 있습니다. 단, 경식만 가능합니다.
		ITEM:911=1
	CASE 6
		PRINTW 【습득 빠름】를 얻었습니다.
	CASE 7
		PRINTL 【채음보양】를 얻었습니다.
		PRINTW 사정시 사정자의 체력을 피사정자에게 나눠주며 피사정자의 총 체력이 오릅니다.
ENDSELECT

@BONUS_NAME_7(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 1
		RETURNF "【방중술】"
	CASE 2
		RETURNF "【달변】"
	CASE 3
		RETURNF "【채양보음】"
	CASE 4
		RETURNF "청소기"
	CASE 5
		RETURNF "간편 요리 도구"
	CASE 6
		RETURNF "【습득 빠름】"
	CASE 7
		RETURNF "【채음보양】"
ENDSELECT

@REMOVABLE_BONUS_7(ARG)
#FUNCTION
SELECTCASE ARG
	;거의 모두 1이므로 ELSE가 외와는 역
	CASE 4, 5
		RETURNF 0
	CASEELSE
		RETURNF 1
ENDSELECT

;----------------------------------------

@실적플래그이행
SIF GETBIT (FLAG:701, 0)
	SETBIT FLAG:호감도보너스취득상황, 1
SIF GETBIT (FLAG:701, 12)
	SETBIT FLAG:호감도보너스취득상황, 2
SIF GETBIT (FLAG:701, 2)
	SETBIT FLAG:호감도보너스취득상황, 3
;호감도보너스의 위치짐작은 안면 30명에게 이동
;SIF GETBIT (FLAG:701, 3)
;	SETBIT FLAG:호감도보너스취득상황, 4
SIF GETBIT (FLAG:701, 5)
	SETBIT FLAG:호감도보너스취득상황, 5
SIF GETBIT (FLAG:701, 9)
	SETBIT FLAG:호감도보너스취득상황, 6

;위치짐작
SIF GETBIT (FLAG:701, 3)
	SETBIT FLAG:안면보너스취득상황, 2
;집합
SIF GETBIT (FLAG:701, 10)
	SETBIT FLAG:안면보너스취득상황, 3

;천객만래는 안면에
SIF GETBIT (FLAG:701, 8)
	SETBIT FLAG:안면보너스취득상황, 5

SIF GETBIT (FLAG:701, 1)
	SETBIT FLAG:팬티보너스취득상황, 1
SIF GETBIT (FLAG:701, 16)
	SETBIT FLAG:팬티보너스취득상황, 2
SIF GETBIT (FLAG:701, 4)
	SETBIT FLAG:팬티보너스취득상황, 3
SIF GETBIT (FLAG:701, 13)
	SETBIT FLAG:팬티보너스취득상황, 4
SIF GETBIT (FLAG:701, 15)
	SETBIT FLAG:팬티보너스취득상황, 5
IF GETBIT (FLAG:701, 7)
	SETBIT FLAG:팬티보너스취득상황, 6
	SETBIT FLAG:팬티보너스취득상황, 8
ENDIF
;회복 빠름은 연인에
SIF GETBIT (FLAG:701, 6)
	SETBIT FLAG:함락보너스취득상황, 4
;연모 5명의 가시화는 생해금에
SIF GETBIT (FLAG:702, 10)
	SETBIT FLAG:함락보너스취득상황, 5

;시간경험 100으로부터 섹프에
SIF GETBIT (FLAG:702, 8)
	SETBIT FLAG:함락보너스취득상황, 6

;지설 3
SIF GETBIT (FLAG:702, 0)
	SETBIT FLAG:기능보너스취득상황, 1
;음유 5
SIF GETBIT (FLAG:702, 1)
	SETBIT FLAG:기능보너스취득상황, 2
;음호 5명
SIF GETBIT (FLAG:702, 2)
	SETBIT FLAG:기능보너스취득상황, 3
;항문광 5명
SIF GETBIT (FLAG:702, 3)
	SETBIT FLAG:기능보너스취득상황, 4
;키스마 5
SIF GETBIT (FLAG:702, 4)
	SETBIT FLAG:기능보너스취득상황, 5

SIF GETBIT (FLAG:702, 5)
	SETBIT FLAG:함락보너스취득상황, 1
;가시화는 보존하고 있지 않기 때문에 2는 스킵
SIF GETBIT (FLAG:702, 6)
	SETBIT FLAG:함락보너스취득상황, 3
SIF GETBIT (FLAG:702, 7)
	SETBIT FLAG:함락보너스취득상황, 4


code:
;FILTER용의 COMNAME 취득 함수
;우선 0~599의 범위에서 사용해주세요
@GET_COMNAME(ID_COM)
#FUNCTIONS
#DIM ID_COM
;파생 커맨드 용
SIF INRANGE(ID_COM, 500, 599)
	RETURNF STR:(1000 + ID_COM)
SIF INRANGE(ID_COM, 0, 499)
	RETURNF TRAINNAME:ID_COM
THROW 부정한 COM 번호가 건네받았던 {ID_COM}

@QUICKFILTER(ID_COM)
#FUNCTION
#DIM ID_COM
#DIM CONST BIT_V계       = 1
#DIM CONST BIT_A계       = 2
#DIM CONST BIT_봉사계     = 5
#DIM CONST BIT_SM계       = 6
#DIM CONST BIT_성희롱계 = 7
#DIM CONST BIT_가사계     = 9
#DIM CONST BIT_자위계     = 13  ;아마 사용하지 않다
SIF IS_COM_VAGINA(ID_COM)   && !CFLAG:TARGET:V언필터
	RETURNF 0
SIF IS_COM_ANAL(ID_COM)     && !CFLAG:TARGET:A언필터
	RETURNF 0
SIF IS_COM_HOUSI(ID_COM)    && !CFLAG:TARGET:봉사언필터
	RETURNF 0
SIF IS_COM_SM(ID_COM)       && !CFLAG:TARGET:SM언필터
	RETURNF 0
SIF IS_COM_KAJI(ID_COM)     && !FLAG:가사언필터
	RETURNF 0
SIF IS_COM_SEKUHARA(ID_COM) && !CFLAG:TARGET:성희롱언필터 && (!FLAG:70 || CFLAG:TARGET:344 == 1)
	RETURNF 0
;SIF IS_COM_ONANISM(ID_COM)  && !CFLAG:TARGET:자위 안필터
;	RETURNF 0
RETURNF 1

@필터표시
PRINT
CALL PRINTBUTTON_EX("[V]", 831,!CFLAG:TARGET:V언필터)
PRINTPLAIN
CALL PRINTBUTTON_EX("[A]", 832,!CFLAG:TARGET:A언필터)
PRINTPLAIN
CALL PRINTBUTTON_EX("[SM]", 836,!CFLAG:TARGET:SM언필터)
PRINTPLAIN
CALL PRINTBUTTON_EX("[봉사]", 835,!CFLAG:TARGET:봉사언필터)
PRINTPLAIN
;CALL PRINTBUTTON_EX("[자위]", 843,!CFLAG:TARGET:자위 안필터)
;PRINTPLAIN
CALL PRINTBUTTON_EX("[성희롱]", 837,!CFLAG:TARGET:성희롱언필터)
PRINTPLAIN
CALL PRINTBUTTON_EX("[가사]", 839,!FLAG:가사언필터)
PRINTPLAIN
CALL PRINTBUTTON_EX("[자동콘돔]",838,!CFLAG:자동고무)
PRINTL
PRINTL

;캐릭터라인 변수에 보존해 보았다
@OPTION_COMMAND_FILTER
#LOCALSIZE 600
#DIM ID_COM
CALL LOAD_COM_FILTER(LOCAL)
DRAWLINE
FOR ID_COM , 0, 600
	SIF !STRLENS(GET_COMNAME(ID_COM))
		CONTINUE
	CALL PRINTBUTTON_EXC(@"%GET_COMNAME(ID_COM)%[{ID_COM, 3}]", ID_COM, STRCOUNT(SAVESTR:0, @"/{ID_COM}/"))
NEXT
PRINTL
DRAWLINE
PRINTFORML [1101] - V필터     [1102] - A필터       [1103] - 봉사 필터
PRINTFORML [1104] - SM필터   [1105] - 성희롱필터 [1106] - 가사 필터
PRINTFORML [1111] - ALL 필터
PRINTFORML [2000] - USERCOM필터
PRINTFORML [3000] - 필터의 보존 [3001] - 필터의 독입
PRINTFORML [1000] - 결정
PRINTL
PRINTFORML [9999] - 리셋
PRINTL
INPUT
SELECTCASE RESULT
CASE 1000
	RETURN 0
CASE 9999
	SAVESTR:0 =
CASE 3000
	CALL SAVE_GLOBAL_COM_FILTER
CASE 3001
	CALL LOAD_GLOBAL_COM_FILTER
CASE 2000
	CALL SETUP_USERCOM_FILTER
CASE 1101
	CALL SET_FILTER_NG_VAGINA
CASE 1102
	CALL SET_FILTER_NG_ANAL
CASE 1103
	CALL SET_FILTER_NG_HOUSI
CASE 1104
	CALL SET_FILTER_NG_SM
CASE 1105
	CALL SET_FILTER_NG_SEKUHARA
CASE 1106
	CALL SET_FILTER_NG_KAJI
CASE 1111
	CALL SET_FILTER_NG_ALL
CASEELSE
	IF STRLENS(GET_COMNAME(RESULT))
		LOCAL:RESULT = !LOCAL:RESULT
		IF LOCAL:RESULT
			CALL ADD_COM_FILTER(RESULT)
		ELSE
			CALL DEL_COM_FILTER(RESULT)
			;SAVE_COM_FILTER(LOCAL)
		ENDIF
	ENDIF
ENDSELECT
RESTART

;필터에 NG인 COM 추가하는 함수
@ADD_COM_FILTER(NG_ID)
#DIM NG_ID
SIF SAVESTR:0 == ""
	SAVESTR:0 = /
SIF STRCOUNT(SAVESTR:0, @"/{NG_ID}/")
	RETURN
SAVESTR:0 += @"{NG_ID}/"

;필터로부터 NG인 COM 삭제하는 함수
;정규 표현이라든지 제대로 손댄 적 없지만 이것으로 움직이는 응?
@DEL_COM_FILTER(NG_ID)
#DIM NG_ID
SIF !STRCOUNT(SAVESTR:0, @"/{NG_ID}/")
	RETURN
SAVESTR:0 '= REPLACE(SAVESTR:0, @"%ESCAPE("/")%{NG_ID}%ESCAPE("/")%", ESCAPE("/"))

;REF 사용 COM_FILTER 보존 함수
;배열→캐릭터라인
;배열의 요소수가 600 미만이라고 화가 난다
@SAVE_COM_FILTER(NG_LIST)
#DIM REF NG_LIST
#DIM ID_COM
SAVESTR:0 = /
FOR ID_COM, 0, 600
	SIF !NG_LIST:ID_COM
		CONTINUE
	SIF STRCOUNT(SAVESTR:0, @"/{ID_COM}/")
		CONTINUE
	SAVESTR:0 += @"{ID_COM}/"
NEXT
;#;PRINTFORML SAVE_COM_FILTER：%SAVESTR:0%

;REF 사용 COM_FILTER독입함수
;캐릭터라인→배열
;배열의 요소수가 600 미만이라고 화가 난다
@LOAD_COM_FILTER(NG_LIST)
#DIM REF NG_LIST
#DIM ID_COM
VARSET NG_LIST
IF SAVESTR:0 == ""
	SAVESTR:0 = /
ELSE
	FOR ID_COM, 0, 600
		SIF STRCOUNT(SAVESTR:0, @"/{ID_COM}/")
			NG_LIST:ID_COM = 1
	NEXT
ENDIF
;#;PRINTFORML LOAD_COM_FILTER：%SAVESTR:0%

;NG캐릭터라인을 GLOBAL에 보존
@SAVE_GLOBAL_COM_FILTER
LOADGLOBAL
FOR LOCAL, 0, 3
	PRINTFORM [{LOCAL}] -
	IF STRLENS(GLOBALS:(LOCAL * 2 + 1))
		PRINTFORML [%GLOBALS:(LOCAL * 2 + 1)%]
	ELSE
		PRINTL ----------
	ENDIF
NEXT
PRINTL [100] - 돌아간다
INPUT
DO
	LOCAL = RESULT
	SIF RESULT == 100
		RETURN
	SIF !INRANGE(RESULT, 0, 2)
		CONTINUE
	SIF STRLENS(GLOBALS:(RESULT * 2 + 1))
		PRINTFORML 【%GLOBALS:(RESULT * 2 + 1)%】 이 데이터에 덧쓰기합니다
	PRINTL 커맨드필터의 이름을 등록해 주세요
	INPUTS
	GLOBALS:(LOCAL * 2 + 1) = %RESULTS%
	GLOBALS:(LOCAL * 2) = %SAVESTR:0%
	PRINTFORMW 커맨드필터【%GLOBALS:(LOCAL * 2 + 1)%】를 등록했습니다
	SAVEGLOBAL
	RETURN
LOOP 1

;NG캐릭터라인을 GLOBAL로부터 독입
@LOAD_GLOBAL_COM_FILTER
LOADGLOBAL
FOR LOCAL, 0, 3
	PRINTFORM [{LOCAL}] -
	IF STRLENS(GLOBALS:(LOCAL * 2 + 1))
		PRINTFORML [%GLOBALS:(LOCAL * 2 + 1)%]
	ELSE
		PRINTL ----------
	ENDIF
NEXT
PRINTL [100] - 돌아간다
INPUT
DO
	SIF RESULT == 100
		RETURN
	SIF !INRANGE(RESULT, 0, 2)
		CONTINUE
	PRINTFORMW 커맨드필터 【%GLOBALS:(RESULT * 2 + 1)%】를 읽어들였습니다
	SAVESTR:0 = %GLOBALS:(RESULT * 2)%
	RETURN
LOOP 1

;솔직히 사용하지 않는 생각이 든다
@SETUP_USERCOM_FILTER
CALL PRINTBUTTON_EXC("이력 표시[800]",             800, GETBIT(FLAG:USERCOM필터, 12))
CALL PRINTBUTTON_EXC("불결 표시[801]",             801, GETBIT(FLAG:USERCOM필터,  0))
CALL PRINTBUTTON_EXC("상대를 바꾼다[802]",         802, GETBIT(FLAG:USERCOM필터,  1))
CALL PRINTBUTTON_EXC("능력 표시[803]",             803, GETBIT(FLAG:USERCOM필터,  2))
CALL PRINTBUTTON_EXC("능력 표시(마스터)[804]", 804, GETBIT(FLAG:USERCOM필터,  3))
CALL PRINTBUTTON_EXC("자동 시간정지 이동[995]", 995, GETBIT(FLAG:USERCOM필터,  13))
CALL PRINTBUTTON_EXC("커맨드필터[809]",     809, GETBIT(FLAG:USERCOM필터, 11))
PRINTL
PRINTC 돌아오는 [0]
INPUT
SELECTCASE RESULT
CASE 0
	RETURN
CASE 801
	INVERTBIT FLAG:USERCOM필터, 0
CASE 802
	INVERTBIT FLAG:USERCOM필터, 1
CASE 803
	INVERTBIT FLAG:USERCOM필터, 2
CASE 804
	INVERTBIT FLAG:USERCOM필터, 3
CASE 809
	INVERTBIT FLAG:USERCOM필터, 11
	IF GETBIT (FLAG:USERCOM필터, 11)
		PRINTW 결정하면(자) 박수로[809]를 입력할까 OPTION로부터 나오지 않으면 되돌릴 수 없게 됩니다
		CLEARLINE 1
	ENDIF
CASE 800
	INVERTBIT FLAG:USERCOM필터, 12
CASE 995
	INVERTBIT FLAG:USERCOM필터, 13
ENDSELECT
CLEARLINE 3
RESTART

;V사용 커맨드 판정
;FLAG:1013, 1
@IS_COM_VAGINA(ID_COM)
#FUNCTION
#DIM ID_COM
SIF GROUPMATCH(ID_COM, 3, 44, 60, 61, 65, 67, 68, 71, 122, 141, 143, 185, 316, 369, 503, 504, 506, 507, 513)
	RETURNF 1
RETURNF 0

@SET_FILTER_NG_VAGINA
#DIM ID_COM
FOR ID_COM, 0, 600
	;V
	SIF !IS_COM_VAGINA(ID_COM)
		CONTINUE
	CALL ADD_COM_FILTER(ID_COM)
NEXT

;A사용 커맨드 판정
;FLAG:1013, 2
@IS_COM_ANAL(ID_COM)
#FUNCTION
#DIM ID_COM
SIF GROUPMATCH(ID_COM, 4, 5, 45, 62, 63, 66, 69, 70, 314, 142, 143, 146, 147, 148, 314, 369, 514, 515)
	RETURNF 1
RETURNF 0

@SET_FILTER_NG_ANAL
#DIM ID_COM
FOR ID_COM, 0, 600
	;A
	SIF !IS_COM_ANAL(ID_COM)
		CONTINUE
	CALL ADD_COM_FILTER(ID_COM)
NEXT

;봉사 커맨드 판정
;FLAG:1013, 5
@IS_COM_HOUSI(ID_COM)
#FUNCTION
#DIM ID_COM
SIF INRANGE(ID_COM, 80, 85) || GROUPMATCH(ID_COM, 120, 121, 140, 501, 505, 508, 509, 510, 511, 512)
	RETURNF 1
RETURNF 0

@SET_FILTER_NG_HOUSI
#DIM ID_COM
FOR ID_COM, 0, 600
	;HOUSI
	SIF !IS_COM_HOUSI(ID_COM)
		CONTINUE
	CALL ADD_COM_FILTER(ID_COM)
NEXT

;SM 커맨드 판정
;FLAG:1013, 6
@IS_COM_SM(ID_COM)
#FUNCTION
#DIM ID_COM
SIF INRANGE(ID_COM, 100, 119) || INRANGE(ID_COM, 140, 159)
	RETURNF 1
RETURNF 0

@SET_FILTER_NG_SM
#DIM ID_COM
FOR ID_COM, 0, 600
	;SM
	SIF !IS_COM_SM(ID_COM)
		CONTINUE
	CALL ADD_COM_FILTER(ID_COM)
NEXT

;성희롱 커맨드 판정
;FLAG:1013, 7
@IS_COM_SEKUHARA(ID_COM)
#FUNCTION
#DIM ID_COM
SIF INRANGE(ID_COM, 305, 316) || INRANGE(ID_COM, 560, 563) || GROUPMATCH(ID_COM, 325,326,330, 350, 352,368, 429)
	RETURNF 1
RETURNF 0

@SET_FILTER_NG_SEKUHARA
#DIM ID_COM
FOR ID_COM, 0, 600
	;성희롱
	SIF !IS_COM_SEKUHARA(ID_COM)
		CONTINUE
	CALL ADD_COM_FILTER(ID_COM)
NEXT

;가사 커맨드 판정
;FLAG:1013, 9
@IS_COM_KAJI(ID_COM)
#FUNCTION
#DIM ID_COM
SIF INRANGE(ID_COM, 410, 419) || GROUPMATCH(ID_COM, 403, 450)
	RETURNF 1
RETURNF 0

@SET_FILTER_NG_KAJI
#DIM ID_COM
FOR ID_COM, 0, 600
	SIF !IS_COM_KAJI(ID_COM)
		CONTINUE
	CALL ADD_COM_FILTER(ID_COM)
NEXT

;자위 커맨드 판정
;FLAG:1013, 13
@IS_COM_ONANISM(ID_COM)
#FUNCTION
#DIM ID_COM
SIF INRANGE(ID_COM, 700, 712) || INRANGE(ID_COM, 740, 752) || GROUPMATCH(ID_COM, 433)
	RETURNF 1
RETURNF 0

@SET_FILTER_NG_ONANISM
#DIM ID_COM
FOR ID_COM, 0, 600
	SIF !IS_COM_ONANISM(ID_COM)
		CONTINUE
	CALL ADD_COM_FILTER(ID_COM)
NEXT

;ALL 커맨드 판정
@SET_FILTER_NG_ALL
#DIM ID_COM
FOR ID_COM, 0, 600
	CALL ADD_COM_FILTER(ID_COM)
NEXT


code:
;옵션 설정 처리
@OPTION
LOCAL:1 = 0
DRAWLINEFORM =
FOR LOCAL, 0, 100
	SIF OPTION_SETNAME(LOCAL) == ""
		CONTINUE
	PRINTFORML [{LOCAL, 2}] - %OPTION_SETNAME(LOCAL), 30, RIGHT%：%RESULTS:1%
	LOCAL:1 ++
NEXT
DRAWLINEFORM －
PRINTFORML [94] - 오토신음일괄설정
PRINTFORML [95] - 간이 필터의 일괄 설정
PRINTFORML [96] - 요리의 옵션 설정
PRINTFORML [97] - 그림 상세 설정
PRINTFORML [98] - 등장캐릭터변환
PRINTFORML [99] - 커맨드필터
DRAWLINE
IF DAY > 120; 일판용 강하게 재시작. 한판에선 주석화되어 있었음
	PRINTFORML [200] - 바이쳐 더스트
	LOCAL:1 ++
ENDIF
PRINTFORML [100] - 설정 완료
INPUT
IF OPTION_SETNAME(RESULT) != ""
	CALL OPTION_SETTING(RESULT)
	CLEARLINE 11 + LOCAL:1
ELSEIF RESULT == 94
	CALL OPTION_오토신음일괄설정
ELSEIF RESULT == 95
	CALL 간이필터일괄설정
ELSEIF RESULT == 96
	CALL SET_OPTION_COOKING
ELSEIF RESULT == 97
	CALL OPTION_그림표시상세설정
ELSEIF RESULT == 98
	CALL 등장캐릭터변환
ELSEIF RESULT == 99
	CALL OPTION_COMMAND_FILTER
ELSEIF RESULT == 200; && DAY > 120
	PRINTFORML 시간을 날려버려서 1일째로 되돌아가겠습니까?
    PRINTL
    PRINTL [0] 「스위치」를 누르게 하지맛――
    PRINTL [1] 아냐! 한계다 누를래! 지금이닷!
    INPUT
    IF RESULT == 1
        CALL 강하게뉴게임
    ELSE
;		PRINTW 「스위치」를 누르는 건 멈추지 못했지만, 운 좋게도 옵션 선택까지밖에 돌아가지 않았다.
	ENDIF
ELSE
	RETURN
ENDIF
RESTART

@OPTION_SETNAME(ARG)
#FUNCTIONS
VARSET RESULTS
SELECTCASE ARG
CASE 0
	RESULTS:0 = 임신 유무※기본 OFF.
	IF FLAG:임신스위치
		RESULTS:1 = 임신한다 ※뭔가 발생했을 때 자기 책임으로
	ELSE
		RESULTS:1 = 임신하지 않는다
	ENDIF
CASE 1
	RESULTS:0 = 자식의성별
	SELECTCASE FLAG:자식의성별
	CASE 0
		RESULTS:1 = 랜덤
	CASE 1
		RESULTS:1 = 여자아이
	CASE 2
		RESULTS:1 = 남자아이
	ENDSELECT
CASE 2
	RESULTS:0 = 자식묘사
	IF FLAG:자식묘사
		RESULTS:1 = 있음
	ELSE
		RESULTS:1 = 없음
	ENDIF
CASE 3
	RESULTS:0 = 더부살이이벤트
	IF FLAG:더부살이이벤트
		RESULTS:1 = 없음
	ELSE
		RESULTS:1 = 있음
	ENDIF
CASE 4
	RESULTS:0 = 연회 발생
	IF FLAG:연회의유무
		RESULTS:1 = 있음
	ELSE
		RESULTS:1 = 없음
	ENDIF
CASE 5
	RESULTS:0 = 상대 쪽의 고백
	IF FLAG:고백금지
		RESULTS:1 = 고백하지 않는다
	ELSE
		RESULTS:1 = 고백한다
	ENDIF
CASE 6
	RESULTS:0 = 섹프계 함락에서 연모계 함락으로 변화
	IF FLAG:함락노선변화
		RESULTS:1 = 변화한다
	ELSE
		RESULTS:1 = 변화하지 않는다
	ENDIF
CASE 7
	RESULTS:0 = 이벤트로 [무지] 상실 발생
	IF FLAG:무지자동상실금지
		RESULTS:1 = 상실하지 않는다
	ELSE
		RESULTS:1 = 상실한다
	ENDIF
CASE 8
	RESULTS:0 = 텍스트 설정
	IF FLAG:정경텍스트설정 == 1 && FLAG:구상텍스트설정 == 2
		RESULTS:1 = 대사 텍스트＋정경 텍스트
	ELSEIF FLAG:정경텍스트설정 == 1 && FLAG:구상텍스트설정 == -1
		RESULTS:1 = 정경 텍스트만
	ELSEIF FLAG:정경텍스트설정 == 0 && FLAG:구상텍스트설정 == -1
		RESULTS:1 = 텍스트를 표시하지 않는다
	ENDIF
CASE 9
	RESULTS:0 = 대사색깔
	IF FLAG:대사색깔
		RESULTS:1 = 있음
	ELSE
		RESULTS:1 = 없음
	ENDIF
CASE 10
	RESULTS:0 = 불결도 표시
	IF FLAG:쓰레기표시OFF
		RESULTS:1 = 하지 않는다
	ELSE
		RESULTS:1 = 한다
	ENDIF
CASE 11
	RESULTS:0 = 카운터로 소질 변화
	IF FLAG:카운터지문제어
		RESULTS:1 = 소질이 변화한다
	ELSE
		RESULTS:1 = 변화하지 않는다
	ENDIF
CASE 12
	RESULTS:0 = 가슴 관련 텍스트 설정
	IF FLAG:Look표시용유방 == 1 && FLAG:Look표시용유두 == 1
		RESULTS:1 = 가슴 관련 전부 고정 묘사
	ELSEIF FLAG:Look표시용유방 == 1 && FLAG:Look표시용유두 == 0
		RESULTS:1 = 유방만 고정 묘사
	ELSEIF FLAG:Look표시용유방 == 0 && FLAG:Look표시용유두 == 1
		RESULTS:1 = 유두만 고정 묘사
	ELSEIF FLAG:Look표시용유방 == 0 && FLAG:Look표시용유두 == 0
		RESULTS:1 = 가슴 관련 랜덤 묘사
	ENDIF
CASE 13
	RESULTS:0 = 호의/이성의 벽 단축표시
	IF FLAG:호의이성단축
		RESULTS:1 = 단축한다
	ELSE
		RESULTS:1 = 단축하지 않는다
	ENDIF
CASE 14
	RESULTS:0 = 능력 표시 버튼 표기
	IF FLAG:능력표기
		RESULTS:1 = 숫자 표기
	ELSE
		RESULTS:1 = 기호 표기
	ENDIF
CASE 15
	RESULTS:0 = 턴마다 나오는 ABLUP 생략
	IF FLAG:ABLUP생략
		RESULTS:1 = 생략한다
	ELSE
		RESULTS:1 = 생략하지 않는다
	ENDIF
CASE 16
	RESULTS:0 = 첫키스 기록 상황 설정
	SELECTCASE FLAG:FK판정
	CASE 0
		RESULTS:1 = 키스만·자각했을 때만
	CASE 1
		RESULTS:1 = 키스만·미자각 포함
	CASE 2
		RESULTS:1 = 펠라 포함·자각했을 때만
	CASE 3
		RESULTS:1 = 펠라 포함·미자각 포함
	ENDSELECT
CASE 17
	RESULTS:0 = 이동시 멈춰 서기
	SELECTCASE FLAG:멈춰서기
	CASE 0
		RESULTS:1 = 무조건 멈춰 선다
	CASE 1
		RESULTS:1 = 대사가 존재할 경우에만
	CASE 2
		RESULTS:1 = 멈춰 서지 않는다
	ENDSELECT
CASE 18
	RESULTS:0 = 캐릭터 만남시 의뢰 표시
	IF FLAG:의뢰패스
		RESULTS:1 = 표시하지 않는다
	ELSE
		RESULTS:1 = 표시한다
	ENDIF
CASE 19
	RESULTS:0 = 소모품의 자동 구입
	IF FLAG:소모품자동구입
		RESULTS:1 = 한다
	ELSE
		RESULTS:1 = 하지 않는다
	ENDIF
CASE 20
	RESULTS:0 = 자동 시간정지 이동
	SELECTCASE FLAG:순간이동
	CASE 0
		RESULTS:1 = ＯＦＦ
	CASE 1
		RESULTS:1 = 외출지 산책시에만
	CASE 2
		RESULTS:1 = 거점내 이동시에만
	CASE 3
		RESULTS:1 = 외출지/거점내 양쪽 다
	ENDSELECT
CASE 21
	RESULTS:0 = 능력을 비교해서 덮쳐지지 않게 되는 판정
	IF FLAG:덮치기
		RESULTS:1 = 있음
	ELSE
		RESULTS:1 = 없음
	ENDIF
CASE 22
	RESULTS:0 = 경고장사용
	IF FLAG:경고장사용
		RESULTS:1 = 있음
	ELSE
		RESULTS:1 = 없음
	ENDIF
CASE 23
	RESULTS:0 = 내방모드
	SELECTCASE FLAG:교류내방모드
	CASE 0
		RESULTS:1 = 통상
	CASE 1 ;일판은 내방플래그.ERB 변경되어 50
		RESULTS:1 = 호감도 0은 내방하지 않는다
	CASE 2
		RESULTS:1 = 내방하지 않는다
	ENDSELECT
CASE 24
	RESULTS:0 = 탈의시 명령 선택
	SELECTCASE FLAG:탈의선택
	CASE 0
		RESULTS:1 = 매번 선택
	CASE 1
		RESULTS:1 = 전라
	CASE 2
		RESULTS:1 = 반라
	ENDSELECT
CASE 25
	RESULTS:0 = 시간정지 탈의시 팬티 처리
	SELECTCASE FLAG:팬티도둑
	CASE 0
		RESULTS:1 = 매번 선택
	CASE 1
		RESULTS:1 = 항상 훔친다
	CASE 2
		RESULTS:1 = 항상 벗기기만 할 뿐
	ENDSELECT
CASE 26
	RESULTS:0 = 일부 캐릭터의 니삭스 착용
	IF FLAG:니삭스착용
		RESULTS:1 = 있음
	ELSE
		RESULTS:1 = 없음
	ENDIF
CASE 27
	RESULTS:0 = 야한 속옷을 추가한다
	IF FLAG:섹시팬티추가
		RESULTS:1 = 추가한다
	ELSE
		RESULTS:1 = 추가하지 않는다
	ENDIF
CASE 28
	RESULTS:0 = 팬티 수집 상황 표시
	IF FLAG:팬티수집상황타입B
		RESULTS:1 = 미입수여도 표시한다
	ELSE
		RESULTS:1 = 미입수를 표시하지 않는다
	ENDIF
ENDSELECT
RETURNF RESULTS:0

@OPTION_SETTING(ARG)
SELECTCASE OPTION_SETNAME(ARG)
CASE "임신 유무※기본 OFF."
	FLAG:임신스위치 = !FLAG:임신스위치
CASE "텍스트 설정"
	IF FLAG:정경텍스트설정 == 1 && FLAG:구상텍스트설정 == 2
		FLAG:정경텍스트설정 = 1
		FLAG:구상텍스트설정 = -1
	ELSEIF FLAG:정경텍스트설정 == 1 && FLAG:구상텍스트설정 == -1
		FLAG:정경텍스트설정 = 0
		FLAG:구상텍스트설정 = -1
	ELSEIF FLAG:정경텍스트설정 == 0 && FLAG:구상텍스트설정 == -1
		FLAG:정경텍스트설정 = 1
		FLAG:구상텍스트설정 = 2
	ENDIF
CASE "소모품의 자동 구입"
	FLAG:소모품자동구입 = !FLAG:소모품자동구입
CASE "불결도 표시"
	FLAG:쓰레기표시OFF = !FLAG:쓰레기표시OFF
CASE "이동시 멈춰 서기"
	CALL 옵션바꿔치기("멈춰서기", 2)
CASE "능력을 비교해서 덮쳐지지 않게 되는 판정"
	FLAG:덮치기 = !FLAG:덮치기
CASE "자동 시간정지 이동"
	CALL 옵션바꿔치기("순간이동", 3)
CASE "더부살이이벤트"
	FLAG:더부살이이벤트 = !FLAG:더부살이이벤트
CASE "경고장사용"
	FLAG:경고장사용 = !FLAG:경고장사용
CASE "일부 캐릭터의 니삭스 착용"
	FLAG:니삭스착용 = !FLAG:니삭스착용
CASE "연회 발생"
	FLAG:연회의유무 = !FLAG:연회의유무
CASE "내방모드"
	CALL 옵션바꿔치기("교류내방모드", 2)
CASE "탈의시 명령 선택"
	CALL 옵션바꿔치기("탈의선택", 2)
CASE "시간정지 탈의시 팬티 처리"
	CALL 옵션바꿔치기("팬티도둑", 2)
CASE "대사 색깔 설정"
	FLAG:대사색깔 = !FLAG:대사색깔
CASE "가슴 관련 텍스트 설정"
	IF FLAG:Look표시용유방 == 1 && FLAG:Look표시용유두 == 1
		FLAG:Look표시용유방 = 1
		FLAG:Look표시용유두 = 0
	ELSEIF FLAG:Look표시용유방 == 1 && FLAG:Look표시용유두 == 0
		FLAG:Look표시용유방 = 0
		FLAG:Look표시용유두 = 1
	ELSEIF FLAG:Look표시용유방 == 0 && FLAG:Look표시용유두 == 1
		FLAG:Look표시용유방 = 0
		FLAG:Look표시용유두 = 0
	ELSEIF FLAG:Look표시용유방 == 0 && FLAG:Look표시용유두 == 0
		FLAG:Look표시용유방 = 1
		FLAG:Look표시용유두 = 1
	ENDIF
CASE "능력 표시 버튼 표기"
	FLAG:능력표기 = !FLAG:능력표기
CASE "카운터로 소질 변화"
	FLAG:카운터지문제어 = !FLAG:카운터지문제어
CASE "야한 속옷을 추가한다"
	FLAG:섹시팬티추가 = !FLAG:섹시팬티추가
	IF !FLAG:섹시팬티추가
		PRINTFORMW 환상향에 찾아든 야한 속옷 붐이 종식되었습니다
		PRINTL
		PRINTFORML 보유하고 있는 야한 속옷을 삭제하겠습니까?
		PRINTFORML 삭제 대상：스캔티, 훈도시, G스트링, 시스루 쇼츠, 오픈 쇼츠, 반창고, 드로워즈(가랑이 뚫림)
		PRINTL
		PRINTL [0] 이젠 필요 없어
		PRINTL [1] 소중히 보관한다
		INPUT
		IF RESULT == 0
			CALL DELETE_SEXYPANTS
			CLEARLINE 10
		ELSE
			CLEARLINE 8
		ENDIF
	ENDIF
CASE "섹프계 함락에서 연모계 함락으로 변화"
	FLAG:함락노선변화 = !FLAG:함락노선변화
CASE "상대 쪽의 고백"
	FLAG:고백금지 = !FLAG:고백금지
CASE "턴마다 나오는 ABLUP 생략"
	FLAG:ABLUP생략 = !FLAG:ABLUP생략
CASE "이벤트로 [무지] 상실 발생"
	FLAG:무지자동상실금지 = !FLAG:무지자동상실금지
CASE "호의/이성의 벽 단축표시"
	FLAG:호의이성단축 = !FLAG:호의이성단축
CASE "자식묘사"
	FLAG:자식묘사 = !FLAG:자식묘사
CASE "자식의성별"
	CALL 옵션바꿔치기("자식의성별", 2)
CASE "팬티 수집 상황 표시"
	FLAG:팬티수집상황타입B = !FLAG:팬티수집상황타입B
CASE "첫키스 기록 상황 설정"
	CALL 옵션바꿔치기("ＦＫ판정", 3)
CASE "캐릭터 만남시 의뢰 표시"
	FLAG:의뢰패스 = !FLAG:의뢰패스
ENDSELECT

@옵션바꿔치기(ARGS, ARG)
FLAG:ARGS ++
SIF FLAG:ARGS > ARG
	FLAG:ARGS = 0

@OPTION_오토신음일괄설정
CALL ASK_M("전원없음",1,"전원있음（천박함 없음）",1,"전원있음（천박함 있음）",1, "취소한다",1)
IF INRANGE(RESULT, 0, 2)
	FOR LOCAL,1,CHARANUM
		CFLAG:LOCAL:오토신음 = RESULT
	NEXT
	PRINTFORMW 일괄설정했습니다.
ENDIF

@등장캐릭터변환
PRINTL 　지정한 캐릭터가 등장하지 않도록 합니다. ("*"는 대사가 있는 캐릭터)
DRAWLINE
FOR LOCAL,1,CHARANUM
	SIF TALENT:LOCAL:스침
		CONTINUE
	SIF CFLAG:LOCAL:출금
		SETCOLOR C_D_RED
	RESULT = 0
	TRYCALLFORM M_KOJO_K{NO:LOCAL}
	PRINTFORMLC [{LOCAL, 3}] \@ RESULT ? * # \@%CALLNAME:LOCAL%
	RESETCOLOR
NEXT
PRINTL
DRAWLINE
PRINTFORML [999] 설정 종료　출연금지 캐릭터：{FLAG:출금인원수}명　[998]리셋
$LOOP
INPUT
IF RESULT >= 1 && RESULT <= CHARANUM
	IF CFLAG:RESULT:출금 && FLAG:역극 != RESULT
		CFLAG:RESULT:출금 = 0
		SIF CFLAG:RESULT:현재위치 == CFLAG:RESULT:초기위치 && CFLAG:RESULT:수면
			LOCK:(CFLAG:RESULT:초기위치) = 1
		FLAG:출금인원수 --
	ELSEIF TALENT:RESULT:스침
		PRINTFORMW 이 캐릭터는 출연금지를 해제할 수 없습니다
		GOTO LOOP
	ELSEIF FLAG:역극 == RESULT
		IF CFLAG:(FLAG:역극):출금 == 1
			PRINTFORML 현재 그 캐릭터의 역극 중이기에, %CALLNAME:RESULT%가 두 명 있게 됩니다만…
			PRINTL 그래도 등장시키겠습니까?
			PRINTL [0]네 [1]아니오
			INPUT
			IF RESULT == 0
				CFLAG:(FLAG:역극):출금 = 0
				SIF CFLAG:(FLAG:역극):현재위치 == CFLAG:(FLAG:역극):초기위치 && CFLAG:(FLAG:역극):수면
					LOCK:(CFLAG:(FLAG:역극):초기위치) = 1
				FLAG:출금인원수 --
				PRINTFORMW %CALLNAME:(FLAG:역극)%를 등장시킵니다
			ELSE
				GOTO LOOP
			ENDIF
		ELSE
			CFLAG:(FLAG:역극):출금 = 1
			SIF LOCK:(CFLAG:(FLAG:역극):초기위치) && CFLAG:(FLAG:역극):초기위치 < 100
				LOCK:(CFLAG:(FLAG:역극):초기위치) = 0
			FLAG:출금인원수 ++
		ENDIF
	ELSE
		CFLAG:RESULT:출금 = 1
		SIF LOCK:(CFLAG:RESULT:초기위치) && CFLAG:RESULT:초기위치 < 100
			LOCK:(CFLAG:RESULT:초기위치) = 0
		FLAG:출금인원수 ++
	ENDIF
	RESTART
ELSEIF RESULT == 999
	PRINTW 설정 종료했습니다.
ELSEIF RESULT == 998
	FOR LOCAL,1,CHARANUM
		SIF FLAG:역극 == LOCAL
			CONTINUE
		SIF TALENT:LOCAL:스침
			CONTINUE
		CFLAG:LOCAL:출금 = 0
	NEXT
	FLAG:출금인원수 = 0
	RESTART
ELSE
	GOTO LOOP
ENDIF

;간이 필터 제어 함수
;사양상의 문제로서 설정 항목이 너무 증가하면 설계를 다시 할 필요가 있다
@간이필터일괄설정
#DIM OP_CFLAG_V언필터
#DIM OP_CFLAG_A언필터
#DIM OP_CFLAG_SM언필터
#DIM OP_CFLAG_봉사언필터
#DIM OP_CFLAG_성희롱언필터
#DIM OP_SETTING
IF !LOCAL
	OP_CFLAG_V언필터       = GETNUM(CFLAG, "V언필터")
	OP_CFLAG_A언필터       = GETNUM(CFLAG, "A언필터")
	OP_CFLAG_SM언필터     = GETNUM(CFLAG, "SM언필터")
	OP_CFLAG_봉사언필터     = GETNUM(CFLAG, "봉사언필터")
	OP_CFLAG_성희롱언필터 = GETNUM(CFLAG, "성희롱언필터")
	LOCAL ++
ENDIF
PRINTFORML ～간이 필터 설정～
PRINTFORML ※개별적인 커맨드필터는 이것과는 별도로 설정되어 있습니다
PRINTFORML
PRINTFORML [29] 전 캐릭터의 모든 간이 필터 오프
PRINTFORML [28] 전 캐릭터별 [V]를 개방
PRINTFORML [27] 전 캐릭터별 [A]를 개방
PRINTFORML [26] 전 캐릭터별 [SM]를 개방
PRINTFORML [25] 전 캐릭터별 [봉사]를 개방
PRINTFORML [24] 전 캐릭터별 [성희롱]을 개방
PRINTFORML [23] [가사]를 개방
PRINTFORML
PRINTFORML [19] 전 캐릭터의 모든 간이 필터 온
PRINTFORML [18] 전 캐릭터별 [V]를 제한
PRINTFORML [17] 전 캐릭터별 [A]를 제한
PRINTFORML [16] 전 캐릭터별 [SM]를 제한
PRINTFORML [15] 전 캐릭터별 [봉사]를 제한
PRINTFORML [14] 전 캐릭터별 [성희롱]을 제한
PRINTFORML [13] [가사]를 제한
PRINTFORML
PRINTFORML [99] 설정 종료
DO
	INPUT
	OP_SETTING = (RESULT / 10) - 1
	;20그리고 1, 10으로 0
	SELECTCASE RESULT
	CASE 29, 19
		CVARSET CFLAG, OP_CFLAG_V언필터, OP_SETTING
		CVARSET CFLAG, OP_CFLAG_A언필터, OP_SETTING
		CVARSET CFLAG, OP_CFLAG_SM언필터, OP_SETTING
		CVARSET CFLAG, OP_CFLAG_봉사언필터, OP_SETTING
		CVARSET CFLAG, OP_CFLAG_성희롱언필터, OP_SETTING
		FLAG:가사언필터 = OP_SETTING
		IF OP_SETTING
			PRINTFORMW 전 캐릭터의 모든 간이 필터를 ＜OFF＞했습니다
		ELSE
			PRINTFORMW 전 캐릭터의 모든 간이 필터를 ＜ON＞했습니다
		ENDIF
	CASE 28, 18
		CVARSET CFLAG, OP_CFLAG_V언필터, OP_SETTING
		IF OP_SETTING
			PRINTFORMW 전 캐릭터별 [V] 커맨드를 ＜개방＞합니다
		ELSE
			PRINTFORMW 전 캐릭터별 [V] 커맨드를 ＜제한＞합니다
		ENDIF
	CASE 27, 17
		CVARSET CFLAG, OP_CFLAG_A언필터, OP_SETTING
		IF OP_SETTING
			PRINTFORMW 전 캐릭터별 [A] 커맨드를 ＜개방＞합니다
		ELSE
			PRINTFORMW 전 캐릭터별 [A] 커맨드를 ＜제한＞합니다
		ENDIF
	CASE 26, 16
		CVARSET CFLAG, OP_CFLAG_SM언필터, OP_SETTING
		IF OP_SETTING
			PRINTFORMW 전 캐릭터별 [SM] 커맨드를 ＜개방＞합니다
		ELSE
			PRINTFORMW 전 캐릭터별 [SM] 커맨드를 ＜제한＞합니다
		ENDIF
	CASE 25, 15
		CVARSET CFLAG, OP_CFLAG_봉사언필터, OP_SETTING
		IF OP_SETTING
			PRINTFORMW 전 캐릭터별 [봉사] 커맨드를 ＜개방＞합니다
		ELSE
			PRINTFORMW 전 캐릭터별 [봉사] 커맨드를 ＜제한＞합니다
		ENDIF
	CASE 24, 14
		CVARSET CFLAG, OP_CFLAG_성희롱언필터, OP_SETTING
		IF OP_SETTING
			PRINTFORMW 전 캐릭터별 [성희롱] 커맨드를 ＜개방＞합니다
		ELSE
			PRINTFORMW 전 캐릭터별 [성희롱] 커맨드를 ＜제한＞합니다
		ENDIF
	CASE 23, 13
		FLAG:가사언필터 = OP_SETTING
		IF OP_SETTING
			PRINTFORMW 가사 커맨드를 ＜개방＞합니다
		ELSE
			PRINTFORMW 가사 커맨드를 ＜제한＞합니다
		ENDIF
	CASE 99
		PRINTFORMW 간이 필터의 설정을 종료합니다
		RETURN
	CASEELSE
		PRINTFORML 무효인 입력입니다
		CONTINUE
	ENDSELECT
	BREAK
LOOP 1
RESTART

;---------------------------------------------------------------
;	그림 상세 설정
;	설정이 증가했으므로 신설
;---------------------------------------------------------------
@OPTION_그림표시상세설정
TARGET = [[레이무]]
FOR LOCAL, 1, 11
	TARGET:LOCAL = LOCAL
NEXT
PRINTL ▼샘플▼
CALL PRINT_TARGET_IMAGE(TARGET)
PRINTL
PRINTFORML [ 0] - 화상설정을 \@ FLAG:화상설정 ? 한다 # 안한다 \@
IF FLAG:화상설정
	PRINTFORML [ *]┬ 현재의 \@ FLAG:스탠딩종류 ? 얼굴 그림 # 스탠딩 \@의 표시 인원수 {FLAG:그림표시}인 화상사이즈{100 + isModifier}％
	PRINTFORML [ 1]├ 늘린다
	PRINTFORML [ 2]└ 줄인다
	PRINTFORML [ 3] - 캐릭터 그림의 타입 \@ FLAG:스탠딩종류 ? [얼굴] # [스탠딩] \@
	PRINTFORML [ 4]\@ FLAG:그림표시 ? ┬ # %" "%- \@ 삽화를 표시한다 \@ FLAG:삽화표시 ? ON # OFF \@
	IF FLAG:그림표시
		PRINT [ 5]└ 사정 그림의 종류
		SELECTCASE FLAG:사정화상종류
			CASE 0
				PRINTL  [단면＋효과음]
			CASE 1
				PRINTL  [단면만]
			CASE 2
				PRINTL  [효과음만]
		ENDSELECT
	ELSE
		PRINTL
	ENDIF
	PRINTFORML [ 6]\@ FLAG:애니메이션 ? ┬ # %" "%- \@애니메이션 설정 \@ FLAG:애니메이션 ? 반복 회수 {FLAG:애니메이션}회 # OFF \@
	IF FLAG:애니메이션
		PRINTFORML [ 7]└삽입중에는 매턴 애니메이션 표시：\@FLAG:삽입애니메이션필터 & 아니메필터_삽입 ? [×]# [0]\@
	ELSE
		PRINTL
	ENDIF
	PRINTFORML [ 8] - \@ FLAG:스탠딩종류 ? 얼굴 그림 # 스탠딩 \@의 표시 위치 [\@ FLAG:그림표시위치 ? 왼쪽 맞춤# 중앙 공격 \@]
	PRINTFORML [ 9] - 그림 표시에 테두리를 친다 \@ FLAG:화상범위표시 ? ON # OFF \@
	PRINTFORML [10] - 화상 확대
	PRINTFORML [11] - 화상 축소
	PRINTFORML [12] - \@ FLAG:거유차이표시? 거유 이상의 별도 화상이 있는 캐릭터라면 표시한다# 거유차이를 표시하지 않는다\@
ELSE
	FOR LOCAL, 1, 13
		PRINTL
	NEXT
ENDIF
PRINTFORML [999] - 돌아간다
INPUT
IF RESULT == 999
	VARSET TARGET
	RETURN 0
ELSEIF RESULT == 0
	FLAG:그림표시 = !FLAG:그림표시
ELSEIF RESULT == 1
	FLAG:그림표시++
	SIF FLAG:그림표시 > 10
		FLAG:그림표시 = 10
ELSEIF RESULT == 2
	FLAG:그림표시--
	SIF FLAG:그림표시 < 1
		FLAG:그림표시 = 1
ELSEIF RESULT == 3
	FLAG:스탠딩종류 = !FLAG:스탠딩종류
ELSEIF RESULT == 4
	FLAG:삽화표시 = !FLAG:삽화표시
ELSEIF RESULT == 5 && FLAG:삽화표시
	FLAG:사정화상종류++
	SIF FLAG:사정화상종류 >= 3
		FLAG:사정화상종류 = 0
ELSEIF RESULT == 6
	FLAG:애니메이션++
	SIF FLAG:애니메이션 >= 6
		FLAG:애니메이션 = 0
ELSEIF RESULT == 7
	INVERTBIT FLAG:삽입애니메이션필터, 0
	;CALL ASK_M("삽입 표시 전환", 1,"절정 표시 전환", 1,"사정 표시 전환", 1,"사정 표시 전환", 1,"돌아간다", 1)
	;SIF RESULT == 4
	;	RESTART
	;INVERTBIT FLAG:가사언필터, RESULT
	RESTART
ELSEIF RESULT == 8
	FLAG:그림표시위치 = !FLAG:그림표시위치
ELSEIF RESULT == 9
	FLAG:화상범위표시 = !FLAG:화상범위표시
ELSEIF RESULT == 10
	isModifier = MIN(isModifier + 10, 50)
ELSEIF RESULT == 11
	isModifier = MAX(isModifier - 10, -50)
ELSEIF RESULT == 12
	FLAG:거유차이표시 = !FLAG:거유차이표시
ENDIF
RESTART

;요리 옵션 설정 함수
;0:수동 결정,1:이물 불가,2:약물 불가
@SET_OPTION_COOKING
#DIM CONST OP_BIT_수동결정 = 0
#DIM CONST OP_BIT_이물불가 = 1
#DIM CONST OP_BIT_약물불가 = 2
#DIM CONST OP_BIT_채점온 = 3
PRINTFORML 요리 관련의 옵션을 설정합니다
PRINTFORML 현재의 설정
IF GET_OPTION_COOKING("요리 내용 수동 결정")
	PRINTFORML 　요리 내용：수동으로 결정
ELSE
	PRINTFORML 　요리 내용：자동으로 결정
ENDIF
IF GET_OPTION_COOKING("이물 혼입 불가")
	PRINTFORML 　이물 혼입：하지 않는다
ELSE
	PRINTFORML 　이물 혼입：한다
ENDIF
IF GET_OPTION_COOKING("약물 혼입 불가")
	PRINTFORML 　약물 혼입：하지 않는다
ELSE
	PRINTFORML 　약물 혼입：한다
ENDIF
SELECTCASE GET_OPTION_COOKING("자동 맛내기 설정")
CASE 0
	PRINTFORML 　자동 맛내기：하지 않는다
CASE 10
	PRINTFORML 　자동 맛내기：자동으로 보통 맛
CASE 11
	PRINTFORML 　자동 맛내기：자동으로 진한 맛
CASE 12
	PRINTFORML 　자동 맛내기：자동으로 담백한 맛
ENDSELECT
IF GET_OPTION_COOKING("채점 기능 오프")
	PRINTFORML 　채점 기능：오프
ELSE
	PRINTFORML 　채점 기능：온
ENDIF
DO
	PRINTFORML [9] 요리 내용의 설정 변경
	PRINTFORML [8] 이물 혼입의 설정 변경
	PRINTFORML [7] 약물 혼입의 설정 변경
	PRINTFORML [6] 자동 맛내기의 설정 변경
	PRINTFORML [5] 채점 기능의 설정 변경
	PRINTFORML
	PRINTFORML
	PRINTFORML [0] 결정
	INPUT
	SELECTCASE RESULT
	CASE 9
		INVERTBIT FLAG:요리옵션, OP_BIT_수동결정
	CASE 8
		INVERTBIT FLAG:요리옵션, OP_BIT_이물불가
	CASE 7
		INVERTBIT FLAG:요리옵션, OP_BIT_약물불가
	CASE 6
		PRINTFORML 자동 맛내기 기능의 설정
		PRINTFORML [12] 자동 맛내기 ＜담백한 맛＞
		PRINTFORML [11] 자동 맛내기 ＜진한 맛＞
		PRINTFORML [10] 자동 맛내기 ＜보통 맛＞
		PRINTFORML [ 0] 자동 맛내기를 사용하지 않는다
		DO
			INPUT
			SELECTCASE RESULT
			CASE 10, 11, 12
				CLEARBIT FLAG:요리옵션, 10, 11, 12
				SETBIT   FLAG:요리옵션, RESULT
			CASE 0
				CLEARBIT FLAG:요리옵션, 10, 11, 12
			CASEELSE
			PRINTFORML 무효인 입력입니다
			CONTINUE
			ENDSELECT
			BREAK
		LOOP 1
	CASE 5
		INVERTBIT FLAG:요리옵션, OP_BIT_채점온
	CASE 0
		RETURN
	CASEELSE
		PRINTFORML 무효인 입력입니다
		CONTINUE
	ENDSELECT
	BREAK
LOOP 1
RESTART

;요리옵션의 내용 취득 함수
@GET_OPTION_COOKING(TYPE)
#FUNCTION
#DIMS DYNAMIC TYPE
#DIM CONST OP_BIT_수동결정 = 0
#DIM CONST OP_BIT_이물혼입불가 = 1
#DIM CONST OP_BIT_약물혼입불가 = 2
#DIM CONST OP_BIT_채점기능온 = 3
#DIM CONST OP_BIT_자동맛내기_보통 = 10
#DIM CONST OP_BIT_자동맛내기_진한 = 11
#DIM CONST OP_BIT_자동맛내기_얇은 = 12
SELECTCASE TYPE
CASE "요리 내용 수동 결정"
	SIF GETBIT(FLAG:요리옵션, OP_BIT_수동결정)
		RETURNF 1
CASE "요리 내용 자동 결정"
	RETURNF !GET_OPTION_COOKING("요리 내용 수동 결정")

CASE "이물 혼입 불가"
	SIF GETBIT(FLAG:요리옵션, OP_BIT_이물혼입불가)
		RETURNF 1
CASE "이물 혼입 가능"
	RETURNF !GET_OPTION_COOKING("이물 혼입 불가")

CASE "약물 혼입 불가"
	SIF GETBIT(FLAG:요리옵션, OP_BIT_약물혼입불가)
		RETURNF 1
CASE "약물 혼입 가능"
	RETURNF !GET_OPTION_COOKING("약물 혼입 불가")
CASE "자동 맛내기 설정"
	SIF GETBIT(FLAG:요리옵션, OP_BIT_자동맛내기_보통)
		RETURNF OP_BIT_자동맛내기_보통
	SIF GETBIT(FLAG:요리옵션, OP_BIT_자동맛내기_진한)
		RETURNF OP_BIT_자동맛내기_진한
	SIF GETBIT(FLAG:요리옵션, OP_BIT_자동맛내기_얇은)
		RETURNF OP_BIT_자동맛내기_얇은
CASE "채점 기능 온"
	SIF GETBIT(FLAG:요리옵션, OP_BIT_채점기능온)
		RETURNF 1
CASE "채점 기능 오프"
	RETURNF !GET_OPTION_COOKING("채점 기능 온")
CASEELSE
	THROW 불명한 TYPE%TYPE%
ENDSELECT
RETURNF 0

@SIMATTYAUOJISAN
;TW414_이동 패치에서 오른쪽 클릭이나 매크로에 의한 스킵도 끝내버리도록 수정
;PRINT에서의 웨이트를 없애는 대신에 FORCEWAIT로 스킵 해제하도록
;
FORCEWAIT
PRINT 「화면상에 표시되지 않는 숫자를 입력한 아이가 여기 있어?」
FORCEWAIT
PRINT 치워버리자 아저씨가 나타났다!
FORCEWAIT
PRINT 「자, 화면상에 표시되지 않는 숫자를 입력한 아이의 돈은, 자꾸자꾸 치워버릴 거란다」
FORCEWAIT
PRINTFORM 치워버리자 아저씨는 %CALLNAME:MASTER%의 있는 돈을 모조리 치워버렸다
MONEY = 0
FORCEWAIT
PRINT 「화면상에 표시되지 않는 숫자를 입력하는 아이의 아이템도, 자꾸자꾸 치워버릴 거란다」
FORCEWAIT
PRINTFORM %CALLNAME:MASTER%의 아이템은 치워져버렸다
FOR LOCAL, 0,500
	ITEM:LOCAL = 0
NEXT
FORCEWAIT
PRINT 「화면상에 표시되지 않는 숫자를 입력하는 아이의 기교도, 자꾸자꾸 치워버릴 거란다」
FORCEWAIT
PRINTFORM %CALLNAME:MASTER%의 기교는 치워져버렸다
FORCEWAIT
FOR LOCAL, 0,100
	ABL:0:LOCAL = 0
NEXT
PRINT 「화면상에 표시되지 않는 숫자를 입력하는 아이의 경험도, 자꾸자꾸 치워버릴 거란다」
FORCEWAIT
PRINTFORM %CALLNAME:MASTER%의 경험은 치워져버렸다
FORCEWAIT
FOR LOCAL, 0,100
	EXP:0:LOCAL = 0
NEXT
;하는 김에 콜렉션도 치워버리자(eraTW4.15 팬티 대책 패치에서 추가)
;
PRINT 「화면상에 표시되지 않는 숫자를 입력하는 아이의 팬티 콜렉션도, 자꾸자꾸 치워버릴 거란다」
FORCEWAIT
PRINTFORM %마스터가% 정성들여 수집한, 주옥같은 팬티 콜렉션은 치워져버렸다
FORCEWAIT
FLAG:700 = 0
FOR LOCAL, 1, CHARANUM
	FOR LOCAL:1, 0, MAXPANTS
		CFLAG:LOCAL:(LOCAL:1 + 팬티관리) = 0
	NEXT
NEXT
PRINT 「화면상에 표시되지 않는 숫자를 입력하는 아이의 신뢰도, 자꾸자꾸 치워버릴 거란다」
FORCEWAIT
PRINTFORM %CALLNAME:MASTER%에게 소녀들이 보내는 신뢰는 치워져버렸다
FOR LOCAL, 1, CHARANUM
	CFLAG:LOCAL:신뢰도 = 0
NEXT
FORCEWAIT
;
;
;PRINT 「화면상에 표시되지 않는 숫자를 입력하는 아이의 기초 능력도, 자꾸자꾸 치워버릴 거란다」
;FORCEWAIT
;PRINTFORM %CALLNAME:MASTER%의 기초 능력은 치워져버렸다
;FOR LOCAL, 0,9
;	MAXBASE:0:LOCAL = 99
;	BASE:0:LOCAL = min(MAXBASE:0:LOCAL, BASE:0:LOCAL)
;NEXT
;과연 너무 하고 는 좋지 않다고 생각했으므로 클릭 연타로 용서(허락)해 보았다
;작자님에게 마음대로 맞힌 패치이므로 불쾌하다면 이 부분만큼 패치 앞에 되돌려 주셔 상관하지 않습니다.
;
;
FORCEWAIT
PRINTW 다 망했어∼~~~

;섹시 팬티 삭제
@DELETE_SEXYPANTS
#DIM 대상
#DIM 종류
#DIM 소유수

VARSET RESULT

FOR 대상, 1, CHARANUM
	FOR 종류, 20,26
		소유수 = CFLAG:대상:(종류 + 100)
		IF 소유수 >= 1
			RESULT:0 += (소유수)
			CFLAG:대상:(종류 + 100) = 0
		ENDIF
	NEXT
NEXT

;바이브 팬티 삭제
@DELETE_VIBEPANTS
#DIM 대상
#DIM 종류
#DIM 소유수

VARSET RESULT

FOR 대상, 1, CHARANUM
	FOR 종류, 27,30
		소유수 = CFLAG:대상:(종류 + 100)
		IF 소유수 >= 1
			RESULT:0 += (소유수)
			CFLAG:대상:(종류 + 100) = 0
		ENDIF
	NEXT
NEXT

;이하 TWKR 고유 또는 구버전. 디버그약점잡힘삭제와 NAME_CHANGEF 모두 선택 불가했음
;디버그용약점잡힘삭제
@디버그약점잡힘삭제
#DIM  O_ID
FOR O_ID, 1, CHARANUM
	PRINTFORML %CALLNAME:O_ID%의 현재 약점잡음 : {CFLAG:O_ID:약점잡음}
	CFLAG:O_ID:약점잡음=0
NEXT

;이름을 한글로 바꾼다
@NAME_CHANGEF
#DIM  O_ID
#DIMS V_NAME
;FOR O_ID, 1, CHARANUM
;	PRINTFORML NAME:{O_ID}=%NAME:O_ID%
;	PRINTFORML CALLNAME:{O_ID}=%CALLNAME:O_ID%
;NEXT

NAME:1=하쿠레이 레이무
CALLNAME:1=레이무
NAME:2=루코토
CALLNAME:2=루코토
NAME:3=카나 아나베랄
CALLNAME:3=카나
NAME:4=미마
CALLNAME:4=미마
NAME:5=서니 밀크
CALLNAME:5=서니
NAME:6=루나 차일드
CALLNAME:6=루나
NAME:7=스타 사파이어
CALLNAME:7=스타
NAME:8=키타시라카와 치유리
CALLNAME:8=치유리
NAME:9=오카자키 유메미
CALLNAME:9=유메미
NAME:10=이부키 스이카
CALLNAME:10=스이카
NAME:11=키리사메 마리사
CALLNAME:11=마리사
NAME:12=루미아
CALLNAME:12=루미아
NAME:13=대요정
CALLNAME:13=대요정
NAME:14=치르노
CALLNAME:14=치르노
NAME:15=이자요이 사쿠야
CALLNAME:15=사쿠야
NAME:16=레밀리아 스칼렛
CALLNAME:16=레밀리아
NAME:17=앨리스 마가트로이드
CALLNAME:17=앨리스
NAME:18=릴리 화이트
CALLNAME:18=릴리W
NAME:19=릴리 블랙
CALLNAME:19=릴리B
NAME:20=리리카 프리즘리버
CALLNAME:20=리리카
NAME:21=메를랑 프리즘리버
CALLNAME:21=메를랑
NAME:22=루나사 프리즘리버
CALLNAME:22=루나사
NAME:23=콘파쿠 요우무
CALLNAME:23=요우무
NAME:24=첸
CALLNAME:24=첸
NAME:25=야쿠모 란
CALLNAME:25=란
NAME:26=야쿠모 유카리
CALLNAME:26=유카리
NAME:27=리글 나이트버그
CALLNAME:27=리글
NAME:28=미스티아 로렐라이
CALLNAME:28=미스티아
NAME:29=샤메이마루 아야
CALLNAME:29=아야
NAME:30=시키 에이키
CALLNAME:30=에이키
NAME:31=코치야 사나에
CALLNAME:31=사나에
NAME:32=야사카 카나코
CALLNAME:32=카나코
NAME:33=모리야 스와코
CALLNAME:33=스와코
NAME:34=히나나위 텐시
CALLNAME:34=텐시
NAME:35=나가에 이쿠
CALLNAME:35=이쿠
NAME:36=카엔뵤 린
CALLNAME:36=린
NAME:37=레이우지 우츠호
CALLNAME:37=우츠호
NAME:38=코메이지 코이시
CALLNAME:38=코이시
NAME:39=나즈린
CALLNAME:39=나즈린
NAME:40=타타라 코가사
CALLNAME:40=코가사
NAME:41=호쥬 누에
CALLNAME:41=누에
NAME:42=히메카이도 하타테
CALLNAME:42=하타테
NAME:43=이바라키 카센
CALLNAME:43=카센
NAME:44=폭신폭신 엘렌
CALLNAME:44=엘렌
NAME:45=아사쿠라 리카코
CALLNAME:45=리카코
NAME:46=메이라
CALLNAME:46=메이라
NAME:47=리카
CALLNAME:47=리카
NAME:48=루이즈
CALLNAME:48=루이즈
NAME:49=코메이지 사토리
CALLNAME:49=사토리
NAME:50=플랑드르 스칼렛
CALLNAME:50=플랑
NAME:51=카와시로 니토리
CALLNAME:51=니토리
NAME:52=레이센 우동게인 이나바
CALLNAME:52=레이센
NAME:53=이나바 테위
CALLNAME:53=테위
NAME:54=파츄리 널릿지
CALLNAME:54=파츄리
NAME:55=히지리 뱌쿠렌
CALLNAME:55=뱌쿠렌
NAME:56=토요사토미미노 미코
CALLNAME:56=미코
NAME:57=하타노 코코로
CALLNAME:57=코코로
NAME:58=홍 메이링
CALLNAME:58=메이링
NAME:59=소악마
CALLNAME:59=소악마
NAME:60=미즈하시 파르시
CALLNAME:60=파르시
NAME:61=후지와라노 모코우
CALLNAME:61=모코우
NAME:62=호라이산 카구야
CALLNAME:62=카구야
NAME:63=이마이즈미 카게로
CALLNAME:63=카게로
NAME:64=호시구마 유기
CALLNAME:64=유기
NAME:65=이누바시리 모미지
CALLNAME:65=모미지
NAME:66=사이교우지 유유코
CALLNAME:66=유유코
NAME:67=카미시라사와 케이네
CALLNAME:67=케이네
NAME:68=카자미 유카
CALLNAME:68=유카
NAME:69=후타츠이와 마미조
CALLNAME:69=마미조
NAME:70=모토오리 코스즈
CALLNAME:70=코스즈
NAME:71=스쿠나 신묘마루
CALLNAME:71=신묘마루
NAME:72=야고코로 에이린
CALLNAME:72=에이린
NAME:73=세키반키
CALLNAME:73=반키
NAME:74=레티 화이트락
CALLNAME:74=레티
NAME:75=메디슨 멜랑콜리
CALLNAME:75=메디슨
NAME:76=오노즈카 코마치
CALLNAME:76=코마치
NAME:77=아키 시즈하
CALLNAME:77=시즈하
NAME:78=아키 미노리코
CALLNAME:78=미노리코
NAME:79=카기야마 히나
CALLNAME:79=히나
NAME:80=히에다노 아큐
CALLNAME:80=아큐
NAME:81=우사미 렌코
CALLNAME:81=렌코
NAME:82=마에리베리 한
CALLNAME:82=메리
NAME:83=키스메
CALLNAME:83=키스메
NAME:84=쿠로다니 야마메
CALLNAME:84=야마메
NAME:85=쿠모이 이치린
CALLNAME:85=이치린
NAME:86=무라사 미나미츠
CALLNAME:86=무라사
NAME:87=토라마루 쇼
CALLNAME:87=쇼
NAME:88=카소다니 쿄코
CALLNAME:88=쿄코
NAME:89=미야코 요시카
CALLNAME:89=요시카
NAME:90=곽청아
CALLNAME:90=청아
NAME:91=소가노 토지코
CALLNAME:91=토지코
NAME:92=모노노베노 후토
CALLNAME:92=후토
NAME:93=와카사기히메
CALLNAME:93=와카사기히메
NAME:94=츠쿠모 벤벤
CALLNAME:94=벤벤
NAME:95=츠쿠모 야츠하시
CALLNAME:95=야츠하시
NAME:96=호리카와 라이코
CALLNAME:96=라이코
NAME:97=키진 세이자
CALLNAME:97=세이자
NAME:98=와타츠키노 요리히메
CALLNAME:98=요리히메
NAME:99=와타츠키노 토요히메
CALLNAME:99=토요히메
NAME:100=레이센
CALLNAME:100=레이센
NAME:101=토키코
CALLNAME:101=토키코
NAME:102=신키
CALLNAME:102=신키
NAME:103=유메코
CALLNAME:103=유메코
NAME:104=유키
CALLNAME:104=유키
NAME:105=마이
CALLNAME:105=마이
NAME:106=우사미 스미레코
CALLNAME:106=스미레코
NAME:107=세이란
CALLNAME:107=세이란
NAME:108=링고
CALLNAME:108=링고
NAME:109=도레미 스위트
CALLNAME:109=도레미
NAME:110=키신 사구메
CALLNAME:110=사구메
NAME:111=클라운피스
CALLNAME:111=클라운피스
NAME:112=순호
CALLNAME:112=순호
NAME:113=헤카티아 라피스라줄리
CALLNAME:113=헤카티아
NAME:114=쿠루미
CALLNAME:114=쿠루미
NAME:115=엘리
CALLNAME:115=엘리
NAME:116=무게츠
CALLNAME:116=무게츠
NAME:117=겐게츠
CALLNAME:117=겐게츠
NAME:118=이터니티 라바
CALLNAME:118=라바
NAME:119=사카타 네무노
CALLNAME:119=네무노
NAME:120=코마노 아운
CALLNAME:120=아운
NAME:121=야타데라 나루미
CALLNAME:121=나루미
NAME:122=테이레이다 마이
CALLNAME:122=마이
NAME:123=니시다 사토노
CALLNAME:123=사토노
NAME:124=마타라 오키나
CALLNAME:124=오키나
NAME:125=요리가미 조온
CALLNAME:125=조온
NAME:126=요리가미 시온
CALLNAME:126=시온


code:
@SHOW_COLLECTION
DRAWLINE
CALL DISPLAY_ALL_COLLECTION
LOCAL = RESULT:0
FLAG:획득팬티총수 = RESULT:1
PRINTL
IF FLAG:팬티수집상황타입B == 0
	PRINTFORML 총수：{LOCAL}매종별：{FLAG:획득팬티총수}종 중복：{LOCAL - FLAG:획득팬티총수}매
ELSE
	PRINTFORML 총수：{LOCAL}매종별：{FLAG:획득팬티총수}/{RESULT:2}종 중복：{LOCAL - FLAG:획득팬티총수}매
ENDIF
PRINT [0] - 돌아간다
SIF LOCAL - FLAG:획득팬티총수
	PRINT [1] - 1장만 남기고 전부 매각한다
INPUT
IF RESULT == 1 && (LOCAL - FLAG:획득팬티총수) != 0
	CALL SPEND_COLLECTION
	PRINTFORMW 총 {RESULT:0}장 \\{100 * RESULT:0}로 팔렸습니다
	MONEY += 100 * RESULT:0
ELSE
	RETURN 0
ENDIF
RESTART

;전 콜렉션 표시
;인수	ARG:0	표시 대상	0=콜렉션	,1=소지
;		ARG:1	표시 종류	0=통상 표시		,1=선택
;반환값	RESULT:0	총수
;		RESULT:1	소유종류수
@DISPLAY_ALL_COLLECTION(ARG:0=0, ARG:1=0)
#DIM 대상
#DIM 총수
#DIM 소유종류수
#DIM 착용가능수

VARSET RESULT
총수 = 0
소유종류수 = 0
착용가능수 = 0

FOR 대상, 1, CHARANUM
	CALL CHECK_COLLECTION(대상, ARG:0)
	;한 장도 팬티 가지지 않은 캐릭터라도 착용가능수를 카운트 하기 위한(해)
	IF FLAG:팬티수집상황타입B && ARG:0 == 0
		PRINTL
		PRINTFORML 【%CALLNAME:대상%】
		CALL DISPLAY_COLLECTION_B(대상, ARG:0, ARG:1)
		총수 += RESULT:0
		소유종류수 += RESULT:1
		착용가능수 += RESULT:2
	ELSEIF RESULT:0 > 0
		PRINTL
		PRINTFORML 【%CALLNAME:대상%】
		CALL DISPLAY_COLLECTION(대상, ARG:0, ARG:1)
		총수 += RESULT:0
		소유종류수 += RESULT:1
	ENDIF
NEXT
RETURN 총수, 소유종류수, 착용가능수

;콜렉션 표시
;인수 대상 표시 대상ID
;		ARG:0	표시 대상	0=콜렉션	,1=소지
;		ARG:1	표시 종류	0=통상 표시		,1=선택
;반환값	RESULT:0	총수
;		RESULT:1	소유종류수
@DISPLAY_COLLECTION(대상, ARG:0=0, ARG:1=0)
#DIM 대상
#DIM 종류
#DIM 소유수
#DIM 개행용
#DIM 총수
#DIM 소유종류수
#DIM 하반신속옷확인보존
#DIM 파자마하반신속옷확인보존

VARSET RESULT
총수 = 0
소유종류수 = 0
개행용 = 0
하반신속옷확인보존 = CFLAG:대상:하반신속옷확인
파자마하반신속옷확인보존 = CFLAG:대상:파자마하반신속옷확인

FOR 종류, 0, MAXPANTS
	IF ARG:0 == 0
		소유수 = CFLAG:대상:(종류 + 팬티관리)
	ELSE
		;소유수 = STRCOUNT(CSTR:MASTER:12, CALLNAME:대상 + TOSTR(종류) + "/")
		소유수 = PANTS_TEMP:대상:종류
	ENDIF
	IF 소유수
		총수 += 소유수
		소유종류수 ++
		개행용 ++
		SIF LINEISEMPTY()
			PRINTFORM
		IF ARG:1 == 0
			PRINTFORM %PANTSNAME(종류, 대상), 22, LEFT%{소유수, 3}장
		ELSE
			LOCALS = [%PANTSNAME(종류, 대상)%]
			LOCALS = %LOCALS, 24, LEFT%{소유수, 3}장
			PRINTBUTTON LOCALS, (대상 * 100 + 종류)
			PRINTS "  "
		ENDIF
		IF 개행용 % 4 == 0 && 개행용
			PRINTL
			개행용 = 0
		ENDIF
	ENDIF
NEXT
SIF 개행용
	PRINTL

CFLAG:대상:하반신속옷확인 = 하반신속옷확인보존
CFLAG:대상:파자마하반신속옷확인 = 파자마하반신속옷확인보존

RETURN 총수, 소유종류수

;콜렉션 소비
;인수	ARG:0	소비 대상 종류	-1=1장 남기고 소비
;반환값	RESULT:0	소비수
@SPEND_COLLECTION(ARG=-1)
#DIM 대상
#DIM 종류
#DIM 소유수

VARSET RESULT

IF ARG == -1
	FOR 대상, 1, CHARANUM
		FOR 종류, 0, MAXPANTS
			소유수 = CFLAG:대상:(종류 + 팬티관리)
			IF 소유수 > 1
				RESULT:0 += (소유수 - 1)
				CFLAG:대상:(종류 + 팬티관리) = 1
			ENDIF
		NEXT
	NEXT
ELSE
	대상 = ARG / 100
	종류 = ARG % 100
	IF CFLAG:대상:(종류 + 팬티관리) >= 1
		RESULT:0 = 1
		CFLAG:대상:(종류 + 팬티관리) -= 1
	ENDIF
ENDIF

RETURN (RESULT:0)

;콜렉션 매수 확인
;인수	ARG:0		대상
;인수	ARG:1		표시 대상	0=콜렉션	,1=소지
;반환값	RESULT:0	총수
;		RESULT:1	종류수
@CHECK_COLLECTION(대상, ARG:1=0)
#DIM 대상
#DIM 종류
#DIM 소지수

VARSET RESULT

FOR 종류, 0, MAXPANTS
	IF ARG:1 == 0
		소지수 = CFLAG:대상:(종류 + 팬티관리)
	ELSE
		소지수 = PANTS_TEMP:대상:종류
	ENDIF
	IF 소지수
		RESULT:0 += 소지수
		RESULT:1 ++
	ENDIF
NEXT

RETURN RESULT:0, RESULT:1

;수중에 있는 콜렉션 1장 소비(DISPLAY_COLLECTION(1,1)와 병용)
;인수	ARG:0	소비 대상 종류
;반환값	RESULT:0	소비 판정
@SPEND_HAVE_COLLECTION(ARG)
#DIM 대상
#DIM 종류
#DIM 소유수
#DIM 소비플래그

VARSET LOCALS
VARSET RESULT
소유수 = 0
FOR 대상, 1, CHARANUM
	FOR 종류, 0, MAXPANTS
		;LOCALS:0 = %CALLNAME:대상%{종류}/
		;소유수 = STRCOUNT(CSTR:MASTER:12, LOCALS:0)
		;IF 소유수
		IF PANTS_TEMP:대상:종류
			소비플래그 = 0
			IF ARG != 0 && ARG == (대상 * 100 + 종류)
				소비플래그 = 1
				RESULT:0 = 1
				;팬티 플래그
				CFLAG:대상:293 = 0
				PANTS_TEMP:대상:종류 -= 1
			ENDIF
			;LOCALS:1 = %LOCALS:1 + LOCALS:0 * (소유수 - 소비플래그)%
		ENDIF
		SIF PANTS_TEMP:대상:종류
			소유수 += PANTS_TEMP:대상:종류
	NEXT
NEXT
SIF !소유수
	FLAG:팬티수송 = 0
;CSTR:MASTER:12 = %LOCALS:1%

RETURN (RESULT:0)

;콜렉션 표시 TypeB
;취득 가능한 팬티를 모두 표시
;인수 대상 표시 대상ID
;반환값	RESULT:0	총수
;	RESULT:1	소유종류수
;	RESULT:2	착용가능수
@DISPLAY_COLLECTION_B(대상, ARG:0=0, ARG:1=0)
#DIM 대상
#DIM 종류
#DIM 소유수
#DIM 개행용
#DIM 총수
#DIM 하반신속옷확인보존
#DIM 파자마하반신속옷확인보존
#DIM 소유종류수
#DIM 착용가능수
#DIM 조건있어
#DIMS 조건

VARSET RESULT
총수 = 0
하반신속옷확인보존 = CFLAG:대상:하반신속옷확인
파자마하반신속옷확인보존 = CFLAG:대상:파자마하반신속옷확인
소유종류수 = 0
개행용 = 0
착용가능수 = 0

;남성 용례외 처리
;일단 들어갈 수 있었지만 이것 실제로 작동하는 것 맞나?
IF TALENT:대상:성별  == 2
	FOR 종류, 0, MAXPANTS
		SIF !GET_INT(대상, "하반신속옷_비켜놓아가능", 종류, "남성 속옷")
			CONTINUE
		IF 소유수 > 0
			총수 += 소유수
			소유종류수 ++
		ELSE
			SETCOLOR C_GRAY
		ENDIF
		착용가능수 ++
		PRINTL
		SIF LINEISEMPTY()
			PRINTFORM
		PRINTFORM %COLLECTION_B_PANTS_STR(대상, 종류, 소유수)%
		RESETCOLOR
		IF 개행용 % 4 == 0 && 개행용
			PRINTL
			개행용 = 0
		ENDIF
	NEXT
	SIF 개행용
		PRINTL
	RETURN 총수, 소유종류수, 착용가능수
ENDIF

;이후, 여성과 뚜껑
FOR 종류, 0, MAXPANTS
	소유수 = CFLAG:대상:(종류 + 팬티관리)
	IF 소유수
		총수 += 소유수
		소유종류수 ++
		착용가능수 ++
		개행용 ++
		SIF 종류 == 18
			SETCOLOR C_H_PINK
	ELSE
		SIF !GET_INT(대상, "하반신속옷_비켜놓아가능", 종류, "콜렉션 표시 가능")
			CONTINUE
		착용가능수 ++
		개행용 ++
		SETCOLOR C_GRAY
	ENDIF
	SIF LINEISEMPTY()
		PRINTFORM
	PRINTFORM %COLLECTION_B_PANTS_STR(대상, 종류, 소유수)%
	RESETCOLOR
	IF 개행용 % 4 == 0 && 개행용
		PRINTL
		개행용 = 0
	ENDIF
NEXT
SIF 개행용
	PRINTL

CFLAG:대상:하반신속옷확인 = 하반신속옷확인보존
CFLAG:대상:파자마하반신속옷확인 = 파자마하반신속옷확인보존

RETURN 총수, 소유종류수, 착용가능수

;콜렉션 표시 캐릭터라인
@COLLECTION_B_PANTS_STR(대상, 종류, 소유수)
#FUNCTIONS
#DIM  대상
#DIM  종류
#DIM  소유수
#DIMS 조건
#DIMS 팬티캐릭터라인
IF 소유수
		팬티캐릭터라인 '= @"%PANTSNAME(종류, 대상), 22, LEFT%{LIMIT(소유수, 0, 999), 3}매" + "　"
ELSE
	조건 '= GET_STR(대상, "하반신속옷_비켜놓아가능", 종류, "콜렉션 해금 조건")
	IF 종류 == 18
		조건 '= "? "
		;부여 캐릭터라인은 「XXX장　」(으)로 전각3+반각 1
		팬티캐릭터라인 '= @"%조건, 22, LEFT%" + " " + "　" * 3
	ELSEIF STRLENS(조건)
		팬티캐릭터라인 '= @"%조건, 22, LEFT%" + " " + "　" * 3
	ELSE
		팬티캐릭터라인 '= @"%PANTSNAME(종류, 대상), 22, LEFT%" + " " + "　" * 3
	ENDIF
ENDIF
RETURNF 팬티캐릭터라인