code:
# конец_раунда
!The round ends, and all caused effects has been calculated

!gradually pass all current good and bad effects
i = -1
:loop
if i < количество_врагов:
	i += 1
	if слабость[i] > 0: слабость[i] -= 1
	if скованность[i] > 0:скованность[i] -= 1
	if боль[i] > 0:боль[i] -= 1
	if шаткость[i] > 0:шаткость[i] -= 1
	if ошеломление[i] > 0:ошеломление[i] -= 1
	if рассеянность[i] > 0:рассеянность[i] -= 1
	if бешенство[i] > 0:бешенство[i] -= 1
	if разгон[i] > 0:разгон[i] -= 1
	if меткость[i] > 0:меткость[i] -= 1
	if адреналин[i] > 0:адреналин[i] -= 1
	if верткость[i] > 0:верткость[i] -= 1
	if внимание[i] > 0:внимание[i] -= 1
	jump 'loop'
end

!make damage and create status effect
if $класс_врага[текущий] ! 'пешка':
	if $тип_нанесенного_вреда = 'психический':
		if тонкое_тело[$враг[текущий]] = 1: здоровье_врага[текущий] -= нанесенный_вред
		if бесстрашный[$враг[текущий]] = 0: дух_врага[текущий] -= нанесенный_вред
		дух_игрока += нанесенный_вред/2
		jump 'loop4'
	end
	if $тип_нанесенного_вреда = 'дробящий':
		if хрупкий[$враг[текущий]] = 1: здоровье_врага[текущий] -= нанесенный_вред
		if безустали[$враг[текущий]] = 0: выносливость_врага[текущий] -= нанесенный_вред
		if бесстрашный[$враг[текущий]] = 0: дух_врага[текущий] -= нанесенный_вред
		дух_игрока += нанесенный_вред/2
		jump 'loop4'
	end
	if бессмертный[$враг[текущий]] = 0: здоровье_врага[текущий] -= нанесенный_вред
	if безустали[$враг[текущий]] = 0: выносливость_врага[текущий] -= нанесенный_вред
	if бесстрашный[$враг[текущий]] = 0: дух_врага[текущий] -= нанесенный_вред
	дух_игрока += нанесенный_вред/2
end
:loop4
if $наложение = 'слабость':
	if слабость[текущий] <= длительность: слабость[текущий] = длительность
	if слабость[текущий] > длительность: слабость[текущий] += 1
end
if $наложение = 'скованность':
	if скованность[текущий] <= длительность: скованность[текущий] = длительность
	if скованность[текущий] > длительность: скованность[текущий] += 1
end
if $наложение = 'боль':
	if боль[текущий] <= длительность[i]: боль[текущий] = длительность
	if боль[текущий] > длительность[i]: боль[текущий] += 1
end
if $наложение = 'шаткость':
	if шаткость[текущий] <= длительность: шаткость[текущий] = длительность
	if шаткость[текущий] > длительность: шаткость[текущий] += 1
end
if $наложение = 'ошеломление':
	if ошеломление[текущий] <= длительность: ошеломление[текущий] = длительность
	if ошеломление[текущий] > длительность: ошеломление[текущий] += 1
end
if $наложение = 'рассеянность':
	if рассеянность[текущий] <= длительность: рассеянность[текущий] = длительность
	if рассеянность[текущий] > длительность: рассеянность[текущий] += 1
end
if $наложение = 'бешенство':
	if бешенство <= длительность: бешенство = длительность
	if бешенство > длительность: бешенство += 1
end
if $наложение = 'разгон':
	if разгон <= длительность: разгон = длительность
	if разгон > длительность: разгон += 1
end
if $наложение = 'меткость':
	if меткость <= длительность: меткость = длительность
	if меткость > длительность: меткость += 1
end
if $наложение = 'адреналин':
	if адреналин <= длительность: адреналин = длительность
	if адреналин > длительность: адреналин += 1
end
if $наложение = 'верткость':
	if верткость <= длительность: верткость = длительность
	if верткость > длительность: верткость += 1
end
if $наложение = 'внимание':
	if внимание <= длительность: внимание = длительность
	if внимание > длительность: внимание += 1
end

if это_суперудар = 1: dynamic $спецэффект_суперудара[$суперудар[супер]]
это_суперудар = 0

i = 0
:loop1
if i < количество_врагов:
	i += 1
	!Вред
	if враг[i] = 1:
		if $тип_нанесенного_вреда[i] = 'психический':
			дух_игрока -= cheat_fight_dif * нанесенный_вред[i]
			дух_врага[i] += нанесенный_вред[i]/2
			jump 'loop2'
		end
		if $тип_нанесенного_вреда[i] = 'дробящий':
			выносливость_игрока -= cheat_fight_dif * нанесенный_вред[i]
			дух_игрока -= cheat_fight_dif * нанесенный_вред[i]
			дух_врага[i] += нанесенный_вред[i]/2
			jump 'loop2'
		end
		!Vatican Champion damage bug fix/hack - crushboss
		if challenge_type = 1 and $ge = 'champion_vatican' and нанесенный_вред[i] > 36:
			нанесенный_вред[i] = rand(10,24)
		end
		здоровье_игрока -= cheat_fight_dif * нанесенный_вред[i]
		выносливость_игрока -= cheat_fight_dif * нанесенный_вред[i]
		дух_игрока -= cheat_fight_dif * нанесенный_вред[i]
		дух_врага[i] += нанесенный_вред[i]/2
		:loop2
		!statuses
		if $наложение[i] = 'слабость':
			if слабость[0] <= длительность[i]: слабость[0] = длительность[i]
			if слабость[0] > длительность[i]: слабость[0] += 1
		end
		if $наложение[i] = 'скованность':
			if скованность[0] <= длительность[i]: скованность[0] = длительность[i]
			if скованность[0] > длительность[i]: скованность[0] += 1
		end
		if $наложение[i] = 'боль':
			if боль[0] <= длительность[i]: боль[0] = длительность[i]
			if боль[0] > длительность[i]: боль[0] += 1
		end
		if $наложение[i] = 'шаткость':
			if шаткость[0] <= длительность[i]: шаткость[0] = длительность[i]
			if шаткость[0] > длительность[i]: шаткость[0] += 1
		end
		if $наложение[i] = 'ошеломление':
			if ошеломление[0] <= длительность[i]: ошеломление[0] = длительность[i]
			if ошеломление[0] > длительность[i]: ошеломление[0] += 1
		end
		if $наложение[i] = 'рассеянность':
			if рассеянность[0] <= длительность[i]: рассеянность[0] = длительность[i]
			if рассеянность[0] > длительность[i]: рассеянность[0] += 1
		end
		if $наложение[i] = 'бешенство':
			if бешенство[i] <= длительность[i]: бешенство[i] = длительность[i]
			if бешенство[i] > длительность[i]: бешенство[i] += 1
		end
		if $наложение[i] = 'разгон':
			if разгон[i] <= длительность[i]: разгон[i] = длительность[i]
			if разгон[i] > длительность[i]: разгон[i] += 1
		end
		if $наложение[i] = 'меткость':
			if меткость[i] <= длительность[i]: меткость[i] = длительность[i]
			if меткость[i] > длительность[i]: меткость[i] += 1
		end
		if $наложение[i] = 'адреналин':
			if адреналин[i] <= длительность[i]: адреналин[i] = длительность[i]
			if адреналин[i] > длительность[i]: адреналин[i] += 1
		end
		if $наложение[i] = 'верткость':
			if верткость[i] <= длительность[i]: верткость[i] = длительность[i]
			if верткость[i] > длительность[i]: верткость[i] += 1
		end
		if $наложение[i] = 'внимание':
			if внимание[i] <= длительность[i]: внимание[i] = длительность[i]
			if внимание[i] > длительность[i]: внимание[i] += 1
		end
	end
	jump "loop1"
end

!check for enemy death
i = 0
:loop5
if i < количество_врагов:
	i += 1
	if враг[i] = 1:
		if здоровье_врага[i] <= 0 and $класс_врага[i]!'пешка':
			враг[i] = 0
			поверженные_враги += 1
			$трофей[тр] = $труп_моба_в_локацию[$враг[i]]
			труп[$враг[i]] += 1
			тр += 1
			$действия_врага[i] = '<<$труп_врага[i]>>
'
			jump 'loop5'
		end
		if выносливость_врага[i] <= 0 and $класс_врага[i]!'пешка':
			враг[i] = 0
			поверженные_враги += 1
			$трофей[тр] = $вырубленный_моб_в_локацию[$враг[i]]
			в_отключке[$враг[i]] += 1
			тр += 1
			$действия_врага[i] = '<<$тело_врага[i]>>
'
			jump 'loop5'
		end
		if дух_врага[i] <= 0 and $класс_врага[i]!'пешка':
			враг[i] = 0
			поверженные_враги += 1
			$действия_врага[i] = '<<$беглец[i]>>
'
			jump 'loop5'
		end
		if $состояние[i] = 'повержен':
			враг[i] = 0
			поверженные_враги += 1
			$трофей[тр] = $труп_моба_в_локацию[$враг[i]]
			труп[$враг[i]] += 1
			тр += 1
			$действия_врага[i] = '<<$труп_врага[i]>>
'
		end
	end
	jump 'loop5'
end

killvar 'нанесенный_вред'

