GiraffeTF

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 giraffe. It comes in two parts: the Giraffe TF (a species), and a Palm Leaf Pendant (a cursed clothing item). Please install both JSON codes into the mod panel in order to try out the transformation.

Author: SkyCorp

Transformation JSON Code

Giraffe Species

{
	"type": "SPECIES",
	"id": "GiraffeTF",
	"transformedBodyPartDescriptions":
	{
		"Feet": "black hooves",
		"Legs": "spotted cream fur-covered legs",
		"Torso": "spotted cream fur-covered chest",
		"Arms": "spotted cream fur-covered arms",		
		"Hands": "cream fur-covered hands",
		"LBack_Attach": "three foot, narrow cream fur-covered tail ending with a wisp of black hair",
		"Eyes": "savannah colored eyes",
		"Head_Hair": "brown horn-like ossicones surrounded by red hair",
		"Teeth": "gentle molars",
		"Nose": "muscular nostrils on your muzzle",
		"Mouth": "protruding cream fur-covered muzzle",
		"Ears": "large, pointy ears"
	},
	"causeTF":
	{
		"programVoid": true
	},
	"getIsFullyTransformed":
	{
		"programBoolean": true
	},
	"luac": "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"
}

Palm Leaf Pendant

{
	"type": "CLOTHING",
	"name":
	{
		"literalString": "Palm Leaf Pendant"
	},
	"description":
	{
		"literalString": "A pendant in the shape of a palm tree leaf."
	},
	"getSlot":
	{
		"literalString": "neck"
	},
	"playerAttemptPickupCheck":
	{
		"programBoolean": true
	},
	"playerAttemptDropCheck":
	{
		"programBoolean": true
	},
	"inInventoryTick":
	{
		"programVoid": true
	},
	"luac": "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"
}

LUA Source Code

Giraffe 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 hooves.  ");

	-- 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 a thin layer of spotted cream colored fur.  ");
   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 chest grows a thin layer of spotted cream colored fur.  ");
   setTransformed("torso");

	-- Giraffes will have two rows of breasts, because why not.
	player = Player.getInstance();
	if player.getBreastRows() < 2 then
		player.tfIncBreastRows();
	elseif player.getBreastRows() > 2 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 thin layer of spotted cream colored fur.  ");
   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 sprout cream colored fur.  ");
   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 narrow tail sprout from your backside.  You pick it up with your [[HANDS DESCRIPTION]] and note its long three foot length.  At the tip, it is accented with a tuft of black hair.  "));
   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("Your sense your eyes becoming savannah colored.  ");
   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 note two fuzzy, horn-like bumps -- the ossicones of a giraffe!  Surrounding the two protrusions, all of your hair is now a dark red color.  "));
   setTransformed("head_hair");
end

function tfHeight()
	player = Player.getInstance();
	targetHeight = 96; -- 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 neck elongate, causing your height to reach " .. 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 into your muzzle, now simply a set of muscular nostrils.  ");
   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 and growing cream-colored fur... it's becoming a muzzle!  ");
   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 stretch out, becoming pointy and facing forward.  ");
   setTransformed("ears");
end


-- Set the target body part to be Giraffe
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

Palm Leaf 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 giraffe TF.
		giraffe = Species.getSpecies("GiraffeTF");
		if giraffe == nil then
			MainScreen.addGameText("Please load the GiraffeTF mod definition.");
		else
			giraffe.causeTF();
		end
   end
end

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