Pig TF

From SkyCorp Global
Note - this Transformation is a modification for The Underworld. Visit the new Mods Portal for more mods, mods on the wiki are no longer maintained. You can put it in-game by visiting the Debug Mod Control Panel in the debug rooms and browse to this mod or copy/paste the JSON below into the program window.

Transformation Details

This transformation allows you to become an anthro pig. It comes in two parts: the Pig TF, and a Porker Pendant (a cursed clothing item). Please install both JSON codes into the mod panel in order to try out the transformation. (In the future I would like to add some more functionalities to this, but I'm currently not sure now to implement them.)

You may also be interested in the Pig King enemy, who can TF you into this form.

Author: Luxious

Transformation JSON Code

Pig Species

{
	"type": "SPECIES",
	"id": "Pig TF",
	"transformedBodyPartDescriptions":
	{
		"Feet": "black trotters",
		"Legs": "thick, hairless, pink thunder thighs",
		"Torso": "massively obese porcine body",
		"Arms": "flabby, hairless pink arms",		
		"Hands": "black trotters",
		"LBack_Attach": "curly pink tail",
		"Eyes": "greedy black eyes",
		"Head_Hair": "messy brown hair",
		"Teeth": "gentle molars",
		"Nose": "piggish snout",
		"Mouth": "protruding pink muzzle",
		"Ears": "short, pink pointy ears"
	},
	"causeTF":
	{
		"programVoid": true
	},
	"getIsFullyTransformed":
	{
		"programBoolean": true
	},
	"luac": "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"
}

Porker Pendant

{
	"type": "CLOTHING",
	"name":
	{
		"literalString": "Porker Pendant"
	},
	"description":
	{
		"literalString": "A pendant in the shape of a pig's face."
	},
	"getSlot":
	{
		"literalString": "neck"
	},
	"playerAttemptPickupCheck":
	{
		"programBoolean": true
	},
	"playerAttemptDropCheck":
	{
		"programBoolean": true
	},
	"inInventoryTick":
	{
		"programVoid": true
	},
	"luac":"G0x1YVEAAQQEBAgAEwAAAEBwb3JrZXJQZW5kYW50Lmx1YQAAAAAAAAAAAAAAAgIKAAAAJAAAAAcAAAAkQAAAB0AAACSAAAAHgAAABcAAAAYAQQAcQIAAHgCAAAUAAAAEGQAAAHBsYXllckF0dGVtcHRQaWNrdXBDaGVjawAEFwAAAHBsYXllckF0dGVtcHREcm9wQ2hlY2sABBAAAABpbkludmVudG9yeVRpY2sABAUAAAB0aGlzAAQLAAAAbWFrZUN1cnNlZAADAAAAAAAAAAIAAAAMAAAAAAAABBUAAAAFAAAABkBAAEGAAACFwAAAhgBBAZyAgADBQAEAVcCAABxAAAEFwAAABoBBAByAgAAaAAAAFsAAgAUAAAAGQEAAQcABABxAAAECAIAAHgAAAR4AgAAIAAAABAMAAABpbwAEBgAAAHdyaXRlAAQaAAAAWW91IHBpY2sgdXAgYW5kIHdlYXIgdGhlIAAEBQAAAHRoaXMABAgAAABnZXROYW1lAAQEAAAALiAgAAQKAAAAZ2V0Q3Vyc2VkAAQ5AAAAVGhlIGNoYWluIHNlZW1zIHRvIHRpZ2h0ZW4gYXJvdW5kIHlvdXIgbmVjayBieSBpdHNlbGYuCgoAAAAAABUAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAALAAAACwAAAAwAAAAAAAAAAAAAAAAAAAAPAAAAJAAAAAAAAAUeAAAABQAAAAZAQAAcgIAAGgAAABYAA4AFgAAABsBAAEUAAQBGQMEAgYABAMHAAQABAQIAlQABAVwAAAEcQAAAAgAAAB4AAAEWgAKABYAAAAbAQABFAAEARkDBAIFAAgDBgAIAlcAAAVwAAAEcQAAAAgCAAB4AAAEeAIAACwAAAAQFAAAAdGhpcwAECgAAAGdldEN1cnNlZAAECwAAAE1haW5TY3JlZW4ABAwAAABhZGRHYW1lVGV4dAAECQAAAEdhbWVUZXh0AAQKAAAAcGFyc2VUZXh0AAQZAAAAWW91IHRyeSB0byB0YWtlIG9mZiB0aGUgAARAAAAAcGVuZGFudCB3aXRoIHlvdXIgW1tIQU5EUyBERVNDUklQVElPTl1dLCBidXQgaXQgd29uJ3QgYnVkZ2UuLi4gAAQPAAAAaXQncyBjdXJzZWQhCgoABBoAAABZb3UgdGFrZSBvZmYgdGhlIHBlbmRhbnQgAAQ9AAAAd2l0aCB5b3VyIFtbSEFORFMgREVTQ1JJUFRJT05dXSBhbmQgZHJvcCBpdCB0byB0aGUgZ3JvdW5kLgoKAAAAAAAeAAAAEAAAABAAAAAQAAAAEAAAABAAAAASAAAAEgAAABIAAAASAAAAEgAAABMAAAAUAAAAFAAAABIAAAASAAAAHQAAAB0AAAAdAAAAIAAAACAAAAAgAAAAIAAAACAAAAAhAAAAIQAAACAAAAAgAAAAIgAAACIAAAAkAAAAAAAAAAAAAAAAAAAAJwAAADUAAAAAAAADHAAAAAUAAAAGQEAAQYAAAIHAAAAcgIABF8BAABbABIAFAAEABkBBAEGAAQAcQAABBQACAAZAQgBBgAIAHIAAAQfAAQAFwAEAF8BCABYAAYAFAAMABkBDAEGAAwAcQAABFoAAgAXAAQAGwEMAHECAAB4AgAAQAAAABAUAAABtYXRoAAQHAAAAcmFuZG9tAAMAAAAAAADwPwMAAAAAAAAAQAQDAAAAaW8ABAYAAAB3cml0ZQAELwAAAFlvdSBmZWVsIHRoZSBwZW5kYW50IGdyb3cgd2FybSBvbiB5b3VyIG5lY2suICAABAQAAABwaWcABAgAAABTcGVjaWVzAAQLAAAAZ2V0U3BlY2llcwAEBwAAAFBpZyBURgAABAsAAABNYWluU2NyZWVuAAQMAAAAYWRkR2FtZVRleHQABCcAAABQbGVhc2UgbG9hZCB0aGUgUGlnIFRGIG1vZCBkZWZpbml0aW9uLgAECAAAAGNhdXNlVEYAAAAAABwAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKwAAACsAAAArAAAAKwAAAC4AAAAuAAAALgAAAC4AAAAuAAAALwAAAC8AAAAvAAAAMAAAADAAAAAwAAAAMAAAADAAAAAyAAAAMgAAADIAAAA1AAAAAAAAAAAAAAAKAAAADAAAAAIAAAAkAAAADwAAADUAAAAnAAAAOQAAADkAAAA5AAAAOQAAAAAAAAAAAAAA"
}

Lua Code

Pig Species

-- Called to trigger this species transformation on the player.
function causeTF()
	-- In this setup, a separate function exists for each body part 
	-- transformation.  Each will return true in the event that it effects the
	-- player.  Thanks to shortcutting, only one transformation will take place.
	-- Feel free to change the ordering to have the TF happen in a different
	-- order, or evaluating multiple times can make several body parts change at
	-- once (here, nose & mouth happens at the same time thanks to the AND).
	transformedAnything = tfFeet() or tfLegs() or tfTorso() or tfArms() or tfHands() or
		tfLBackAttach() or tfEyes() or tfHeadHair() or tfTeeth() or (tfMouth() and
		tfNose()) or tfEars();

	-- Height TF happens slowly, so do it every TF step:
	tfHeight();
end

function tfFeet()
	-- getSeverityTFed() returns the severity of transformation to a particular 
	-- species for a particular body part.  0 is returned for human or for a 
	-- TF to a different species.
	if this.getSeverityTFed(BodyPart.getBodyPart("feet")) > 0 then
		return false; -- Already transformed
	end

	-- Transformation has not yet taken place, so transform the player.

	-- Includes spaces after the sentence in case multiple TFs are called.
	MainScreen.addGameText("Your feet solidify into black trotters.  ");

	-- Change body part
	setTransformed("feet");
end

function tfLegs()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("legs")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("Your legs grow thicker and thicker, rolls forming on your inner thighs.  ");
   setTransformed("legs");
end

function tfTorso()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("torso")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("Your body begins to bloat outward. You can feel your chest expanding as your tits fill up with additional fat. Your belly begins to ache as it stretches to accommodate the rapid expansion of your fat cells beneath your groaning skin. Bright red stretch marks begin to appear across your bloated frame.  ");
   setTransformed("torso");

	-- Pigs will have two rows of breasts, because why not.
	player = Player.getInstance();
	if player.getBreastRows() < 3 then
		player.tfIncBreastRows();
	elseif player.getBreastRows() > 3 then
		player.tfDecBreastRows();
	end
end

function tfArms()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("arms")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("Your arms grow a thick layer of blubber as they turn a light pink color.   ");
   setTransformed("arms");
end

function tfHands()
	-- Comments omited for brevity, these functions follow the same pattern as
	-- tfFeet(), so see that for an example.
	if this.getSeverityTFed(BodyPart.getBodyPart("hands")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("Your hands fuse into black trotters.  ");
   setTransformed("hands");
end

function tfLBackAttach()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("LBack_Attach")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText(GameText.parseText("You feel a slight pain just above your expansive ass. You can just barely see back far enough to see that a small, curly, pink tail has grown out of it.    "));
   setTransformed("LBack_Attach");
end

function tfEyes()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("eyes")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("You sense your eyes growing black with a gluttonous glint in them.  ");
   setTransformed("eyes");
end

function tfHeadHair()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("head_hair")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText(GameText.parseText("Suddenly you feel a strange sensation on your head.  Moving your [[HANDS DESCRIPTION]] to it and feeling around, you notice that your hair has become a greasy mess.  "));
   setTransformed("head_hair");
end

function tfHeight()
	player = Player.getInstance();
	targetHeight = 84; -- 8ft tall
	if player.getHeight() < targetHeight then
		-- This function uses setHeight instead of tfHeight so as to exceed normal height limitations
		-- as well as to not output the usual height TF text.
		player.setHeightSilent(player.getHeight() + 2);
		MainScreen.addGameText("You feel your body elongate, leaving more space for blubber to build on your body. You now stand " .. player.getHeightString() .. ".  ");
		return true;
	end

	return false; -- Already transformed
end

function tfTeeth()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("teeth")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("You experimentally grind your teeth a bit... feels like they have become the gentle molars of a herbivore.  ");
   setTransformed("teeth");
end

function tfNose()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("nose")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("Your nose flattens against your face, now becoming a pig's snout.  ");
   setTransformed("nose");
end

function tfMouth()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("mouth")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("You feel your mouth stretching outwards as fat begins to work its way into your cheeks. Soon you feel your jowls filling out  and several rings of chin fat hanging from your face.  ");
   setTransformed("mouth");
end

function tfEars()
   -- Comments omited for brevity, these functions follow the same pattern as
   -- tfFeet(), so see that for an example.
   if this.getSeverityTFed(BodyPart.getBodyPart("ears")) > 0 then
      return false; -- Already transformed
   end

   MainScreen.addGameText("Your ears become pink and pointy.  ");
   setTransformed("ears");
end


-- Set the target body part to be Pig
function setTransformed(partName)
	-- Get the body part that is being changed
	bodyPart = BodyPart.getBodyPart(partName);
	if bodyPart == nil then
		MainScreen.addGameText("Warning: could not find body part name " .. partName 
			.. "\n");
		return;
	end

	-- Transformation severity indicates how severe the transformation is.
	-- 0 = Human
	-- 1 = Non-human but hideable under appropriate clothes
	-- 2 = Non-human and unhideable
	bodyPart.setTransformationSeverity(1);

	-- Set species type to this transformation
	bodyPart.setSpeciesType(this);
end

-- This function should return whether or not player is 100% the target form.
-- Often used to determine whether to continue calling causeTF() in a forced
-- transformation sequence (ie: lose to a transforming monster).
function getIsFullyTransformed()
	-- This species transforms 12 body parts, so if the totals line up, the 
	-- player is fully transformed.
	return this.countPlayerPartsOfThisType() >= 12;
end

Porker Pendant

-- Called when player wants to pick up/wear pendant.
function playerAttemptPickupCheck()

   io.write("You pick up and wear the " .. this.getName() .. ".  ");

   if this.getCursed() then
      io.write("The chain seems to tighten around your neck by itself.\n\n");
   end

   -- Always okay to pick up / wear this item.
   return true;
end

-- Called when player wants to drop pendant.
function playerAttemptDropCheck()
   if this.getCursed() then
      -- Disallow player from droping cursed item
      MainScreen.addGameText(GameText.parseText("You try to take off the " ..
         "pendant with your [[HANDS DESCRIPTION]], but it won't budge... " ..
         "it's cursed!\n\n"));

      -- MainScreen.addGameText is used here instead of io.write.  This is
      -- because of a LUFA bug, GameText.parseText appears to be returning 
      -- multiple erroneous extra strings from GameText.parseText, even though 
      -- AS3 is not doing so.  Thus MainScreen.addGameText is used (probably
      -- a good idea to use in general unless you specifically want to output
      -- an array).

      return false;
   else
      -- Not cursed, allow drop
      MainScreen.addGameText(GameText.parseText("You take off the pendant " ..
         "with your [[HANDS DESCRIPTION]] and drop it to the ground.\n\n"));
      return true;
   end
end

-- Called every game tick while player is carrying / wearing pendant.
function inInventoryTick()
   -- Random 50% chance of the pendant transforming player.
   if math.random(1,2) == 2 then
      -- Player will be TF'ed.
      io.write("You feel the pendant grow warm on your neck.  ");

      -- Cause pig TF.
		pig = Species.getSpecies("Pig TF");
		if pig == nil then
			MainScreen.addGameText("Please load the Pig TF mod definition.");
		else
			pig.causeTF();
		end
   end
end

-- As this is not contained in a function, it will be executed immediately
-- during mod load.
this.makeCursed();