!check for fight end
if поверженные_враги = количество_врагов:
	$итог_боя = 'победа'
	!fixed, otherwise after a battle with one opponent the final spirit will always be equal to 5
	if количество_врагов > 2: дух_игрока = 5*количество_врагов
	gt 'конец_боя'
end
if здоровье_игрока <= 0:
	$итог_боя = 'убит'
	gt 'конец_боя'
end
if выносливость_игрока <= 0:
	$итог_боя = 'вырубился'
	gt 'конец_боя'
end
if дух_игрока <= 0:
	$итог_боя = 'бегство'
	gt 'конец_боя'
end

gs 'боевое_меню'
gt 'боевой_интерфейс'

--- конец_раунда ---------------------------------


code:
# начать_бой
!BATTLE BEGINS IN THIS LOCATION
!Overhauled by crushboss
!expects combatant to be set to 0, 1 or 2 before calling this to select the defender (master, slave, assistant respectively)

!TAKE OUT THE WEAPONS

if get_weapon = 0:
	$memplace = $place
	get_weapon = 1
	memcf = colosseum_fight
	colosseum_fight = 0
	$оружие = ''
	$вторичный = ''
	interaction_city = 901
	if surprise_attack = 1: interaction_city = 902
	if slave_attack = 1: interaction_city = 903
	gt 'interaction_city'
else
	!Assign primary and secondary weapons - crushboss
	dynamic $primary_weapon
	dynamic $secondary_weapon
	if a = 1: dynamic $previous_weapon
	colosseum_fight = memcf
	get_weapon = 2
	surprise_attack = 0
end

!Fix blank screen bug - crushboss
if slave_state ! CONST_INT['no_slave'] and combatant = 1:
	if $slave['wpn'] = '': $slave['wpn'] = 'безоружный'
	if $slave['armor'] = '': $slave['armor'] = 'без_брони'
	if $slave['cloth'] = '': $slave['cloth'] = 'голая'
end

!Fix blank screen bug - crushboss
if assistant_state ! CONST_INT['no_slave'] and combatant = 2:
	if $assistant['wpn'] = '': $assistant['wpn'] = 'безоружный'
	if $assistant['armor'] = '': $assistant['armor'] = 'без_брони'
	if $assistant['cloth'] = '': $assistant['cloth'] = 'голая'
end

!resetting vars
a = 0
nogoto = 0
поверженные_враги = 0

killvar 'no_wpn'
killvar '$состояние'

killvar 'слабость'
killvar 'скованность'
killvar 'боль'
killvar 'шаткость'
killvar 'ошеломление'
killvar 'рассеянность'
killvar 'бешенство'
killvar 'разгон'
killvar 'меткость'
killvar 'адреналин'
killvar 'верткость'
killvar 'внимание'

killvar 'суперудар'
killvar 'наложение'
killvar '$боевая_обстановка'
killvar '$действия_игрока'
killvar '$действия_врага'

!ui
gs 'раскладка_бой'

!Set master/slaver stats - start
base_str = master_str
base_flagelation = master_flagelation
сила = master_fighter
ловкость = master_fighter
восприятие = master_fighter

!Load Combat Databases
gs '#тексты_движка'
gs '#противники'
gs '#суперудары'
gs '#боевые_предметы'
gs '#dynamic'

$combatant_ava = $master_ava_color
$combatant_name = $master_name
$броня = $master_armor

if slave_attack = 1:
	$за_спиной = ''
	$слева = ''
	$справа = ''
	$предплечье = ''
	$в_сапоге = ''
	$броня = 'без_брони'
end

макс_здоровье_игрока = ((master_str * 10) - master_wounds_rate)
if chimera_gem_on = 1: макс_здоровье_игрока += 10 + master_supermacy
if макс_здоровье_игрока < 1: макс_здоровье_игрока = 1
здоровье_игрока = макс_здоровье_игрока
макс_выносливость_игрока = 50 + (master_energy*5)
if bull_ring_on = 1: макс_выносливость_игрока *= 2
выносливость_игрока = макс_выносливость_игрока
норм_дух_игрока = master_cha*5 + master_domination*5 + master_fighter*10
if snake_amulet_on = 1: норм_дух_игрока *= 2
дух_игрока = норм_дух_игрока
сила_передышки = 10

copyarr '$суперудар', '$master_spm'
!End of master/slaver stats

if combatant = 1:
	$toplay = 'arena'
	$combatant_ava = '<<$slave[''ava'']>>.png'
	$combatant_name = $slave_name
	$броня = $slave['armor']

	макс_здоровье_игрока = slave['stamina'] * 10 - slave_rate['wounds']
	if slave['gladiatrix_affinity'] > 0: макс_здоровье_игрока = slave['stamina']*10
	if slave['age'] = CONST_INT['loli_age']: макс_здоровье_игрока -= макс_здоровье_игрока/3
	if slave['age'] = CONST_INT['milf_age']: макс_здоровье_игрока += slave['stamina']*2
	if макс_здоровье_игрока < 1: макс_здоровье_игрока = 1
	здоровье_игрока = макс_здоровье_игрока
	макс_выносливость_игрока = 50 + (slave['energy']*5)
	if slave['gladiatrix_affinity'] > 0: макс_выносливость_игрока = 75 + (slave['energy']*5)
	if slave['age'] = CONST_INT['loli_age']: макс_выносливость_игрока -= макс_выносливость_игрока/3
	выносливость_игрока = макс_выносливость_игрока
	норм_дух_игрока = slave['ego']*10 + slave['gladiatrix']*10
	if slave['gladiatrix_affinity'] > 0: норм_дух_игрока += slave['ego']*10
	дух_игрока = норм_дух_игрока
	сила_передышки = 10
	slave['calories'] -= 5
	slave_rate['hygiene'] += 40

	base_str = slave['stamina'] + slave['gladiatrix_affinity']
	if slave['age'] = CONST_INT['loli_age']: base_str = (2*base_str)/3 + slave['gladiatrix_affinity']
	if slave['age'] = CONST_INT['milf_age']: base_str += 1
	base_flagelation = slave['gladiatrix'] + slave['gladiatrix_affinity']
	сила = slave['gladiatrix'] + slave['gladiatrix_affinity']
	ловкость = slave['gladiatrix'] + slave['gladiatrix_affinity']
	восприятие = slave['gladiatrix'] + slave['gladiatrix_affinity']
	if slave['gladiatrix_affinity_revealed'] = 0: slave['gladiatrix_affinity_revealed'] = 1
	killvar '$суперудар'
end

if combatant = 2:
	$combatant_ava = '<<$assistant[''ava'']>>.png'
	$combatant_name = $assistant_name
	$броня = $assistant['armor']

	макс_здоровье_игрока = assistant['stamina'] * 10 - assistant_rate['wounds']
	if assistant['gladiatrix_affinity'] > 0: макс_здоровье_игрока = assistant['stamina']*10
	if assistant['age'] = CONST_INT['loli_age']: макс_здоровье_игрока -= макс_здоровье_игрока/3
	if assistant['age'] = CONST_INT['milf_age']: макс_здоровье_игрока += assistant['stamina']*2
	if макс_здоровье_игрока < 1: макс_здоровье_игрока = 1
	здоровье_игрока = макс_здоровье_игрока
	макс_выносливость_игрока = 50 + (assistant['energy']*5)
	if assistant['gladiatrix_affinity'] > 0: макс_выносливость_игрока = 75 + (assistant['energy']*5)
	if assistant['age'] = CONST_INT['loli_age']: макс_выносливость_игрока -= макс_выносливость_игрока/3
	выносливость_игрока = макс_выносливость_игрока
	норм_дух_игрока = assistant['ego']*10 + assistant['gladiatrix']*10
	if assistant['gladiatrix_affinity'] > 0: норм_дух_игрока += assistant['ego']*10
	дух_игрока = норм_дух_игрока
	сила_передышки = 10
	assistant['calories'] -= 5
	assistant_rate['hygiene'] += 40

	base_str = assistant['stamina'] + assistant['gladiatrix_affinity']
	if assistant['age'] = CONST_INT['loli_age']: base_str = (2*base_str)/3 + assistant['gladiatrix_affinity']
	if assistant['age'] = CONST_INT['milf_age']: base_str += 1
	base_flagelation = assistant['gladiatrix'] + assistant['gladiatrix_affinity']
	сила = assistant['gladiatrix'] + assistant['gladiatrix_affinity']
	ловкость = assistant['gladiatrix'] + assistant['gladiatrix_affinity']
	восприятие = assistant['gladiatrix'] + assistant['gladiatrix_affinity']
	killvar '$суперудар'
end

$ключевые_условия = 'нет'
$ключевые_условия += $ключевое_слово_1[$оружие]
$ключевые_условия += $ключевое_слово_2[$оружие]
$ключевые_условия += $ключевое_слово_3[$оружие]
$ключевые_условия += $ключевое_слово_4[$оружие]
$ключевые_условия += $ключевое_слово_5[$оружие]
$ключевые_условия += $ключевое_слово_1[$броня]
$ключевые_условия += $ключевое_слово_2[$броня]
$ключевые_условия += $ключевое_слово_3[$броня]
$ключевые_условия += $ключевое_слово_4[$броня]
$ключевые_условия += $ключевое_слово_5[$броня]
$ключевые_условия += $ключевое_слово_1[$вторичный]
$ключевые_условия += $ключевое_слово_2[$вторичный]
$ключевые_условия += $ключевое_слово_3[$вторичный]
$ключевые_условия += $ключевое_слово_4[$вторичный]
$ключевые_условия += $ключевое_слово_5[$вторичный]

