:: Widgets Tentacles [widget]
<<widget "tentaclestart">>
	<<if $abomination isnot 1>>
		<<set $enemyarousalmax to 10000>>
	<</if>>

	<<set $tentacles to {
		"max": _args[0],
		"active": _args[0],
	}>>

	<<if _args[0]>>

		<<if _args[2]>>
			<<set _tentacleType to _args[2]>>
		<<else>>
			<<set _tentacleType to "tentacle">>
		<</if>>
		<<if ["root","shoot"].includes(_tentacleType)>>
			<<set _babyType to "vine">>
		<<elseif _tentacleType is "tendril">>
			<<set _babyType to "tentacle">>
		<<else>>
			<<set _babyType to _tentacleType>>
		<</if>>
		<<if ["root","shoot","vine","metal"].includes(_tentacleType) or _args[3] is "metal">>
			<<set $banishDisable to true>>
		<</if>>

		/* Deciding if tentacle templates should be defined somewhere else still */
		/* Argument 0 is the number of tentacles.
		* Argument 1 is health.
		* Argument 2 is tentacle type, which can be replaced with "vines", "machines" etc later on. Optional, unless also using Argument 3.
		* Argument 3 is variant, and will give different offspring as well as allowing different batches of descriptions.
		* Argument 4 is whether or not the variant impacts the full description and offspring. If Argument 4 is used, Argument 3 will only impact which description batches are part of _tentacledescs. If Argument 4 is "desc", Argument 3 will impact description batches and variant, but not offspring.*/
		<<set _tentacledescs to [
			{"desc":"slimy","baby":0,"size":2,"traits":[]},
			{"desc":"sticky","baby":0,"size":2,"traits":[]},
			{"desc":"thick","baby":_babyType,"size":3,"traits":[]},
			{"desc":"throbbing","baby":0,"size":2,"traits":[]},
			{"desc":"slick","baby":0,"size":2,"traits":[]},
			{"desc":"moist","baby":0,"size":2,"traits":[]},
			{"desc":"quivering","baby":0,"size":2,"traits":[]},
			{"desc":"sodden","baby":0,"size":2,"traits":[]},
			{"desc":"shivering","baby":0,"size":2,"traits":[]},
			{"desc":"shuddering","baby":0,"size":2,"traits":[]},
			{"desc":"convulsing","baby":0,"size":2,"traits":["hypno"]},
			{"desc":"undulating","baby":0,"size":2,"traits":[]},
			{"desc":"damp","baby":0,"size":2,"traits":[]},
			{"desc":"bulbous","baby":0,"size":3,"traits":[]},
			{"desc":"gyrating","baby":0,"size":2,"traits":[]},
			{"desc":"large","baby":_babyType,"size":3,"traits":[]},
			{"desc":"bumpy","baby":0,"size":2,"traits":[]},
			{"desc":"thin","baby":0,"size":1,"traits":[]},
			{"desc":"narrow","baby":0,"size":1,"traits":[]},
			{"desc":"squishy","baby":0,"size":2,"traits":[]},
			{"desc":"rough","baby":0,"size":2,"traits":["pain"]},
		]>>

		<<if _args[3]>>
			<<if _args[3] is "pale">>
				<<set _tentacledescs.push(
					{"desc":"ghostly","baby":_babyType,"size":2,"traits":[]},
					{"desc":"translucent","baby":0,"size":1,"traits":["hypno"]},
					{"desc":"twitching","baby":0,"size":2,"traits":[]},
					{"desc":"manic","baby":0,"size":3,"traits":[]},
					{"desc":"cloudy","baby":_babyType,"size":3,"traits":[]},
					{"desc":"ethereal","baby":0,"size":1,"traits":[]},
					{"desc":"incandescent","baby":0,"size":3,"traits":["hypno"]},
					{"desc":"iridescent","baby":_babyType,"size":2,"traits":["hypno"]},
					{"desc":"searing","baby":0,"size":3,"traits":["pain"]},
				)>>
			<<elseif _args[3] is "vine">>
				<<set _tentacledescs.push(
					{"desc":"flowering","baby":_babyType,"size":3,"traits":[]},
					{"desc":"blossoming","baby":0,"size":3,"traits":[]},
					{"desc":"wooden","baby":0,"size":2,"traits":[]},
					{"desc":"blooming","baby":_babyType,"size":2,"traits":["hypno"]},
					{"desc":"climbing","baby":0,"size":2,"traits":[]},
					{"desc":"mossy","baby":0,"size":2,"traits":[]},
					{"desc":"grassy","baby":0,"size":2,"traits":[]},
					{"desc":"thorny","baby":0,"size":2,"traits":["pain"]},
					{"desc":"pistil","baby":_babyType,"size":1,"traits":[]},
					{"desc":"leafy","baby":0,"size":1,"traits":[]},
					{"desc":"sprouting","baby":0,"size":1,"traits":[]},
					{"desc":"sapling","baby":0,"size":1,"traits":[]},
				)>>
			<<elseif _args[3] is "metal">>
				<<set _tentacledescs.push(
					{"desc":"jerking","baby":0,"size":3,"traits":[]},
					{"desc":"plated","baby":0,"size":3,"traits":[]},
					{"desc":"sparking","baby":0,"size":2,"traits":["pain"]},
					{"desc":"shiny","baby":0,"size":2,"traits":[]},
					{"desc":"labelled","baby":_babyType,"size":2,"traits":[]},
					{"desc":"jolting","baby":0,"size":2,"traits":["pain"]},
					{"desc":"rusted","baby":0,"size":2,"traits":[]},
					{"desc":"wired","baby":0,"size":1,"traits":["hypno"]},
					{"desc":"stainless","baby":0,"size":1,"traits":[]},
				)>>
			<</if>>
		<</if>>

		<<set _tentacledescs to shuffle(_tentacledescs)>>

		<<for _i to 0; _i lt _args[0]; _i++>>
			<<set _tentacledata to _tentacledescs[_i]>>

			<<set _tentacle to {
				"desc": (_args[3] and (!_args[4] or _args[4] is "desc") ? _args[3] + " " : "" ) + _tentacledata.desc,
				"fullDesc": (_args[3] and (!_args[4] or _args[4] is "desc") ? _args[3] + " " : "" ) + _tentacledata.desc + " " + _tentacleType,
				"type": _tentacleType,
				"tentaclehealth": _args[1],
				"tentaclehealthstart": _args[1],
				"shaft": 0,
				"head": 0,
				"id": "tentacle"+_i,
				"baby": (_args[3] and (!_args[4] or _args[4] is "baby") and _tentacledata.baby isnot 0 ? _args[3] + " " + _tentacledata.baby : _tentacledata.baby ),
				"babychance": 400,
				"size": _tentacledata.size,
				"traits": _tentacledata.traits
			}>>

			<<set $tentacles[_i] to clone(_tentacle)>>
		<</for>>

	<</if>>
	<<set $combat to 1>>

	<<if $rng gte 51>>
	<<set $position to "missionary">>
	<<else>>
	<<set $position to "doggy">>
	<</if>>
	<<wetnessCalculate>>
	<<resetLastOptions>>
	<<getCombatDefaultsType>>

	<<if !$tentacleColour>>
		<<if $tentacles[0].fullDesc.includes("pale")>>
			<<set $tentacleColour to "tentacles-wraith">>
		<<elseif $tentacles[0].fullDesc.includes("metal")>>
			<<set $tentacleColour to "tentacles-red">>
		<<elseif $tentacles[0].type>>
			<<switch $tentacles[0].type>>
				<<case "vine" "shoot">>
					<<set $tentacleColour to "tentacles-vines">>
				<<case "root">>
					<<set $tentacleColour to "tentacles-roots">>
				<<default>>
					<<set $tentacleColour to "tentacles-purple">>
			<</switch>>
		<<else>>
			<<set $tentacleColour to "tentacles-purple">>
		<</if>>
	<</if>>
