code:
from __future__ import print_function
import io
import sys
import re
import os

def getImageIDList():
	imgTagRe        = re.compile(r"images\.showImage\([\"']([\w\d-]+)[\"'](?:,.*?)?\)")
	monsterNameRe   = re.compile(r"this\.imageName\s?=\s?[\"'](\w+)[\"'];?")
	ret = set()

	scanPath = "../"
	excludeDirs = {"build-dep", "test", "bit101"}
	for root, dirs, files in os.walk(scanPath, topdown=True):
		dirs[:] = [d for d in dirs if d not in excludeDirs]
		files[:] = [f for f in files if f.endswith(".as")]
		for fileN in files:
			wholePath = os.path.join(root, fileN)
			print("Scanning file: ", wholePath)
			with io.open(wholePath, "r", encoding="utf8") as fp:
				cont = fp.read()
				ret.update(set(imgTagRe.findall(cont)))
				for name in monsterNameRe.findall(cont):
					ret.add("monster-%s" % name)

	print("Found %s image IDs" % len(ret))
	return ret

def genFile():
	imageIDs = list(getImageIDList())
	imageIDs.sort()

	ret = '<?xml version="1.0" encoding="utf-8"?>\n'
	ret += '	<Images>\n'
	ret += '		<ImageList>\n'
	for imId in imageIDs:
		ret += '			<ImageSet id="%s">\n' % imId
		ret += '				<ImageFile>./img/%s</ImageFile>\n' % imId
		ret += '				<ImageFile>./img/%s_1</ImageFile>\n' % imId
		ret += '			</ImageSet>\n'
	ret += '		</ImageList>\n'
	ret += '		<ExtensionList>\n'
	for extension in ["png", "jpg", "jpeg", "gif"]:
		ret += '			<ExtensionType>%s</ExtensionType>\n' % extension
	ret += '		</ExtensionList>\n'
	ret += '	</Images>\n'

	with io.open("images.xml", "w", encoding="utf8") as fp:
		fp.write(ret)

if __name__ == "__main__":
	genFile()

license: unknown


code:
import classes.GlobalFlags.kGAMECLASS;
import flash.ui.Keyboard;
import coc.view.MainView;
import classes.Bindings;

use namespace kGAMECLASS;

// I'm planning to move this whole thing out of includes later (Stadler76)
var bindings:Bindings = kGAMECLASS.bindings;

inputManager.AddBindableControl(
	"Show Stats",
	"Show the stats pane when available",
	function():void {
		if (mainView.menuButtonIsVisible(MainView.MENU_STATS) && player.str > 0)
		{
			kGAMECLASS.playerInfo.displayStats();
		}
	});

inputManager.AddBindableControl(
	"Level Up",
	"Show the level up page when available",
	function():void {
		if (mainView.menuButtonIsVisible(MainView.MENU_LEVEL) && player.str > 0)
		{
			kGAMECLASS.playerInfo.levelUpGo();
		}
	});

inputManager.AddBindableControl("Quicksave 1", "Quicksave the current game to slot 1", function():void { bindings.execQuickSave(1); });
inputManager.AddBindableControl("Quicksave 2", "Quicksave the current game to slot 2", function():void { bindings.execQuickSave(2); });
inputManager.AddBindableControl("Quicksave 3", "Quicksave the current game to slot 3", function():void { bindings.execQuickSave(3); });
inputManager.AddBindableControl("Quicksave 4", "Quicksave the current game to slot 4", function():void { bindings.execQuickSave(4); });
inputManager.AddBindableControl("Quicksave 5", "Quicksave the current game to slot 5", function():void { bindings.execQuickSave(5); });

inputManager.AddBindableControl("Quickload 1", "Quickload the current game from slot 1", function():void { bindings.execQuickLoad(1); });
inputManager.AddBindableControl("Quickload 2", "Quickload the current game from slot 2", function():void { bindings.execQuickLoad(2); });
inputManager.AddBindableControl("Quickload 3", "Quickload the current game from slot 3", function():void { bindings.execQuickLoad(3); });
inputManager.AddBindableControl("Quickload 4", "Quickload the current game from slot 4", function():void { bindings.execQuickLoad(4); });
inputManager.AddBindableControl("Quickload 5", "Quickload the current game from slot 5", function():void { bindings.execQuickLoad(5); });

inputManager.AddBindableControl(
	"Show Menu",
	"Show the main menu",
	function():void {
		if (mainView.menuButtonIsVisible(MainView.MENU_NEW_MAIN) && mainView.menuButtonHasLabel(MainView.MENU_NEW_MAIN, "Main Menu"))
		{
			kGAMECLASS.mainMenu.mainMenu();
		}
	});

inputManager.AddBindableControl(
	"Data Menu",
	"Show the save/load menu",
	function():void {
		if (mainView.menuButtonIsVisible(MainView.MENU_DATA))
		{
			saves.saveLoad();
		}
	});

inputManager.AddBindableControl(
	"Appearance Page",
	"Show the appearance page",
	function():void {
		if (mainView.menuButtonIsVisible(MainView.MENU_APPEARANCE))
		{
			kGAMECLASS.playerAppearance.appearance();
		}
	});

inputManager.AddBindableControl(
	"No",
	"Respond no to any available prompt",
	function():void {
		if (mainView.getButtonText(1) == "No" && mainView.buttonIsVisible(1))
		{
			mainView.clickButton(1);
		}
	});

inputManager.AddBindableControl(
	"Yes",
	"Respond yes to any available prompt",
	function():void {
		if (mainView.getButtonText(0) == "Yes" && mainView.buttonIsVisible(0))
		{
			mainView.clickButton(0);
		}
	});

inputManager.AddBindableControl(
	"Show Perks",
	"Show the perks page",
	function():void {
		if (mainView.menuButtonIsVisible(MainView.MENU_PERKS))
		{
			kGAMECLASS.playerInfo.displayPerks();
		}
	});

inputManager.AddBindableControl(
	"Continue",
	"Respond to continue",
	function():void {
		// Button 9
		if (mainView.buttonIsVisible(9) && mainView.buttonTextIsOneOf(9, [ "Nevermind", "Abandon", "Next", "Return", "Back", "Leave", "Resume" ]))
		{
			//trace( "keyboard(): processing space bar for button 9",
			//	mainView.buttonIsVisible( 9 ) ? "(visible)" : "(hidden)",
			//	mainView.getButtonText( 9 ) );
			mainView.toolTipView.hide();
			mainView.clickButton(9);
			return;
		}
		// Button 14
		if (kGAMECLASS.output.buttonIsVisible(14) && kGAMECLASS.output.buttonTextIsOneOf(14, [ "Nevermind", "Abandon", "Next", "Return", "Back", "Leave", "Resume" ]))
		{
			//trace( "keyboard(): processing space bar for button 9",
			//	mainView.buttonIsVisible( 9 ) ? "(visible)" : "(hidden)",
			//	mainView.getButtonText( 9 ) );
			mainView.toolTipView.hide();
			mainView.clickButton(14);
			return;
		}
		// Button 0
		if (mainView.buttonIsVisible(0) && mainView.buttonTextIsOneOf(0, [ "Next", "Return", "Back" ]))
		{
			//trace( "keyboard(): processing space bar for button 0",
			//	mainView.buttonIsVisible( 0 ) ? "(visible)" : "(hidden)",
			//	mainView.getButtonText( 0 ) );
			mainView.toolTipView.hide();
			mainView.clickButton(0);
			return;
		}

		// Button 4
		if (mainView.buttonIsVisible(4) && mainView.buttonTextIsOneOf(4, [ "Nevermind", "Next", "Return", "Back", "Leave" ]))
		{
			//trace( "keyboard(): processing space bar for button 4",
			//	mainView.buttonIsVisible( 4 ) ? "(visible)" : "(hidden)",
			//	mainView.getButtonText( 4 ) );
			mainView.toolTipView.hide();
			mainView.clickButton(4);
			return;
		}

		// Button 5
		if (mainView.buttonIsVisible(5) && mainView.buttonTextIsOneOf(5, [ "Next", "Return", "Back" ]))
		{
			//trace( "keyboard(): processing space bar for button 5",
			//	mainView.buttonIsVisible( 5 ) ? "(visible)" : "(hidden)",
			//	mainView.getButtonText( 5 ) );
			mainView.toolTipView.hide();
			mainView.clickButton(5);
			return;
		}
	});

inputManager.AddBindableControl(
	"Cycle Background",
	"Cycle the background fill of the text display area",
	function():void {
		if (!mainView.textBGWhite.visible)
		{
			mainView.textBGWhite.visible = true;
		}
		else if (!mainView.textBGTan.visible)
		{
			mainView.textBGTan.visible = true;
		}
		else
		{
			mainView.textBGWhite.visible = false;
			mainView.textBGTan.visible = false;
		}

	});

inputManager.AddBindableControl(
	"Button 1",
	"Activate button 1",
	function():void {
		if (mainView.buttonIsVisible(0))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(0);
		}
	});

inputManager.AddBindableControl(
	"Button 2",
	"Activate button 2",
	function():void {
		if (mainView.buttonIsVisible(1))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(1);
		}
	});

inputManager.AddBindableControl(
	"Button 3",
	"Activate button 3",
	function():void {
		if (mainView.buttonIsVisible(2))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(2);
		}
	});

inputManager.AddBindableControl(
	"Button 4",
	"Activate button 4",
	function():void {
		if (mainView.buttonIsVisible(3))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(3);
		}
	});

inputManager.AddBindableControl(
	"Button 5",
	"Activate button 5",
	function():void {
		if (mainView.buttonIsVisible(4))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(4);
		}
	});

inputManager.AddBindableControl(
	"Button 6",
	"Activate button 6",
	function():void {
		if (mainView.buttonIsVisible(5))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(5);
		}
	});

inputManager.AddBindableControl(
	"Button 7",
	"Activate button 7",
	function():void {
		if (mainView.buttonIsVisible(6))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(6);
		}
	});

inputManager.AddBindableControl(
	"Button 8",
	"Activate button 8",
	function():void {
		if (mainView.buttonIsVisible(7))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(7);
		}
	});

inputManager.AddBindableControl(
	"Button 9",
	"Activate button 9",
	function():void {
		if (mainView.buttonIsVisible(8))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(8);
		}
	});

inputManager.AddBindableControl(
	"Button 10",
	"Activate button 10",
	function():void {
		if (mainView.buttonIsVisible(9))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(9);
		}
	});

//Extra buttons
inputManager.AddBindableControl(
	"Button 11",
	"Activate button 11",
	function():void {
		if (kGAMECLASS.output.buttonIsVisible(10))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(10);
		}
	});
inputManager.AddBindableControl(
	"Button 12",
	"Activate button 12",
	function():void {
		if (kGAMECLASS.output.buttonIsVisible(11))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(11);
		}
	});
inputManager.AddBindableControl(
	"Button 13",
	"Activate button 13",
	function():void {
		if (kGAMECLASS.output.buttonIsVisible(12))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(12);
		}
	});
inputManager.AddBindableControl(
	"Button 14",
	"Activate button 14",
	function():void {
		if (kGAMECLASS.output.buttonIsVisible(13))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(13);
		}
	});
inputManager.AddBindableControl(
	"Button 15",
	"Activate button 15",
	function():void {
		if (kGAMECLASS.output.buttonIsVisible(14))
		{
			mainView.toolTipView.hide();
			mainView.clickButton(14);
		}
	});
inputManager.AddBindableControl(
		"History",
		"Show text history",
		function():void {
			/*if (flags[kFLAGS.SHIFT_KEY_DOWN]) {
				trace(kGAMECLASS.mainViewManager.traceSelf());
			}*/
			kGAMECLASS.output.showHistory();
		});

inputManager.AddBindableControl(
	"Cheat! Give Hummus",
	"Cheat code to get free hummus",
	function(keyCode:int):void {
		if (flags[kFLAGS.CHEAT_ENTERING_COUNTER] == 0)
		{
			if (keyCode == 38)
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER]++;
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER] = 0;
			}
		}
		else if (flags[kFLAGS.CHEAT_ENTERING_COUNTER] == 1)
		{
			if (keyCode == 40)
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER]++;
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER] = 0;
			}
		}
		else if (flags[kFLAGS.CHEAT_ENTERING_COUNTER] == 2)
		{
			if (keyCode == 37)
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER]++;
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER] = 0;
			}
		}
		else if (flags[kFLAGS.CHEAT_ENTERING_COUNTER] == 3)
		{
			if (keyCode == 39)
			{
				if (player.str > 0 && mainView.getButtonText(0).indexOf("Game Over") == -1)
				{
					kGAMECLASS.inventory.giveHumanizer();
				}
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER] = 0;
			}
		}
	},
	InputManager.CHEATCONTROL);