dynamic $броня_надеть[$броня]
dynamic $броня_эффект[$броня]

if $враг[1] = 'воспитуемая':

	slave_base_dmg = slave['gladiatrix']
	$slave_dmg_type = 'дробящий'

	if $slave['left_wpn'] = 'глушилка' or $slave['right_wpn'] = 'глушилка': slave_base_dmg = 1+slave['gladiatrix'] & $slave_dmg_type = 'дробящий'
	if $slave['left_wpn'] = 'кастет' or $slave['right_wpn'] = 'кастет': slave_base_dmg = 1+slave['gladiatrix'] & $slave_dmg_type = 'дробящий'
	if $slave['left_wpn'] = 'кинжал' or $slave['right_wpn'] = 'кинжал': slave_base_dmg = 1+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['left_wpn'] = 'стилет' or $slave['right_wpn'] = 'стилет': slave_base_dmg = 1+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['left_wpn'] = 'нагайка' or $slave['right_wpn'] = 'нагайка': slave_base_dmg = 1+slave['gladiatrix'] & $slave_dmg_type = 'психический'
	if $slave['left_wpn'] = 'тесак' or $slave['right_wpn'] = 'тесак': slave_base_dmg = 1+slave['gladiatrix'] & $slave_dmg_type = 'рубящий'

	if $slave['back_wpn'] = 'кнут' or $slave['left_wpn'] = 'кнут' or $slave['right_wpn'] = 'кнут': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'психический'
	if $slave['back_wpn'] = 'демократизатор' or $slave['left_wpn'] = 'демократизатор' or $slave['right_wpn'] = 'демократизатор': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'дробящий'
	if $slave['back_wpn'] = 'мулава' or $slave['left_wpn'] = 'мулава' or $slave['right_wpn'] = 'мулава': slave_base_dmg = 4+slave['gladiatrix'] & $slave_dmg_type = 'дробящий'
	if $slave['back_wpn'] = 'шпага' or $slave['left_wpn'] = 'шпага' or $slave['right_wpn'] = 'шпага': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['back_wpn'] = 'рапира' or $slave['left_wpn'] = 'рапира' or $slave['right_wpn'] = 'рапира': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['back_wpn'] = 'кончар' or $slave['left_wpn'] = 'кончар' or $slave['right_wpn'] = 'кончар': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['back_wpn'] = 'гладиус' or $slave['left_wpn'] = 'гладиус' or $slave['right_wpn'] = 'гладиус': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['back_wpn'] = 'трезубец' or $slave['left_wpn'] = 'трезубец' or $slave['right_wpn'] = 'трезубец': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['back_wpn'] = 'бастард' or $slave['left_wpn'] = 'бастард' or $slave['right_wpn'] = 'бастард': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'рубящий'
	if $slave['back_wpn'] = 'мачете' or $slave['left_wpn'] = 'мачете' or $slave['right_wpn'] = 'мачете': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'рубящий'
	if $slave['back_wpn'] = 'катана' or $slave['left_wpn'] = 'катана' or $slave['right_wpn'] = 'катана': slave_base_dmg = 3+slave['gladiatrix'] & $slave_dmg_type = 'рубящий'

	if $slave['back_wpn'] = 'бита': slave_base_dmg = 5+slave['gladiatrix'] & $slave_dmg_type = 'дробящий'
	if $slave['back_wpn'] = 'скотобой': slave_base_dmg = 5+slave['gladiatrix'] & $slave_dmg_type = 'психический'
	if $slave['back_wpn'] = 'фламберг': slave_base_dmg = 5+slave['gladiatrix'] & $slave_dmg_type = 'рубящий'
	if $slave['back_wpn'] = 'нагината': slave_base_dmg = 5+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
	if $slave['back_wpn'] = 'моргенштерн': slave_base_dmg = 5+slave['gladiatrix'] & $slave_dmg_type = 'дробящий'
	if $slave['back_wpn'] = 'грейтекс': slave_base_dmg = 5+slave['gladiatrix'] & $slave_dmg_type = 'рубящий'

	if slave_attack = 1:
		slave_base_dmg = 1+slave['gladiatrix'] & $slave_dmg_type = 'колющий'
		slave_attack = 0
	end

	$название_моба['воспитуемая'] = 'Slave'
	$аватара_моба['воспитуемая'] = '<<$seed_ava_clear[slave_type]>>.png'
	$описание_моба['воспитуемая'] = 'This is your slave.'
	$склонение_моб['воспитуемая'] = 'a slave'
	$склонение_моба['воспитуемая'] = 'a slave'
	$склонение_мобу['воспитуемая'] = 'a slave'
	$класс_моба['воспитуемая'] = 'элитный'
	базовое_здоровье['воспитуемая'] = slave['stamina'] * 10 - slave_rate['wounds']
	if базовое_здоровье['воспитуемая'] < 1: базовое_здоровье['воспитуемая'] = 1
	базовая_выносливость['воспитуемая'] = 50 + (slave['energy']*5)
	чек = базовое_здоровье['воспитуемая'] * 2
	if базовая_выносливость['воспитуемая'] > чек: базовая_выносливость['воспитуемая'] = чек
	базовый_дух['воспитуемая'] = slave['ego'] * 10
	$интеллект['воспитуемая'] = 'искусственный_идиот'

	базовый_вред['воспитуемая'] = slave_base_dmg
	$атака_1_тип['воспитуемая'] = 'точная'
	$атака_1_тип_вреда['воспитуемая'] = $slave_dmg_type
	$атака_1_штраф['воспитуемая'] = 'боль'
	$атака_1_бонус['воспитуемая'] = 'верткость'
	атака_1_длительность['воспитуемая'] = 1 + slave['gladiatrix']
	$атака_1_текст['воспитуемая'] = '<<$slave_name>> hits you right in the groin'
	$атака_2_тип['воспитуемая'] = 'быстрая'
	$атака_2_тип_вреда['воспитуемая'] = $slave_dmg_type
	$атака_2_штраф['воспитуемая'] = 'боль'
	$атака_2_бонус['воспитуемая'] = 'бешенство'
	атака_2_длительность['воспитуемая'] = 1 + slave['gladiatrix']
	$атака_2_текст['воспитуемая'] = '<<$slave_name>> frenziedly showers you with strikes'
	$атака_3_тип['воспитуемая'] = 'сильная'
	$атака_3_тип_вреда['воспитуемая'] = $slave_dmg_type
	$атака_3_штраф['воспитуемая'] = 'боль'
	$атака_3_бонус['воспитуемая'] = 'адреналин'
	атака_3_длительность['воспитуемая'] =  1 + slave['gladiatrix']
	$атака_3_текст['воспитуемая'] = '<<$slave_name>> hits you with all of her strength'

	$смерть['воспитуемая'] = '<<$slave_name>> lying on the floor lifeless. Last blow was fatal for her.'
	$отключка['воспитуемая'] = '<<$slave_name>> lying unconscious.'
	$бегство['воспитуемая'] = '<<$slave_name>> is not ready to continue the fight. She gives up...'

	хрупкий['воспитуемая'] = 0
	тонкое_тело['воспитуемая'] = 0
	бессмертный['воспитуемая'] = 0
	безустали['воспитуемая'] = 0
	бесстрашный['воспитуемая'] = 0

	модификатор_колющий['воспитуемая'] = 0
	модификатор_рубящий['воспитуемая'] = 0
	модификатор_дробящий['воспитуемая'] = 0
	модификатор_огонь['воспитуемая'] = 0
	модификатор_холод['воспитуемая'] = 0
	модификатор_молния['воспитуемая'] = 0
	модификатор_свет['воспитуемая'] = 0
	модификатор_тьма['воспитуемая'] = 0
	модификатор_серебро['воспитуемая'] = 0
	модификатор_холодное_железо['воспитуемая'] = 0
	модификатор_психический['воспитуемая'] = 0

	if $slave['armor'] = 'комбез':
		модификатор_колющий['воспитуемая'] -= 1
		модификатор_рубящий['воспитуемая'] -= 1
		модификатор_дробящий['воспитуемая'] -= 1
		модификатор_холод['воспитуемая'] -= 1
		модификатор_молния['воспитуемая'] -= 1
		модификатор_огонь['воспитуемая'] -= 1
	end

	if $slave['armor'] = 'кожан':
		модификатор_колющий['воспитуемая'] -= 3
		модификатор_рубящий['воспитуемая'] -= 2
		модификатор_дробящий['воспитуемая'] -= 2
		модификатор_холод['воспитуемая'] -= 3
		модификатор_молния['воспитуемая'] -= 4
		модификатор_огонь['воспитуемая'] -= 5
	end

	if $slave['armor'] = 'эльчуга':
		модификатор_колющий['воспитуемая'] -= 2
		модификатор_рубящий['воспитуемая'] -= 4
		модификатор_холод['воспитуемая'] += 2
		модификатор_молния['воспитуемая'] += 2
		модификатор_огонь['воспитуемая'] += 2
	end

	if $slave['armor'] = 'ячуга':
		модификатор_колющий['воспитуемая'] -= 4
		модификатор_рубящий['воспитуемая'] -= 5
		модификатор_дробящий['воспитуемая'] -= 1
		модификатор_холод['воспитуемая'] += 1
		модификатор_огонь['воспитуемая'] += 2
		модификатор_молния['воспитуемая'] += 1
	end

	if $slave['armor'] = 'полудоспех':
		модификатор_колющий['воспитуемая'] -= 4
		модификатор_рубящий['воспитуемая'] -= 4
		модификатор_дробящий['воспитуемая'] -= 3
		модификатор_холод['воспитуемая'] += 1
		модификатор_огонь['воспитуемая'] += 1
		модификатор_молния['воспитуемая'] += 1
	end

	if $slave['armor'] = 'плейт':
		модификатор_колющий['воспитуемая'] -= 5
		модификатор_рубящий['воспитуемая'] -= 5
		модификатор_дробящий['воспитуемая'] -= 5
		модификатор_холод['воспитуемая'] += 5
		модификатор_огонь['воспитуемая'] += 5
		модификатор_молния['воспитуемая'] += 5
	end

	if $slave['armor'] = 'кольчуга':
		модификатор_колющий['воспитуемая'] -= 10
		модификатор_рубящий['воспитуемая'] -= 10
		модификатор_дробящий['воспитуемая'] -= 10
		модификатор_холод['воспитуемая'] -= 10
		модификатор_огонь['воспитуемая'] -= 10
		модификатор_молния['воспитуемая'] -= 10
		модификатор_свет['воспитуемая'] -= 10
		модификатор_тьма['воспитуемая'] -= 10
		модификатор_серебро['воспитуемая'] -= 10
		модификатор_холодное_железо['воспитуемая'] -= 10
	end