<</widget>>

<<widget "tentacles">>
	<div @class="($debugLines ? 'debugLines-tentacles' : '')">
	<<for _i to 0; _i lt $tentacles.max; _i++>>
		<<set _tentacle to $tentacles[_i]>>
		<<if _tentacle isnot undefined>>
			<<tentacleadv _tentacle>>
			<<set _tentacle.tentaclehealth -= 0.2>>
		<</if>>
	<</for>>

	<<if $panicattacks gte 1 and $panicviolence is 0 and $panicparalysis is 0 and $controlled is 0 and _panicchecked isnot true>>
		<<rng>>
		<<if $rng is 100>>
			<<set $panicparalysis to 5>>
		<</if>>
		<<set _panicchecked to true>>
	<</if>>
	<<if $panicattacks gte 2 and $panicviolence is 0 and $panicparalysis is 0 and $controlled is 0 and _paniccheckedviolence isnot true>>
		<<rng>>
		<<if $rng is 100>>
			<<set $panicviolence to 3>>
		<</if>>
		<<set _paniccheckedviolence to true>>
	<</if>>
	<<if $arousal gte $arousalmax and $orgasmdown lte 0>>
		<<orgasm>>
	<</if>>
	<br>
	</div>
<</widget>>

<<widget "effectstentacles">>
	<<effectspain>>
	<<effectsorgasm>>
	<<effectsdissociation>>

	<div @class="($debugLines ? 'debugLines-effectstentacleadv' : '')">
		<<for _i to 0; _i lt $tentacles.max; _i++>>
			<<if $tentacles[_i] isnot undefined>>
				<<set _tentacle to $tentacles[_i]>>
				<<effectstentacleadv _tentacle>>
			<</if>>
		<</for>>
	</div>

	<br>
<</widget>>

<<widget "actionstentacles">>
	<div @class="($debugLines ? 'debugLines-actionstentacles' : '')">
		<<set $enemyarousal to $arousal>>
		<<if $vorecreature is 0 and _swarmcreature is undefined>>
			<<animateCombat>>
		<</if>>
		<<willpowerpain>>
		<<willpowerorgasm>>
		<<actioncarry>>
		<<actioncarrydrop>>

		<<combatstate>>
		<<carryblock>>

		<<if $trance lte 0 and $panicparalysis is 0 and $panicviolence is 0>>
			<<generateActionsTentacle>>
		<</if>>

	</div>
	<br><br>
