Imports System.Runtime.CompilerServices

Public Module Extensions
	Public ControlColour As Color = Color.FromArgb(255, 240, 240, 240)
	Public Lynne, Aradia, Petra As Character

	'************************
	'*****CHARACTER INFO*****
	'************************
	Public Sub LoadDefaultCharacters() 'anything omitted is false by default
		With Lynne
			.FirstName = "Lynne"
			.LastName = "Megido"
			With .Basics
				.Height = 167
				.Weight = 72
				.Race = "human"
				.EyeColour = "dark brown"
				.BodyShape = 3 'curvy
				.Strength = 1
				.SkinColour = 1
				.Boobs.CupSize = 3 'C cups, because a girl can dream ;u;
				.Boobs.AreolaSize = 2
				.Boobs.NippleSize = 2
				.ButtSize = 5
				.Hair.Length = "long (mid-back)"
				.Hair.Colour = "brown"
				.Hair.Wavy = True
			End With
			With .Genitals
				.HasVagina = True
				With .Vagina
					.ClitSize = 4
					.Depth = 8
					.Tightness = 3
					.Wetness = 5
					.HymenIntact = True
					.LeaksCum = True
				End With
			End With
			With .Sexuality
				.Horniness.Frequency = 4
				.Horniness.Strength = 4
				.Horniness.RechargeTime = 2
				.Moaning.Easiness = 5
				.Moaning.Volume = 4
				.SD.IsSub = True
				.Position.DoesntMind = True
				.PreferredGenitalia = 5 'bias towards cocks <3
				With .Kinks
					.EnjoysBeingShorter = True
					.EnjoysBeingWeaker = True
					With .Receiving
						.IntoDegradation = True
						.IntoExhibitionism = True
						.IntoCommanding = True
						.IntoOwnership = True
						.IntoPudge = True
						With .Degradation
							.EnjoyedNames = {"slut", "cockslut", "cumslut", "whore", "bitch in heat"}
							.EnjoyedInsultTopics = {"weakness", "wetness"}
							.EnjoyedInsultingAdjectives = {"easy", "horny"}
						End With
						With .Exhibitionism
							.Kiss = True
							.MakeOut = True
							.DressRevealingly = True
							.BeNaked = True
							.PerformOral = True
							.HaveCumAndOrJuicesVisible = True
							.Fuck = True
						End With
						With .Commanding
							.Fuck = True
							.MakeOut = True
							.Masturbate = True
							.PerformOral = True
							.SpreadSelf = True
							.Undress = True
						End With
						.Noncon = 3
					End With
					With .Giving
						.IntoDegradation = True
						.IntoExhibitionism = True
						With .Degradation
							.EnjoyedNames = {"slut"}
						End With
						With .Exhibitionism
							.Kiss = True
							.MakeOut = True
							.DressRevealingly = True
							.BeNaked = True
							.PerformOral = True
							.HaveCumAndOrJuicesVisible = True
							.Fuck = True
						End With
						.Noncon = 2
					End With
				End With
			End With
			With .Personality
				.Humour = 5
				.Intelligence = 3
				.SelfEsteem = 1
				.Sensitivity = 5
				.Sluttiness = 5
				.Tsundere = 2
				.Ambition = 2
				With .Interests
					.Computers = True
					.BeingAHousewife = True
					.Gaming = True
					.Porn = True
				End With
				With .Disinterests
					.History = True
					.Geography = True
					.Religion = True
				End With
				.FavouriteCompliments = {"so cute", "so adorable", "adorable", "amazing"}
				.Compliments = {"great with computers", "hilarious", "wonderful"}
				.PetNames = {"cutie", "cream puff", "sweetie", "honey bunch"}
			End With
			With .Outfits
				With .Outfit1
					With .Top
						.ShortSleeves = True
						.PrimaryColour = "white"
						.SecondaryColour = "black"
						.Pattern = "stripy (horizontal)"
					End With
					With .Bottom
						.IsSkirt = True
						.Length = 0
						.Pattern = "none"
						.PrimaryColour = "black"
						.SecondaryColour = "black"
					End With
				End With
			End With
		End With

		With Aradia
			.FirstName = "Aradia"
			.LastName = "Megido"
			With .Basics
				.Height = 172
				.Weight = 89
				.EyeColour = "dark brown"
				.Hair.Colour = "black"
				.Hair.Length = "long (lower back)"
				.Hair.Wavy = True
				.BodyShape = 5 'pudgy
				.Boobs.AreolaSize = 2
				.Boobs.CupSize = 7
				.Boobs.NippleSize = 2
				.ButtSize = 4
				.Race = "troll"
				.SkinColour = 1
				.Strength = 3
			End With
			With .Genitals
				.HasBoth = True
				.PreferenceLevel = 5 'prefers using her cock more than her vagoo
				With .Penis
					.CumAmount = 5
					.Length = 9
					.LargeWhenFlaccid = True
					.Girth = 3
					.Veiny = True
				End With
				With .Vagina
					.ClitSize = 5
					.Depth = 10
					.HymenIntact = True
					.LeaksCum = True
					.Tightness = 2
					.Wetness = 5
				End With
			End With
			With .Sexuality
				With .Horniness 'MAXIMUM OVERDRIVE
					.Frequency = 5
					.Strength = 5
					.RechargeTime = 1
				End With
				.Moaning.Easiness = 3
				.Moaning.Volume = 3
				.Position.DoesntMind = True
				.SD.IsDom = True
				.PreferredGenitalia = 2
				With .Kinks
					.EnjoysBeingTaller = True
					.EnjoysBeingStronger = True
					With .Giving
						.IntoDegradation = True
						.IntoExhibitionism = True
						.IntoCommanding = True
						.IntoOwnership = True
						.IntoPudge = True
						With .Commanding
							.MakeOut = True
							.Fuck = True
							.Masturbate = True
							.PerformOral = True
							.SpreadSelf = True
							.Undress = True
						End With
						With .Exhibitionism
							.Kiss = True
							.MakeOut = True
							.DressRevealingly = True
							.BeNaked = True
							.PerformOral = True
							.HaveCumAndOrJuicesVisible = True
							.Fuck = True
						End With
						.Noncon = 2
					End With
					With .Receiving
						.IntoExhibitionism = True
						.IntoPudge = True
						With .Exhibitionism
							.Kiss = True
							.MakeOut = True
							.DressRevealingly = True
							.BeNaked = True
							.PerformOral = True
							.HaveCumAndOrJuicesVisible = True
							.Fuck = True
						End With
						.Commanding.MakeOut = True
					End With
				End With
			End With
			With .Personality
				.Humour = 4
				.Intelligence = 4
				.SelfEsteem = 4
				.Sensitivity = 4
				.Sluttiness = 5
				.Tsundere = 1
				.Ambition = 3
				With .Interests
					.Geography = True
					.History = True
					.Gaming = True
					.Porn = True
				End With
				With .Disinterests
					.Politics = True
					.Religion = True
				End With
				.FavouriteCompliments = {"so cute", "so adorable", "so cool", "adorable", "amazing", "so hot", "wonderfully pudgy", "curvy as fuck"}
				.Compliments = {"so cool with your time powers", "really hot", "wonderful", "inspiring"}
				.PetNames = {"sweet pea", "cream puff", "mistress", "honey bunch"}
			End With
			With .Outfits
				With .Outfit1
					With .Top
						.Pattern = "Aries symbol"
						.PrimaryColour = "black"
						.SecondaryColour = "dark red"
					End With
					With .Bottom
						.IsSkirt = True
						.Length = 1
						.Pattern = "none"
						.PrimaryColour = "black"
						.SecondaryColour = "black"
					End With
				End With
			End With
		End With

	End Sub

	Public Structure GodTierInfo
		Dim IsGodTier As Boolean
		Dim GodClass, Aspect As String
	End Structure

	Public Structure Hairstyle
		Dim Colour, Length As String
		Dim Wavy As Boolean
	End Structure

	Public Structure Breasts 'what am i doing with my life
		Dim CupSize, NippleSize, AreolaSize As Integer
	End Structure

	Public Structure CharacterBasics
		Dim Height, Weight, Strength, SkinColour, ButtSize, BodyShape As Integer
		Dim Race, EyeColour As String
		Dim GodTier As GodTierInfo
		Dim Hair As Hairstyle
		Dim Boobs As Breasts 'fucking hell
	End Structure

	Public Structure PenisInfo '8======D
		Dim Length, Girth, CumAmount As Integer
		Dim LargeWhenFlaccid, Permaflaccid, Veiny, Sterile As Boolean
	End Structure

	Public Structure VaginaInfo '{'}
		Dim Depth As Double
		Dim Tightness, Wetness, ClitSize As Integer
		Dim Fertile, LeaksCum, HymenIntact As Boolean
	End Structure

	Public Structure CharacterGenitals
		Dim Penis As PenisInfo
		Dim Vagina As VaginaInfo
		Dim HasPenis, HasVagina, HasBoth As Boolean
		Dim PreferenceLevel As Integer
		'0: Strongly vagoo. 6: Strongly benis.
	End Structure

	Public Structure SubDomInfo
		Dim IsDom, IsSub, IsSwitch As Boolean
	End Structure

	Public Structure TopBottomInfo
		Dim IsTop, DoesntMind, IsBottom As Boolean
	End Structure

	Public Structure HorninessInfo
		Dim Frequency, Strength, RechargeTime As Integer
	End Structure

	Public Structure MoanInfo
		Dim Easiness, Volume As Integer
	End Structure

	Public Structure DegradationInfo
		Dim EnjoyedNames() As String 'likes calling her partner a _______.e.g. slut, whore, hoe
		Dim EnjoyedInsultingAdjectives() As String 'likes calling her partner a ________ person. e.g. easy, worthless, desparate
		Dim EnjoyedInsultTopics() As String 'enjoys insulting her partner's ________. e.g. small cock, wetness, weight
		'format like this: {"small cock", "wetness", "short", "tall"}
		'meaning: this character enjoys being made fun of for her small cock and her wet her pussy gets, along with how short OR tall she is compared to her partner.
	End Structure

	Public Structure ExhibitionismInfo
		Dim Kiss, MakeOut, DressRevealingly, PerformOral, HaveCumAndOrJuicesVisible, BeNaked, Fuck
	End Structure

	Public Structure CommandingInfo
		Dim MakeOut, Undress, PerformOral, Masturbate, SpreadSelf, Fuck As Boolean
	End Structure

	Public Structure KinkInfo
		Dim Degradation As DegradationInfo
		Dim Exhibitionism As ExhibitionismInfo
		Dim Commanding As CommandingInfo
		Dim Noncon As Integer '1: not into noncon, 2: would enjoy unexpected kisses from attractive girls, 3. would enjoy being groped/fondled by someone attractive, 4. would enjoy getting groped, 5. has rape fantasy
		Dim IntoDegradation, IntoExhibitionism, IntoCommanding, IntoOwnership, IntoPudge As Boolean
	End Structure

	Public Structure CharacterKinkInfo
		Dim Giving, Receiving As KinkInfo
		Dim EnjoysBeingShorter, EnjoysBeingTaller, EnjoysBeingStronger, EnjoysBeingWeaker As Boolean
	End Structure

	Public Structure CharacterSexuality
		Dim SD As SubDomInfo
		Dim Position As TopBottomInfo
		Dim Kinks As CharacterKinkInfo
		Dim Moaning As MoanInfo
		Dim Horniness As HorninessInfo
		Dim PreferredGenitalia As Integer '0:100% vagoo, 6: 100% benis
	End Structure

	Public Structure InterestsInfo
		Dim Computers, Gaming, Cooking, BeingAHousewife, Politics, Science, Healthcare, Porn, Art, Music, Geography, History, WorldNews, Religion As Boolean
	End Structure

	Public Structure CharacterPersonality
		Dim Intelligence, Humour, SelfEsteem, Sensitivity, Tsundere, Sluttiness, Ambition As Integer
		Dim Goals As String() 'TODO
		Dim FavouriteCompliments As String()
		Dim Compliments As String()
		Dim PetNames As String()
		Dim Interests, Disinterests As InterestsInfo
	End Structure

	Public Structure OutfitTop
		Dim ShortSleeves As Boolean
		Dim PrimaryColour, SecondaryColour, Pattern As String
	End Structure

	Public Structure OutfitBottom
		Dim IsSkirt As Boolean
		Dim Length As Integer '0:Mini, 1:Short, 2:Long
		Dim PrimaryColour, SecondaryColour, Pattern As String
	End Structure

	Public Structure CharacterOutfit
		Dim Top As OutfitTop
		Dim Bottom As OutfitBottom
	End Structure

	Public Structure CharacterOutfits
		Dim Outfit1, Outfit2, Outfit3 As CharacterOutfit
	End Structure

	Public Structure CharacterStatus
		Dim Horniness, Hunger, Fatigue, Mood As Integer
		Dim Location, CurrentGenitalia As String
		Dim WearingBra, WearingPanties, WearingTop, WearingBottom As Boolean
	End Structure

	Public Structure Character
		Dim FirstName, LastName As String
		Dim Basics As CharacterBasics
		Dim Genitals As CharacterGenitals
		Dim Sexuality As CharacterSexuality
		Dim Personality As CharacterPersonality
		Dim Outfits As CharacterOutfits
		Dim Status As CharacterStatus
	End Structure

	'*******************
	'***REUSABLE CODE***
	'*******************

	Public Function GetPath(file As String)
		Dim FileArray As String() = file.Split("\")
		Dim ReturnMe As String = ""
		For i = 0 To FileArray.Length - 2
			ReturnMe &= FileArray(i) & "\"
		Next
		Return ReturnMe
	End Function

	Public Function RandomArrayObject(Array)
		If IsNothing(Array) Then Return "===ERROR: Passed array is empty!==="
		Return Array(Rnd() * (Array.Length - 1))
	End Function

	Public Function RAO(Array)
		Return RandomArrayObject(Array)
	End Function

	Public Function ProgramIcon()
		Return Icon.ExtractAssociatedIcon(Application.ExecutablePath)
	End Function

	<Extension()>
	Public Function RemoveLast(ByVal StringToModify As String, AmountToRemove As Integer)
		Return StringToModify.Remove(StringToModify.Length - AmountToRemove)
	End Function

	<Extension()>
	Public Function RemoveFirst(ByVal StringToModify As String, AmountToRemove As Integer)
		Return StrReverse(StrReverse(StringToModify).Remove(StringToModify.Length - AmountToRemove))
	End Function

	Public Function rgbColour(r As Integer, g As Integer, b As Integer)
		Return Color.FromArgb(255, r, g, b)
	End Function

	<Extension()>
	Function BatchRemove(ByRef StringToClean As String, TextToStrip As String())
		Dim ReturnText As String = StringToClean
		For i = 0 To TextToStrip.Count - 1
			ReturnText = ReturnText.Replace(TextToStrip(i), "")
		Next
		Return ReturnText
	End Function

	'******************
	'***END REUSABLE***
	'******************
End Module