end

!Getting information about mobs/enemies with a cycle
i = 0
:loop
if i < количество_врагов:
	i += 1
	$имя_врага[i] = $название_моба[$враг[i]]
	$склонение_врага[i] = $склонение_моба[$враг[i]]
	$класс_врага[i] = $класс_моба[$враг[i]]
	$труп_врага[i] = $смерть[$враг[i]]
	$тело_врага[i] = $отключка[$враг[i]]
	$беглец[i] = $бегство[$враг[i]]

	макс_здоровье_врага[i] = базовое_здоровье[$враг[i]]
	здоровье_врага[i] = базовое_здоровье[$враг[i]]
	выносливость_врага[i] = базовая_выносливость[$враг[i]]
	дух_врага[i] = базовый_дух[$враг[i]]
	вред_врага[i] = базовый_вред[$враг[i]]
	случай = rand(1,3)
	if случай = 1: $защита[i] = 'блок'
	if случай = 2: $защита[i] = 'контратака'
	if случай = 3: $защита[i] = 'уклонение'
	враг[i] = 1
	jump 'loop'
end

текущий = 1

gs 'боевое_меню'
gt 'боевой_интерфейс'

--- начать_бой ---------------------------------

repo_name: Tcallas/game

license: unknown


code:
# передышка
!GOTO HERE IF PLAYER CHOOSES "DEFEND" OPTION

!Player gets rid of all the harmful conditions
слабость = 0
скованность = 0
боль = 0
шаткость = 0
ошеломление = 0
рассеянность = 0

!Player restores some stamina
выносливость_игрока += сила_передышки
if выносливость_игрока > макс_выносливость_игрока: выносливость_игрока = макс_выносливость_игрока

$действия_игрока = 'You go on the defensive [harmful status removed] [stamina +<<сила_передышки>>]'

gt 'ход_противников'

--- передышка ---------------------------------


code:
# раскладка_бой
!FIGHT UI
CLOSE ALL
if ui_style = 1:$backimage = 'content/pic/ui/old/bg_fight_old.png'
if ui_style = 2:$backimage = 'content/pic/ui/grimdark/bg_fight.png'
if ui_style = 0:$backimage = 'content/pic/ui/classic/bg_fight.png'

MSG_X = 350
--- раскладка_бой ---------------------------------


code:
# рассчет_вреда
!CALCULATION OF DAMAGE FROM ALL MODIFIERS
модификатор = 0

!Interaction of the type of protection and attack
$эффект = 'удвоение'
if $защита[def] = 'блок' and $атака[atk] = 'сильная': модификатор += 1
if $защита[def] = 'уклонение' and $атака[atk] = 'быстрая': модификатор += 1
if $защита[def] = 'контратака' and $атака[atk] = 'точная': модификатор += 1

if $защита[def] = 'блок' and $атака[atk] = 'точная': $эффект = 'бонус'
if $защита[def] = 'уклонение' and $атака[atk] = 'сильная': $эффект = 'бонус'
if $защита[def] = 'контратака' and $атака[atk] = 'быстрая': $эффект = 'бонус'

if $защита[def] = 'блок' and $атака[atk] = 'быстрая': $эффект = 'штраф'
if $защита[def] = 'уклонение' and $атака[atk] = 'точная': $эффект = 'штраф'
if $защита[def] = 'контратака' and $атака[atk] = 'сильная': $эффект = 'штраф'

!taking statuses into account
if $атака[atk] = 'сильная':
	if бешенство[atk] > 0: модификатор += 1
	if шаткость[def] > 0: модификатор += 1
	if слабость[atk] > 0: модификатор -= 1
	if адреналин[def] > 0: модификатор -= 1
end

if $атака[atk] = 'быстрая':
	if разгон[atk] > 0: модификатор += 1
	if ошеломление[def] > 0: модификатор += 1
	if скованность[atk] > 0: модификатор -= 1
	if верткость[def] > 0: модификатор -= 1
end

if $атака[atk] = 'точная':
	if меткость[atk] > 0: модификатор += 1
	if рассеянность[def] > 0: модификатор += 1
	if боль[atk] > 0: модификатор -= 1
	if внимание[def] > 0: модификатор -= 1
end

!damage calculation itself
if модификатор < -2: нанесенный_вред[atk] = вред_на_рассчет/6
if модификатор = -2: нанесенный_вред[atk] = вред_на_рассчет/4
if модификатор = -1: нанесенный_вред[atk] = вред_на_рассчет/2
if модификатор = 0: нанесенный_вред[atk] = вред_на_рассчет
if модификатор = 1: нанесенный_вред[atk] = вред_на_рассчет*2
if модификатор = 2: нанесенный_вред[atk] = вред_на_рассчет*4
if модификатор > 2: нанесенный_вред[atk] = вред_на_рассчет*6

модифер = 0

if def = 0: dynamic 'модифер = модификатор_<<$рассчетный_тип_вреда>>'
if def > 0: dynamic 'модифер = модификатор_<<$рассчетный_тип_вреда>>[$враг[def]]'
нанесенный_вред[atk] += модифер

if нанесенный_вред[atk] < 1:
	нанесенный_вред[atk] = 1
	a = rand(1,10)
	if a = 1: нанесенный_вред[atk] += 1
	if a = 2: нанесенный_вред[atk] += 2
	if a = 3: нанесенный_вред[atk] += 3
	a = 0
end

$тип_нанесенного_вреда[atk] = $рассчетный_тип_вреда

--- рассчет_вреда ---------------------------------


code:
# сменить_оружие
!CHANGING WEAPONS

!creating menu
$боевое_меню = ''
$боевое_меню += "Change primary
"
$боевое_меню += "Change secondary
"
$боевое_меню += "Remove primary
"
$боевое_меню += "Remove secondary
"
$боевое_меню += "
"
$боевое_меню += "Back
"

gt 'боевой_интерфейс'
--- сменить_оружие ---------------------------------


code:
# сменить_оружие_вторичное
!creating menu - secondary weapon change
$боевое_меню = ''
if $за_спиной!'':$боевое_меню += "Shoulder Holster:<<$item_name[$за_спиной]>>
"
if $слева!'':$боевое_меню += "Left Hand:<<$item_name[$слева]>>
"
if $справа!'':$боевое_меню += "Right Hand:<<$item_name[$справа]>>
"
if $предплечье!'' and combatant = 0:$боевое_меню += "Sleeve Holster:<<$item_name[$предплечье]>>
"
if $в_сапоге!'' and combatant = 0:$боевое_меню += "Boot Holster:<<$item_name[$в_сапоге]>>
"
$боевое_меню += "
"
$боевое_меню += "Back
"

gt 'боевой_интерфейс'
--- сменить_оружие_вторичное ---------------------------------

path: game/locations/сменить_оружие_вторичное.qsrc


code:
# сменить_оружие_основное
!creating menu - primary weapon change
$боевое_меню = ''
if $за_спиной!'':$боевое_меню += "Shoulder Holster:<<$item_name[$за_спиной]>>
"
if $слева!'':$боевое_меню += "Left Hand:<<$item_name[$слева]>>
"
if $справа!'':$боевое_меню += "Right Hand:<<$item_name[$справа]>>
"
if $предплечье!'' and combatant = 0:$боевое_меню += "Sleeve Holster:<<$item_name[$предплечье]>>
"
if $в_сапоге!'' and combatant = 0:$боевое_меню += "Boot Holster:<<$item_name[$в_сапоге]>>
"
$боевое_меню += "
"
$боевое_меню += "Back
"

gt 'боевой_интерфейс'

--- сменить_оружие_основное ---------------------------------

path: game/locations/сменить_оружие_основное.qsrc


code:
# суперудары
!SUPERB SELECTION MENU
!Overhauled by crushboss