<</widget>>

<<widget "actionstentaclespenis">> /* unused */
	<<for _i to 0; _i lt $tentacles.max; _i++>>
		<<if $tentacles[_i] isnot undefined>>
			<<set _tentacle to $tentacles[_i]>>
			<<actionstentacleadvpenis _tentacle>>
		<</if>>
	<</for>>
	<br>
<</widget>>

<<widget "actionstentacleslegs">> /* unused */
	<<for _i to 0; _i lt $tentacles.max; _i++>>
		<<if $tentacles[_i] isnot undefined>>
			<<set _tentacle to $tentacles[_i]>>
			<<actionstentacleadvlegs _tentacle>>
		<</if>>
	<</for>>
<</widget>>

<<widget "actionstentaclesrighthand">> /* unused */
	<<for _i to 0; _i lt $tentacles.max; _i++>>
		<<if $tentacles[_i] isnot undefined>>
			<<set _tentacle to $tentacles[_i]>>
			<<actionstentacleadvrighthand _tentacle>>
		<</if>>
	<</for>>
<</widget>>

<<widget "actionstentacleslefthand">> /* unused */
	<<for _i to 0; _i lt $tentacles.max; _i++>>
		<<if $tentacles[_i] isnot undefined>>
			<<set _tentacle to $tentacles[_i]>>
			<<actionstentacleadvlefthand _tentacle>>
		<</if>>
	<</for>>
<</widget>>

<<widget "upperslither">>
	<<if $worn.over_upper.name isnot "naked">>
		then <<slithers>> beneath your $worn.over_upper.name<<if $worn.upper.name isnot "naked">> and $worn.upper.name<</if>>
	<<elseif $worn.upper.name isnot "naked">>
		then <<slithers>> beneath your $worn.upper.name
	<<else>>
		then <<slithers>> across your bare skin
	<</if>>
<</widget>>

<<widget "lowerslither">>
	<<if $worn.over_lower.name isnot "naked">>
		then <<slithers>> beneath your $worn.over_lower.name<<if $worn.lower.name isnot "naked">> and $worn.lower.name<</if>>
	<<elseif $worn.lower.name isnot "naked">>
		then <<slithers>> beneath your $worn.lower.name
	<<else>>
		then <<slithers>> across your bare skin
	<</if>>
<</widget>>

<<widget "underslither">>
	<<if $worn.lower.name isnot "naked">>
		<<if !$worn.under_lower.type.includes("naked")>>
			then <<slithers>> beneath your $worn.lower.name and $worn.under_lower.name
		<<elseif playerChastity()>>
			then <<slithers>> beneath your $worn.lower.name against your <<print $worn.genitals.name>>
		<<else>>
		<</if>>
	<<else>>
		<<if !$worn.under_lower.type.includes("naked")>>
			then <<slithers>> beneath your $worn.under_lower.name
			<<if playerChastity("hidden")>>
				against your <<print $worn.genitals.name>>.
			<</if>>
		<<elseif $worn.under_lower.type.includes("naked") and playerChastity("hidden")>>
			then <<slithers>> against your <<print $worn.genitals.name>>
		<<else>>
			then <<slithers>> across your bare skin
		<</if>>
	<</if>>
<</widget>>

<<widget "statetentacles">>
	<<for _j to 0; _j lt $tentacles.max; _j++>>
		<<if $tentacles[_j] isnot undefined>>
			<<if $tentacles[_j].shaft is "finished" and $tentacles[_j].name isnot "finished">>
				<<set $tentacles.active -= 1>>
				<<set $tentacles[_j].name to "finished">>
			<</if>>
		<</if>>
	<</for>>
<<sexcheck>>
<<if $ejaculating isnot 1>>
	You count <<number $tentacles.active>> <<print $tentacles[0].type>><<if $tentacles.active isnot 1>>s<</if>> surrounding you.
	<br><br><br>
<</if>>
<</widget>>

<<widget "leftarmtentacledisable">>
	<<for _j to 0; _j lt $tentacles.max; _j++>>
		<<if $tentacles[_j] isnot undefined>>
			<<if $tentacles[_j].id is $leftarm>>
				<<set $tentacles[_j].head to 0>>
			<</if>>
		<</if>>
	<</for>>
<</widget>>

<<widget "rightarmtentacledisable">>
	<<for _j to 0; _j lt $tentacles.max; _j++>>
		<<if $tentacles[_j] isnot undefined>>
			<<if $tentacles[_j].id is $rightarm>>
				<<set $tentacles[_j].head to 0>>
			<</if>>
		<</if>>
	<</for>>
<</widget>>

<<widget "feettentacledisable">>
	<<for _j to 0; _j lt $tentacles.max; _j++>>
		<<if $tentacles[_j] isnot undefined>>
			<<if $tentacles[_j].id is $feetuse>>
				<<set $tentacles[_j].head to 0>>
			<</if>>
		<</if>>
	<</for>>
<</widget>>