inputManager.AddBindableControl(
	"Cheat! Access debug menu",
	"Cheat code to access debug menu and spawn ANY items or change stats.",
	function(keyCode:int):void {
		if (flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] == 0)
		{
			if (keyCode == 68)
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2]++;
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] = 0;
			}
		}
		else if (flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] == 1)
		{
			if (keyCode == 69)
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2]++;
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] = 0;
			}
		}
		else if (flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] == 2)
		{
			if (keyCode == 66)
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2]++;
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] = 0;
			}
		}
		else if (flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] == 3)
		{
			if (keyCode == 85)
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2]++;
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] = 0;
			}
		}
		else if (flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] == 4)
		{
			if (keyCode == 71)
			{
				if (player.str > 0 && mainView.getButtonText(0).indexOf("Game Over") == -1 && (debug && flags[kFLAGS.HARDCORE_MODE] <= 0 || CoC_Settings.debugBuild))
				{
					kGAMECLASS.debugMenu.accessDebugMenu();
				}
			}
			else
			{
				flags[kFLAGS.CHEAT_ENTERING_COUNTER_2] = 0;
			}
		}
	},
	InputManager.CHEATCONTROL);

// Insert the default bindings
inputManager.BindKeyToControl(83, "Show Stats");
inputManager.BindKeyToControl(76, "Level Up");
inputManager.BindKeyToControl(112, "Quicksave 1");
inputManager.BindKeyToControl(113, "Quicksave 2");
inputManager.BindKeyToControl(114, "Quicksave 3");
inputManager.BindKeyToControl(115, "Quicksave 4");
inputManager.BindKeyToControl(116, "Quicksave 5");
inputManager.BindKeyToControl(117, "Quickload 1");
inputManager.BindKeyToControl(118, "Quickload 2");
inputManager.BindKeyToControl(119, "Quickload 3");
inputManager.BindKeyToControl(120, "Quickload 4");
inputManager.BindKeyToControl(121, "Quickload 5");
inputManager.BindKeyToControl(8, "Show Menu");
inputManager.BindKeyToControl(68, "Data Menu");
inputManager.BindKeyToControl(65, "Appearance Page");
inputManager.BindKeyToControl(78, "No");
inputManager.BindKeyToControl(89, "Yes");
inputManager.BindKeyToControl(80, "Show Perks");
inputManager.BindKeyToControl(13, "Continue");
inputManager.BindKeyToControl(32, "Continue", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(36, "Cycle Background");
inputManager.BindKeyToControl(49, "Button 1");
inputManager.BindKeyToControl(50, "Button 2");
inputManager.BindKeyToControl(51, "Button 3");
inputManager.BindKeyToControl(52, "Button 4");
inputManager.BindKeyToControl(53, "Button 5");
inputManager.BindKeyToControl(54, "Button 6");
inputManager.BindKeyToControl(55, "Button 7");
inputManager.BindKeyToControl(56, "Button 8");
inputManager.BindKeyToControl(57, "Button 9");
inputManager.BindKeyToControl(48, "Button 10");
inputManager.BindKeyToControl(Keyboard.Q, "Button 6", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.W, "Button 7", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.E, "Button 8", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.R, "Button 9", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.T, "Button 10", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.A, "Button 11", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.S, "Button 12", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.D, "Button 13", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.F, "Button 14", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.G, "Button 15", InputManager.SECONDARYKEY);
inputManager.BindKeyToControl(Keyboard.H, "History");

inputManager.RegisterDefaults();


code:
/**
 * All the variables that have been left around but don't fit into the GlobalVariables file
 * Will be removed at a point.
 */

//System time
public var date:Date = new Date();

//Mod save version.
public var modSaveVersion:Number = 13;
public var levelCap:Number = 120;

//dungeoneering variables (If it ain't broke, don't fix it)
public var inDungeon:Boolean = false; //Re-enabled for sake.
public var dungeonLoc:int = 0;

// To save shitting up a lot of code...
public var inRoomedDungeon:Boolean = false;
public var inRoomedDungeonResume:Function = null;

public var timeQ:Number = 0;
public var campQ:Boolean = false;


code:
// The comment structure in the following section is very specific, as the comment contents
// are actually parsed into regexes that are used by my refactoring tool to refactor
// the relevant descriptions.

// Description constants

// gender
public static const GENDER_NONE:int                                                 =    0;
public static const GENDER_MALE:int                                                 =    1;
public static const GENDER_FEMALE:int                                               =    2;
public static const GENDER_HERM:int                                                 =    3;

// age
public static const Age.AGE_ADULT:int                                                   =    0;
public static const Age.AGE_CHILD:int                                                   =    1;
public static const Age.AGE_TEEN:int                                                    =    2;
public static const Age.AGE_ELDER:int                                                   =    3;

// skinType
public static const Skin.PLAIN:int                                             =    0;
public static const Skin.FUR:int                                               =    1;
public static const Skin.LIZARD_SCALES:int                                     =    2;
public static const Skin.GOO:int                                               =    3;
public static const Skin.UNDEFINED:int                                         =    4; // DEPRECATED, silently discarded upon loading a saved game
public static const Skin.DRAGON_SCALES:int                                     =    5;
public static const Skin.FISH_SCALES:int                                       =    6; // NYI, for future use
public static const Skin.WOOL:int                                              =    7;
public static const Skin.FEATHERED:int                                         =    8;

// hairType
public static const HAIR_NORMAL:int                                                =     0;
public static const HAIR_FEATHER:int                                               =     1;
public static const HAIR_GHOST:int                                                 =     2;
public static const HAIR_GOO:int                                                   =     3;
public static const HAIR_ANEMONE:int                                               =     4;
public static const HAIR_QUILL:int                                                 =     5;
public static const HAIR_BASILISK_SPINES:int                                       =     6;
public static const HAIR_BASILISK_PLUME:int                                        =     7;
public static const HAIR_WOOL:int                                                  =     8;

// beardType
public static const BEARD_NORMAL:int                                               =     0;
public static const BEARD_GOATEE:int                                               =     1;
public static const BEARD_CLEANCUT:int                                             =     2;
public static const BEARD_MOUNTAINMAN:int                                          =     3;

// faceType
public static const FACE_HUMAN:int                                                  =    0;
public static const FACE_HORSE:int                                                  =    1;
public static const FACE_DOG:int                                                    =    2;
public static const FACE_COW_MINOTAUR:int                                           =    3;
public static const FACE_SHARK_TEETH:int                                            =    4;
public static const FACE_SNAKE_FANGS:int                                            =    5;
public static const FACE_CAT:int                                                    =    6;
public static const FACE_LIZARD:int                                                 =    7;
public static const FACE_BUNNY:int                                                  =    8;
public static const FACE_KANGAROO:int                                               =    9;
public static const FACE_SPIDER_FANGS:int                                           =   10;
public static const FACE_FOX:int                                                    =   11;
public static const FACE_DRAGON:int                                                 =   12;
public static const FACE_RACCOON_MASK:int                                           =   13;
public static const FACE_RACCOON:int                                                =   14;
public static const FACE_BUCKTEETH:int                                              =   15;
public static const FACE_MOUSE:int                                                  =   16;
public static const FACE_FERRET_MASK:int                                            =   17;
public static const FACE_FERRET:int                                                 =   18;
public static const FACE_PIG:int                                                    =   19;
public static const FACE_BOAR:int                                                   =   20;
public static const FACE_RHINO:int                                                  =   21;
public static const FACE_ECHIDNA:int                                                =   22;
public static const FACE_DEER:int                                                   =   23;
public static const FACE_WOLF:int                                                   =   24;
public static const FACE_COCKATRICE:int                                             =   25;
public static const FACE_BEAK:int                                                   =   26;

// tongueType
public static const TONGUE_HUMAN:int                                                =   0;
public static const TONGUE_SNAKE:int                                                =   1;
public static const TONGUE_DEMONIC:int                                              =   2;
public static const TONGUE_DRACONIC:int                                             =   3;
public static const TONGUE_ECHIDNA:int                                              =   4;
public static const TONGUE_LIZARD:int                                               =   5;

// eyeType
public static const EYES_HUMAN:int                                                  =   0;
public static const EYES_FOUR_SPIDER_EYES:int                                       =   1; //DEPRECATED, USE EYES_SPIDER AND EYECOUNT = 4
public static const EYES_BLACK_EYES_SAND_TRAP:int                                   =   2;
public static const EYES_LIZARD:int                                                 =   3;
public static const EYES_DRAGON:int                                                 =   4; // Slightly different description/TF and *maybe* in the future(!) grant different perks/combat abilities
public static const EYES_BASILISK:int                                               =   5;
public static const EYES_WOLF:int                                                   =   6;
public static const EYES_SPIDER:int                                                 =   7;
public static const EYES_COCKATRICE:int                                             =   8;

// earType
public static const EARS_HUMAN:int                                                  =   0;
public static const EARS_HORSE:int                                                  =   1;
public static const EARS_DOG:int                                                    =   2;
public static const EARS_COW:int                                                    =   3;
public static const EARS_ELFIN:int                                                  =   4;
public static const EARS_CAT:int                                                    =   5;
public static const EARS_LIZARD:int                                                 =   6;
public static const EARS_BUNNY:int                                                  =   7;
public static const EARS_KANGAROO:int                                               =   8;
public static const EARS_FOX:int                                                    =   9;
public static const EARS_DRAGON:int                                                 =  10;
public static const EARS_RACCOON:int                                                =  11;
public static const EARS_MOUSE:int                                                  =  12;
public static const EARS_FERRET:int                                                 =  13;
public static const EARS_PIG:int                                                    =  14;
public static const EARS_RHINO:int                                                  =  15;
public static const EARS_ECHIDNA:int                                                =  16;
public static const EARS_DEER:int                                                   =  17;
public static const EARS_WOLF:int                                                   =  18;
public static const EARS_SHEEP:int                                                  =  19;
public static const EARS_IMP:int                                                    =  20;
public static const EARS_COCKATRICE:int                                             =  21;

// hornType
public static const Horns.NONE:int                                                  =   0;
public static const Horns.DEMON:int                                                 =   1;
public static const Horns.COW_MINOTAUR:int                                          =   2;
public static const Horns.DRACONIC_X2:int                                           =   3;
public static const Horns.DRACONIC_X4_12_INCH_LONG:int                              =   4;
public static const Horns.ANTLERS:int                                               =   5;
public static const Horns.GOAT:int                                                  =   6;
public static const Horns.UNICORN:int                                               =   7;
public static const Horns.RHINO:int                                                 =   8;
public static const Horns.SHEEP:int                                                 =   9;
public static const Horns.RAM:int                                                   =  10;
public static const Horns.IMP:int                                                   =  11;

// antennae
public static const ANTENNAE_NONE:int                                               =   0;
public static const ANTENNAE_BEE:int                                                =   2;
public static const ANTENNAE_COCKATRICE:int                                         =   3;

// gillType
public static const GILLS_NONE:int                                                  =   0;
public static const GILLS_ANEMONE:int                                               =   1;
public static const GILLS_FISH:int                                                  =   2;

// armType
public static const ARM_TYPE_HUMAN:int                                              =   0;
public static const ARM_TYPE_HARPY:int                                              =   1;
public static const ARM_TYPE_SPIDER:int                                             =   2;
public static const ARM_TYPE_PREDATOR:int                                           =   4;
public static const ARM_TYPE_SALAMANDER:int                                         =   5;
public static const ARM_TYPE_WOLF:int                                               =   6;
public static const ARM_TYPE_COCKATRICE:int                                         =   7;

// clawType
public static const CLAW_TYPE_NORMAL:int                                            =   0;
public static const CLAW_TYPE_LIZARD:int                                            =   1;
public static const CLAW_TYPE_DRAGON:int                                            =   2;
public static const CLAW_TYPE_SALAMANDER:int                                        =   3;
public static const CLAW_TYPE_CAT:int                                               =   4; // NYI! Placeholder for now!! (See http://tiny.cc/coc-revamp-claws)
public static const CLAW_TYPE_DOG:int                                               =   5; // NYI! Placeholder for now!! (See http://tiny.cc/coc-revamp-claws)
public static const CLAW_TYPE_RAPTOR:int                                            =   6; // NYI! Placeholder for now!! (See http://tiny.cc/coc-revamp-claws) Giev teh Rapturs :-)
public static const CLAW_TYPE_MANTIS:int                                            =   7; // NYI! Placeholder for Xianxia mod (See http://tiny.cc/coc-xianxia-mod)
public static const CLAW_TYPE_IMP:int                                               =   8;
public static const CLAW_TYPE_COCKATRICE:int                                        =   9;

// tailType
public static const Tail.NONE:int                                              =   0;
public static const Tail.HORSE:int                                             =   1;
public static const Tail.DOG:int                                               =   2;
public static const Tail.DEMONIC:int                                           =   3;
public static const Tail.COW:int                                               =   4;
public static const Tail.SPIDER_ADBOMEN:int                                    =   5;
public static const Tail.BEE_ABDOMEN:int                                       =   6;
public static const Tail.SHARK:int                                             =   7;
public static const Tail.CAT:int                                               =   8;
public static const Tail.LIZARD:int                                            =   9;
public static const Tail.RABBIT:int                                            =  10;
public static const Tail.HARPY:int                                             =  11;
public static const Tail.KANGAROO:int                                          =  12;
public static const Tail.FOX:int                                               =  13;
public static const Tail.DRACONIC:int                                          =  14;
public static const Tail.RACCOON:int                                           =  15;
public static const Tail.MOUSE:int                                             =  16;
public static const Tail.FERRET:int                                            =  17;
public static const Tail.BEHEMOTH:int                                          =  18;
public static const Tail.PIG:int                                               =  19;
public static const Tail.SCORPION:int                                          =  20;
public static const Tail.GOAT:int                                              =  21;
public static const Tail.RHINO:int                                             =  22;
public static const Tail.ECHIDNA:int                                           =  23;
public static const Tail.DEER:int                                              =  24;
public static const Tail.SALAMANDER:int                                        =  25;
public static const Tail.WOLF:int                                              =  26;
public static const Tail.SHEEP:int                                             =  27;
public static const Tail.IMP:int                                               =  28;
public static const Tail.COCKATRICE:int                                        =  29;

// wingType
public static const Wings.NONE:int                                              =   0;
public static const Wings.BEE_LIKE_SMALL:int                                    =   1;
public static const Wings.BEE_LIKE_LARGE:int                                    =   2;
public static const Wings.HARPY:int                                             =   4;
public static const Wings.IMP:int                                               =   5;
public static const Wings.BAT_LIKE_TINY:int                                     =   6;
public static const Wings.BAT_LIKE_LARGE:int                                    =   7;
public static const Wings.SHARK_FIN:int                                         =   8; // Deprecated, moved to the rearBody slot.
public static const Wings.FEATHERED_LARGE:int                                   =   9;
public static const Wings.DRACONIC_SMALL:int                                    =  10;
public static const Wings.DRACONIC_LARGE:int                                    =  11;
public static const Wings.GIANT_DRAGONFLY:int                                   =  12;
public static const Wings.IMP_LARGE:int                                         =  13;

// lowerBody
public static const LowerBody.HUMAN:int                                       =   0;
public static const LowerBody.HOOFED:int                                      =   1;
public static const LowerBody.DOG:int                                         =   2;
public static const LowerBody.NAGA:int                                        =   3;
//public static const LowerBody.CENTAUR:int                                   =   4; //DEPRECATED - USE HOOFED + LEGCOUNT 4
public static const LowerBody.DEMONIC_HIGH_HEELS:int                          =   5;
public static const LowerBody.DEMONIC_CLAWS:int                               =   6;
public static const LowerBody.BEE:int                                         =   7;
public static const LowerBody.GOO:int                                         =   8;
public static const LowerBody.CAT:int                                         =   9;
public static const LowerBody.LIZARD:int                                      =  10;
public static const LowerBody.PONY:int                                        =  11;
public static const LowerBody.BUNNY:int                                       =  12;
public static const LowerBody.HARPY:int                                       =  13;
public static const LowerBody.KANGAROO:int                                    =  14;
public static const LowerBody.CHITINOUS_SPIDER_LEGS:int                       =  15;
public static const LowerBody.DRIDER_LOWER_BODY:int                           =  16;
public static const LowerBody.FOX:int                                         =  17;
public static const LowerBody.DRAGON:int                                      =  18;
public static const LowerBody.RACCOON:int                                     =  19;
public static const LowerBody.FERRET:int                                      =  20;
public static const LowerBody.CLOVEN_HOOFED:int                               =  21;
//public static const LowerBody.RHINO:int                                       =  22;
public static const LowerBody.ECHIDNA:int                                     =  23;
//public static const LowerBody.DEERTAUR:int                                  =  24;//DEPRECATED - USE CLOVEN HOOFED + LEGCOUNT 4
public static const LowerBody.SALAMANDER:int                                  =  25;
public static const LowerBody.WOLF:int                                        =  26;
public static const LowerBody.IMP:int                                         =  27;
public static const LowerBody.COCKATRICE:int                                  =  28;

// underBody
public static const UNDER_BODY_TYPE_NONE:int                                        =   0;
public static const UNDER_BODY_TYPE_REPTILE:int                                     =   1;
public static const UNDER_BODY_TYPE_DRAGON:int                                      =   2; // Deprecated. Changed to 1 (UNDER_BODY_TYPE_REPTILE) upon loading a savegame
public static const UNDER_BODY_TYPE_FURRY:int                                       =   3;
public static const UNDER_BODY_TYPE_NAGA:int                                        =   4;
public static const UNDER_BODY_TYPE_WOOL:int                                        =   5; // Deprecated. Changed to 3 (UNDER_BODY_TYPE_FURRY) upon loading a savegame
public static const UNDER_BODY_TYPE_COCKATRICE:int                                  =   6;

// rearBody
public static const REAR_BODY_NONE:int                                              =   0;
public static const REAR_BODY_DRACONIC_MANE:int                                     =   1;
public static const REAR_BODY_DRACONIC_SPIKES:int                                   =   2;
public static const REAR_BODY_SHARK_FIN:int                                         =   3;

// neckType
public static const NECK_TYPE_NORMAL:int                                            =   0; // normal human neck. neckLen = 2 inches
public static const NECK_TYPE_DRACONIC:int                                          =   1; // (western) dragon neck. neckLen = 2-30 inches
public static const NECK_TYPE_COCKATRICE:int                                        =   2;

// piercingtypesNOPEDISABLED
public static const PIERCING_TYPE_NONE:int                                          =   0;
public static const PIERCING_TYPE_STUD:int                                          =   1;
public static const PIERCING_TYPE_RING:int                                          =   2;
public static const PIERCING_TYPE_LADDER:int                                        =   3;
public static const PIERCING_TYPE_HOOP:int                                          =   4;
public static const PIERCING_TYPE_CHAIN:int                                         =   5;

// vaginatypesNOPEDISABLED
public static const VAGINA_TYPE_HUMAN:int                                           =   0;
public static const VAGINA_TYPE_EQUINE:int                                          =   1;
public static const VAGINA_TYPE_BLACK_SAND_TRAP:int                                 =   5;

// vaginalWetness
public static const Vagina.WETNESS_DRY:int                                          =   0;
public static const Vagina.WETNESS_NORMAL:int                                       =   1;
public static const Vagina.WETNESS_WET:int                                          =   2;
public static const Vagina.WETNESS_SLICK:int                                        =   3;
public static const Vagina.WETNESS_DROOLING:int                                     =   4;
public static const Vagina.WETNESS_SLAVERING:int                                    =   5;

// vaginalLooseness
public static const Vagina.VAGINA_LOOSENESS_TIGHT:int                                      =   0;
public static const Vagina.VAGINA_LOOSENESS_NORMAL:int                                     =   1;
public static const Vagina.LOOSENESS_LOOSE:int                                      =   2;
public static const Vagina.VAGINA_LOOSENESS_GAPING:int                                     =   3;
public static const Vagina.VAGINA_LOOSENESS_GAPING_WIDE:int                                =   4;
public static const Vagina.VAGINA_LOOSENESS_LEVEL_CLOWN_CAR:int                            =   5;

// analwetnesslevelsNOPEDISABLED
public static const Ass.WETNESS_DRY:int                                            =   0;
public static const Ass.WETNESS_NORMAL:int                                         =   1;
public static const Ass.WETNESS_MOIST:int                                          =   2;
public static const Ass.WETNESS_SLIMY:int                                          =   3;
public static const Ass.WETNESS_DROOLING:int                                       =   4;
public static const Ass.WETNESS_SLIME_DROOLING:int                                 =   5;

// analloosenesslevelsNOPEDISABLED
public static const Ass.LOOSENESS_VIRGIN:int                                       =   0;
public static const Ass.LOOSENESS_TIGHT:int                                        =   1;
public static const Ass.LOOSENESS_NORMAL:int                                       =   2;
public static const Ass.LOOSENESS_LOOSE:int                                        =   3;
public static const Ass.LOOSENESS_STRETCHED:int                                    =   4;
public static const Ass.LOOSENESS_GAPING:int                                       =   5;

// hipRating
public static const Hips.RATING_AVERAGE:int                                           =   0;
public static const Hips.RATING_SLENDER:int                                          =   2;
public static const Hips.RATING_AVERAGE:int                                          =   4;
public static const Hips.RATING_AMPLE:int                                            =   6;
public static const Hips.RATING_CURVY:int                                            =  10;
public static const Hips.RATING_FERTILE:int                                          =  15;
public static const Hips.RATING_INHUMANLY_WIDE:int                                   =  20;

// buttRating
public static const Butt.RATING_BUTTLESS:int                                        =   0;
public static const Butt.RATING_AVERAGE:int                                           =   2;
public static const Butt.RATING_AVERAGE:int                                         =   4;
public static const Butt.RATING_NOTICEABLE:int                                      =   6;
public static const Butt.RATING_LARGE:int                                           =   8;
public static const Butt.RATING_JIGGLY:int                                          =  10;
public static const Butt.RATING_EXPANSIVE:int                                       =  13;
public static const Butt.RATING_HUGE:int                                            =  16;
public static const Butt.RATING_INCONCEIVABLY_BIG:int                               =  20;

//breast size (moved here because it's the largest list)
public static const BREAST_CUP_FLAT:int												=   0;
public static const BREAST_CUP_A:int												=   1;
public static const BREAST_CUP_B:int												=   2;
public static const BREAST_CUP_C:int												=   3;
public static const BREAST_CUP_D:int												=   4;
public static const BREAST_CUP_DD:int												=   5;
public static const BREAST_CUP_DD_BIG:int											=   6;
public static const BREAST_CUP_E:int												=   7;
public static const BREAST_CUP_E_BIG:int											=   8;
public static const BREAST_CUP_EE:int												=   9;
public static const BREAST_CUP_EE_BIG:int											=  10;
public static const BREAST_CUP_F:int												=  11;
public static const BREAST_CUP_F_BIG:int											=  12;
public static const BREAST_CUP_FF:int												=  13;
public static const BREAST_CUP_FF_BIG:int											=  14;
public static const BREAST_CUP_G:int												=  15;
public static const BREAST_CUP_G_BIG:int											=  16;
public static const BREAST_CUP_GG:int												=  17;
public static const BREAST_CUP_GG_BIG:int											=  18;
public static const BREAST_CUP_H:int												=  19;
public static const BREAST_CUP_H_BIG:int											=  20;
public static const BREAST_CUP_HH:int												=  21;
public static const BREAST_CUP_HH_BIG:int											=  22;
public static const BREAST_CUP_HHH:int												=  23;
public static const BREAST_CUP_I:int												=  24;
public static const BREAST_CUP_I_BIG:int											=  25;
public static const BREAST_CUP_II:int												=  26;
public static const BREAST_CUP_II_BIG:int											=  27;
public static const BREAST_CUP_J:int												=  28;
public static const BREAST_CUP_J_BIG:int											=  29;
public static const BREAST_CUP_JJ:int												=  30;
public static const BREAST_CUP_JJ_BIG:int											=  31;
public static const BREAST_CUP_K:int												=  32;
public static const BREAST_CUP_K_BIG:int											=  33;
public static const BREAST_CUP_KK:int												=  34;
public static const BREAST_CUP_KK_BIG:int											=  35;
public static const BREAST_CUP_L:int												=  36;
public static const BREAST_CUP_L_BIG:int											=  37;
public static const BREAST_CUP_LL:int												=  38;
public static const BREAST_CUP_LL_BIG:int											=  39;
public static const BREAST_CUP_M:int												=  40;
public static const BREAST_CUP_M_BIG:int											=  41;
public static const BREAST_CUP_MM:int												=  42;
public static const BREAST_CUP_MM_BIG:int											=  43;
public static const BREAST_CUP_MMM:int												=  44;
public static const BREAST_CUP_MMM_LARGE:int										=  45;
public static const BREAST_CUP_N:int												=  46;
public static const BREAST_CUP_N_LARGE:int											=  47;
public static const BREAST_CUP_NN:int												=  48;
public static const BREAST_CUP_NN_LARGE:int											=  49;
public static const BREAST_CUP_O:int												=  50;
public static const BREAST_CUP_O_LARGE:int											=  51;
public static const BREAST_CUP_OO:int												=  52;
public static const BREAST_CUP_OO_LARGE:int											=  53;
public static const BREAST_CUP_P:int												=  54;
public static const BREAST_CUP_P_LARGE:int											=  55;
public static const BREAST_CUP_PP:int												=  56;
public static const BREAST_CUP_PP_LARGE:int											=  57;
public static const BREAST_CUP_Q:int												=  58;
public static const BREAST_CUP_Q_LARGE:int											=  59;
public static const BREAST_CUP_QQ:int												=  60;
public static const BREAST_CUP_QQ_LARGE:int											=  61;
public static const BREAST_CUP_R:int												=  62;
public static const BREAST_CUP_R_LARGE:int											=  63;
public static const BREAST_CUP_RR:int												=  64;
public static const BREAST_CUP_RR_LARGE:int											=  65;
public static const BREAST_CUP_S:int												=  66;
public static const BREAST_CUP_S_LARGE:int											=  67;
public static const BREAST_CUP_SS:int												=  68;
public static const BREAST_CUP_SS_LARGE:int											=  69;
public static const BREAST_CUP_T:int												=  70;
public static const BREAST_CUP_T_LARGE:int											=  71;
public static const BREAST_CUP_TT:int												=  72;
public static const BREAST_CUP_TT_LARGE:int											=  73;
public static const BREAST_CUP_U:int												=  74;
public static const BREAST_CUP_U_LARGE:int											=  75;
public static const BREAST_CUP_UU:int												=  76;
public static const BREAST_CUP_UU_LARGE:int											=  77;
public static const BREAST_CUP_V:int												=  78;
public static const BREAST_CUP_V_LARGE:int											=  79;
public static const BREAST_CUP_VV:int												=  80;
public static const BREAST_CUP_VV_LARGE:int											=  81;
public static const BREAST_CUP_W:int												=  82;
public static const BREAST_CUP_W_LARGE:int											=  83;
public static const BREAST_CUP_WW:int												=  84;
public static const BREAST_CUP_WW_LARGE:int											=  85;
public static const BREAST_CUP_X:int												=  86;
public static const BREAST_CUP_X_LARGE:int											=  87;
public static const BREAST_CUP_XX:int												=  88;
public static const BREAST_CUP_XX_LARGE:int											=  89;
public static const BREAST_CUP_Y:int												=  90;
public static const BREAST_CUP_Y_LARGE:int											=  91;
public static const BREAST_CUP_YY:int												=  92;
public static const BREAST_CUP_YY_LARGE:int											=  93;
public static const BREAST_CUP_Z:int												=  94;
public static const BREAST_CUP_Z_LARGE:int											=  95;
public static const BREAST_CUP_ZZ:int												=  96;
public static const BREAST_CUP_ZZ_LARGE:int											=  97;
public static const BREAST_CUP_ZZZ:int												=  98;
public static const BREAST_CUP_ZZZ_LARGE:int										=  99;
public static const BREAST_CUP_HYPER_A:int											= 100; // <-- HYPER
public static const BREAST_CUP_HYPER_B:int											= 101;
public static const BREAST_CUP_HYPER_C:int											= 102;
public static const BREAST_CUP_HYPER_D:int											= 103;
public static const BREAST_CUP_HYPER_DD:int											= 104;
public static const BREAST_CUP_HYPER_DD_BIG:int										= 105;
public static const BREAST_CUP_HYPER_E:int											= 106;
public static const BREAST_CUP_HYPER_E_BIG:int										= 107;
public static const BREAST_CUP_HYPER_EE:int											= 108;
public static const BREAST_CUP_HYPER_EE_BIG:int										= 109;
public static const BREAST_CUP_HYPER_F:int											= 110;
public static const BREAST_CUP_HYPER_F_BIG:int										= 111;
public static const BREAST_CUP_HYPER_FF:int											= 112;
public static const BREAST_CUP_HYPER_FF_BIG:int										= 113;
public static const BREAST_CUP_HYPER_G:int											= 114;
public static const BREAST_CUP_HYPER_G_BIG:int										= 115;
public static const BREAST_CUP_HYPER_GG:int											= 116;
public static const BREAST_CUP_HYPER_GG_BIG:int										= 117;
public static const BREAST_CUP_HYPER_H:int											= 118;
public static const BREAST_CUP_HYPER_H_BIG:int										= 119;
public static const BREAST_CUP_HYPER_HH:int											= 120;
public static const BREAST_CUP_HYPER_HH_BIG:int										= 121;
public static const BREAST_CUP_HYPER_HHH:int										= 122;
public static const BREAST_CUP_HYPER_I:int											= 123;
public static const BREAST_CUP_HYPER_I_BIG:int										= 124;
public static const BREAST_CUP_HYPER_II:int											= 125;
public static const BREAST_CUP_HYPER_II_BIG:int										= 126;
public static const BREAST_CUP_HYPER_J:int											= 127;
public static const BREAST_CUP_HYPER_J_BIG:int										= 128;
public static const BREAST_CUP_HYPER_JJ:int											= 129;
public static const BREAST_CUP_HYPER_JJ_BIG:int										= 130;
public static const BREAST_CUP_HYPER_K:int											= 131;
public static const BREAST_CUP_HYPER_K_BIG:int										= 132;
public static const BREAST_CUP_HYPER_KK:int											= 133;
public static const BREAST_CUP_HYPER_KK_BIG:int										= 134;
public static const BREAST_CUP_HYPER_L:int											= 135;
public static const BREAST_CUP_HYPER_L_BIG:int										= 136;
public static const BREAST_CUP_HYPER_LL:int											= 137;
public static const BREAST_CUP_HYPER_LL_BIG:int										= 138;
public static const BREAST_CUP_HYPER_M:int											= 139;
public static const BREAST_CUP_HYPER_M_BIG:int										= 140;
public static const BREAST_CUP_HYPER_MM:int											= 141;
public static const BREAST_CUP_HYPER_MM_BIG:int										= 142;
public static const BREAST_CUP_HYPER_MMM:int										= 143;
public static const BREAST_CUP_HYPER_MMM_LARGE:int									= 144;
public static const BREAST_CUP_HYPER_N:int											= 145;
public static const BREAST_CUP_HYPER_N_LARGE:int									= 146;
public static const BREAST_CUP_HYPER_NN:int											= 147;
public static const BREAST_CUP_HYPER_NN_LARGE:int									= 148;
public static const BREAST_CUP_HYPER_O:int											= 149;
public static const BREAST_CUP_HYPER_O_LARGE:int									= 150;
public static const BREAST_CUP_HYPER_OO:int											= 151;
public static const BREAST_CUP_HYPER_OO_LARGE:int									= 152;
public static const BREAST_CUP_HYPER_P:int											= 153;
public static const BREAST_CUP_HYPER_P_LARGE:int									= 154;
public static const BREAST_CUP_HYPER_PP:int											= 155;
public static const BREAST_CUP_HYPER_PP_LARGE:int									= 156;
public static const BREAST_CUP_HYPER_Q:int											= 157;
public static const BREAST_CUP_HYPER_Q_LARGE:int									= 158;
public static const BREAST_CUP_HYPER_QQ:int											= 159;
public static const BREAST_CUP_HYPER_QQ_LARGE:int									= 160;
public static const BREAST_CUP_HYPER_R:int											= 161;
public static const BREAST_CUP_HYPER_R_LARGE:int									= 162;
public static const BREAST_CUP_HYPER_RR:int											= 163;
public static const BREAST_CUP_HYPER_RR_LARGE:int									= 164;
public static const BREAST_CUP_HYPER_S:int											= 165;
public static const BREAST_CUP_HYPER_S_LARGE:int									= 166;
public static const BREAST_CUP_HYPER_SS:int											= 167;
public static const BREAST_CUP_HYPER_SS_LARGE:int									= 168;
public static const BREAST_CUP_HYPER_T:int											= 169;
public static const BREAST_CUP_HYPER_T_LARGE:int									= 170;
public static const BREAST_CUP_HYPER_TT:int											= 171;
public static const BREAST_CUP_HYPER_TT_LARGE:int									= 172;
public static const BREAST_CUP_HYPER_U:int											= 173;
public static const BREAST_CUP_HYPER_U_LARGE:int									= 174;
public static const BREAST_CUP_HYPER_UU:int											= 175;
public static const BREAST_CUP_HYPER_UU_LARGE:int									= 176;
public static const BREAST_CUP_HYPER_V:int											= 177;
public static const BREAST_CUP_HYPER_V_LARGE:int									= 178;
public static const BREAST_CUP_HYPER_VV:int											= 179;
public static const BREAST_CUP_HYPER_VV_LARGE:int									= 180;
public static const BREAST_CUP_HYPER_W:int											= 181;
public static const BREAST_CUP_HYPER_W_LARGE:int									= 182;
public static const BREAST_CUP_HYPER_WW:int											= 183;
public static const BREAST_CUP_HYPER_WW_LARGE:int									= 184;
public static const BREAST_CUP_HYPER_X:int											= 185;
public static const BREAST_CUP_HYPER_X_LARGE:int									= 186;
public static const BREAST_CUP_HYPER_XX:int											= 187;
public static const BREAST_CUP_HYPER_XX_LARGE:int									= 188;
public static const BREAST_CUP_HYPER_Y:int											= 189;
public static const BREAST_CUP_HYPER_Y_LARGE:int									= 190;
public static const BREAST_CUP_HYPER_YY:int											= 191;
public static const BREAST_CUP_HYPER_YY_LARGE:int									= 192;
public static const BREAST_CUP_HYPER_Z:int											= 193;
public static const BREAST_CUP_HYPER_Z_LARGE:int									= 194;
public static const BREAST_CUP_HYPER_ZZ:int											= 195;
public static const BREAST_CUP_HYPER_ZZ_LARGE:int									= 196;
public static const BREAST_CUP_HYPER_ZZZ:int										= 197;
public static const BREAST_CUP_HYPER_ZZZ_LARGE:int									= 198;
public static const BREAST_CUP_JACQUES00:int										= 199; // <-- Jacques00-cup

// End Description constants


code:
/*
	Debug pane and related functions
	Author: Fake-Name
*/
import flash.system.SecurityDomain;
import flash.system.Security;

public function debugPane():void {
	clearOutput();
	displayHeader("Debug information!");

	outputText("\nPossible flash sandboxing contexts:");
	outputText("
\"localWithNetwork\" means images will not work!
");
	outputText("
\"localWithFile\" means images can work.
");
	outputText("
\"localTrusted\" means images can work, and you've somehow managed to install this swf into a flash trusted directory. How did you manage that?
");
	outputText("\nNote that you still need the proper folder structure to have functional images.");

	outputText("\n\nCurrent Sandbox mode: " + Security.sandboxType + "");
	outputText("\n
 --------"); // HR Tag! WHY U NO WORK?

	outputText("\nCurrently have " + images.getLoadedImageCount() + " images loaded into cache.");

	if (CoC_Settings.haltOnErrors)  // Using a static class so I can grab it from anywhere.
		outputText("\nCurrently set to halt on all errors.");
	else
		outputText("\nParsing or description errors only generate warning message");

	outputText("\n
 --------"); // HR Tag! WHY U NO WORK?

	outputText(images.showImage("monster-ceraph"));

	output.menu();
	output.addButton(0, "Test Input", eventTester);
	output.addButton(1, "Parser Tests", doThatTestingThang);
	output.addButton(14, "Back", gameSettings.exitSettings);
}

public function doThatTestingThang():void
{

	// Excercise the parser. This should catch parser regressions, I think.
	//
	//

	clearOutput();
	outputText(<![CDATA[

Parser Tests!

##Bracket escaping!##

* \[cock\]
* [cock]

**Single word nouns**

* \[armor\] - [armor]
* \[armorname\] - [armorname]
* \[weapon\] - [weapon]
* \[weaponname\] - [weaponname]
* \[name\] - [name]
* \[asshole\] - [asshole]
* \[butthole\] - [butthole]
* \[hair\] - [hair]
* \[face\] - [face]
* \[legs\] - [legs]
* \[leg\] - [leg]
* \[feet\] - [feet]
* \[foot\] - [foot]
* \[sack\] - [sack]
* \[balls\] - [balls]
* \[sheath\] - [sheath]
* \[chest\] - [chest]
* \[fullchest\] - [fullchest]
* \[hips\] - [hips]
* \[butt\] - [butt]
* \[ass\] - [ass]
* \[nipple\] - [nipple]
* \[nipples\] - [nipples]
* \[tongue\] - [tongue]
* \[evade\] - [evade]
* \[misdirection\] - [misdirection]
* \[agility\] - [agility]
* \[master\] - [master]
* \[master\] - [master]
* \[he\] - [he]
* \[him\] - [him]
* \[his\] - [his]
* \[pussy\] - [pussy]
* \[vagina\] - [vagina]
* \[vag\] - [vag]
* \[clit\] - [clit]
* \[cock\] - [cock]
* \[cocks\] - [cocks]
* \[eachcock\] - [eachcock]
* \[onecock\] - [onecock]
* \[cockhead\] - [cockhead]
* \[vagorass\] - [vagorass]
* \[hairorfur\] - [hairorfur]
* \[hand\] - [hand]
* \[hands\] - [hands]
* \[arms\] - [arms]
* \[pg\] - [pg] (This is a shortcut to two newlines. This should be two lines below the \[pg\])

**Single-word function calls and parameter lookups**

* \[player.face\] - [player.face]
* \[allChestDesc\] - [allChestDesc]
* \[player.armorName\] - [player.armorName]
* \[player.skinFurScales\] - [player.skinFurScales]
* \[chestDesc\] - [chestDesc]

**Two word nouns**

* \[cock all\] - [cock all]
* \[cock each\] - [cock each]
* \[cock one\] - [cock one]
* \[cock largest\] - [cock largest]
* \[cock biggest\] - [cock biggest]
* \[cock smallest\] - [cock smallest]
* \[cock longest\] - [cock longest]
* \[cock shortest\] - [cock shortest]
* \[cock 0\] - [cock 0]  (This should always error)
* \[cock 1\] - [cock 1]
* \[cock 2\] - [cock 2]
* \[cockHead biggest\] - [cockHead biggest]
* \[cockHead largest\] - [cockHead largest]
* \[cockHead smallest\] - [cockHead smallest]
* \[cockHead longest\] - [cockHead longest]
* \[cockHead shortest\] - [cockHead shortest]
* \[cockHead 0\] - [cockHead 0]  (This should always error)
* \[cockHead 1\] - [cockHead 1]
* \[cockHead 2\] - [cockHead 2]

**Boolean tests**

* 1 \[if (4==4) HERP|DERP\]
* 1 [if (4==4) HERP|DERP]
* 2 \[if (4 == 7) HERP|DERP\]
* 2 [if (4 == 7) HERP|DERP]
* 3 \[if (4==(2+2)) HERP|DERP\]
* 3 [if (4==(2+2)) HERP|DERP]
* 4 \[if (4==4) HERP|DERP\]
* 4 [if (4==4) HERP|DERP]
* 5 \[if (4==7) [if (4==7) HERP]\]
* 5 [if (4==7) [if (4==7) HERP]]
* 6 \[if (4==7) [if (4==7) HERP|DERP]\]
* 6 [if (4==7) [if (4==7) HERP|DERP]]
* 7 \[if (4=4) [if (4=4) HERP]\]
* 7 [if (4=4) [if (4=4) HERP]]
* 8 \[if (4==4) [if (4==4) HERP]\]
* 8 [if (4==4) [if (4==4) HERP]]
* 9 \[if (4==biggesttitsize) \]
* 9 [if (4==biggesttitsize) ]
* 10 \[if (4==biggesttitsize) HERP|DERP\]
* 10 [if (4==biggesttitsize) HERP|DERP]
* 11 \[if (analcapacity>3)    HERP|DERP\]
* 11 [if (analcapacity>3)    HERP|DERP]
* 12 \[if (analcapacity>3) HERP|DERP\]
* 12 [if (analcapacity>3) HERP|DERP]
* 13 \[if (analcapacity = 0)  HERP|DERP\]
* 13 [if (analcapacity = 0)  HERP|DERP]
* 14 \[if (analcapacity = 0) HERP|DERP\]
* 14 [if (analcapacity = 0) HERP|DERP]
* 15 \[if (analcapacity > 0)  HERP|DERP\]
* 15 [if (analcapacity > 0)  HERP|DERP]
* 16 \[if (analcapacity > 0) HERP|DERP\]
* 16 [if (analcapacity > 0) HERP|DERP]
* 17 \[if (hasCock) HERP|DERP\]
* 17 [if (hasCock) HERP|DERP]
* 18 \[if (hasVagina) HERP|DERP\]
* 18 [if (hasVagina) HERP|DERP]

** Member Accessors**

* 19 \[if (player.biggestLactation > 0) HERP|DERP\]
* 19 [if (player.biggestLactation > 0) HERP|DERP]
* 20 \[if (player.biggestLactation > 0)  \[if (hasVagina == True) LOL|WAT\]|DERP\]
* 20 [if (player.biggestLactation > 0)  [if (hasVagina == True) LOL|WAT]|DERP]
* 21 \[if (player.str > 0)  HERP|DERP\]
* 21 [if (player.str > 0)  HERP|DERP]
* 22 \[if (player.inte > 0)  HERP|DERP\]
* 22 [if (player.inte > 0)  HERP|DERP]
* 23 \[if (player.biggestTitSize > 0)  HERP|DERP\]
* 23 [if (player.biggestTitSize > 0)  HERP|DERP]
* 24 \[if (player.biggestLactation > 0)  HERP|DERP\]
* 24 [if (player.biggestLactation > 0)  HERP|DERP]
* 25 \[if (player.isBiped == true) IS A BIPEDDDDD | not a biped. Wat?\]
* 25 [if (player.isBiped == true) IS A BIPEDDDDD | not a biped. Wat?]
* 26 \[if (player.isBiped) IS A BIPEDDDDD | not a biped. Wat?\]
* 26 [if (player.isBiped) IS A BIPEDDDDD | not a biped. Wat?]
* 27 \[if (player.canFly) can fly | can't fly\]
* 27 [if (player.canFly) can fly | can't fly]
* 28 \[if (player.tail.type != 0)wagging your \[tail\]\]
* 28 [if (player.tail.type != 0)wagging your [tail]]
* 29 \[if (player.tail.type != 0)wagging your \[tail\]|\[butt\] in the air\]
* 29 [if (player.tail.type != 0)wagging your [tail]|[butt] in the air]
* 30 \[if (tallness >= 100)tall|not very tall\]
* 30 [if (tallness >= 100)tall|not very tall]
* 31 you feel your \[if (tallness >= 120)frame|\[if (tallness >= 80)smaller frame|much smaller frame\]\] surrounded
* 31 you feel your [if (tallness >= 120)frame|[if (tallness >= 80)smaller frame|much smaller frame]] surrounded
* 32 \[if (bakeryTalkedRoot)talked about root|didn't talk about root\]
* 32 [if (bakeryTalkedRoot)talked about root|didn't talk about root]

**Arbitrary function calls**

* \[eCockDescript 0\] - [eCockDescript 0]
* \[eCockDescript\] - [eCockDescript]

* \[cockDescript 0\] - [cockDescript 0]
* \[cockDescript\] - [cockDescript]
* Generic function calls will be cast to string
* \[player.cumQ\] - [player.cumQ]
* `\[kFLAGS_REF.ARIAN_COCK_SIZE\]` - [kFLAGS_REF.ARIAN_COCK_SIZE]
* `\[flags kFLAGS_REF.ARIAN_COCK_SIZE\]` - [flags kFLAGS_REF.ARIAN_COCK_SIZE]

**Gender tests**

**PC**

* \[He\]  - [He]
* \[he\]  - [he]
* \[His\]  - [His]
* \[his\]  - [his]
* \[Him\]  - [Him]
* \[him\]  - [him]
* \[his\]  - [his]
* \[His\]  - [His]

**NPC**

**Rubi**

* \[rubi ey\] - [rubi ey]
* \[rubi eir\] - [rubi eir]
* \[rubi eirs\] - [rubi eirs]
* \[rubi emself\] - [rubi emself]
* \[rubi Ey\] - [rubi Ey]
* \[rubi Eir\] - [rubi Eir]
* \[rubi Eirs\] - [rubi Eirs]
* \[rubi Emself\] - [rubi Emself]

**Arian**

* \[arian ey\] - [arian ey]
* \[arian eir\] - [arian eir]
* \[arian eirs\] - [arian eirs]
* \[arian emself\] - [arian emself]
* \[arian Ey\] - [arian Ey]
* \[arian Eir\] - [arian Eir]
* \[arian Eirs\] - [arian Eirs]
* \[arian Emself\] - [arian Emself]

**Benoit**

* \[benoit name\] - [benoit name]
* \[benoit ey\] - [benoit ey]
* \[benoit eir\] - [benoit eir]
* \[benoit eirs\] - [benoit eirs]
* \[benoit emself\] - [benoit emself]
* \[benoit Ey\] - [benoit Ey]
* \[benoit Eir\] - [benoit Eir]
* \[benoit Eirs\] - [benoit Eirs]
* \[benoit Emself\] - [benoit Emself]

**NPC Aspect tests**

* \[arian chest\] - [arian chest]
* \[arian chestAdj\] - [arian chestAdj]
* \[rubi breasts\] - [rubi breasts]
* \[rubi cock\] - [rubi cock]

**Typical Noun usages**

* [cock] stiffening [cock biggest] and [vagina] starting to burn with need
* [cock all] stiffening [cock each] and [cock 1] starting to burn with need
* [cockhead biggest] stiffening [cockhead smallest] and [cockhead longest] and [cockhead 1] starting to burn with need

**Complex IF Statement thing**

\[if (hasCock = true) \[cock\] stiffening IFSTUFF \[if (hasVagina = true) \[vagina\] starting to burn with need\] IFSTUFFDONE\]\[if (isHerm = true) and \]\[if (hasVagina = true) \[vagina\] starting to burn with need\]
[if (hasCock = true) [cock] stiffening IFSTUFF [if (hasVagina = true) [vagina] starting to burn with need] IFSTUFFDONE][if (isHerm = true) and ][if (hasVagina = true) [vagina] starting to burn with need]

**FancyQuotes!**

Convert Apostrophes '
It's a herm!

convert "
"derp a herp"

	]]>);

	output.menu();
	output.addButton(4, "Back", debugPane)

}

public function eventTester():void {
	clearOutput();
	mainView.showTestInputPanel();
	mainView.eventTestInput.text = <![CDATA[
[screen startup |

"Paste test event text here."

[button urtaQuest.infertilityQuestions | infertilityQuestions]
[button forest.kitsuneScene.enterTheTrickster | enterTheTrickster]
[button forest.kitsuneScene.kitsuneShrine | kitsuneShrine]
[button forest.kitsuneScene.defeatTheKitsunes | defeatTheKitsunes]
[button charCreation.debugAgeChange | debugAgeChange]
[button exit | Exit ]
]

]]>;

	;
	output.menu();
	output.addButton(0, "Proceed", eventTesterGo);
	output.addButton(4, "Back", eventTesterExit);
}

public function eventTesterGo():void {
	mainView.hideTestInputPanel();

	var temp:String = mainView.eventTestInput.text

	trace("Temp = ", temp);

	output.menu();
	clearOutput();
	outputText(temp);

	output.addButton(14, "Back", eventTester);
	output.flush();
}

public function eventTesterExit():void {
	mainView.hideTestInputPanel();
	debugPane();
}


code:
import classes.*;
import classes.Scenes.Codex;
import flash.text.TextFormat;
import flash.utils.ByteArray;

import coc.view.CoCButton;

// at least one import or other usage of *class* so it won't be marked unused.
import classes.internals.Profiling;
import classes.internals.profiling.Begin;
import classes.internals.profiling.End;

public function silly():Boolean {
	return flags[kFLAGS.SILLY_MODE_ENABLE_FLAG] == 1;
}

public function noFur():Boolean {
	return flags[kFLAGS.NOFUR_MODE_ENABLE_FLAG] == 1;
}

public function clone(source:Object):* {
	var copier:ByteArray = new ByteArray();
	copier.writeObject(source);
	copier.position = 0;
	return(copier.readObject());
}

// Hah, finally a place where a dictionary is actually required!
import flash.utils.Dictionary;
private var funcLookups:Dictionary = null;

private function buildFuncLookupDict(object:*=null,prefix:String=""):void
{
	import flash.utils.*;
	//trace("Building function <-> function name mapping table for "+((object==null)?"CoC.":prefix));
	// get all methods contained
	if (object == null) object = this;
	var typeDesc:XML = describeType(object);
	//trace("TypeDesc - ", typeDesc)

	for each (var node:XML in typeDesc..method)
	{
		// return the method name if the thisObject of f (t)
		// has a property by that name
		// that is not null (null = doesn't exist) and
		// is strictly equal to the function we search the name of
		//trace("this[node.@name] = ", this[node.@name], " node.@name = ", node.@name)
		if (object[node.@name] != null)
			this.funcLookups[object[node.@name]] = prefix+node.@name;
	}
	for each (node in typeDesc..variable)
	{
		if (node.@type.toString().indexOf("classes.Scenes.") == 0 ||
				node.metadata.@name.contains("Scene")){
			if (object[node.@name]!=null){
				buildFuncLookupDict(object[node.@name],node.@name+".");
			}
		}
	}
}

public function getFunctionName(f:Function):String
{
	// trace("Getting function name")
	// get the object that contains the function (this of f)
	//var t:Object = flash.sampler.getSavedThis(f);
	if (this.funcLookups == null)
	{
		//trace("Rebuilding lookup object");
		this.funcLookups = new Dictionary();
		this.buildFuncLookupDict();
	}

	if (f in this.funcLookups)
		return(this.funcLookups[f]);

	// if we arrive here, we haven't found anything...
	// maybe the function is declared in the private namespace?
	return null;
}

private function logFunctionInfo(func:Function, arg:* = null, arg2:* = null, arg3:* = null):void
{
	var logStr:String = "";
	if (arg is Function)
	{
		logStr += "Calling = " + getFunctionName(func) + " Param = " +  getFunctionName(arg);
	}
	else
	{
		logStr += "Calling = " + getFunctionName(func) + " Param = " +  arg;
	}
	//CoC_Settings.appendButtonEvent(logStr);
	//trace(logStr); 9999
}

// returns a function that takes no arguments, and executes function `func` with argument `arg`
public function createCallBackFunction(func:Function, arg:*, arg2:* = null, arg3:* = null):Function
{
	if (func == null) {
		CoC_Settings.error("createCallBackFunction(null," + arg + ")");
	}
	if ( arg == -9000 || arg == null )
	{
/*		if (func == eventParser){
			CoC_Settings.error("createCallBackFunction(eventParser,"+arg+")");
		} */
		return function ():*
		{
			if (CoC_Settings.haltOnErrors)
				logFunctionInfo(func, arg);
			return func();
		};
	}
	else
	{
		if (arg2 == -9000 || arg2 == null)
		{
			return function ():*
			{
				if (CoC_Settings.haltOnErrors)
					logFunctionInfo(func, arg);
				return func( arg );
			};
		}
		else
		{
			if (arg3 == -9000 || arg3 == null)
			{
				return function ():*
				{
					if (CoC_Settings.haltOnErrors)
						logFunctionInfo(func, arg, arg2);
					return func(arg, arg2);
				};
			}
			else
			{
				return function ():*
				{
					if (CoC_Settings.haltOnErrors)
						logFunctionInfo(func, arg, arg2, arg3);
					return func(arg, arg2, arg3);
				};
			}
		}
	}
}

public function createCallBackFunction2(func:Function, ...args):Function {
	if (func == null) {
		CoC_Settings.error("createCallBackFunction(null," + args + ")");
	}
	return function ():* {
		if (CoC_Settings.haltOnErrors) logFunctionInfo(func, args);
		return func.apply(null, args);
	}
}

public function openURL(url:String):void
{
    navigateToURL(new URLRequest(url), "_blank");
}

/**
 * Awards the achievement. Will display a blue text if achievement hasn't been earned.
 * @param	title The name of the achievement.
 * @param	achievement The achievement to be awarded.
 * @param	display Determines if achievement earned should be displayed.
 * @param	nl Inserts a new line before the achievement text.
 * @param	nl2 Inserts a new line after the achievement text.
 */
public function awardAchievement(title:String, achievement:int, display:Boolean = true, nl:Boolean = false, nl2:Boolean = true):void {
	if (achievements[achievement] != null) {
		if (achievements[achievement] <= 0) {
			achievements[achievement] = 1;
			if (nl && display) outputText("\n");
			if (display) outputText("Achievement unlocked: " + title + "");
			if (nl2 && display) outputText("\n");
			kGAMECLASS.saves.savePermObject(false); //Only save if the achievement hasn't been previously awarded.
		}
	}
	else outputText("\nERROR: Invalid achievement!");
}

public function unlockCodexEntry(codexFlag:int, nlBefore:Boolean = true, nlAfter:Boolean = false):void {
	if (kGAMECLASS.camp.codex.allEntries[codexFlag]) {
		if (flags[codexFlag] <= 0) {
			var title:String = kGAMECLASS.camp.codex.allEntries[codexFlag][Codex.ENTRY_NAME];
			flags[codexFlag] = 1;
			outputText((nlBefore ? "[pg]" : "") + "[b: New codex entry unlocked: " + title + "!]" + (nlAfter ? "[pg]" : ""));
		}
	}
}

public function testDynStatsEvent():void {
	clearOutput();
	outputText("Old: "+player.str+" "+player.tou+" "+player.spe+" "+player.inte+" "+player.lib+" "+player.sens+" "+player.lust+"\n");
	player.dynStats("tou", 1, "spe+", 2, "int-", 3, "lib*", 2, "sen=", 25,"lust/",2);
	outputText("Mod: 0 1 +2 -3 *2 =25 /2\n");
	outputText("New: "+player.str+" "+player.tou+" "+player.spe+" "+player.inte+" "+player.lib+" "+player.sens+" "+player.lust+"\n");
	output.doNext(playerMenu);
}

/**
 * Modify stats.
 *
 * Arguments should come in pairs nameOp:String, value:Number/Boolean

 * where nameOp is ( stat_name + [operator] ) and value is operator argument

 * valid operators are "=" (set), "+", "-", "*", "/", add is default.

 * valid stat_names are "str", "tou", "spe", "int", "lib", "sen", "lus", "cor" or their full names;
 * also "scaled"/"sca" (default true: apply resistances, perks; false - force values)
 *
 * @return Object of (newStat-oldStat) with keys str, tou, spe, int, lib, sen, lus, cor
 * */
public function dynStats(... args):Object {
	return player.dynStats.apply(player,args);
}

/**
 * Returns true if you're on SFW mode.
 */
public function doSFWloss():Boolean {
	if (flags[kFLAGS.SFW_MODE] > 0) {
		clearOutput();
		if (player.HP <= 0) outputText("You collapse from your injuries.");
		else outputText("You collapse from your overwhelming desires.");
		if (combat.inCombat) combat.cleanupAfterCombat();
		else output.doNext(camp.returnToCampUseOneHour)
		return true;
	}
	return false;
}

public function isPeaceful():Boolean {
	return flags[kFLAGS.EASY_MODE_ENABLE_FLAG] <= -2;
}

public function doNothing():void {
	//This literally does nothing.
}


code:
import classes.GlobalFlags.kFLAGS;
import classes.GlobalFlags.kGAMECLASS;
import classes.Items.Consumables.Liddellium;
import classes.Player;
import classes.Items.Consumable;
import classes.Scenes.Areas.Lake;
import classes.Scenes.Camp.ScarredBlade;
import classes.internals.profiling.Begin;
import classes.internals.profiling.End;
import classes.display.SpriteDb;
import classes.internals.*;
import classes.Scenes.NPCs.CeraphFollowerScene;

import coc.view.MainView;

//Used to jump the fuck out of pregnancy scenarios for menus.
//const EVENT_PARSER_ESCAPE:int = 800;
//const PHYLLA_GEMS_HUNTED_TODAY:int = 893;

public function playerMenu():void {
	mainViewManager.hidePlayerDoll();
	if (!inCombat) spriteSelect(null);
	mainView.setMenuButton(MainView.MENU_NEW_MAIN, "New Game", charCreation.newGameGo);
	mainView.nameBox.visible = false;
	output.showStats();
	if (_gameState == 1 || _gameState == 2) {
		kGAMECLASS.combat.combatMenu();
		return;
	}
	combat.plotFight = false; //Clear restriction on item overlaps if not in combat
	flags[kFLAGS.BONUS_ITEM_AFTER_COMBAT_ID] = ""; //Clear item if stuck
	if (inDungeon) {
		kGAMECLASS.dungeons.checkRoom();
		return;
	}
	else if (inRoomedDungeon) {
		if (inRoomedDungeonResume != null) {
			inRoomedDungeonResume();
			return;
		}
	}
	flags[kFLAGS.PLAYER_PREGGO_WITH_WORMS] = 0;
	doCamp();
}

public function gameOver(clear:Boolean = false):void { //Leaves text on screen unless clear is set to true
	var textChoices:Number = rand(5);
	if (silly && rand(5) == 0 && flags[kFLAGS.HARDCORE_MODE] == 0) textChoices = 5 + rand(4); //20% chance of humourous bad end texts.
	if (clear) clearOutput();
	outputText("\n\n");
	//Standard
	if (textChoices == 0) outputText("GAME OVER");
	if (textChoices == 1) outputText("Game over, man! Game over!");
	if (textChoices == 2) outputText("You just got Bad-Ended!");
	if (textChoices == 3) outputText("Your adventures have come to an end...");
	if (textChoices == 4) outputText("Oh dear, you are bad-ended!");	//Runescape
	//Silly Mode
	if (textChoices == 5) outputText("Don't lose hope... " + player.short + "! Stay determined!"); //Undertale
	if (textChoices == 6) outputText("Wasted"); //Grand Theft Auto V
	if (textChoices == 7) outputText("Ya dun goofed"); //One of the memes
	if (textChoices == 8) outputText("Git gud");	//One of the memes
	outputText("");
	//Delete save on hardcore.
	if (flags[kFLAGS.HARDCORE_MODE] > 0) {
		outputText("\n\nError deleting save file.");
		/*outputText("\n\nYour save file has been deleted, as you are on Hardcore Mode!");
		flags[kFLAGS.TEMP_STORAGE_SAVE_DELETION] = flags[kFLAGS.HARDCORE_SLOT];
		var test:* = SharedObject.getLocal(flags[kFLAGS.TEMP_STORAGE_SAVE_DELETION], "/");
		if (test.data.exists)
		{
			trace("DELETING SLOT: " + flags[kFLAGS.TEMP_STORAGE_SAVE_DELETION]);
			test.clear();
		}*/
	}
	flags[kFLAGS.TIMES_BAD_ENDED]++;
	awardAchievement("Game Over!", kACHIEVEMENTS.GENERAL_GAME_OVER, true, true);
	output.menu();
	output.addButton(0, "Game Over", gameOverMenuOverride).hint("Your game has ended. Please load a saved file or start a new game.");
	if (flags[kFLAGS.HARDCORE_MODE] <= 0) output.addButton(1, "Nightmare", camp.wakeFromBadEnd).hint("It's all just a dream. Wake up.");
	//addButton(3, "NewGamePlus", charCreation.newGamePlus).hint("Start a new game with your equipment, experience, and gems carried over.");
	//if (flags[kFLAGS.EASY_MODE_ENABLE_FLAG] == 1 || debug) addButton(4, "Debug Cheat", playerMenu);
	gameOverMenuOverride();
	inCombat = false;
	kGAMECLASS.monsterArray.length = 0;
	dungeonLoc = 0; //Replaces inDungeon = false;
}

private function gameOverMenuOverride():void { //Game over event; override whatever the fuck has been done to the UI up to this point to force display of the data and new game buttons
	mainView.showMenuButton(MainView.MENU_NEW_MAIN);
	mainView.showMenuButton(MainView.MENU_DATA);
	mainView.hideMenuButton(MainView.MENU_APPEARANCE);
	mainView.hideMenuButton(MainView.MENU_LEVEL);
	mainView.hideMenuButton(MainView.MENU_PERKS);
}

public function getCurrentStackTrace():String		// Fuck, stack-traces only work in the debug player.
{
	var tempError:Error = new Error();
	var stackTrace:String = tempError.getStackTrace();
	return stackTrace;
}

public function errorPrint(details:* = null):void
{
	clearOutput();
	rawOutputText("Congratulations, you've found a bug!");
	rawOutputText("\nError: Unknown event!");
	rawOutputText("\n\nPlease report that you had an issue with code: \"" + details + "\" ");
	rawOutputText("\nGame version: \"" + ver + "\" (THIS IS IMPORTANT! Please be sure you include it!) ");

	var sTrace:String = getCurrentStackTrace();

	if (sTrace)	// Fuck, stack-traces only work in the debug player.
	rawOutputText("and stack-trace: \n
" + sTrace + "
\n");
	rawOutputText("to fake-name on the forums or better yet, file a bug report on github: ");
	rawOutputText("\nhttps://github.com/herp-a-derp/Corruption-of-Champions");

	rawOutputText("\nPlease try to include the details of what you were doing when you encountered this bug ");
	if (sTrace)
	rawOutputText(" (including the above stack trace copy&pasted into the details),");
	rawOutputText(" to make tracking the issue down easier. Thanks!");

	output.doNext(camp.returnToCampUseOneHour);
}

//Argument is time passed.  Pass to event parser if nothing happens.
// The time argument is never actually used atm, everything is done with timeQ instead...
public function goNext(timeAmt:Number, needNext:Boolean):Boolean  {
	Begin("eventParser","goNext",timeAmt);
	var rslt:Boolean = goNextWrapped(timeAmt,needNext);
	End("eventParser","goNext");
	player.sleeping = false;
	return rslt;
}
private function goNextWrapped(timeAmt:Number, needNext:Boolean):Boolean  {
	//Update system time
	//date = new Date();
	//trace ("MONTH: " + date.month + " DATE: " + date.date + " MINUTES: " + date.minutes);
	//clearOutput();
	if (timeAwareLargeLastEntry >= 0) { //Finish calling timeChangeLarge before advancing the hour again
		for (; timeAwareLargeLastEntry < _timeAwareClassList.length; timeAwareLargeLastEntry++) {
			if (_timeAwareClassList[timeAwareLargeLastEntry].timeChangeLarge()) return true;
		}
		timeAwareLargeLastEntry = -1;
	}
	while (timeQ > 0) {
		timeQ--;
		time.hours++;

		kGAMECLASS.player.regeneration(false);
		//Inform all time aware classes that a new hour has arrived
		for (var tac:int = 0; tac < _timeAwareClassList.length; tac++) if (_timeAwareClassList[tac].timeChange()) needNext = true;
		if (time.hours > 23) {
			time.hours = 0;
			time.days++;
		}
		else if (time.hours == 21) {
			if (flags[kFLAGS.LETHICE_DEFEATED] <= 0) outputText("\nThe sky darkens as a starless night falls.  The blood-red moon slowly rises up over the horizon.\n");
			else outputText("\nThe sky darkens as a starry night falls.  The blood-red moon slowly rises up over the horizon.\n");
			needNext = true;
		}
		else if (time.hours == 6) {
			outputText("\nThe sky begins to grow brighter as the moon descends over distant mountains, casting a few last ominous shadows before they burn away in the light.\n");
			needNext = true;
		}
		//BIG EVENTS GO IN HERE
		//BIG EVENTS GO IN HERE
		//BIG EVENTS GO IN HERE
		//BIG EVENTS GO IN HERE

		/* Inform all time aware classes that it's time for large events to trigger. Note that timeChangeLarge could be called multiple times in a single tick
		   of the clock, so any updates should happen in timeChange and any timeChangeLarge events need to make sure they cannot repeat within the same hour.
		   In effect these are the same rules the existing code acted under. */
		for (timeAwareLargeLastEntry = 0; timeAwareLargeLastEntry < _timeAwareClassList.length; timeAwareLargeLastEntry++) {
			if (_timeAwareClassList[timeAwareLargeLastEntry].timeChangeLarge()) return true;
		}
		timeAwareLargeLastEntry = -1; //If this var is -1 then this function has called timeChangeLarge for all entries in the _timeAwareClassList

		//IMP GANGBAAAAANGA
		//The more imps you create, the more often you get gangraped.
		temp = player.statusEffectv1(StatusEffects.BirthedImps) * 2;
		if (temp > 7) temp = 7;
		if (player.findPerk(PerkLib.PiercedLethite) >= 0) temp += 4;
		if (player.inHeat) temp += 2;
		if (vapula.vapulaSlave()) temp += 7;
		//Reduce chance
		var scarePercent:Number = 0;
		scarePercent += flags[kFLAGS.CAMP_WALL_SKULLS] + flags[kFLAGS.CAMP_WALL_STATUES] * 4;
		if (scarePercent > 100) scarePercent = 100;
		if (flags[kFLAGS.CAMP_WALL_PROGRESS] > 0) temp /= 1 + (flags[kFLAGS.CAMP_WALL_PROGRESS] / 100);
		if (flags[kFLAGS.CAMP_WALL_GATE] > 0) temp /= 2;
		temp *= 1 - (scarePercent / 100);
		if (time.hours == 2) {
			if (time.days % 30 == 0 && flags[kFLAGS.ANEMONE_KID] > 0 && player.hasCock() && flags[kFLAGS.ANEMONE_WATCH] > 0 && flags[kFLAGS.TAMANI_NUMBER_OF_DAUGHTERS] >= 40) {
				anemoneScene.goblinNightAnemone();
				needNext = true;
			}
			else if (temp > rand(100) && !player.hasStatusEffect(StatusEffects.DefenseCanopy)) {
				if (player.gender > 0 && !(player.hasStatusEffect(StatusEffects.JojoNightWatch) && player.hasStatusEffect(StatusEffects.PureCampJojo)) && (flags[kFLAGS.HEL_GUARDING] == 0 || !helFollower.followerHel()) && flags[kFLAGS.ANEMONE_WATCH] == 0 && (flags[kFLAGS.HOLLI_DEFENSE_ON] == 0 || flags[kFLAGS.FUCK_FLOWER_KILLED] > 0) && (flags[kFLAGS.KIHA_CAMP_WATCH] == 0 || !kihaFollower.followerKiha()) && !(flags[kFLAGS.CAMP_BUILT_CABIN] > 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] > 0 && (flags[kFLAGS.SLEEP_WITH] == "Marble" || flags[kFLAGS.SLEEP_WITH] == "")) && (flags[kFLAGS.IN_INGNAM] == 0 && flags[kFLAGS.IN_PRISON] == 0)) {
					impScene.impGangabangaEXPLOSIONS();
					output.doNext(playerMenu);
					return true;
				}
				else if (flags[kFLAGS.KIHA_CAMP_WATCH] > 0 && kihaFollower.followerKiha()) {
					outputText("\nYou find charred imp carcasses all around the camp once you wake.  It looks like Kiha repelled a swarm of the little bastards.\n");
					needNext = true;
				}
				else if (flags[kFLAGS.HEL_GUARDING] > 0 && helFollower.followerHel()) {
					outputText("\nHelia informs you over a mug of beer that she whupped some major imp asshole last night.  She wiggles her tail for emphasis.\n");
					needNext = true;
				}
				else if (player.gender > 0 && player.hasStatusEffect(StatusEffects.JojoNightWatch) && player.hasStatusEffect(StatusEffects.PureCampJojo)) {
					outputText("\nJojo informs you that he dispatched a crowd of imps as they tried to sneak into camp in the night.\n");
					needNext = true;
				}
				else if (flags[kFLAGS.HOLLI_DEFENSE_ON] > 0) {
					outputText("\nDuring the night, you hear distant screeches of surprise, followed by orgasmic moans.  It seems some imps found their way into Holli's canopy...\n");
					needNext = true;
				}
				else if (flags[kFLAGS.ANEMONE_WATCH] > 0) {
					outputText("\nYour sleep is momentarily disturbed by the sound of tiny clawed feet skittering away in all directions.  When you sit up, you can make out Kid A holding a struggling, concussed imp in a headlock and wearing a famished expression.  You catch her eye and she sheepishly retreats to a more urbane distance before beginning her noisy meal.\n");
					needNext = true;
				}
				else if (flags[kFLAGS.CAMP_BUILT_CABIN] > 0 && flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] > 0 && (flags[kFLAGS.SLEEP_WITH] == "Marble" || flags[kFLAGS.SLEEP_WITH] == "") && (player.inte / 5) >= rand(15)) {
					outputText("\nYour sleep is momentarily disturbed by the sound of imp hands banging against your cabin door. Fortunately, you locked the door before you went to sleep.\n");
					needNext = true;
				}
			}
			//wormgasms
			else if (flags[kFLAGS.EVER_INFESTED] > 0 && rand(100) < 5 && !player.hasStatusEffect(StatusEffects.Infested)) {
				if (kGAMECLASS.mountain.wormsScene.eligibleForWormInfestation()) {
					kGAMECLASS.mountain.wormsScene.nightTimeInfestation();
					return true;
				}
				else if (flags[kFLAGS.CAMP_CABIN_FURNITURE_BED] > 0 && flags[kFLAGS.SLEEP_WITH] == "") {
					outputText("\nYou hear the sounds of a horde of frustrated worms banging against the door. Good thing you locked your door before you went to sleep!\n");
					needNext = true;
				}
				else if (flags[kFLAGS.HEL_GUARDING] > 0 && helFollower.followerHel()) {
					outputText("\nHelia informs you over a mug of beer that she stomped a horde of gross worms into paste. She shudders after at the memory.\n");
					needNext = true;
				}
				else if (player.gender > 0 && player.hasStatusEffect(StatusEffects.JojoNightWatch) && player.hasStatusEffect(StatusEffects.PureCampJojo)) {
					outputText("\nJojo informs you that he dispatched a horde of tiny, white worms as they tried to sneak into camp in the night.\n");
					needNext = true;
				}
				else if (flags[kFLAGS.ANEMONE_WATCH] > 0) {
					outputText("\nKid A seems fairly well fed in the morning, and you note a trail of slime leading off in the direction of the lake.\n"); // Yeah, blah blah travel weirdness. Quickfix so it seems logically correct.
					needNext = true;
				}
				}
			}
		//No diapause?  Normal!
		if (player.findPerk(PerkLib.Diapause) < 0) {
			if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			//DOUBLE PREGGERS SPEED
			if (player.findPerk(PerkLib.MaraesGiftFertility) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			//DOUBLE PREGGERS SPEED
			if (player.findPerk(PerkLib.MagicalFertility) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			if (player.findPerk(PerkLib.FerasBoonBreedingBitch) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (player.findPerk(PerkLib.FerasBoonWideOpen) >= 0 || player.findPerk(PerkLib.FerasBoonMilkingTwat) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			//DOUBLE PREGGERS SPEED
			if (player.findPerk(PerkLib.BroodMother) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
		}
		//Diapause!
		else if (flags[kFLAGS.DIAPAUSE_FLUID_AMOUNT] > 0 && (player.pregnancyIncubation > 0 || player.buttPregnancyIncubation > 0)) {
			if (flags[kFLAGS.DIAPAUSE_NEEDS_DISPLAYING] == 1) {
				flags[kFLAGS.DIAPAUSE_NEEDS_DISPLAYING] = 0;
				outputText("\n\nYour body reacts to the influx of nutrition, accelerating your pregnancy. Your belly bulges outward slightly.");
				needNext = true;
			}
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			flags[kFLAGS.DIAPAUSE_FLUID_AMOUNT]--;
			if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			//DOUBLE PREGGERS SPEED
			if (player.findPerk(PerkLib.MaraesGiftFertility) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			//DOUBLE PREGGERS SPEED
			if (player.findPerk(PerkLib.MagicalFertility) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			if (player.findPerk(PerkLib.FerasBoonBreedingBitch) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (player.findPerk(PerkLib.FerasBoonWideOpen) >= 0 || player.findPerk(PerkLib.FerasBoonMilkingTwat) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
			//DOUBLE PREGGERS SPEED
			if (player.findPerk(PerkLib.BroodMother) >= 0) {
				if (player.pregnancyAdvance()) needNext = true; //Make sure pregnancy texts aren't hidden
			}
			if (flags[kFLAGS.EVENT_PARSER_ESCAPE] == 1) {
				flags[kFLAGS.EVENT_PARSER_ESCAPE] = 0;
				return true;
			}
		}
		//Egg loot!
		if (player.hasStatusEffect(StatusEffects.LootEgg)) {
			//trace("EGG LOOT HAS");
			if (!player.hasStatusEffect(StatusEffects.Eggs)) { //Handling of errors.
				outputText("Oops, looks like something went wrong with the coding regarding gathering eggs after pregnancy. Hopefully this should never happen again. If you encounter this again, please let Kitteh6660 know so he can fix it.");
				player.removeStatusEffect(StatusEffects.LootEgg);
				output.doNext(playerMenu);
				return true;
			}
			//default
			var itype:ItemType =
					[
						[consumables.BROWNEG,consumables.PURPLEG,consumables.BLUEEGG,consumables.PINKEGG,consumables.WHITEEG,consumables.BLACKEG],
						[consumables.L_BRNEG,consumables.L_PRPEG,consumables.L_BLUEG,consumables.L_PNKEG,consumables.L_WHTEG,consumables.L_BLKEG]]
							[player.statusEffectByType(StatusEffects.Eggs).value2 || 0][player.statusEffectByType(StatusEffects.Eggs).value1 || 0] ||
							consumables.BROWNEG;
			player.removeStatusEffect(StatusEffects.LootEgg);
			player.removeStatusEffect(StatusEffects.Eggs);
			//trace("TAKEY NAU");
			inventory.takeItem(itype, playerMenu);
			return true;
		}
		// Benoit preggers update
		if (flags[kFLAGS.FEMOIT_EGGS] > 0) flags[kFLAGS.FEMOIT_INCUBATION]--; // We're not capping it, we're going to use negative values to figure out diff events
	}

	// Hanging the Uma massage update here, I think it should work...
	telAdre.umasShop.updateBonusDuration(timeAmt);
	//Drop axe if too short!
	if ((player.tallness < 78 && player.str < 90) && player.weapon == weapons.L__AXE) {
		outputText("\nThis axe is too large for someone of your stature to use, though you can keep it in your inventory until you are big enough.\n");
		inventory.takeItem(player.setWeapon(WeaponLib.FISTS), playerMenu);
		return true;
	}
	if ((player.tallness < 60 && player.str < 70) && player.weapon == weapons.L_HAMMR) {
		outputText("\nYou've become too short to use this hammer anymore.  You can still keep it in your inventory, but you'll need to be taller to effectively wield it.\n");
		inventory.takeItem(player.setWeapon(WeaponLib.FISTS), playerMenu);
		return true;
	}
	if (player.weapon == weapons.CLAYMOR && player.str < 40) {
		outputText("\nYou aren't strong enough to handle the weight of your weapon any longer, and you're forced to stop using it.\n");
		inventory.takeItem(player.setWeapon(WeaponLib.FISTS), playerMenu);
		return true;
	}
	if (player.weapon == weapons.WARHAMR && player.str < 80) {
		outputText("\nYou aren't strong enough to handle the weight of your weapon any longer!\n");
		inventory.takeItem(player.setWeapon(WeaponLib.FISTS), playerMenu);
		return true;
	}
	//Drop beautiful sword if corrupted!
	if (player.weapon.isHolySword() && !player.isPureEnough(35)) {
		outputText("\nThe " + player.weaponName + " grows hot in your hand, until you are forced to drop it.  Whatever power inhabits this blade appears to be unhappy with you.  Touching it gingerly, you realize it is no longer hot, but as soon as you go to grab the hilt, it nearly burns you.\n\nYou realize you won't be able to use it right now, but you could probably keep it in your inventory.\n\n");
		kGAMECLASS.beautifulSwordScene.rebellingBeautifulSword();
		return true;
	}
	//Drop ugly sword if uncorrupt
	if (player.weapon.isUnholy() && !player.isCorruptEnough(70)) {
		outputText("\nThe " + player.weaponName + " grows hot in your hand, until you are forced to drop it. Whatever power inhabits this blade appears to be disgusted with your purity. Touching it gingerly, you realize it is no longer hot, but as soon as you go to grab the hilt, it nearly burns you.\n\nYou realize you won't be able to use it right now, but you could probably keep it in your inventory.\n\n");
		inventory.takeItem(player.setWeapon(WeaponLib.FISTS), playerMenu);
		return true;
	}
	//Drop scarred blade if not corrupted enough!
	if (player.weapon == weapons.SCARBLD && !player.isCorruptEnough(70)) {
		kGAMECLASS.sheilaScene.rebellingScarredBlade();
		return true;
	}
	if (flags[kFLAGS.SCARRED_BLADE_STATUS] == 1 && player.isCorruptEnough(70)) {
		kGAMECLASS.sheilaScene.findScarredBlade();
		return true;
	}
	//Unequip Lusty maiden armor
	if (player.armorName == "lusty maiden's armor") {
		//Removal due to no longer fitting:
		//Grew Cock or Balls
		if ((player.hasCock() && !player.hasSheath()) || player.balls > 0) {
			outputText("\nYou fidget uncomfortably in the g-string of your lewd bikini - there simply isn't enough room for your ");
			if (player.hasCock()) outputText("maleness");
			else outputText("bulgy balls");
			outputText(" within the imprisoning leather, and it actually hurts to wear it.  You'll have to find some other form of protection!\n\n");
			inventory.takeItem(player.setArmor(ArmorLib.NOTHING), playerMenu);
			return true;
		}
		//Lost pussy
		else if (!player.hasVagina()) {
			outputText("\nYou fidget uncomfortably as the crease in the gusset of your lewd bikini digs into your sensitive, featureless loins.  There's simply no way you can continue to wear this outfit in comfort - it was expressly designed to press in on the female mons, and without a vagina, you simply can't wear this exotic armor.\n\n");
			inventory.takeItem(player.setArmor(ArmorLib.NOTHING), playerMenu);
			return true;
		}
		//Tits gone or too small
		else if (player.biggestTitSize() < 4) {
			outputText("\nThe fine chain that makes up your lewd bikini-top is dangling slack against your flattened chest.  Every movement and step sends it jangling noisily, slapping up against your [nipples], uncomfortably cold after being separated from your " + player.skinFurScales() + " for so long.  There's no two ways about it - you'll need to find something else to wear.\n\n");
			inventory.takeItem(player.setArmor(ArmorLib.NOTHING), playerMenu);
			return true;
		}
	}
	//Unequip undergarment if you have bizarre lower body.
	if (player.lowerGarment != UndergarmentLib.NOTHING) {
		if (player.isTaur() || player.isDrider() || (player.isNaga() && player.lowerGarmentPerk != "NagaWearable")) {
			outputText("You feel something slipping off as if by magic. Looking down on the ground, you realize it's your " + player.lowerGarmentName + ". Looking down at your lower body, you let out a sigh and pick up your " + player.lowerGarmentName + ". ");
			inventory.takeItem(player.setUndergarment(UndergarmentLib.NOTHING, 1), playerMenu);
			return true;
		}
	}
	//Unequip undergarment if bimbo skirt & corruption
	if (player.armorName == "bimbo skirt" && player.cor >= 10 && player.upperGarment != UndergarmentLib.NOTHING) {
		outputText("\nYou are feeling strange heat in your [breasts]. The thought of how much more pleasure you'll have without the embarassing strain from your " + player.upperGarmentName + " drives you into the frenzy. You take of the top of your dress, put off the garment and start teasing your [nipples], feeling lost in the waves warmth radiating through you body. Eventually, the pleasure subsides, but you decide to stay without your " + player.upperGarmentName + " for a while.\n\n");
		kGAMECLASS.dynStats("lus", 10);
		inventory.takeItem(player.setUndergarment(UndergarmentLib.NOTHING, 0), playerMenu);
		return true;
	}
	if (player.armorName == "bimbo skirt" && player.cor >= 10 && player.lowerGarment != UndergarmentLib.NOTHING) {
		outputText("\nLost in strange thought, you reach with your hand under the skirt. You take of you " + player.lowerGarmentName + " and immediately feel the increased sensitivity of your skin. You think how irresistible seductive you'll become without that embarassing underwear, and decide to stay that way.\n\n");
		kGAMECLASS.dynStats("lus", 10);
		inventory.takeItem(player.setUndergarment(UndergarmentLib.NOTHING, 1), playerMenu);
		return true;
	}
	if (player.armorName == "bimbo skirt" && player.upperGarment != UndergarmentLib.NOTHING && flags[kFLAGS.TIMES_ORGASM_TITS] > 10) {
		outputText("\nThe pressure building in your [breasts] becomes unbearable. Hastily, you take off your " + player.upperGarmentName + " and start teasing your nipples. ");
		if (kGAMECLASS.bimboProgress.ableToProgress()) {
			kGAMECLASS.bimboProgress.titsOrgasm();

		}
		inventory.takeItem(player.setUndergarment(UndergarmentLib.NOTHING, 0), playerMenu);
		return true;
	}
	//Unequip shield if you're wielding a large weapon.
	if (player.weapon.isTwoHanded() && player.shield != ShieldLib.NOTHING && !(player.hasPerk(PerkLib.TitanGrip) && player.str >= 90)) {
		outputText("Your current weapon requires the use of two hands. As such, your shield has been unequipped automatically. ");
		inventory.takeItem(player.setShield(ShieldLib.NOTHING), playerMenu);
		return true;
	}

	// update cock type as dog/fox depending on whether the player resembles one more then the other.
	// Previously used to be computed directly in cockNoun, but refactoring prevents access to the Player class when in cockNoun now.
	if (player.totalCocks() != 0)
	{
		var counter:Number = player.totalCocks() - 1;
		while (counter >= 0)
		{
			if (player.cocks[counter].cockType == CockTypesEnum.DOG || player.cocks[counter].cockType == CockTypesEnum.FOX)
			{
				if (player.dogScore() >= player.foxScore())
					player.cocks[counter].cockType = CockTypesEnum.DOG;
				else
					player.cocks[counter].cockType = CockTypesEnum.FOX;
			}
			counter--;
			// trace("IMA LOOPIN", counter);
		}

	}
	if (prison.trainingFeed.prisonCaptorFeedingQuestTrainingExists() && prison.trainingFeed.prisonCaptorFeedingQuestTrainingIsTimeUp() && rand(100) < (flags[kFLAGS.PRISON_CAPTURE_CHANCE] + player.obey / 4) && !inDungeon && !inRoomedDungeon && !prison.inPrison && !ingnam.inIngnam) {
		prison.goBackToPrisonBecauseQuestTimeIsUp();
		return true;
	}
	output.statScreenRefresh();
	if (needNext) {
		output.doNext(playerMenu);
		return true;
	}
	playerMenu();
	return false;
}

public function cheatTime(timeAmt:Number, needNext:Boolean = false):void {
	//Advance minutes
	var minutesToPass:Number = (timeAmt - Math.floor(timeAmt)) * 60;
	minutesToPass = Math.round(minutesToPass)
	time.minutes += minutesToPass;
	if (time.minutes > 59) {
		time.minutes -= 60;
		time.hours++;
	}
	timeAmt = Math.floor(timeAmt);
	//Advance hours
	while(timeAmt > 0) {
		timeAmt--;
		time.hours++;
		if (time.hours > 23) {
			time.days++;
			time.hours = 0;
		}
	}
	output.statScreenRefresh();
}