!Reset vars - crushboss
killvar '$меню_суперудар'
killvar '$боевое_меню'
killvar 'вред_оружия_игрока'
killvar '$тип_вреда_оружия'

$меню_суперудар[1] = ''
$меню_суперудар[2] = ''
$меню_суперудар[3] = ''
$меню_суперудар[4] = ''
$меню_суперудар[5] = ''
$меню_суперудар[6] = ''
$меню_суперудар[7] = ''
$меню_суперудар[8] = ''
$боевое_меню = ''
вред_оружия_игрока = 0
$тип_вреда_оружия = ''

!Obtain information about the player’s current weapon
вред_оружия_игрока = базовый_вред[$оружие]
$тип_вреда_оружия = $тип_вреда[$оружие]

!Build list of learned special techniques that match the weapon type - crushboss

!Roundhouse Kick - ALL
if spm_learned['удар_с_разворота'] = 1 and суперудар_сделан[11] = 0:
	$суперудар_название[$суперудар[1]] = "Roundhouse Kick"
	$меню_суперудар[1] = $суперудар_название[$суперудар[1]]
	! $меню_суперудар[1] = 'Roundhouse Kick'
else
	$меню_суперудар[1] = ''
end

!Swift Blow - Slashing weapons - рубящий
if spm_learned['рассечение'] = 1 and суперудар_сделан[12] = 0 and $тип_вреда_оружия = 'рубящий':
	$суперудар_название[$суперудар[2]] = "Swift Blow"
	$меню_суперудар[2] = $суперудар_название[$суперудар[2]]
	! $меню_суперудар[2] = 'Swift Blow'
else
	$меню_суперудар[2] = ''
end

!Battle Cry - ALL
if spm_learned['воинственный_клич'] = 1 and суперудар_сделан[13] = 0:
	$суперудар_название[$суперудар[3]] = "Battle Cry"
	$меню_суперудар[3] = $суперудар_название[$суперудар[3]]
	! $меню_суперудар[3] = 'Battle Cry'
else
	$меню_суперудар[3] = ''
end

!Heavy Blow - Blunt weapons - дробящий
if spm_learned['оглушение'] = 1 and суперудар_сделан[14] = 0 and $тип_вреда_оружия = 'дробящий':
	$суперудар_название[$суперудар[4]] = "Heavy Blow"
	$меню_суперудар[4] = $суперудар_название[$суперудар[4]]
	! $меню_суперудар[4] = 'Heavy Blow'
else
	$меню_суперудар[4] = ''
end

!Precise Hit - Piercing weapons - колющий
if spm_learned['ослепление'] = 1 and суперудар_сделан[15] = 0 and $тип_вреда_оружия = 'колющий':
	$суперудар_название[$суперудар[5]] = "Precise Hit"
	$меню_суперудар[5] = $суперудар_название[$суперудар[5]]
	! $меню_суперудар[5] = 'Precise Hit'
else
	$меню_суперудар[5] = ''
end

!Dashing Blow - Slashing weapons - рубящий
if spm_learned['подрезка'] = 1 and суперудар_сделан[16] = 0 and $тип_вреда_оружия = 'рубящий':
	$суперудар_название[$суперудар[6]] = "Dashing Blow"
	$меню_суперудар[6] = $суперудар_название[$суперудар[6]]
	! $меню_суперудар[6] = 'Dashing Blow'
else
	$меню_суперудар[6] = ''
end

!Riposte - piercing weapons - колющий
if spm_learned['ответный_удар'] = 1 and суперудар_сделан[17] = 0 and $тип_вреда_оружия = 'колющий':
	$суперудар_название[$суперудар[7]] = "Riposte"
	$меню_суперудар[7] = $суперудар_название[$суперудар[7]]
	! $меню_суперудар[7] = 'Riposte'
else
	$меню_суперудар[7] = ''
end

!Face Bash - Blunt weapons - дробящий
if spm_learned['лицо_прикладом'] = 1 and суперудар_сделан[18] = 0 and $тип_вреда_оружия = 'дробящий':
	$суперудар_название[$суперудар[8]] = "Face Bash"
	$меню_суперудар[8] = $суперудар_название[$суперудар[8]]
	! $меню_суперудар[8] = 'Face Bash'
else
	$меню_суперудар[8] = ''
end

!creating menu
killvar '$боевое_меню'
$боевое_меню = "
"
if $меню_суперудар[1] ! '': $боевое_меню += "<<$меню_суперудар[1]>>
"
if $меню_суперудар[2] ! '': $боевое_меню += "<<$меню_суперудар[2]>>
"
if $меню_суперудар[3] ! '': $боевое_меню += "<<$меню_суперудар[3]>>
"
if $меню_суперудар[4] ! '': $боевое_меню += "<<$меню_суперудар[4]>>
"
if $меню_суперудар[5] ! '': $боевое_меню += "<<$меню_суперудар[5]>>
"
if $меню_суперудар[6] ! '': $боевое_меню += "<<$меню_суперудар[6]>>
"
if $меню_суперудар[7] ! '': $боевое_меню += "<<$меню_суперудар[7]>>
"
if $меню_суперудар[8] ! '': $боевое_меню += "<<$меню_суперудар[8]>>
"

$боевое_меню += "
Back
"

gt 'боевой_интерфейс'

--- суперудары ---------------------------------


code:
# ход_противников
!CALCULATE THE ACTIONS QUEUE OF THE OPPONENTS
i = 0
:loop
if i < количество_врагов:
	i += 1
 	if враг[i] = 1:
  		gs '<<$интеллект[$враг[i]]>>'
	end
	jump 'loop'
end

gt 'конец_раунда'

--- ход_противников ---------------------------------


code:
Run "Load Pictures.exe" only if:
	- You added or removed any pictures from the game
	- The files "pic_max.json" and "pic_max_general.json" are not present in the game/json folder
		- The file "pic_max_loli.json" should also be present if you have the loli version installed


seed_name: Isabella

seed_world_description: [Isabella]<br>- Not so very long ago we realized how huge the world is. When the ocean opened new rich land, everything changed. Power of the state is now measured by the force of his sailing fleet.

seed_family_description: [Isabella]<br>- I was born in the family of a simple fisherman, and since childhood I helped father to catch fish on the boat. I was always a tomboy. Then my parents died of smallpox, and I had to become a port whore.

seed_occupation_description: [Isabella]<br>- I certainly like to fuck, but I hate to earn money by this. I managed to get on a pirate ship, and a woman on a ship can get in trouble. But the pirates valued strength and savvy, and it does not matter who you are - black, crippled or woman.

fullimage: girls/full/isabela

seed_psy_basic: optimistic


code: start "" "game/engine/jack.exe" game/jack.qsp


code:
901_isabella.json is an improved Isabella who is mostly trained.  Copy this file into the game/json/slaves folder and replace.  This is considered a cheat provided by crushboss.

Jack_alternate_game_launch.bat is for those who have difficulty launching the game through the normal executable.
Copy this file into the Jack-o-nine-tails folder (the same folder containing Jack-o-nine-tails.exe) and double click on it to launch the game.


code:
<?xml version="1.0" encoding="utf-8"?>
<QGen-keywords>
  <Statements>
    <Keyword name="pl" desc="PL [выражение] / *PL [выражение] - вывод текста в дополнительное / основное окно описания, затем переход на новую строку"/>
    <Keyword name="clear" desc="CLEAR / *CLEAR - очистка дополнительного / основного окна описания"/>
    <Keyword name="clr" desc="CLR / *CLR - очистка дополнительного / основного окна описания"/>
    <Keyword name="p" desc="P [выражение] / *P [выражение] - вывод текста в дополнительное / основное окно описания"/>
    <Keyword name="nl" desc="NL [выражение] / *NL [выражение] - переход на новую строку, затем вывод текста в дополнительное / основное окно описания"/>
    <Keyword name="msg" desc="MSG [выражение] - вывод сообщения в информационном окне"/>
    <Keyword name="wait" desc="WAIT [#выражение] - остановка выполнения программы на заданное количество миллисекунд"/>
    <Keyword name="act" desc="ACT [$название],[$путь к изображению]:[оператор] & [оператор] & ... - добавление действия"/>
    <Keyword name="delact" desc="DELACT [$название] / DEL ACT [$название] - удаление действия"/>
    <Keyword name="cla" desc="CLA - очистка списка действий"/>
    <Keyword name="cmdclear" desc="CMDCLEAR - очистка строки ввода"/>
    <Keyword name="cmdclr" desc="CMDCLEAR - очистка строки ввода"/>
    <Keyword name="cls" desc="CLS - очищает экран, оставляя только список предметов"/>
    <Keyword name="menu" desc="MENU [$выражение] - показ меню с заданным названием"/>
    <Keyword name="settimer" desc="SETTIMER [#выражение] - задает интервал таймера для локации-счетчика"/>
    <Keyword name="dynamic" desc="DYNAMIC [$строка кода],[параметр 1],[параметр 2], ... - динамическое выполнение кода"/>
    <Keyword name="set" desc="SET [название переменной]=[выражение] - установка значения переменной"/>
    <Keyword name="let" desc="LET [название переменной]=[выражение] - установка значения переменной"/>
    <Keyword name="killvar" desc="KILLVAR [$название],[#индекс] - удаление всех переменных / указанной переменной"/>
    <Keyword name="copyarr" desc="COPYARR [$массив-приемник],[$массив-источник] - копирование содержимого массива в другой массив"/>
    <Keyword name="addobj" desc="ADDOBJ [$название],[$путь к изображению],[#позиция] / ADD OBJ [$название],[$путь к изображению],[#позиция] - добавление предмета"/>
    <Keyword name="delobj" desc="DELOBJ [$название] / DEL OBJ [$название] - удаление предмета"/>
    <Keyword name="killobj" desc="KILLOBJ [#позиция] - удаление всех предметов / предмета в заданной позиции"/>
    <Keyword name="unselect" desc="UNSELECT - отмена выбора предмета"/>
    <Keyword name="unsel" desc="UNSEL - отмена выбора предмета"/>
    <Keyword name="killall" desc="KILLALL - удаление всех переменных и предметов"/>
    <Keyword name="opengame" desc="OPENGAME [$выражение] - загрузка состояния игры"/>
    <Keyword name="openqst" desc="OPENQST [$выражение] - открытие и запуск файла игры"/>
    <Keyword name="addqst" desc="ADDQST [$выражение] - добавление локаций из указанного файла"/>
    <Keyword name="killqst" desc="KILLQST - удаление всех добавленных через ADDQST локаций"/>
    <Keyword name="savegame" desc="SAVEGAME [$выражение] - сохранение состояния игры"/>
    <Keyword name="refint" desc="REFINT - обновление интерфейса"/>
    <Keyword name="showacts" desc="SHOWACTS [#выражение] - показ / скрытие списка действий"/>
    <Keyword name="showinput" desc="SHOWINPUT [#выражение] - показ / скрытие строки ввода"/>
    <Keyword name="showobjs" desc="SHOWOBJS [#выражение] - показ / скрытие списка предметов"/>
    <Keyword name="showstat" desc="SHOWSTAT [#выражение] - показ / скрытие дополнительного окна описания"/>
    <Keyword name="if" desc="IF [#выражение]:[оператор1] & [оператор2] & ... ELSE [оператор3] & [оператор4] & ... - условие"/>
    <Keyword name="else" desc="IF [#выражение]:[оператор1] & [оператор2] & ... ELSE [оператор3] & [оператор4] & ... - условие"/>
    <Keyword name="elseif" desc="ELSEIF [#выражение]:[оператор1] & [оператор2] & ... - альтернативное условие"/>
    <Keyword name="exit" desc="EXIT - завершение выполнения текущего кода"/>
    <Keyword name="end" desc="END - завершение многострочной формы IF / ACT"/>
    <Keyword name="jump" desc="JUMP [$выражение] - переход на указанную метку"/>
    <Keyword name="gosub" desc="GOSUB [$выражение],[параметр 1],[параметр 2], ... - обработка указанной локации"/>
    <Keyword name="gs" desc="GS [$выражение],[параметр 1],[параметр 2], ... - обработка указанной локации"/>
    <Keyword name="goto" desc="GOTO [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию"/>
    <Keyword name="gt" desc="GT [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию"/>
    <Keyword name="xgoto" desc="XGOTO [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию без очистки основного окна описания"/>
    <Keyword name="xgt" desc="XGT [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию без очистки основного окна описания"/>
    <Keyword name="play" desc="PLAY [$путь к звуковому файлу],[#громкость] - воспроизведение звукового файла с заданной громкостью"/>
    <Keyword name="close" desc="CLOSE [$путь к звуковому файлу] / CLOSE ALL - остановка проигрывания звукового файла / всех звуковых файлов"/>
    <Keyword name="view" desc="VIEW [$путь к графическому файлу] - просмотр изображения"/>
  </Statements>
  <Expressions>
    <Keyword name="and" desc="[#выражение 1] AND [#выражение 2] - логическое "и=""/>
    <Keyword name="or" desc="[#выражение 1] OR [#выражение 2] - логическое "или""/>
    <Keyword name="obj" desc="OBJ [$предмет] - проверка наличия предмета в рюкзаке"/>
    <Keyword name="loc" desc="LOC [$локация] - проверка существования локации"/>
    <Keyword name="no" desc="NO [#выражение] - отрицание"/>
    <Keyword name="mod" desc="[#выражение 1] MOD [#выражение 2] - вычисление остатка от деления"/>
    <Keyword name="desc" desc="DESC([$выражение]) - возвращает текст базового описания локации"/>
    <Keyword name="$desc" desc="$DESC([$выражение]) - возвращает текст базового описания локации"/>
    <Keyword name="iif" desc="IIF([#выражение],[выражение_да],[выражение_нет]) - возвращает одно из выражений по условию"/>
    <Keyword name="$iif" desc="$IIF([#выражение],[выражение_да],[выражение_нет]) - возвращает одно из выражений по условию"/>
    <Keyword name="input" desc="INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"/>
    <Keyword name="$input" desc="$INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"/>
    <Keyword name="isplay" desc="ISPLAY([$выражение]) - проверяет, проигрывается ли в текущий момент указанный файл"/>
    <Keyword name="max" desc="MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"/>
    <Keyword name="$max" desc="$MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"/>
    <Keyword name="min" desc="MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"/>
    <Keyword name="$min" desc="$MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"/>
    <Keyword name="rand" desc="RAND([#выражение 1],[#выражение 2]) - возвращает случайное число между заданными"/>
    <Keyword name="rgb" desc="RGB([#красный],[#зеленый],[#синий]) - возвращает код цвета на основе 3-х составляющих"/>
    <Keyword name="getobj" desc="GETOBJ([#позиция]) - возвращает название предмета, расположенного в заданной позиции"/>
    <Keyword name="$getobj" desc="$GETOBJ([#позиция]) - возвращает название предмета, расположенного в заданной позиции"/>
    <Keyword name="dyneval" desc="DYNEVAL([$выражение],[параметр 1],[параметр 2], ...) - возвращает значение динамически вычисленного выражения"/>
    <Keyword name="$dyneval" desc="$DYNEVAL([$выражение],[параметр 1],[параметр 2], ...) - возвращает значение динамически вычисленного выражения"/>
    <Keyword name="func" desc="FUNC([$выражение],[параметр 1],[параметр 2], ...) - обработка указанной локации как функции"/>
    <Keyword name="$func" desc="$FUNC([$выражение],[параметр 1],[параметр 2], ...) - обработка указанной локации как функции"/>
    <Keyword name="arrsize" desc="ARRSIZE([$выражение]) - возвращает число элементов в указанном массиве"/>
    <Keyword name="arrpos" desc="ARRPOS([#начальный индекс],[$имя массива],[значение]) - поиск в массиве элемента с заданным значением"/>
    <Keyword name="instr" desc="INSTR([#начальная позиция],[$текст],[$искомый текст]) - поиск вхождения текста"/>
    <Keyword name="isnum" desc="ISNUM([$выражение]) - проверяет, является ли указанная строка числом"/>
    <Keyword name="trim" desc="TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"/>
    <Keyword name="$trim" desc="$TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"/>
    <Keyword name="ucase" desc="UCASE([$выражение]) - преобразует маленькие буквы текста в большие"/>
    <Keyword name="$ucase" desc="$UCASE([$выражение]) - преобразует маленькие буквы текста в большие"/>
    <Keyword name="lcase" desc="LCASE([$выражение]) - преобразует большие буквы текста в маленькие"/>
    <Keyword name="$lcase" desc="$LCASE([$выражение]) - преобразует большие буквы текста в маленькие"/>
    <Keyword name="len" desc="LEN([$выражение]) - возвращает длину указанной строки"/>
    <Keyword name="mid" desc="MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"/>
    <Keyword name="$mid" desc="$MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"/>
    <Keyword name="replace" desc="REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"/>
    <Keyword name="$replace" desc="$REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"/>
    <Keyword name="str" desc="STR([#выражение]) - переводит число в строку"/>
    <Keyword name="$str" desc="$STR([#выражение]) - переводит число в строку"/>
    <Keyword name="val" desc="VAL([$выражение]) - переводит строку в число"/>
    <Keyword name="arrcomp" desc="ARRCOMP([#начальный индекс],[$имя массива],[$шаблон]) - поиск в массиве элемента, соответствующего регулярному выражению"/>
    <Keyword name="strcomp" desc="STRCOMP([$выражение],[$шаблон]) - проверяет заданный текст на соответствие регулярному выражению"/>
    <Keyword name="strfind" desc="STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"/>
    <Keyword name="$strfind" desc="$STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"/>
    <Keyword name="strpos" desc="STRPOS([$выражение],[$шаблон],[#номер]) - возвращает позицию подстроки, соответствующей группе с номером [#номер] регулярного выражения"/>
    <Keyword name="countobj" desc="COUNTOBJ - возвращает текущее число предметов"/>
    <Keyword name="msecscount" desc="MSECSCOUNT - возвращает количество миллисекунд, прошедших с момента начала игры"/>
    <Keyword name="rnd" desc="RND - возвращает случайное значение от 1 до 1000"/>
    <Keyword name="curloc" desc="CURLOC - возвращает название текущей локации"/>
    <Keyword name="$curloc" desc="$CURLOC - возвращает название текущей локации"/>
    <Keyword name="qspver" desc="QSPVER - возвращает версию интерпретатора"/>
    <Keyword name="$qspver" desc="$QSPVER - возвращает версию интерпретатора"/>
    <Keyword name="selobj" desc="SELOBJ - возвращает название выделенного предмета"/>
    <Keyword name="$selobj" desc="$SELOBJ - возвращает название выделенного предмета"/>
    <Keyword name="selact" desc="SELACT - возвращает название выделенного действия"/>
    <Keyword name="$selact" desc="$SELACT - возвращает название выделенного действия"/>
    <Keyword name="curacts" desc="CURACTS - возвращает в виде кода все текущие действия"/>
    <Keyword name="$curacts" desc="$CURACTS - возвращает в виде кода все текущие действия"/>
    <Keyword name="user_text" desc="USER_TEXT - возвращает текст в строке ввода"/>
    <Keyword name="$user_text" desc="$USER_TEXT - возвращает текст в строке ввода"/>
    <Keyword name="usrtxt" desc="USRTXT - возвращает текст в строке ввода"/>
    <Keyword name="$usrtxt" desc="$USRTXT - возвращает текст в строке ввода"/>
    <Keyword name="maintxt" desc="MAINTXT - возвращает текст в основном окне описания"/>
    <Keyword name="$maintxt" desc="$MAINTXT - возвращает текст в основном окне описания"/>
    <Keyword name="stattxt" desc="STATTXT - возвращает текст в дополнительном окне описания"/>
    <Keyword name="$stattxt" desc="$STATTXT - возвращает текст в дополнительном окне описания"/>
  </Expressions>
  <Variables>
    <Keyword name="args" desc="ARGS - массив с параметрами процедуры / функции"/>
    <Keyword name="$args" desc="$ARGS - массив с параметрами процедуры / функции"/>
    <Keyword name="result" desc="RESULT - переменная содержит результат, возвращаемый текущей функцией"/>
    <Keyword name="$result" desc="$RESULT - переменная содержит результат, возвращаемый текущей функцией"/>
    <Keyword name="disablescroll" desc="DISABLESCROLL - если переменная не равна 0, то запрещает автопрокрутку текста при выводе"/>
    <Keyword name="disablesubex" desc="DISABLESUBEX - если переменная не равна 0, то запрещает использование "подвыражений" в тексте"/>
    <Keyword name="nosave" desc="NOSAVE - если переменная не равна 0, то сохранение состояния игры пользователем невозможно"/>
    <Keyword name="debug" desc="DEBUG - если переменная не равна 0, то отключается проверка идентификатора игры при загрузке состояния"/>
    <Keyword name="$counter" desc="$COUNTER - переменная содержит название локации-счётчика"/>
    <Keyword name="$ongload" desc="$ONGLOAD - переменная содержит название локации-обработчика загрузки состояния"/>
    <Keyword name="$ongsave" desc="$ONGSAVE - переменная содержит название локации-обработчика сохранения состояния"/>
    <Keyword name="$onnewloc" desc="$ONNEWLOC - переменная содержит название локации-обработчика перехода на новую локацию"/>
    <Keyword name="$onactsel" desc="$ONACTSEL - переменная содержит название локации-обработчика выбора действия"/>
    <Keyword name="$onobjsel" desc="$ONOBJSEL - переменная содержит название локации-обработчика выбора предмета"/>
    <Keyword name="$onobjadd" desc="$ONOBJADD - переменная содержит название локации-обработчика добавления предмета"/>
    <Keyword name="$onobjdel" desc="$ONOBJDEL - переменная содержит название локации-обработчика удаления предмета"/>
    <Keyword name="$usercom" desc="$USERCOM - переменная содержит название локации-обработчика строки ввода"/>
    <Keyword name="usehtml" desc="USEHTML - если переменная не равна 0, то включает возможность использования HTML"/>
    <Keyword name="bcolor" desc="BCOLOR - переменная содержит цвет фона"/>
    <Keyword name="fcolor" desc="FCOLOR - переменная содержит основной цвет шрифта"/>
    <Keyword name="lcolor" desc="LCOLOR - переменная содержит основной цвет ссылок"/>
    <Keyword name="fsize" desc="FSIZE - переменная содержит основной размер шрифта"/>
    <Keyword name="$fname" desc="$FNAME - переменная содержит название основного шрифта"/>
    <Keyword name="$backimage" desc="$BACKIMAGE - переменная содержит путь к фоновому изображению"/>
  </Variables>
</QGen-keywords>


code:
# IDE, temp, generated, and other local-only files
.idea/
*.iml
node_modules/
tweego.exe
*.html
*.7z

* Ignoring working folder for Quin2k
mod/
*.code-workspace
release/

repo_name: KinkyOne/degrees

path: .gitignore

license: mit


code:
<NotepadPlus>
	<UserLang name="Sugarcube4" ext="twee tw" udlVersion="2.1">
		<Settings>
			<Global caseIgnored="no" allowFoldOfComments="no" foldCompact="yes" forcePureLC="0" decimalSeparator="0" />
			<Prefix Keywords1="yes" Keywords2="no" Keywords3="no" Keywords4="no" Keywords5="no" Keywords6="no" Keywords7="no" Keywords8="no" />
		</Settings>
		<KeywordLists>
			<Keywords name="Comments">00 01 02 03/% 03/* 03<!-- 04%/ 04*/ 04--></Keywords>
			<Keywords name="Numbers, prefix1"></Keywords>
			<Keywords name="Numbers, prefix2"></Keywords>
			<Keywords name="Numbers, extras1"></Keywords>
			<Keywords name="Numbers, extras2"></Keywords>
			<Keywords name="Numbers, suffix1"></Keywords>
			<Keywords name="Numbers, suffix2"></Keywords>
			<Keywords name="Numbers, range"></Keywords>
			<Keywords name="Operators1">+ - * / = += -= *= /= ++ -- == != === !== > < >= <= ! && || & | ( )</Keywords>
			<Keywords name="Operators2"></Keywords>
			<Keywords name="Folders in code1, open"><<if</Keywords>
			<Keywords name="Folders in code1, middle"></Keywords>
			<Keywords name="Folders in code1, close"><</if>></Keywords>
			<Keywords name="Folders in code2, open"></Keywords>
			<Keywords name="Folders in code2, middle"></Keywords>
			<Keywords name="Folders in code2, close"></Keywords>
			<Keywords name="Folders in comment, open"></Keywords>
			<Keywords name="Folders in comment, middle"></Keywords>
			<Keywords name="Folders in comment, close"></Keywords>
			<Keywords name="Keywords1">$ _</Keywords>
			<Keywords name="Keywords2"></Keywords>
			<Keywords name="Keywords3"></Keywords>
			<Keywords name="Keywords4"></Keywords>
			<Keywords name="Keywords5"></Keywords>
			<Keywords name="Keywords6"></Keywords>
			<Keywords name="Keywords7"></Keywords>
			<Keywords name="Keywords8"></Keywords>
			<Keywords name="Delimiters">00:: 01 02((EOL)) 03<< 04 05>> 06[[ 07 08]] 09< 10 11> 12'' 13 14'' 15// 16 17// 18@@ 19 20@@ 21[img[ 22 23]]</Keywords>
		</KeywordLists>
		<Styles>
			<WordsStyle name="DEFAULT" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="COMMENTS" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="2" nesting="0" />
			<WordsStyle name="LINE COMMENTS" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="NUMBERS" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="KEYWORDS1" fgColor="004080" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
			<WordsStyle name="KEYWORDS2" fgColor="8080C0" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="KEYWORDS3" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="KEYWORDS4" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="KEYWORDS5" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="KEYWORDS6" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="KEYWORDS7" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="KEYWORDS8" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="OPERATORS" fgColor="800040" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
			<WordsStyle name="FOLDER IN CODE1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
			<WordsStyle name="FOLDER IN CODE2" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="FOLDER IN COMMENT" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="DELIMITERS1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="5" fontSize="12" nesting="0" />
			<WordsStyle name="DELIMITERS2" fgColor="800080" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="50334724" />
			<WordsStyle name="DELIMITERS3" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="1024" />
			<WordsStyle name="DELIMITERS4" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="32" />
			<WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="2" nesting="16" />
			<WordsStyle name="DELIMITERS7" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
			<WordsStyle name="DELIMITERS8" fgColor="8080FF" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
		</Styles>
	</UserLang>
</NotepadPlus>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48" height="48" version="1.1" inkscape:version="0.48.0 r9654">
  <defs id="defs4"/>
  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="11.313708" inkscape:cx="27.203376" inkscape:cy="26.578528" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1280" inkscape:window-height="968" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1">
	<inkscape:grid type="xygrid" id="grid2985" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
  </sodipodi:namedview>
  <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1004.3622)">
	<g id="g3000" transform="translate(-6,1003)">
	  <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path2987" d="m 30,2.3621826 -20,10.0000004 20,10 20,-10 z" style="fill:#f9f9f9;stroke:none"/>
	  <path style="fill:#ececec;stroke:none" d="m 30,22.362183 0,25 20,-10 0,-25 z" id="path2989" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	  <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path2991" d="m 30,22.362183 0,25 -20,-10 0,-25 z" style="fill:#cccccc;stroke:none"/>
	  <path inkscape:connector-curvature="0" id="path2993" d="M 30,2.3749996 10,12.375 l 0,25 20,10 20,-10 0,-25 L 30,2.3749996 z" style="fill:none;stroke:#4d4d4d;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
	</g>
  </g>
  <metadata>
	<rdf:RDF>
	  <cc:Work>
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
		<dc:publisher>
		  <cc:Agent rdf:about="http://openclipart.org/">
			<dc:title>Open Clip Art Library</dc:title>
		  </cc:Agent>
		</dc:publisher>
		<dc:title>Sugar Cube icon</dc:title>
		<dc:date>2010-10-10T11:46:52</dc:date>
		<dc:description>A sugar cube.</dc:description>
		<dc:source>http://openclipart.org/detail/89407/sugar-cube-icon-by-jhnri4</dc:source>
		<dc:creator>
		  <cc:Agent>
			<dc:title>jhnri4</dc:title>
		  </cc:Agent>
		</dc:creator>
		<dc:subject>
		  <rdf:Bag>
			<rdf:li>SVG</rdf:li>
			<rdf:li>block</rdf:li>
			<rdf:li>clip art</rdf:li>
			<rdf:li>clipart</rdf:li>
			<rdf:li>cube</rdf:li>
			<rdf:li>icon</rdf:li>
			<rdf:li>sugar</rdf:li>
			<rdf:li>white</rdf:li>
		  </rdf:Bag>
		</dc:subject>
	  </cc:Work>
	  <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
		<cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
		<cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
		<cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
	  </cc:License>
	</rdf:RDF>
  </metadata>
</svg>


code:
#!/bin/bash

if [ ! -f "$(command -v tweego)" ]; then
	echo "Cannot find tweego. Please install tweego before compiling."
	exit 1
fi

VERSION="$(git describe --tags --always --dirty)"

TWEEGO_PATH="./StoryFormats" tweego -o "Degrees of Lewdity $VERSION.html" game
cp "Degrees of Lewdity $VERSION.html" "Degrees of Lewdity.html"
echo "Done: \"Degrees of Lewdity.html\""

path: compile


code:
@set TWEEGO_PATH=%cd%\StoryFormats
@tweego -o "Degrees of Lewdity VERSION.html" game


code:
#!/usr/bin/env python3
import fileinput
import re
import sys

WARNING = '\033[93m'
ENDC = '\033[0m'

def myprint(*args):
	global filename
	print(WARNING, filename + ":", ENDC,*args)

def yield_line_and_islastline(f):
	global filename
	global linenumber
	try:
		prevline = next(f)
		filename = fileinput.filename()
		linenumber = fileinput.filelineno()
	except StopIteration:
		return
	for line in f:
		yield (prevline, f.isfirstline())
		filename = fileinput.filename()
		linenumber = fileinput.filelineno()
		prevline = line
	yield prevline, True

pattern = re.compile(r'(<<(\/?) *(if|for|else|switch|case|replace|link)[^a-zA-Z][^<>]*)')

tagfound = []
try:
	for line, isLastLine in yield_line_and_islastline(fileinput.input()):
		for (whole,end,tag) in re.findall(pattern,line):
			if tag == "else" or tag == 'case':
				if len(tagfound) == 0:
					myprint("Found", tag, "but with no opening tag:")
					myprint("  ", linenumber,":", whole)
					fileinput.nextfile()
				lasttag = tagfound[-1]
				if (tag == "else" and lasttag["tag"] != "if") or (tag == "case" and lasttag["tag"] != "switch"):
					myprint("Mismatched else: Opening tag was:")
					myprint("  ",lasttag["linenumber"],":", lasttag["whole"])
					myprint("But this tag was:")
					myprint("  ",linenumber,":", whole)
					fileinput.nextfile()
					break
			elif end != '/':
				tagfound.append({"whole": whole, "linenumber":linenumber,"tag":tag})
			else:
				if len(tagfound) == 0:
					myprint("Found closing tag but with no opening tag:")
					myprint("  ", linenumber,":", whole)
					fileinput.nextfile()
					break
				lasttag = tagfound.pop()
				if lasttag["tag"] != tag:
					myprint("Mismatched tag: Opening tag was:")
					myprint("  ",lasttag["linenumber"],":", lasttag["whole"])
					myprint("Closing tag was:")
					myprint("  ",linenumber,":", whole)
					fileinput.nextfile()
					break

		if isLastLine:
			if len(tagfound) != 0:
				myprint("End of file found but", len(tagfound), ("tag hasn't" if len(tagfound)==1 else "tags haven't"), "been closed:")
			for tag in tagfound:
				myprint("  ", tag["linenumber"],":", tag["whole"])
			tagfound = []
except UnicodeDecodeError as e:
	myprint(e)
	print("   Hint: In Linux, you can get more details about Unicode errors by running:")
	print("	 isutf8", fileinput.filename())
	print("   :Note it might be caused by ", filename)


code:
:: StoryData
{
"ifid": "A6AFB52D-38F2-4CB5-86A8-54BF665670D6"
}

:: StorySettings
ifid:53a77e3c-607d-4e9a-9da4-db728646c388

:: StoryTitle
Degrees of Lewdity

:: Start [nobr nosave]
<<effects>>

This work of fiction contains content of a sexual nature and is inappropriate for minors. All characters depicted are at least 18 years of age. Everything is consensual role play, and any animals are actually people in costumes.

Save files are stored in your browser's cache. Save to file in the Export/Import tab in options to avoid losing them.

<<initsettings>>
<<settings>>

[[Begin->Start2]]

:: Start2 [nobr]

<<variablesStart2>>
<<effects>>

Welcome to the alpha of Degrees of Lewdity!

If you want to avoid trouble, dress modestly and stick to safe, well-lit areas. Nights are particularly dangerous. Dressing lewd will attract attention, both good and bad.

The new school year starts tomorrow at 9:00. The bus service is the easiest way to get around town. Don't forget your uniform!

<<link [[Next|Orphanage Intro]]>><</link>>

<<if $debug is 1>><<set $cheatdisable to "f">><<set $money to 500000>>
	<<link [[School Start|Oxford Street]]>><<pass 1 day>><</link>>

	<<link [[Science Start|Oxford Street]]>><<pass 1 day>><<pass 2 hours>><</link>>

	<<link [[Maths Start|Oxford Street]]>><<pass 1 day>><<pass 3 hours>><</link>>

	<<link [[English Start|Oxford Street]]>><<pass 1 day>><<pass 4 hours>><</link>>

	<<link [[History Start|Oxford Street]]>><<pass 1 day>><<pass 6 hours>><</link>>

	<<link [[Swimming Start|Oxford Street]]>><<pass 1 day>><<pass 7 hours>><</link>>

	<<link [[Testing Room]]>><<upperstrip>><<lowerstrip>><<underlowerstrip>><</link>>

	<<link [[Robin Low Trauma Low Love|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $NPCName[$NPCNameList.indexOf("Robin")].love to 0>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 2>><<trauma 60>><</link>>

	<<link [[Robin Low Trauma Medium Love|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $NPCName[$NPCNameList.indexOf("Robin")].love to 50>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 2>><<trauma 60>><</link>>

	<<link [[Robin Low Trauma High Love|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $NPCName[$NPCNameList.indexOf("Robin")].love to 90>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 2>><<trauma 60>><</link>>

	<<link [[Robin High Trauma Low Love|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $NPCName[$NPCNameList.indexOf("Robin")].love to 0>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>>

	<<link [[Robin High Trauma Medium Love|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $NPCName[$NPCNameList.indexOf("Robin")].love to 50>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>>

	<<link [[Robin High Trauma High Love|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $NPCName[$NPCNameList.indexOf("Robin")].love to 90>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>>

	<<link [[Robin After Paying Police With Money|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $robinpolicepay to 1>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>>

	<<link [[Robin After Paying Police With Body|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $robinpolicebody to 1>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>>

	<<link [[Robin's Debt Paid|Robin's Room Entrance]]>><<npc Robin>><<endevent>><<set $robinpaid to 1>><<set $NPCName[$NPCNameList.indexOf("Robin")].init to 1>><<set $trauma to ($traumamax / 7) * 4>><<trauma 60>><</link>>

<</if>>


code:
Config.history.controls = false;

Config.history.maxStates = 1;

State.initPRNG();

window.versionUpdateCheck = true;

Config.saves.onLoad = function (save) {
	window.versionUpdateCheck = true;
}

/*LinkNumberify and images will enable or disable the feature completely*/
/*debug will enable or disable the feature only for new games*/
window.StartConfig = {
	"debug": 1,
	"enableImages": true,
	"enableLinkNumberify": true,
	"version": "0.2.5.3",
}

config.saves.autosave = "autosave";

Config.saves.isAllowed = function () {
	if (tags().contains("nosave")) {
		return false;
	}
	return true;
};

prehistory['version-update'] = function () {
	if (Story.has('VersionUpdate')) {
		try {
			Wikifier.wikifyEval(Story.get('VersionUpdate').text);
		}
		catch (ex) {
			Alert.error('VersionUpdate', ex.message);
		}
	}
};

importStyles("style.css")
.then(function () {
	console.log("External Style Sheet Active")
})
.catch(function (err) {
	console.log("External Style Sheet Missing");
});


code:
:: Widgets Version Info [widget]
<<widget "versioninfo">><<nobr>>

Degrees of Lewdity <<print StartConfig.version>>

"ETA Soon" edition

More information can be found at [[https://vrelnir.blogspot.com/| "https://vrelnir.blogspot.com/"]]

<</nobr>><</widget>>