We have upgraded to the latest version of MediaWiki and now support TLS1.2 and transcoding!
Please contact us via Discord or Twitter if you experience any problems.

Harry Potter and the Sorcerer's Stone (Windows, Mac OS Classic, Mac OS X)/Unused Scripts

From The Cutting Room Floor
Jump to navigation Jump to search

This is a sub-page of Harry Potter and the Sorcerer's Stone (Windows, Mac OS Classic, Mac OS X).

Various Unreal Engine scripts for objects, characters, and functions. All of the scripts come from .u Unreal Engine archives.

Menu Scripts

FEOptionsPage

A large script for the options menu contains two unused functions: Mouse Smoothing and Difficulty.

/***************Not Used**************************/
	MouseSmoothText="Mouse Smoothing";

	DifficultyText="Difficulty";
	DifficultyLevel[0]="Easy";
	DifficultyLevel[1]="Medium";
	DifficultyLevel[2]="Hard";
/***************Not Used**************************/

/*
	// Mouse label
	MouseLabel = UWindowLabelControl(CreateControl(class'UWindowLabelControl', ctlX-10, ctlY, ctlW, 1));
	MouseLabel.SetText(MouseText);
	MouseLabel.SetFont(F_Normal);
	ctlY += 25;
*/

/*
	// Mouse Smoothing
	MouseSmoothCheck = UWindowCheckbox(CreateControl(class'UWindowCheckbox', ctlX, ctlY, ctlW, 1));
	MouseSmoothCheck.bChecked = GetPlayerOwner().bMaxMouseSmoothing;
	MouseSmoothCheck.SetText(MouseSmoothText);
	MouseSmoothCheck.SetFont(F_Normal);
	MouseSmoothCheck.Align = TA_Right;
	ctlY += 25;
*/

/*
	// Difficulty
	DifficultyCombo = UWindowComboControl(CreateControl(class'UWindowComboControl', ctlX, ctlY, ctlW, 1));
	DifficultyCombo.SetText(DifficultyText);
	DifficultyCombo.SetFont(F_Normal);
	DifficultyCombo.SetEditable(False);
	DifficultyCombo.EditBoxWidth = 100;
	ctlY += 25;

	DifficultyCombo.AddItem(DifficultyLevel[0]);
	DifficultyCombo.AddItem(DifficultyLevel[1]);
	DifficultyCombo.AddItem(DifficultyLevel[2]);
*/

/*
function difficultyChanged()
{
	switch (difficultyCombo.GetSelectedIndex())
	{
		case 0: GetPlayerOwner().Difficulty = DifficultyEasy; break;
		case 1: GetPlayerOwner().Difficulty = DifficultyMedium; break;
		case 2: GetPlayerOwner().Difficulty = DifficultyHard; break;
	}
}
*/

/*
		case difficultyCombo:
			difficultyChanged();
			break;
*/

FELoadPage

This line of code was used to display the menu tabs seen in the demo.

// not needed anymore	FEBook(book).ShowTabs(true);	//show book tabs now that game has started

HPConsole

An old version of the OpenBook script can be found in HPConsole.

/*
function ShowMenuBook (optional string selectPage)		//replaced by FEBook.OpenBook(optional string page);
{
	// Take a snapshot of the screen, for a possible save game:
	viewport.Actor.ConsoleCommand("Snap 3");
	//Viewport.Actor.Level.screenShot = Viewport.Actor.Level.CreateTextureFromScreenShot (Viewport);

	if (bLocked)
		return;
	bQuickKeyEnable = False;
	LaunchUWindow();

	if (selectPage != "")
		menuBook.ChangePageNamed(selectPage);
}
*/

FEStoryBookPage

A large portion of this script was commented out.

//***********************************************************************************************
function bool KeyEvent( byte/*EInputKey*/ Key, byte/*EInputAction*/ Action, FLOAT Delta )
{
	//All right, smeg all of this...
	//if(Action==1/*IST_Press*/ && Key==0x1b/*IK_Escape*/)
	//{
	//	//All right, go back to the menu, and let the menu know that it came from the StoryBook
	//	if( GetLevel().TimeSeconds - _TimeSecondsSave > _MinTimeOnPage )
	//	{
	//		//Welcome to hacksville, population me!
	//		FEBook(book).bCameFromStoryBook = true;
	//		root.console.Viewport.Actor.StopSound( , SLOT_Interact );
	//		FEBook(book).ChangePageNamed("REPORT");
	//	}
	//
	//	return true;
	//}
	//else
	//if(Action==1/*IST_Press*/ && Key==0x20/*IK_Space*/)
	//{
	//	if(   GetLevel().TimeSeconds - _TimeSecondsSave > _MinTimeOnPage
	//	   && iCurrentPage != 0 //dont allow skip past the first page.
	//	  )
	//	{
	//		//If we allow page skipping, go to the next page, otherwise use space to skip the whole story book.
	//		if( bAllowPageSkipping )
	//			GotoNextPage();
	//		else
	//			SetStoryAndPage( iCurrentStory, NumStoryPages[ iCurrentStory ] );
	//	}
	//	return true;
	//}

	if(Action==1/*IST_Press*/ && Key==0x1b/*IK_Escape*/)
	{
		//All right, go back to the menu, and let the menu know that it came from the StoryBook
//		if(   bAllowPageSkipping
//		   && GetLevel().TimeSeconds - _TimeSecondsSave > _MinTimeOnPage
//		   && iCurrentPage != 0 //dont allow skip past the first page.
//		  )
//		{
//			SetStoryAndPage( iCurrentStory, NumStoryPages[ iCurrentStory ] );
//		}
	
		return true;
	}
	else
	if(Action==1/*IST_Press*/ && Key==0x20/*IK_Space*/)
	{
		if(   bAllowPageSkipping
		   && GetLevel().TimeSeconds - _TimeSecondsSave > _MinTimeOnPage
		   && iCurrentPage != 0 //dont allow skip past the first page.
		  )
		{
			GotoNextPage();
		}

		return true;
	}
	else
	if(Action==1/*IST_Press*/ && Key==0x46/*IK_F*/)
	{
		if( bAllowPageSkipping )
		{
			_bDoFastPageSkipping = true;
			_PageTimer = 0.25;
		}

		return true;
	}

	return false;
}

hudSpellBook

A small test code was commented out of this script.

//	test1=hudSpellButton(CreateWindow(class'hudSpellButton', 10, 10, 100, 100));
//	test1.setText("Hello there");
//	test1.spellBook=self;
//	test1.spellId=1;

PrivHud

A script listing the torn letter pieces as hud elements.

//=============================================================================
// HPHud
//=============================================================================
class PrivHud extends baseHUD;

#exec TEXTURE IMPORT NAME=LetterBackground1 FILE=TEXTURES\LetterBackground1.BMP GROUP="Icons" MIPS=ON
#exec TEXTURE IMPORT NAME=LetterBackground2 FILE=TEXTURES\LetterBackground2.BMP GROUP="Icons" MIPS=ON

#exec TEXTURE IMPORT NAME=LetterPiece1 FILE=TEXTURES\LetterPiece1.BMP GROUP="Icons" FLAGS=2 MIPS=ON
#exec TEXTURE IMPORT NAME=LetterPiece2 FILE=TEXTURES\LetterPiece2.BMP GROUP="Icons" FLAGS=2 MIPS=ON
#exec TEXTURE IMPORT NAME=LetterPiece3 FILE=TEXTURES\LetterPiece3.BMP GROUP="Icons" FLAGS=2 MIPS=ON
#exec TEXTURE IMPORT NAME=LetterPiece4 FILE=TEXTURES\LetterPiece4.BMP GROUP="Icons" FLAGS=2 MIPS=ON
#exec TEXTURE IMPORT NAME=LetterPiece5 FILE=TEXTURES\LetterPiece5.BMP GROUP="Icons" FLAGS=2 MIPS=ON
#exec TEXTURE IMPORT NAME=LetterPiece6 FILE=TEXTURES\LetterPiece6.BMP GROUP="Icons" FLAGS=2 MIPS=ON
#exec TEXTURE IMPORT NAME=LetterPiece7 FILE=TEXTURES\LetterPiece7.BMP GROUP="Icons" FLAGS=2 MIPS=ON

#exec TEXTURE IMPORT NAME=LetterIcon FILE=TEXTURES\LetterIcon.PCX GROUP="Icons" FLAGS=2 MIPS=ON


 
#exec Font Import File=Textures\Lrgred.pcx Name=LargeRedFont

var int numLetterTicks;
var int numLetterPieces;


function LetterAddPiece()
{
	numLetterPieces++;
	//PlaySound(sound'HPSounds.letterSound', SLOT_Interact,0.5);
	LetterShow();
}

function LetterShow()
{
	numLetterTicks=160;	//show for 160 ticks. (~2.5sec) 
}
function LetterHide()
{
	numLetterTicks=0;	 
}
function LetterReset()
{
	numLetterPieces=0;
	numLetterTicks=0;	 
}
function DrawLetter(Canvas canvas)
{
local float w,h;
local float fx,fy;
local float x,y;
local float bx,by;
local Texture tex;

	if(numLetterTicks>0)
		{
		fx=(Canvas.SizeX/640.0);
		fy=(Canvas.SizeY/480.0);
		fx=1.0;
		fy=1.0;

		tex=Texture'LetterBackground1';
		w=tex.USize;
		h=tex.VSize;
		bx=(Canvas.SizeX/2)-(w);
		by=(Canvas.SizeY/2)-(h/2);
		Canvas.SetPos(bx*fx, by*fy);
		Canvas.DrawIcon(tex,1.0);

		tex=Texture'LetterBackground2';
		w=tex.USize;
		h=tex.VSize;
		x=(Canvas.SizeX/2);
		y=(Canvas.SizeY/2)-(h/2);
		Canvas.SetPos((bx+256)*fx, by*fy);
		Canvas.DrawIcon(tex,1.0);

		Canvas.style=2;
		if(numLetterPieces>0)
			{
			x=87;y=66;
			Canvas.SetPos((bx+x)*fx, (by+y)*fy);
			Canvas.DrawIcon(Texture'LetterPiece1',1.0);
			}
		if(numLetterPieces>1)
			{
			x=180;y=38;
			Canvas.SetPos((bx+x)*fx, (by+y)*fy);
			Canvas.DrawIcon(Texture'LetterPiece2',1.0);
			}
		if(numLetterPieces>2)
			{
			x=0;y=102;
			Canvas.SetPos((bx+x)*fx, (by+y)*fy);
			Canvas.DrawIcon(Texture'LetterPiece3',1.0);
			}
		if(numLetterPieces>3)
			{
			x=256;y=113;
			Canvas.SetPos((bx+x)*fx, (by+y)*fy);
			Canvas.DrawIcon(Texture'LetterPiece4',1.0);
			}
		if(numLetterPieces>4)
			{
			x=0;y=0;
			Canvas.SetPos((bx+x)*fx, (by+y)*fy);
			Canvas.DrawIcon(Texture'LetterPiece5',1.0);
			}
		if(numLetterPieces>5)
			{
			x=256;y=0;
			Canvas.SetPos((bx+x)*fx, (by+y)*fy);
			Canvas.DrawIcon(Texture'LetterPiece6',1.0);
			}
		if(numLetterPieces>6)
			{
			x=307;y=0;
			Canvas.SetPos((bx+x)*fx, (by+y)*fy);
			Canvas.DrawIcon(Texture'LetterPiece7',1.0);
			}


		Canvas.style=1;
		}
	Canvas.SetPos(Canvas.SizeX-68, Canvas.SizeY-36);
	Canvas.DrawIcon(Texture'LetterIcon',1.0);

	Canvas.SetPos(Canvas.SizeX-88, Canvas.SizeY-36);
	Canvas.DrawText(numLetterPieces, False);	

}

simulated function PostBeginPlay()
{
	Super.PostBeginPlay();
//	ShowLetter();
}


simulated function PostRender( canvas Canvas )
{
	HUDSetup(canvas);

	if ( PlayerPawn(Owner) != None )
	{
		if ( PlayerPawn(Owner).PlayerReplicationInfo == None )
			return;

	}

	DrawLetter(Canvas);
	DrawIconMessages(Canvas);

}



simulated function Tick(float DeltaTime)
{
	if(numLetterTicks>0)
		numLetterTicks--;
/*
//Test the letter.
	if(numLetterTicks<=0)
		{
		LetterAddPiece();
		if(numLetterPieces>7)
			LetterReset();
		}
*/
}

People

skvernon

//===============================================================================
//  [skvernon] 
//===============================================================================

class skvernon extends vernon;
#exec MESH  MODELIMPORT MESH=skvernonMesh MODELFILE=models\skvernon.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skvernonMesh X=0 Y=0 Z=50 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skvernonAnims ANIMFILE=models\skvernon.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skvernonMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skvernonMesh ANIM=skvernonAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skvernonAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skvernonTex0  FILE=TEXTURES\VERNON_SKIN00.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skvernonTex1  FILE=TEXTURES\VERNON_SKIN01.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skvernonMesh NUM=0 TEXTURE=skvernonTex0
#EXEC MESHMAP SETTEXTURE MESHMAP=skvernonMesh NUM=1 TEXTURE=skvernonTex1

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: VERNON_SKIN00.bmp  Path: H:\Art\Design\Character Development\Vernon 
// Original material [1] is [SKIN01] SkinIndex: 1 Bitmap: VERNON_SKIN01.bmp  Path: H:\Art\Design\Character Development\Vernon

Vernon

/*------------------------------------------------------------------------------------------------------------------------
//			Vernon, enemy of all that is true and good
------------------------------------------------------------------------------------------------------------------------*/

	class Vernon extends baseChar;




	var int dialog1[10];
	var int currentspeech;
	var name prevState;
	var rotator oldRot;
	var int yellcount;




state yellAtHarry
{

	begin:
	prevState=GetStateName();
	playanim('look');
	oldRot=rotation;
	turnto(p.location);
	SLEEP (5);
	sleep(5);
	if(yellCount==0)
	{
//removed by cmp		p.dialogResponse(05);
		yellCount=1;
	}
	else
	{
		if(yellCount==1)
		{
//removed by cmp			p.dialogResponse(06);
			yellcount++;
		}
	}

	gotostate('wait');
	goto 'begin';


}

function yellAt()
{

		local sound step;
		step=speech[01];
		PlaySound(step, SLOT_Talk,1.0, false, 1000.0, 0.9);
		gotostate('yellAtHarry');
		
}


function DialogResponse(int dialogNum)
{
		local sound step;
		step=speech[dialogNum];
		PlaySound(step, SLOT_Talk,1.0, false, 1000.0, 0.9);
		
	
}


/*

state faceHag
{


function Tick(float DeltaTime)
{

}



 begin:
 	moveto(forcelocation);
	Disable( 'tick' );
	loopanim('breath');
	
	
	

	floop:
	turnto(forcedir);
	sleep(1.0);
	goto 'floop';



}


*/





state spottedharry
{


	begin:

//	p.clientMessage("spotted harry");
	gotostate('wait');
}

state atStation
{

	begin:
	disable('touch');
	disable('tick');
//	p.clientmessage("at station");
		playAnim('sit');

	SetPhysics(PHYS_Rotating);

	
	desiredRotation=(destP.rotation);

	loop:
		
	/*
	
	sleep(destP.aiData[stationNumber].pauseTime);
	
//	p.clientMessage("sleeptime "$destP.aiData[stationNumber].pauseTime);
	stationDestination=destP.aiData[stationNumber].stationDestination;
	pathType=destP.aiData[stationNumber].pathType;
	firstPath=destP.aiData[stationNumber].firstPath;
//	p.clientMessage("back to patrol");
	gotostate('patrol');
*/
	sleep(1);
	goto 'loop';

}
auto state wait
{


	function startup()
	{
		foreach allActors(class'baseHarry', p)
		{
			if( p.bIsPlayer&& p!=Self)
			{
		
				break;
			}
		}

		foreach allActors(class 'navigationPoint',navP)
		{
			destP=baseStation(navP);
			if(destP.Name==stationDestination)
			{
				break;
			}
		}
		foreach allActors(class 'navigationPoint',navP)
		{

			if(navp.Name==firstPath)
			{
				
				break;
			}
		}

		

	}





	begin:
		startup();
		SetPhysics(PHYS_Rotating);

		
		disable('tick');
		loopanim('look');
	//	p.clientmessage("in wait");
	loop:
		PlaySound(speech[02], SLOT_Talk,1.0, false, 500.0, 0.9);

		sleep(6.01);
		goto 'loop';

}

state patrol
{


	function startup()
	{
		foreach allActors(class'baseHarry', p)
		{
			if( p.bIsPlayer&& p!=Self)
			{
		
				break;
			}
		}

		foreach allActors(class 'navigationPoint',navP)
		{
			destP=baseStation(navP);
			if(destP.Name==stationDestination)
			{
				break;
			}
		}
		foreach allActors(class 'navigationPoint',navP)
		{

			if(navp.Name==firstPath)
			{
				
				break;
			}
		}

		

	}


/*
function touch (actor other)
{

	if(other==destp)
	{
	
		
		gotostate('atstation');
	}
	
}
*/
Begin:
		Disable( 'Tick' );
		Disable('Touch');
		SetPhysics(PHYS_Walking);
		startup();

		
		

		loopAnim('walk');

	moveLoop:
		
		next=findPath(navP,stationDestination);
//		if(next!=none)
//			p.clientMessage("next is "$next);
//		if(navp!=none)
//			p.clientMessage("in patrol towards "$navp);	

		do
		{
			moveTo(navP.location);
			sleep(0.005);
		}until(vsize(location-(navP.location))<50);

		if(destp==navP)
		{
			gotostate('atstation');
		}

		navP=navigationPoint(next);
		next=none;
		
		goto 'moveLoop';


}

skpetunia

//===============================================================================
//  [skpetunia] 
//===============================================================================

class skpetunia extends petunia;
#exec MESH  MODELIMPORT MESH=skpetuniaMesh MODELFILE=models\skpetunia.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skpetuniaMesh X=0 Y=0 Z=50 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skpetuniaAnims ANIMFILE=models\skpetunia.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skpetuniaMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skpetuniaMesh ANIM=skpetuniaAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skpetuniaAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skpetuniaTex0  FILE=TEXTURES\PETUNIA_Skin00.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skpetuniaTex1  FILE=TEXTURES\PETUNIA_Skin01.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skpetuniaTex2  FILE=TEXTURES\PETUNIA_Skin02.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skpetuniaTex3  FILE=TEXTURES\pdsponge_32.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skpetuniaMesh NUM=0 TEXTURE=skpetuniaTex0
#EXEC MESHMAP SETTEXTURE MESHMAP=skpetuniaMesh NUM=1 TEXTURE=skpetuniaTex1
#EXEC MESHMAP SETTEXTURE MESHMAP=skpetuniaMesh NUM=2 TEXTURE=skpetuniaTex2
#EXEC MESHMAP SETTEXTURE MESHMAP=skpetuniaMesh NUM=3 TEXTURE=skpetuniaTex3

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: PETUNIA_Skin00.bmp  Path: H:\Art\Design\Character Development\Petunia\PetuniaModel 
// Original material [1] is [SKIN01] SkinIndex: 1 Bitmap: PETUNIA_Skin01.bmp  Path: H:\Art\Design\Character Development\Petunia\PetuniaModel  
// Original material [2] is [SKIN02.TWOSIDED] SkinIndex: 2 Bitmap: PETUNIA_Skin02.bmp  Path: H:\Art\Design\Character Development\Petunia\PetuniaModel 
// Original material [3] is [SKIN03] SkinIndex: 3 Bitmap: pdsponge_32.bmp  Path: \\Baker\HPotterPC\Art\Models\Objects\Dursley Props\Sponge

petunia

/*------------------------------------------------------------------------------------------------------------------------
//			Petunia, enemy of all that is true and good
------------------------------------------------------------------------------------------------------------------------*/

	class petunia extends baseChar;


	var int dialog1[10];
	var int currentspeech;
	var int status;



state spottedharry
{



}



function yellAt()
{

		local sound step;
		step=speech[01];
		PlaySound(step, SLOT_Talk,1.0, false, 1000.0, 0.9);
	//	turnto(p);
}

state atStation
{

	begin:

//	p.clientmessage("at station");
		loopAnim('scrub');

	SetPhysics(PHYS_Rotating);

	
	desiredRotation=(destP.rotation);

	loop:
		
	
	
	sleep(destP.aiData[stationNumber].pauseTime);
	
//	p.clientMessage("sleeptime "$destP.aiData[stationNumber].pauseTime);
	stationDestination=destP.aiData[stationNumber].stationDestination;
	pathType=destP.aiData[stationNumber].pathType;
	firstPath=destP.aiData[stationNumber].firstPath;
//	p.clientMessage("back to patrol");
	gotostate('patrol');

	goto 'loop';

}


auto state patrol
{


	function startup()
	{
		foreach allActors(class'baseHarry', p)
		{
			if( p.bIsPlayer&& p!=Self)
			{
		
				break;
			}
		}

		foreach allActors(class 'navigationPoint',navP)
		{
			destP=baseStation(navP);
			if(destP.Name==stationDestination)
			{
				break;
			}
		}
		foreach allActors(class 'navigationPoint',navP)
		{

			if(navp.Name==firstPath)
			{
				
				break;
			}
		}

		

	}




Begin:
		Disable( 'Tick' );
		SetPhysics(PHYS_Walking);
		startup();

		
		

		loopAnim('walk');

	moveLoop:
		
		next=findPath(navP,stationDestination);
		
//		if(next!=none)
			p.clientMessage("next is "$next);
//		if(navp!=none)
			p.clientMessage("in patrol towards "$navp);	
		do
		{
			moveTo(navP.location);
			sleep(0.005);
			p.clientmessage("distance to navp is "$vsize(location-(navP.location)));
		}until(vsize(location-(navP.location))<50);

		if(destp==navP)
		{
			gotostate('atstation');
		}
		navP=navigationPoint(next);
		
		next=none;
		
		goto 'moveLoop';


}

skdudley

//===============================================================================
//  [skdudley] 
//===============================================================================

class skdudley extends dudley;
#exec MESH  MODELIMPORT MESH=skdudleyMesh MODELFILE=models\skdudley.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skdudleyMesh X=0 Y=0 Z=40 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skdudleyAnims ANIMFILE=models\skdudley.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skdudleyMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skdudleyMesh ANIM=skdudleyAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skdudleyAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skdudleyTex0  FILE=TEXTURES\Dudley_SKIN00.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skdudleyMesh NUM=0 TEXTURE=skdudleyTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: Dudley_SKIN00.bmp  Path: \\Baker\HPotterPC\Art\Design\Character Development\Dudley 



#exec MESH WEAPONATTACH MESH=skdudleyMesh BONE="RightHand"
#exec MESH WEAPONPOSITION MESH=skdudleyMesh YAW=0 PITCH=0 ROLL=10 X=0.0 Y=0.0 Z=0.0

Dudley

/*------------------------------------------------------------------------------------------------------------------------
			Dudley, enemy of all that is true and good
------------------------------------------------------------------------------------------------------------------------*/

	class Dudley extends baseChar;





	var int dialog1[10];
	var int currentspeech;
	var name prevState;
	var rotator oldRot;
	var weapon weap;





state yellAtHarry
{

	begin:
	prevState=GetStateName();
	playanim('look');
	oldRot=rotation;
	turnto(p.location);
	SLEEP (5);

	gotostate(prevstate);
	goto 'begin';


}

function yellAt()
{

		local sound step;
		step=speech[01];
		PlaySound(step, SLOT_Talk,1.0, false, 1000.0, 0.9);
		gotostate('yellAtHarry');
		
}


function DialogResponse(int dialogNum)
{
		local sound step;
		step=speech[dialogNum];
		PlaySound(step, SLOT_Talk,1.0, false, 1000.0, 0.9);
		
	
}


/*

state faceHag
{


function Tick(float DeltaTime)
{

}



 begin:
 	moveto(forcelocation);
	Disable( 'tick' );
	loopanim('breath');
	
	
	

	floop:
	turnto(forcedir);
	sleep(1.0);
	goto 'floop';



}


*/





state spottedharry
{


	begin:

//	p.clientMessage("spotted harry");
	gotostate('wait');
}

state atStation
{

	begin:

	
	desiredRotation=(destP.rotation);

	loop:
		

	
	sleep(destP.aiData[stationNumber].pauseTime);
	
//	p.clientMessage("sleeptime "$destP.aiData[stationNumber].pauseTime);
	stationDestination=destP.aiData[stationNumber].stationDestination;
	pathType=destP.aiData[stationNumber].pathType;
	firstPath=destP.aiData[stationNumber].firstPath;
//	p.clientMessage("back to patrol");
	gotostate('patrol');

	sleep(1);
	goto 'loop';

}
auto state wait
{

	

	function startup()
	{

	local weapon weap;

		foreach allActors(class'baseHarry', p)
		{
			if( p.bIsPlayer&& p!=Self)
			{
		
				break;
			}
		}

		foreach allActors(class 'navigationPoint',navP)
		{
			destP=baseStation(navP);
			if(destP.Name==stationDestination)
			{
				break;
			}
		}
		foreach allActors(class 'navigationPoint',navP)
		{

			if(navp.Name==firstPath)
			{
				
				break;
			}
		}



	PendingWeapon = spawn(class'RCTruckControl');
	ChangedWeapon();

	weap.WeaponSet(self);
		

	}

 



	begin:
		startup();
		SetPhysics(PHYS_Rotating);

		
		disable('tick');
		loopanim('smash');
	loop:
		sleep(2.01);

	PendingWeapon = spawn(class'WTruck');
	ChangedWeapon();
		sleep(3);
		goto 'loop';

}

state patrol
{


	function startup()
	{
		foreach allActors(class'baseHarry', p)
		{
			if( p.bIsPlayer&& p!=Self)
			{
		
				break;
			}
		}

		foreach allActors(class 'navigationPoint',navP)
		{
			destP=baseStation(navP);
			if(destP.Name==stationDestination)
			{
				break;
			}
		}
		foreach allActors(class 'navigationPoint',navP)
		{

			if(navp.Name==firstPath)
			{
				
				break;
			}
		}

		

	}



function touch (actor other)
{

	if(other==destp)
	{
	
		
		gotostate('atstation');
	}
	
}

Begin:
		Disable( 'Tick' );
		Enable('Touch');
		SetPhysics(PHYS_Walking);
		startup();

		
		

		loopAnim('walk');

	moveLoop:
		
		next=findPath(navP,stationDestination);
//		if(next!=none)
//			p.clientMessage("next is "$next);
//		if(navp!=none)
//			p.clientMessage("in patrol towards "$navp);	
		do
		{
			moveTo(navP.location);
			sleep(0.005);
		}until(vsize(location-(navP.location))<50);

		if(destp==navP)
		{
			gotostate('atstation');
		}

		navP=navigationPoint(next);
		next=none;
		
		goto 'moveLoop';


}



state takeRemote
{


function startTruck()
{
	local truck t;
	foreach allactors(class'truck',t)
	{
		t.bHidden=false;
		t.gotostate('patrol');
		break;

	}
}


	begin:
		playanim('sit2stand');
		startTruck();
	
	
	loop:
		sleep(2);
		
		PendingWeapon = spawn(class'RCTruckControl');
		ChangedWeapon();

	weap.WeaponSet(self);
		



		gotostate('patrol');



}

skdevilharry

//===============================================================================
//  [skdevilharry] 
//===============================================================================

class skdevilharry extends HPMesh abstract;
#exec MESH  MODELIMPORT MESH=skdevilharryMesh MODELFILE=models\skdevilharry.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skdevilharryMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skdevilharryAnims ANIMFILE=models\skdevilharry.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skdevilharryMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skdevilharryMesh ANIM=skdevilharryAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skdevilharryAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skdevilharryTex0  FILE=TEXTURES\HARRY_SKIN00.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skdevilharryTex1  FILE=TEXTURES\HARRY_SKIN01.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skdevilharryTex2  FILE=TEXTURES\HARRY_SKIN03.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skdevilharryTex3  FILE=TEXTURES\HARRY_SKIN05.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skdevilharryTex4  FILE=TEXTURES\DEVILPLANT_SKIN02.bmp  GROUP=Skins

#exec MESH WEAPONATTACH MESH=skDevilHarryMesh BONE="RightHand"
#exec MESH WEAPONPOSITION MESH=skDevilHarryMesh YAW=0 PITCH=0 ROLL=10 X=0.0 Y=0.0 Z=0.0

#EXEC MESHMAP SETTEXTURE MESHMAP=skdevilharryMesh NUM=0 TEXTURE=skdevilharryTex0
#EXEC MESHMAP SETTEXTURE MESHMAP=skdevilharryMesh NUM=1 TEXTURE=skdevilharryTex1
#EXEC MESHMAP SETTEXTURE MESHMAP=skdevilharryMesh NUM=2 TEXTURE=skdevilharryTex2
#EXEC MESHMAP SETTEXTURE MESHMAP=skdevilharryMesh NUM=3 TEXTURE=skdevilharryTex3
#EXEC MESHMAP SETTEXTURE MESHMAP=skdevilharryMesh NUM=4 TEXTURE=skdevilharryTex4

#exec ANIM NOTIFY   ANIM=skDevilHarryAnims SEQ=Cast TIME=0.1 FUNCTION=Cast

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: HARRY_SKIN00.bmp  Path: \\Baker\HPotterPC\Art\Design\Character Development\Harry 
// Original material [1] is [SKIN01.TWOSIDED] SkinIndex: 1 Bitmap: HARRY_SKIN01.bmp  Path: \\Baker\HPotterPC\Art\Design\Creatures\Devil's Snare 
// Original material [2] is [SKIN02.MASKED] SkinIndex: 2 Bitmap: HARRY_SKIN03.bmp  Path: H:\Art\Design\Character Development\Harry\Textures 
// Original material [3] is [SKIN03] SkinIndex: 3 Bitmap: HARRY_SKIN05.bmp  Path: H:\Art\Design\Creatures\Devil's Snare 
// Original material [4] is [SKIN04] SkinIndex: 4 Bitmap: DEVILPLANT_SKIN02.bmp  Path: H:\Art\Design\Creatures\Devil's Snare 

skSmallHarry

//===============================================================================
//  [skSmallHarry] 
//===============================================================================

class skSmallHarry extends harry;
#exec MESH  MODELIMPORT MESH=skSmallharryMesh MODELFILE=models\skharry.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skSmallharryMesh X=0 Y=0 Z=150 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skSmallharryAnims ANIMFILE=models\skharry.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skSmallharryMesh X=0.3 Y=0.3 Z=0.3
#exec MESH  DEFAULTANIM MESH=skSmallharryMesh ANIM=skSmallharryAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skSmallharryAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skSmallharryTex0  FILE=TEXTURES\HARRY_SKIN00t.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=skSmallharryTex1  FILE=TEXTURES\HARRY_SKIN01t.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skSmallharryMesh NUM=0 TEXTURE=skSmallharryTex0
#EXEC MESHMAP SETTEXTURE MESHMAP=skSmallharryMesh NUM=1 TEXTURE=skSmallharryTex1
#EXEC MESHMAP SETTEXTURE MESHMAP=skSmallharryMesh NUM=2 TEXTURE=skharryTex2

#exec MESH WEAPONATTACH MESH=skSmallharryMesh BONE="RightHand"
#exec MESH WEAPONPOSITION MESH=skSmallharryMesh YAW=0 PITCH=0 ROLL=10 X=0.0 Y=0.0 Z=0.0

#exec ANIM NOTIFY   ANIM=skSmallharryAnims SEQ=Cast TIME=0.1 FUNCTION=Cast
#exec ANIM NOTIFY   ANIM=skSmallharryAnims SEQ=Run TIME=0.99 FUNCTION=PlayFootStep
#exec ANIM NOTIFY   ANIM=skSmallharryAnims SEQ=Run TIME=0.5 FUNCTION=PlayFootStep



// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: HARRY_SKIN00t.bmp  Path: \\Baker\HPotterPC\Art\Design\Character Development\Harry\Nathan'sTest 
// Original material [1] is [SKIN01.TWOSIDED] SkinIndex: 1 Bitmap: HARRY_SKIN01t.bmp  Path: H:\Art\Design\Character Development\Harry 
// Original material [2] is [SKIN02.MASKED] SkinIndex: 2 Bitmap: HARRY_SKIN03.bmp  Path: \\Baker\HPotterPC\Art\Design\Character Development\Harry\Nathan'sTest

Interactive Objects

MatchBox

//===============================================================================
//  [MatchBox] 
//===============================================================================

class MatchBox extends HProps;
#exec MESH  MODELIMPORT MESH=MatchBoxMesh MODELFILE=models\MatchBox.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=MatchBoxMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=MatchBoxAnims ANIMFILE=models\MatchBox.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=MatchBoxMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=MatchBoxMesh ANIM=MatchBoxAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=MatchBoxAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=MatchBoxTex0  FILE=TEXTURES\matchbox_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=MatchBoxMesh NUM=0 TEXTURE=MatchBoxTex0

// Original material [0] is [Material #26] SkinIndex: 0 Bitmap: matchbox_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\General Objects 


auto state droptoground
{
	begin:
	setphysics(Phys_falling);
	loop:
		sleep(5);
		goto 'loop';




}

WizardHat

//===============================================================================
//  [WizardHat] 
//===============================================================================

class WizardHat extends HProps;
#exec MESH  MODELIMPORT MESH=WizardHatMesh MODELFILE=models\WizardHat.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=WizardHatMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=WizardHatAnims ANIMFILE=models\WizardHat.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=WizardHatMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=WizardHatMesh ANIM=WizardHatAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=WizardHatAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=WizardHatTex0  FILE=TEXTURES\wizardhat_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=WizardHatMesh NUM=0 TEXTURE=WizardHatTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: wizardhat_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\General Objects 

skcanary

//===============================================================================
//  [skcanary] 
//===============================================================================

class skcanary extends HPMesh abstract;
#exec MESH  MODELIMPORT MESH=skcanaryMesh MODELFILE=models\skcanary.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skcanaryMesh X=0 Y=0 Z=2 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skcanaryAnims ANIMFILE=models\skcanary.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skcanaryMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skcanaryMesh ANIM=skcanaryAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skcanaryAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skcanaryTex0  FILE=TEXTURES\canary.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skcanaryMesh NUM=0 TEXTURE=skcanaryTex0

// Original material [0] is [Material #7] SkinIndex: 0 Bitmap: canary.bmp  Path: H:\Art\Design\Creatures\Canary

canary

	class canary extends baseChar;

	var rotator rotval;

auto state pause
{


	function startup()
	{
	
		foreach allActors(class'baseHarry', p)
		{
			if( p.bIsPlayer&& p!=Self)
			{
		
				break;
			}
		}
	}


	begin:

	//	PlaySound(sound 'HPSounds.Critters_sfx.s_canary_twip', SLOT_Interact, 1.0, false, 1000.0, 1.0);
		setPhysics(PHYS_walking);
		startup();
		rotval=rotation;
		loopanim('idle');

	lcloop:
		sleep(1.0);
		//	if(abs(vsize(location-p.location))<100)
		//	{
				gotostate('fly');
		//	}
			goto 'lcloop';



}


state fly
{
	ignores SeePlayer, HearNoise, KilledBy, Bump, HitWall, HeadZoneChange, FootZoneChange, ZoneChange, Falling, TakeDamage, PainTimer, Died;


function tick(float Deltatime)
{
	local vector offset;


	super.tick(deltatime);

	offset.x=100*deltatime;
	offset.z=100*deltatime;
	offset=offset>>rotation;
	rotval.yaw=rotval.yaw+(16000*deltatime);
	setrotation(rotval);


	if(!move(offset))
	{

		destroy();
	}


}

	begin:
		loopanim('fly');
		setphysics(phys_none);
		//PlaySound(sound 'HPSounds.Critters_sfx.s_canary_flap_loop', SLOT_Interact, 1.0, false, 500.0, 1.0);
		
	flyloop:
		sleep(1);
		if(abs(location.z-p.location.z)>1000)
		{

			destroy();
		}
		



}

tConProp

//===============================================================================
//  [RCTruckControl] 
//===============================================================================

class tConProp extends baseChar;
#exec MESH  MODELIMPORT MESH=RCTruckControlMesh MODELFILE=models\RCTruckControl.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=RCTruckControlMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=RCTruckControlAnims ANIMFILE=models\RCTruckControl.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=RCTruckControlMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=RCTruckControlMesh ANIM=RCTruckControlAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=RCTruckControlAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=RCTruckControlTex0  FILE=TEXTURES\rccontol_64.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=RCTruckControlMesh NUM=0 TEXTURE=RCTruckControlTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: rccontol_64.bmp  Path: D:\Harry Potter\A Lorian's Stuff\privet 



function float RateSelf( out int bUseAltMode )
{
	return 10;
}

WTruck

There's a copy named Truck that combines this script and the Dudley script.

//===============================================================================
//  [Truck] 
//===============================================================================

class WTruck extends Weapon;
#exec MESH  MODELIMPORT MESH=TruckMesh MODELFILE=models\Truck.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=TruckMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=TruckAnims ANIMFILE=models\Truck.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=TruckMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=TruckMesh ANIM=TruckAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=TruckAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=TruckTex0  FILE=TEXTURES\ambulanc_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=TruckMesh NUM=0 TEXTURE=TruckTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: ambulanc_128.bmp  Path: H:\Art\Models\Objects\Dursley Props\Toys\Truck 




function float RateSelf( out int bUseAltMode )
{
	return -20;
}

skwizardcracker

//===============================================================================
//  [skwizardcracker] 
//===============================================================================

class skwizardcracker extends HPMesh abstract;
#exec MESH  MODELIMPORT MESH=skwizardcrackerMesh MODELFILE=models\skwizardcracker.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skwizardcrackerMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skwizardcrackerAnims ANIMFILE=models\skwizardcracker.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skwizardcrackerMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skwizardcrackerMesh ANIM=skwizardcrackerAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skwizardcrackerAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skwizardcrackerTex0  FILE=TEXTURES\wzrdcrkr_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skwizardcrackerMesh NUM=0 TEXTURE=skwizardcrackerTex0

// Original material [0] is [CRACKER_SKIN00] SkinIndex: 0 Bitmap: wzrdcrkr_128.bmp  Path: C:\Nathan 

skgoldcauldron

//===============================================================================
//  [skgoldcauldron] 
//===============================================================================

class skgoldcauldron extends HPMesh abstract;
#exec MESH  MODELIMPORT MESH=skgoldcauldronMesh MODELFILE=models\skgoldcauldron.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skgoldcauldronMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skgoldcauldronAnims ANIMFILE=models\skgoldcauldron.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skgoldcauldronMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skgoldcauldronMesh ANIM=skgoldcauldronAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skgoldcauldronAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skgoldcauldronTex0  FILE=TEXTURES\flipcouldrongld_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skgoldcauldronMesh NUM=0 TEXTURE=skgoldcauldronTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: flipcouldrongld_128.bmp  Path: C:\potter\ART\Objects\FLIPENDO\Flipendo Cauldrons 

sksilvercauldron

//===============================================================================
//  [sksilvercauldron] 
//===============================================================================

class sksilvercauldron extends HPMesh abstract;
#exec MESH  MODELIMPORT MESH=sksilvercauldronMesh MODELFILE=models\sksilvercauldron.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=sksilvercauldronMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=sksilvercauldronAnims ANIMFILE=models\sksilvercauldron.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=sksilvercauldronMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=sksilvercauldronMesh ANIM=sksilvercauldronAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=sksilvercauldronAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=sksilvercauldronTex0  FILE=TEXTURES\flipcouldronslv_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=sksilvercauldronMesh NUM=0 TEXTURE=sksilvercauldronTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: flipcouldronslv_128.bmp  Path: C:\potter\ART\Objects\FLIPENDO\Flipendo Cauldrons 

PeevesThrowBook

//===============================================================================
//  [PeeveThrowBook] 
//===============================================================================

class PeeveThrowBook extends HProps;
#exec MESH  MODELIMPORT MESH=PeeveThrowBookMesh MODELFILE=models\PeeveThrowBook.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=PeeveThrowBookMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=PeeveThrowBookAnims ANIMFILE=models\PeeveThrowBook.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=PeeveThrowBookMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=PeeveThrowBookMesh ANIM=PeeveThrowBookAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=PeeveThrowBookAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=PeeveThrowBookTex0  FILE=TEXTURES\pevebook_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=PeeveThrowBookMesh NUM=0 TEXTURE=PeeveThrowBookTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: pevebook_128.bmp  Path: D:\Harry Potter\Art\Objects\Peeves Throwing Objects 

PeevesThrowPot

//===============================================================================
//  [PeeveThrowPot] 
//===============================================================================

class PeeveThrowPot extends HProps;
#exec MESH  MODELIMPORT MESH=PeeveThrowPotMesh MODELFILE=models\PeeveThrowPot.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=PeeveThrowPotMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=PeeveThrowPotAnims ANIMFILE=models\PeeveThrowPot.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=PeeveThrowPotMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=PeeveThrowPotMesh ANIM=PeeveThrowPotAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=PeeveThrowPotAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=PeeveThrowPotTex0  FILE=TEXTURES\peevepot_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=PeeveThrowPotMesh NUM=0 TEXTURE=PeeveThrowPotTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: peevepot_128.bmp  Path: D:\Harry Potter\Art\Objects\Peeves Throwing Objects 

PeevesThrowSpoon

//===============================================================================
//  [PeeveThrowSpoon] 
//===============================================================================

class PeeveThrowSpoon extends HProps;
#exec MESH  MODELIMPORT MESH=PeeveThrowSpoonMesh MODELFILE=models\PeeveThrowSpoon.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=PeeveThrowSpoonMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=PeeveThrowSpoonAnims ANIMFILE=models\PeeveThrowSpoon.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=PeeveThrowSpoonMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=PeeveThrowSpoonMesh ANIM=PeeveThrowSpoonAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=PeeveThrowSpoonAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=PeeveThrowSpoonTex0  FILE=TEXTURES\pvespoon_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=PeeveThrowSpoonMesh NUM=0 TEXTURE=PeeveThrowSpoonTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: pvespoon_128.bmp  Path: D:\Harry Potter\Art\Objects\Peeves Throwing Objects 

skbat

//===============================================================================
//  [skbat] 
//===============================================================================

class skbat extends HPMesh abstract;
#exec MESH  MODELIMPORT MESH=skbatMesh MODELFILE=models\skbat.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skbatMesh X=0 Y=0 Z=16 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skbatAnims ANIMFILE=models\skbat.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skbatMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skbatMesh ANIM=skbatAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skbatAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skbatTex0  FILE=TEXTURES\Bat_SKIN00.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skbatMesh NUM=0 TEXTURE=skbatTex0

// Original material [0] is [Bat_SKIN00] SkinIndex: 0 Bitmap: Bat_SKIN00.bmp  Path: \\Baker\HPotterPC\Art\Design\Creatures\Bat 

bat

	class bat extends baseChar;

	var rotator rotval;
	var float offsetDir;

auto state pause
{


	function startup()
	{
	
		foreach allActors(class'baseHarry', p)
		{
			if( p.bIsPlayer&& p!=Self)
			{
		
				break;
			}
		}
	}


	begin:
		setPhysics(PHYS_none);
		startup();
		rotval=rotation;
		loopanim('hang');
		offsetdir=-10;

	lcloop:
		sleep(0.5);
			if(abs(vsize(location-p.location))<300)
			{
				gotostate('fly');
			}
			goto 'lcloop';



}


state fly
{
	ignores SeePlayer, HearNoise, KilledBy, Bump, HitWall, HeadZoneChange, FootZoneChange, ZoneChange, Falling, TakeDamage, PainTimer, Died;


function tick(float Deltatime)
{
	local vector offset;


	super.tick(deltatime);


	if(offsetdir<0)
	{
		if(abs(location.z-p.location.z)<60)
		{
			offsetdir=10;
		}
	}
	else
	{
		if(abs(location.z-p.location.z)>140)
		{
			offsetdir=-10;
		}
	}
	offset.x=100*deltatime;
	offset.z=offsetdir*deltatime;
		
	offset=offset>>rotation;
	rotval.yaw=rotval.yaw+(16000*deltatime);
	setrotation(rotval);

	movesmooth(offset);


}

	begin:
		loopanim('fly');
		setphysics(phys_none);
		
	//	PlaySound(sound 'HPSounds.critters_sfx.bats_squeaking1', SLOT_Interact, 1.0, false, 1000.0, 1.0);
	flyloop:
		sleep(4);
		



}

skrabbit

//===============================================================================
//  [skrabbit] 
//===============================================================================

class skrabbit extends HPMesh abstract;
#exec MESH  MODELIMPORT MESH=skrabbitMesh MODELFILE=models\skrabbit.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=skrabbitMesh X=0 Y=0 Z=3 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=skrabbitAnims ANIMFILE=models\skrabbit.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=skrabbitMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=skrabbitMesh ANIM=skrabbitAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=skrabbitAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=skrabbitTex0  FILE=TEXTURES\rabbit.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=skrabbitMesh NUM=0 TEXTURE=skrabbitTex0

// Original material [0] is [RABBIT_SKIN00] SkinIndex: 0 Bitmap: rabbit.bmp  Path: H:\Art\Design\Creatures\Rabbit 

rabbit

	class rabbit extends baseChar;

	var rotator rotval;

auto state lookcute
{

	begin:
		setPhysics(PHYS_walking);
		rotval=rotation;
		loopanim('idle');

	lcloop:
		sleep(5.0);
		gotostate('hop');



}


state hop
{


function tick(float Deltatime)
{
	local vector offset;




	offset.x=100*deltatime;
	offset=offset>>rotation;
	rotval.yaw=rotval.yaw+(10000*deltatime);
	setrotation(rotval);


	movesmooth(offset);
	super.tick(deltatime);

}

	begin:
		setPhysics(PHYS_walking);
		loopanim('hop');
		
		
	hoploop:
		sleep(5.1);
		gotostate('lookcute');



}

EctoGoo

//===============================================================================
//  [EctoGoo] 
//===============================================================================

class EctoGoo extends HProps;
#exec MESH  MODELIMPORT MESH=EctoGooMesh MODELFILE=models\EctoGoo.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=EctoGooMesh X=0 Y=0 Z=16 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=EctoGooAnims ANIMFILE=models\EctoGoo.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=EctoGooMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=EctoGooMesh ANIM=EctoGooAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=EctoGooAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=EctoGooTex0  FILE=TEXTURES\ectopgoo_64.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=EctoGooMesh NUM=0 TEXTURE=EctoGooTex0

// Original material [0] is [Material #27] SkinIndex: 0 Bitmap: ectopgoo_64.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\General Objects 

Static Objects

BedDudley

//===============================================================================
//  [BedDudley] 
//===============================================================================

class BedDudley extends DProps;
#exec MESH  MODELIMPORT MESH=BedDudleyMesh MODELFILE=models\BedDudley.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=BedDudleyMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=BedDudleyAnims ANIMFILE=models\BedDudley.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=BedDudleyMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=BedDudleyMesh ANIM=BedDudleyAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=BedDudleyAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=BedDudleyTex0  FILE=TEXTURES\BedDudley_256.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=BedDudleyMesh NUM=0 TEXTURE=BedDudleyTex0

// Original material [0] is [SKIN00.MASKED] SkinIndex: 0 Bitmap: BedDudley_256.bmp  Path: C:\UNREAL\DProps\Textures 

TV

//===============================================================================
//  [TV] 
//===============================================================================

class TV extends baseProps;
#exec MESH  MODELIMPORT MESH=TVMesh MODELFILE=models\TV.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=TVMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=TVAnims ANIMFILE=models\TV.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=TVMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=TVMesh ANIM=TVAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=TVAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=TVTex0  FILE=TEXTURES\televisn_128.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=TVTex1  FILE=TEXTURES\televisn_129.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=TVMesh NUM=0 TEXTURE=TVTex0

// Original material [0] is [SKIN00] SkinIndex: 0 Bitmap: televisn_128.bmp  Path: H:\Art\Models\Objects\Dursley Props\TV 


function turnOn()
{
	skin=texture'tvTex1';
//cmp	PlaySound(waterstep, SLOT_Interact, 2.2, false, 1000.0, 1.0);

}

Toilet

//===============================================================================
//  [Toilet] 
//===============================================================================

class Toilet extends DProps;
#exec MESH  MODELIMPORT MESH=ToiletMesh MODELFILE=models\Toilet.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=ToiletMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=ToiletAnims ANIMFILE=models\Toilet.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=ToiletMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=ToiletMesh ANIM=ToiletAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=ToiletAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=ToiletTex0  FILE=TEXTURES\Toilet_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=ToiletMesh NUM=0 TEXTURE=ToiletTex0

// Original material [0] is [Material #2] SkinIndex: 0 Bitmap: Toilet_128.bmp  Path: \\Baker\HPotterPC\Art\Models\Objects\Dursley Props 

PaintCans

//===============================================================================
//  [PaintCans] 
//===============================================================================

class PaintCans extends DProps;
#exec MESH  MODELIMPORT MESH=PaintCansMesh MODELFILE=models\PaintCans.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=PaintCansMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=PaintCansAnims ANIMFILE=models\PaintCans.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=PaintCansMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=PaintCansMesh ANIM=PaintCansAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=PaintCansAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=PaintCansTex0  FILE=TEXTURES\paintcan_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=PaintCansMesh NUM=0 TEXTURE=PaintCansTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: paintcan_128.bmp  Path: H:\Art\Models\Objects\Dursley Props 

GHallDumbleThrone

//===============================================================================
//  [GHallDumbleThrone] 
//===============================================================================

class GHallDumbleThrone extends HProps;
#exec MESH  MODELIMPORT MESH=GHallDumbleThroneMesh MODELFILE=models\GHallDumbleThrone.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=GHallDumbleThroneMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=GHallDumbleThroneAnims ANIMFILE=models\GHallDumbleThrone.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=GHallDumbleThroneMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=GHallDumbleThroneMesh ANIM=GHallDumbleThroneAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=GHallDumbleThroneAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=GHallDumbleThroneTex0  FILE=TEXTURES\ghthrone_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=GHallDumbleThroneMesh NUM=0 TEXTURE=GHallDumbleThroneTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: ghthrone_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\Great Hall 

GHallSortHat

//===============================================================================
//  [GHallSortHat] 
//===============================================================================

class GHallSortHat extends HProps;
#exec MESH  MODELIMPORT MESH=GHallSortHatMesh MODELFILE=models\GHallSortHat.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=GHallSortHatMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=GHallSortHatAnims ANIMFILE=models\GHallSortHat.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=GHallSortHatMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=GHallSortHatMesh ANIM=GHallSortHatAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=GHallSortHatAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=GHallSortHatTex0  FILE=TEXTURES\sortghat_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=GHallSortHatMesh NUM=0 TEXTURE=GHallSortHatTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: sortghat_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\Great Hall 

GHallSortHatStool

//===============================================================================
//  [GHallSortHatStool] 
//===============================================================================

class GHallSortHatStool extends HProps;
#exec MESH  MODELIMPORT MESH=GHallSortHatStoolMesh MODELFILE=models\GHallSortHatStool.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=GHallSortHatStoolMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=GHallSortHatStoolAnims ANIMFILE=models\GHallSortHatStool.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=GHallSortHatStoolMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=GHallSortHatStoolMesh ANIM=GHallSortHatStoolAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=GHallSortHatStoolAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=GHallSortHatStoolTex0  FILE=TEXTURES\sortstol_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=GHallSortHatStoolMesh NUM=0 TEXTURE=GHallSortHatStoolTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: sortstol_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\Great Hall 

GHallBenchTable

//===============================================================================
//  [GHallBenchTable] 
//===============================================================================

class GHallBenchTable extends HProps;
#exec MESH  MODELIMPORT MESH=GHallBenchTableMesh MODELFILE=models\GHallBenchTable.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=GHallBenchTableMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=GHallBenchTableAnims ANIMFILE=models\GHallBenchTable.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=GHallBenchTableMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=GHallBenchTableMesh ANIM=GHallBenchTableAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=GHallBenchTableAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=GHallBenchTableTex0  FILE=TEXTURES\tablbnch_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=GHallBenchTableMesh NUM=0 TEXTURE=GHallBenchTableTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: tablbnch_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\Great Hall 

GryfBed

//===============================================================================
//  [GryfBed] 
//===============================================================================

class GryfBed extends HProps;
#exec MESH  MODELIMPORT MESH=GryfBedMesh MODELFILE=models\GryfBed.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=GryfBedMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=GryfBedAnims ANIMFILE=models\GryfBed.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=GryfBedMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=GryfBedMesh ANIM=GryfBedAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=GryfBedAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=GryfBedTex0  FILE=TEXTURES\gryffbed_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=GryfBedMesh NUM=0 TEXTURE=GryfBedTex0

// Original material [0] is [Material #3] SkinIndex: 0 Bitmap: gryffbed_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\Seventh Floor 

GryfsmCauldron

//===============================================================================
//  [GryfsmCauldron] 
//===============================================================================

class GryfsmCauldron extends HProps;
#exec MESH  MODELIMPORT MESH=GryfsmCauldronMesh MODELFILE=models\GryfsmCauldron.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=GryfsmCauldronMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=GryfsmCauldronAnims ANIMFILE=models\GryfsmCauldron.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=GryfsmCauldronMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=GryfsmCauldronMesh ANIM=GryfsmCauldronAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=GryfsmCauldronAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=GryfsmCauldronTex0  FILE=TEXTURES\couldron_64.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=GryfsmCauldronMesh NUM=0 TEXTURE=GryfsmCauldronTex0

// Original material [0] is [SKIN00.TWOSIDED] SkinIndex: 0 Bitmap: couldron_64.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\Seventh Floor 

GryfTrunk

//===============================================================================
//  [GryfTrunk] 
//===============================================================================

class GryfTrunk extends HProps;
#exec MESH  MODELIMPORT MESH=GryfTrunkMesh MODELFILE=models\GryfTrunk.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=GryfTrunkMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=GryfTrunkAnims ANIMFILE=models\GryfTrunk.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=GryfTrunkMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=GryfTrunkMesh ANIM=GryfTrunkAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=GryfTrunkAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=GryfTrunkTex0  FILE=TEXTURES\hogtrunk_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=GryfTrunkMesh NUM=0 TEXTURE=GryfTrunkTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: hogtrunk_128.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\Seventh Floor 

ChristmasOrnamentBall

//===============================================================================
//  [ChristmasOrnamentBall] 
//===============================================================================

class ChristmasOrnamentBall extends HProps;
#exec MESH  MODELIMPORT MESH=ChristmasOrnamentBallMesh MODELFILE=models\ChristmasOrnamentBall.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=ChristmasOrnamentBallMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=ChristmasOrnamentBallAnims ANIMFILE=models\ChristmasOrnamentBall.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=ChristmasOrnamentBallMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=ChristmasOrnamentBallMesh ANIM=ChristmasOrnamentBallAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=ChristmasOrnamentBallAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=ChristmasOrnamentBallTex0  FILE=TEXTURES\xmasball_64.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=ChristmasOrnamentBallMesh NUM=0 TEXTURE=ChristmasOrnamentBallTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: xmasball_64.bmp  Path: D:\Harry Potter\Art\Objects\General Objects\Christmas ornaments 

ChristmasOrnamentBird

//===============================================================================
//  [ChristmasOrnamentBird] 
//===============================================================================

class ChristmasOrnamentBird extends HProps;
#exec MESH  MODELIMPORT MESH=ChristmasOrnamentBirdMesh MODELFILE=models\ChristmasOrnamentBird.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=ChristmasOrnamentBirdMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=ChristmasOrnamentBirdAnims ANIMFILE=models\ChristmasOrnamentBird.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=ChristmasOrnamentBirdMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=ChristmasOrnamentBirdMesh ANIM=ChristmasOrnamentBirdAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=ChristmasOrnamentBirdAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=ChristmasOrnamentBirdTex0  FILE=TEXTURES\xmasbird_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=ChristmasOrnamentBirdMesh NUM=0 TEXTURE=ChristmasOrnamentBirdTex0

// Original material [0] is [SKIN00.MASKED] SkinIndex: 0 Bitmap: xmasbird_128.bmp  Path: D:\Harry Potter\Art\Objects\General Objects\Christmas ornaments 

Telescope

//===============================================================================
//  [Telescope] 
//===============================================================================

class Telescope extends HProps;
#exec MESH  MODELIMPORT MESH=TelescopeMesh MODELFILE=models\Telescope.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=TelescopeMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=TelescopeAnims ANIMFILE=models\Telescope.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=TelescopeMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=TelescopeMesh ANIM=TelescopeAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=TelescopeAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=TelescopeTex0  FILE=TEXTURES\Telescope.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=TelescopeMesh NUM=0 TEXTURE=TelescopeTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: Telescope.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 

Sundial

//===============================================================================
//  [Sundial] 
//===============================================================================

class Sundial extends HProps;
#exec MESH  MODELIMPORT MESH=SundialMesh MODELFILE=models\Sundial.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=SundialMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=SundialAnims ANIMFILE=models\Sundial.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=SundialMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=SundialMesh ANIM=SundialAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=SundialAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=SundialTex0  FILE=TEXTURES\sundial_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=SundialMesh NUM=0 TEXTURE=SundialTex0

// Original material [0] is [Material #2] SkinIndex: 0 Bitmap: sundial_128.bmp  Path: D:\Harry Potter\Art\Objects\General Objects\sundial 

CaveBug

//===============================================================================
//  [CaveBug] 
//===============================================================================

class CaveBug extends HProps;
#exec MESH  MODELIMPORT MESH=CaveBugMesh MODELFILE=models\CaveBug.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=CaveBugMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=CaveBugAnims ANIMFILE=models\CaveBug.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=CaveBugMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=CaveBugMesh ANIM=CaveBugAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=CaveBugAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=CaveBugTex0  FILE=TEXTURES\CaveBug.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=CaveBugMesh NUM=0 TEXTURE=CaveBugTex0

// Original material [0] is [skin00.MASKED] SkinIndex: 0 Bitmap: CaveBug.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 

ForbidForestTree

//===============================================================================
//  [ForbidForestTree] 
//===============================================================================

class ForbidForestTree extends HProps;
#exec MESH  MODELIMPORT MESH=ForbidForestTreeMesh MODELFILE=models\ForbidForestTree.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=ForbidForestTreeMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=ForbidForestTreeAnims ANIMFILE=models\ForbidForestTree.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=ForbidForestTreeMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=ForbidForestTreeMesh ANIM=ForbidForestTreeAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=ForbidForestTreeAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=ForbidForestTreeTex0  FILE=TEXTURES\FirtreeBark.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=ForbidForestTreeTex1  FILE=TEXTURES\FirtreeBows.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=ForbidForestTreeMesh NUM=0 TEXTURE=ForbidForestTreeTex0
#EXEC MESHMAP SETTEXTURE MESHMAP=ForbidForestTreeMesh NUM=1 TEXTURE=ForbidForestTreeTex1

// Original material [0] is [skin00] SkinIndex: 0 Bitmap: FirtreeBark.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 
// Original material [1] is [skin01.MASKED] SkinIndex: 1 Bitmap: FirtreeBows.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 

ForbidForestTreeMed

//===============================================================================
//  [ForbidForestTreeMed] 
//===============================================================================

class ForbidForestTreeMed extends HProps;
#exec MESH  MODELIMPORT MESH=ForbidForestTreeMedMesh MODELFILE=models\ForbidForestTreeMed.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=ForbidForestTreeMedMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=ForbidForestTreeMedAnims ANIMFILE=models\ForbidForestTreeMed.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=ForbidForestTreeMedMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=ForbidForestTreeMedMesh ANIM=ForbidForestTreeMedAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=ForbidForestTreeMedAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=ForbidForestTreeMedTex0  FILE=TEXTURES\FirtreeBark.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=ForbidForestTreeMedTex1  FILE=TEXTURES\FirtreeBows.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=ForbidForestTreeMedMesh NUM=0 TEXTURE=ForbidForestTreeMedTex0
#EXEC MESHMAP SETTEXTURE MESHMAP=ForbidForestTreeMedMesh NUM=1 TEXTURE=ForbidForestTreeMedTex1

// Original material [0] is [skin00] SkinIndex: 0 Bitmap: FirtreeBark.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 
// Original material [1] is [skin01.MASKED] SkinIndex: 1 Bitmap: FirtreeBows.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 

ForbidForestTreeSM

//===============================================================================
//  [ForbidForestTreeSM] 
//===============================================================================

class ForbidForestTreeSM extends HProps;
#exec MESH  MODELIMPORT MESH=ForbidForestTreeSMMesh MODELFILE=models\ForbidForestTreeSM.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=ForbidForestTreeSMMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=ForbidForestTreeSMAnims ANIMFILE=models\ForbidForestTreeSM.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=ForbidForestTreeSMMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=ForbidForestTreeSMMesh ANIM=ForbidForestTreeSMAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=ForbidForestTreeSMAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=ForbidForestTreeSMTex0  FILE=TEXTURES\BirchBark.bmp  GROUP=Skins
#EXEC TEXTURE IMPORT NAME=ForbidForestTreeSMTex1  FILE=TEXTURES\BirchtreeBows.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=ForbidForestTreeSMMesh NUM=0 TEXTURE=ForbidForestTreeSMTex0
#EXEC MESHMAP SETTEXTURE MESHMAP=ForbidForestTreeSMMesh NUM=1 TEXTURE=ForbidForestTreeSMTex1

// Original material [0] is [skin00] SkinIndex: 0 Bitmap: BirchBark.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 
// Original material [1] is [skin01.TWOSIDED] SkinIndex: 1 Bitmap: BirchtreeBows.bmp  Path: C:\Project Files\Harry Potter PC\HP Object Textures 

Spell Scripts

spellFlint

//===============================================================================
//===============================================================================

class spellFlint extends BASESPELL;
#exec MESH  MODELIMPORT MESH=SPELLLEVMesh MODELFILE=models\LevProjectile.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=SPELLLEVMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=SPELLLEVAnims ANIMFILE=models\LevProjectile.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=SPELLLEVMesh X=2.0 Y=2.0 Z=2.0
#exec MESH  DEFAULTANIM MESH=SPELLLEVMesh ANIM=SPELLLEVAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=SPELLLEVAnims VERBOSE
#exec OBJ LOAD FILE=..\textures\HP_FX.utx PACKAGE=HPBase.FXPackage

#EXEC TEXTURE IMPORT NAME=flintSpellIcon  FILE=..\HPMenu\TEXTURES\HUD\flintSpellIcon.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

#EXEC MESHMAP SETTEXTURE MESHMAP=SPELLLEVMesh NUM=0 TEXTURE=HPBase.FXPackage.win_p

function PostBeginPlay()
{
	Super.PostBeginPlay();
	LoopAnim('all', 2.0, 0.0);
}

spellVerd

//===============================================================================

class spellVerd extends BASESPELL;
#exec MESH  MODELIMPORT MESH=SPELLLEVMesh MODELFILE=models\LevProjectile.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=SPELLLEVMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=SPELLLEVAnims ANIMFILE=models\LevProjectile.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=SPELLLEVMesh X=2.0 Y=2.0 Z=2.0
#exec MESH  DEFAULTANIM MESH=SPELLLEVMesh ANIM=SPELLLEVAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=SPELLLEVAnims VERBOSE
#exec OBJ LOAD FILE=..\textures\HP_FX.utx PACKAGE=HPBase.FXPackage

#EXEC TEXTURE IMPORT NAME=verdSpellIcon  FILE=..\HPMenu\TEXTURES\HUD\verdSpellIcon.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

#EXEC MESHMAP SETTEXTURE MESHMAP=SPELLLEVMesh NUM=0 TEXTURE=HPBase.FXPackage.win_p

function PostBeginPlay()
{
	Super.PostBeginPlay();
	LoopAnim('all', 2.0, 0.0);
}

spellRepairo

//===============================================================================

class spellRepairo extends BASESPELL;

#exec MESH  MODELIMPORT MESH=SPELLLEVMesh MODELFILE=models\LevProjectile.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=SPELLLEVMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=SPELLLEVAnims ANIMFILE=models\LevProjectile.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=SPELLLEVMesh X=2.0 Y=2.0 Z=2.0
#exec MESH  DEFAULTANIM MESH=SPELLLEVMesh ANIM=SPELLLEVAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=SPELLLEVAnims VERBOSE
#exec OBJ LOAD FILE=..\textures\HP_FX.utx PACKAGE=HPBase.FXPackage

#EXEC TEXTURE IMPORT NAME=alohoSpellIcon  FILE=..\HPMenu\TEXTURES\HUD\alohSpellIcon.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

#EXEC MESHMAP SETTEXTURE MESHMAP=SPELLLEVMesh NUM=0 TEXTURE=HPBase.FXPackage.win_p

function PostBeginPlay()
{
	Super.PostBeginPlay();
	LoopAnim('all', 2.0, 0.0);
}

spellAvif

//===============================================================================

class spellAvif extends BASESPELL;
#exec MESH  MODELIMPORT MESH=SPELLLEVMesh MODELFILE=models\LevProjectile.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=SPELLLEVMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=SPELLLEVAnims ANIMFILE=models\LevProjectile.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=SPELLLEVMesh X=2.0 Y=2.0 Z=2.0
#exec MESH  DEFAULTANIM MESH=SPELLLEVMesh ANIM=SPELLLEVAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=SPELLLEVAnims VERBOSE
#exec OBJ LOAD FILE=..\textures\HP_FX.utx PACKAGE=HPBase.FXPackage


#EXEC TEXTURE IMPORT NAME=avifSpellIcon  FILE=..\HPMenu\TEXTURES\HUD\avifSpellIcon.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

#EXEC MESHMAP SETTEXTURE MESHMAP=SPELLLEVMesh NUM=0 TEXTURE=HPBase.FXPackage.win_p

// Import the pattern
#exec PATTERN IMPORT PATTERN=AvifPattern FILE=Patterns/Avifores.hpg

function PostBeginPlay()
{
	Super.PostBeginPlay();
//	LoopAnim('all', 2.0, 0.0);
}

Spell Variables

These are leftover variable names for spells not in the final game. Majority of these spells found their way into the Game Boy Color version of the game.

  • Petrificus Totalus - A petrification spell used a couple of times in the book and movie.
  • Nox - According to the lore (and the third movie), this spell nullifies the effects of the Lumos spell, but since the Lumos spell is used to hit gargoyles, it couldn't have been used in this game.
  • Locomotor Wibbly - A leg-collapsing spell. This was used in the Game Boy Color version as a petrification spell.
  • Vermillious - According to the Harry Potter lore, this spell is a combat-oriented variant of Verdimillious. Projects red sparks and smoke that hurt a little bit.
  • Mucor Ad Nauseum - Probably a spelling error from Mucus ad Nauseam. According to the lore, this curse gives its victim a small cold.
  • Ectomatic - The name doesn't suit a normal spell, but Ecto may refer to ectoplasm found in the sequel.
  • Transfiguration - Probably a variant of the Avifors or Flintifors unused spells.

E3 Scripts

Harrye3

//=============================================================================
// Harry  -- hero character 
//=============================================================================
class Harrye3 extends Harry;





function PostBeginPlay()
{
 	Super.PostBeginPlay();
		baseWand(weapon).addSpell(Class'spellAloho');


}

demoHarry

//=============================================================================
// Harry  -- hero character 
//=============================================================================
class demoHarry extends Harry;

Generic NPC Script

With the exception of each class name, this script is identical for the following files:

E3Crabbe

E3Draco

E3Fred

E3George

E3Goyle

class E3Crabbe extends baseChar;
function PostBeginPlay()
{
	Super.PostBeginPlay();
	LoopAnim('plot', 1.0, 0.0);
}
auto state idle{
begin:
loop:
	LoopAnim('lookdownhall', 1.0, 0.0);
	finishanim();
	goto 'loop';
}

demoscroll

//===============================================================================
//  [HedwigsScroll] 
//===============================================================================

class demoscroll extends basescroll;
#exec MESH  MODELIMPORT MESH=HedwigsScrollMesh MODELFILE=models\HedwigsScroll.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=HedwigsScrollMesh X=0 Y=0 Z=00 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=HedwigsScrollAnims ANIMFILE=models\HedwigsScroll.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=HedwigsScrollMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=HedwigsScrollMesh ANIM=HedwigsScrollAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=HedwigsScrollAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=HedwigsScrollTex0  FILE=TEXTURES\HedwScrl_64.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=HedwigsScrollMesh NUM=0 TEXTURE=HedwigsScrollTex0

// Original material [0] is [Material #1] SkinIndex: 0 Bitmap: HedwScrl_64.bmp  Path: D:\Harry Potter\A Lorian's Stuff\Hogwarts\General Objects 




function PreBeginPlay()
{
	local rotator rot;

	scrollparticle=spawn(class'scrollfx');
	rot.pitch=-16000;
	rot.roll=0;
	rot.yaw=0;
	scrollparticle.setrotation(rot);
	Super.PreBeginPlay();
}

function touch(actor other)
{
	if(other==playerharry)
	{
		// AE:
		PlaySound(sound 'HPSounds.magic_sfx.pickup_page');

		playerharry.clientMessage("demo scroll touch");
		baseHud(playerharry.myHud).ShowPopup(class'hagletter2');
		popup=baseHud(playerharry.myHud).curPopup;
		gotostate('popstate');

		scrollparticle.destroy();
	}
}	

E3Knight


class E3Knight extends Knight;//baseChar;

//var int NumSpellHits;
//
////**************************************************************
//auto state idle
//{
//	function bool HandleFlipSpell()
//	{
//		local FireCracker  a;
//		local byte         b;
//		local int          i;
//
//		NumSpellHits++;
//
//		if( NumSpellHits >= 3 )
//		{
//			Playsound( sound 'HPSounds.hub1_sfx.MAL_candy_explodes');
//			PlaySound( sound'HPSounds.menu_sfx.s_menu_click', SLOT_Interact, 1.0, false, 1000.0, 1.0);
//
//			for( i = 0; i < 10; i++ )
//			{
//				a = spawn( class'FireCracker' ); //cWizCrackerConfetti' );
//
//				b = 127 + Rand(128);
//				a.ColorStart.Base.r = b;
//				a.ColorStart.Base.g = b;
//				a.ColorStart.Base.b = b;
//				a.ColorEnd.Base.r = b;
//				a.ColorEnd.Base.g = b;
//				a.ColorEnd.Base.b = b;
//
//				a.Gravity.z = -(30 + Rand(4)*30);
//			}
//
//			Destroy();	
//		}
//		else
//		{
//			GotoState('stateWobble');
//		}
//	}
//
//  begin:
//  loop:
//	LoopAnim('IDLE2LOOKRIGHT', 1.0, 0.0);
//	finishanim();
//	LoopAnim('LOOKRIGHT', 1.0, 0.0);
//	sleep(frand()*2);
//	finishanim();
//	LoopAnim('LOOKRIGHT2IDLE', 1.0, 0.0);
//	finishanim();
//	LoopAnim('IDLE', 1.0, 0.0);
//	sleep(frand()*3);
//	finishanim();
//
//	LoopAnim('IDLE2LOOKLEFT', 1.0, 0.0);
//	finishanim();
//	LoopAnim('LOOKLEFT', 1.0, 0.0);
//	sleep(frand()*2);
//	finishanim();
//	LoopAnim('LOOKLEFT2IDLE', 1.0, 0.0);
//	finishanim();
//	LoopAnim('IDLE', 1.0, 0.0);
//	sleep(frand()*3);
//	finishanim();
//
//	goto 'loop';
//}
//
////**************************************************************
//state stateWobble
//{
//  Begin:
//	PlayAnim('wobble');
//	FinishAnim();
//	GotoState('idle');
//}
//
////**************************************************************
//defaultProperties
//{
//     DrawType=DT_Mesh
//     Mesh=SkeletalMesh'HarryPotter.skKnightMesh'
//	 eVulnerableToSpell=SPELL_Flipendo
//}

demoLetter

class demoLetter expands basePopup;

#exec TEXTURE IMPORT NAME=welcomeLetter1 FILE=TEXTURES\welcome1.BMP GROUP="Icons" FLAGS=2 MIPS=off
#exec TEXTURE IMPORT NAME=welcomeLetter2 FILE=TEXTURES\welcome2.BMP GROUP="Icons" FLAGS=2 MIPS=off


function Draw(Canvas canvas)
{
local float fx,fy,bx,by;
local float x,y,w,h;
local Texture tex;

	fx=(Canvas.SizeX/640.0);
	fy=(Canvas.SizeY/480.0);
	fx=1.0;
	fy=1.0;

	tex=Texture'welcomeLetter1';
	w=tex.USize;
	h=tex.VSize;
	bx=(Canvas.SizeX/2)-(w);
	by=(Canvas.SizeY/2)-(h/2);
	Canvas.SetPos(bx*fx, by*fy);
	Canvas.DrawIcon(tex,1.0);

	tex=Texture'welcomeLetter2';
	w=tex.USize;
	h=tex.VSize;
	x=(Canvas.SizeX/2);
	y=(Canvas.SizeY/2)-(h/2);
	Canvas.SetPos((bx+256)*fx, by*fy);
	Canvas.DrawIcon(tex,1.0);

}

avifPage

class avifPage expands baseSpellPage;


//#EXEC TEXTURE IMPORT NAME=avifPageTexture1	 FILE=TEXTURES\HUD\avifPage1.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=avifPageTexture2	 FILE=TEXTURES\HUD\avifPage2.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=avifPageTexture3	 FILE=TEXTURES\HUD\avifPage3.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=avifPageTexture4	 FILE=TEXTURES\HUD\avifPage4.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

#EXEC TEXTURE IMPORT NAME=avifPageTexture1	 FILE=TEXTURES\HUD\letters\avifors1.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
#EXEC TEXTURE IMPORT NAME=avifPageTexture2	 FILE=TEXTURES\HUD\letters\avifors2.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

flintPage

class flintPage expands baseSpellPage;


#EXEC TEXTURE IMPORT NAME=flintPageTexture1	 FILE=TEXTURES\HUD\flintPage1.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
#EXEC TEXTURE IMPORT NAME=flintPageTexture2	 FILE=TEXTURES\HUD\flintPage2.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
#EXEC TEXTURE IMPORT NAME=flintPageTexture3	 FILE=TEXTURES\HUD\flintPage3.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
#EXEC TEXTURE IMPORT NAME=flintPageTexture4	 FILE=TEXTURES\HUD\flintPage4.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

verdPage

class verdPage expands baseSpellPage;


//#EXEC TEXTURE IMPORT NAME=verdPageTexture1	 FILE=TEXTURES\HUD\verdPage1.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=verdPageTexture2	 FILE=TEXTURES\HUD\verdPage2.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=verdPageTexture3	 FILE=TEXTURES\HUD\verdPage3.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=verdPageTexture4	 FILE=TEXTURES\HUD\verdPage4.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

#EXEC TEXTURE IMPORT NAME=verdPageTexture1	 FILE=TEXTURES\HUD\letters\verdimillious1.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
#EXEC TEXTURE IMPORT NAME=verdPageTexture2	 FILE=TEXTURES\HUD\letters\verdimillious2.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

wingPage

Although Wingardium Leviosa is a used spell, this script has a commented out placeholder that uses the Verdimillious script.

class wingPage expands baseSpellPage;


//#EXEC TEXTURE IMPORT NAME=verdPageTexture1	 FILE=TEXTURES\HUD\verdPage1.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=verdPageTexture2	 FILE=TEXTURES\HUD\verdPage2.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=verdPageTexture3	 FILE=TEXTURES\HUD\verdPage3.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
//#EXEC TEXTURE IMPORT NAME=verdPageTexture4	 FILE=TEXTURES\HUD\verdPage4.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

#EXEC TEXTURE IMPORT NAME=wingPageTexture1	 FILE=TEXTURES\HUD\letters\wingardium1.bmp GROUP="Icons" FLAGS=2 MIPS=OFF
#EXEC TEXTURE IMPORT NAME=wingPageTexture2	 FILE=TEXTURES\HUD\letters\wingardium2.bmp GROUP="Icons" FLAGS=2 MIPS=OFF

Leftover Unreal Scripts

Eightball

//=============================================================================
// Eightball.
//=============================================================================
class Eightball extends Weapon;


// 3rd person perspective version
#exec MESH IMPORT MESH=8Ball3rd ANIVFILE=MODELS\8ball3_a.3D DATAFILE=MODELS\8ball3_d.3D X=0 Y=0 Z=0
#exec MESH ORIGIN MESH=8Ball3rd X=0 Y=-430 Z=-45 YAW=-64 ROLL=9
#exec MESH SEQUENCE MESH=8Ball3rd SEQ=All  STARTFRAME=0  NUMFRAMES=10
#exec MESH SEQUENCE MESH=8Ball3rd SEQ=Idle  STARTFRAME=0  NUMFRAMES=1
#exec MESH SEQUENCE MESH=8Ball3rd SEQ=Fire  STARTFRAME=1  NUMFRAMES=9
//#exec TEXTURE IMPORT NAME=JEightB1 FILE=MODELS\eightbal.PCX GROUP="Skins"
#exec MESHMAP SCALE MESHMAP=8Ball3rd X=0.065 Y=0.065 Z=0.13
//#exec MESHMAP SETTEXTURE MESHMAP=8Ball3rd NUM=1 TEXTURE=JEightB1
//#exec MESHMAP SETTEXTURE MESHMAP=8Ball3rd NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18

BabyCowCarcass

//=============================================================================
// BabyCowCarcass.
//=============================================================================
class BabyCowCarcass extends pawn;

Carcass

//=============================================================================
// Carcass.
//=============================================================================
class Carcass extends Decoration
	native;

// Sprite.
#exec Texture Import File=Textures\Corpse.pcx Name=S_Corpse Mips=Off Flags=2

// Variables.
var bool bPlayerCarcass;
var() byte flies;
var() byte rats;
var() bool bReducedHeight;
var bool bDecorative;
var bool bSlidingCarcass;
var int CumulativeDamage;
var PlayerReplicationInfo PlayerOwner;

var Pawn Bugs;

	function CreateReplacement()
	{
		if (Bugs != None)
			Bugs.Destroy();
	}

	function Destroyed()
	{
		local Actor A;

		if (Bugs != None)
			Bugs.Destroy();
				
		Super.Destroyed();
	}

	function Initfor(actor Other)
	{
		//implemented in subclasses
	}
			
	function ChunkUp(int Damage)
	{
		destroy();
	}
	
	static simulated function bool AllowChunk(int N, name A)
	{
		return true;
	}

	function TakeDamage( int Damage, Pawn instigatedBy, Vector hitlocation, 
							Vector momentum, name damageType)
	{
		if ( !bDecorative )
		{
			bBobbing = false;
			SetPhysics(PHYS_Falling);
		}
		if ( (Physics == PHYS_None) && (Momentum.Z < 0) )
			Momentum.Z *= -1;
		Velocity += 3 * momentum/(Mass + 200);
		if ( DamageType == 'shot' )
			Damage *= 0.4;
		CumulativeDamage += Damage;
		if ( (((Damage > 30) || !IsAnimating()) && (CumulativeDamage > 0.8 * Mass)) || (Damage > 0.4 * Mass) 
			|| ((Velocity.Z > 150) && !IsAnimating()) )
			ChunkUp(Damage);
		if ( bDecorative )
			Velocity = vect(0,0,0);
	}

auto state Dying
{
	ignores TakeDamage;

Begin:
	Sleep(0.2);
	GotoState('Dead');
}
	
state Dead 
{
	function Timer()
	{
		local bool bSeen;
		local Pawn aPawn;
		local float dist;

		if ( Region.Zone.NumCarcasses <= Region.Zone.MaxCarcasses )
		{
			if ( !PlayerCanSeeMe() )
				Destroy();
			else
				SetTimer(2.0, false);	
		}
		else
			Destroy();
	}
	
	function AddFliesAndRats()
	{
	}

	function CheckZoneCarcasses()
	{
	}
	
	function BeginState()
	{
		if ( bDecorative )
			lifespan = 0.0;
		else
			SetTimer(18.0, false);
	}
			
Begin:
	FinishAnim();
	Sleep(5.0);
	CheckZoneCarcasses();
	Sleep(7.0);
	if ( !bDecorative && !bHidden && !Region.Zone.bWaterZone && !Region.Zone.bPainZone )
		AddFliesAndRats();	
}

Miscellanous

DProps

//=============================================================================
// HProps
//=============================================================================
class DProps expands baseProps;

PotCam

// HARRY POTTER camera code 
//________________________________________________________________________________________
 class PotCam extends BaseCam;

 // @PAB this is just an historical stub. BaseCam should be used.

StoryBookDialog

//Yet another file by me, which does nothing, and is full of commented out code.

class StoryBookDialog expands baseDialog;

/*
struct DialogLine
{
	var string name;
	var sound sound;
	var string text;
};
*/

/*
const MAX_LINES =  20;
//var string DlgLineNames[200];
var int   DlgLineBook[20];
var int   DlgLinePage[20];
var sound DlgLineSounds[20];
var string DlgLineText[20];
*/
var baseNarrator _narrator;

//***********************************************************************************************************
function bool FindDialog2(string PageName, /*int Book, int Page,*/ out sound dlgSound, out float SoundLen, out string dlgText)
{
	local int  i;
	local bool bReturnVal;
	//local bool bFakeTut1Dialog;

	bReturnVal = true;
	//bFakeTut1Dialog = false;

	if( _narrator == none )
	{
		foreach AllActors(class'baseNarrator', _narrator)
			break;

		if( _narrator == None )
		{
			Log("*********** No Tut1Dialog found");

			//_narrator = spawn(class'narrator');
			//bFakeTut1Dialog = true;
		}
	}

	_narrator.FindDialog( PageName, dlgSound, dlgText );

/*
	     if( PageName ~= "CommonRoom" )       _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "HarryGetsBroom" )   _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "HarryStudy" )       _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "3_1_" )             _narrator.FindDialog( "StoryBook1", dlgSound, dlgText );
	else if( PageName ~= "3_2_" )             _narrator.FindDialog( "StoryBook2", dlgSound, dlgText );
	else if( PageName ~= "3_3_" )             _narrator.FindDialog( "StoryBook3", dlgSound, dlgText );
	else if( PageName ~= "3_4_" )             _narrator.FindDialog( "StoryBook4", dlgSound, dlgText );
	else if( PageName ~= "3_5_" )             _narrator.FindDialog( "StoryBook5", dlgSound, dlgText );
	else if( PageName ~= "3_6_" )             _narrator.FindDialog( "StoryBook6", dlgSound, dlgText );
	else if( PageName ~= "3_7_" )             _narrator.FindDialog( "StoryBook7", dlgSound, dlgText );
	else if( PageName ~= "4_1_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "4_2_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "HermioneLibrary" )  _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "5_1_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "5_2_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "5_3_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "5_4_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "5_6_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_1_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_2_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_3_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_4_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_5_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_6_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_7_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "6_8_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "7_1_" )             _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "QuidditchVictory" ) _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else if( PageName ~= "RunDownHall" )      _narrator.FindDialog( "StoryBook8", dlgSound, dlgText );
	else bReturnVal = false;
*/
	if( dlgSound != none )
		SoundLen = GetsoundDuration(dlgSound);
	else
		SoundLen = 2;

	//switch( Book )
	//{
	//	case 0:  //intro dialog
	//		Page = Clamp( Page, 0, 7 );
	//		_narrator.FindDialog( "StoryBook" $ (Page+1), dlgSound, dlgText );
	//		SoundLen = GetsoundDuration(dlgSound);
	//		bReturnVal = true;
	//		break;
	//
	//	case 1:  // ?
	//		//Page = Clamp( Page, 0, 7 );
	//		Page = 0;
	//		//_narrator.FindDialog( "StoryBook" $ (Page+1), dlgSound, dlgText );
	//		_narrator.FindDialog( "StoryBook9", dlgSound, dlgText );
	//		SoundLen = GetsoundDuration(dlgSound);
	//		bReturnVal = true;
	//		break;
	//
	//	case 2:  // ?
	//		Page = Clamp( Page, 0, 7 );
	//		Page = 0;
	//		//_narrator.FindDialog( "StoryBook" $ (Page+1), dlgSound, dlgText );
	//		_narrator.FindDialog( "StoryBook10", dlgSound, dlgText );
	//		SoundLen = GetsoundDuration(dlgSound);
	//		bReturnVal = true;
	//		break;
	//}

	/*
	//log("Looking for " $tstr);
	for( i = 0; i < MAX_LINES; i++ )
	{
		//log("Checking " $Tut1DlgLineNames[i] $"->" $Tut1DlgLineText[i]);
		if( DlgLineBook[ i ] == Book  &&  DlgLinePage[ i ] == Page )
		{
			//log("Found " $lineName);
			dlgSound = DlgLineSounds[i];
			dlgText = DlgLineText[i];

			SoundLen = GetsoundDuration(dlgSound);

			return(true);
		}
	} 

	dlgSound=None; 
	//	dlgText="Cant find Dialog called:" $lineName;
	//dlgText=":" $lineName;
	*/

	//if( bFakeTut1Dialog )
	//	_Tut1Dialog.Destroy();

	return bReturnVal;
}

/*
	DlgLineBook(0)=0
	DlgLinePage(0)=0
	DlgLineSounds(0)=HPSounds.tut1_dlg.TUT1_DUMINTRO_1
	DlgLineText(0)="Welcome to Hogwarts, the school for Witches and Wizards. I am Albus Dumbledore, your Headmaster."

	DlgLineBook(1)=0
	DlgLinePage(1)=1
	DlgLineSounds(1)=HPSounds.tut1_dlg.TUT1_DUMINTRO_2
	DlgLineText(1)="Hogwarts is full of secrets, Harry, so search behind every."

	DlgLineBook(2)=0
	DlgLinePage(2)=2
	DlgLineSounds(2)=HPSounds.tut1_dlg.TUT1_DUMINTRO_2
	DlgLineText(2)="Hogwarts is full of secrets, Harry, so search behind every door."

	DlgLineBook(3)=0
	DlgLinePage(3)=3
	DlgLineSounds(3)=HPSounds.tut1_dlg.TUT1_DUMINTRO_2
	DlgLineText(3)="Hogwarts is full of secrets, Harry, so search behind every door.  But."


	DlgLineBook(3)=1
	DlgLinePage(3)=0
	DlgLineSounds(3)=HPSounds.tut1_dlg.TUT1_DUMINTRO_2
	DlgLineText(3)="Hogwarts is full of secrets, Harry, so search behind every door.  But."
*/

XLandingMarkerSpot

//===============================================================================
//  [XLandingMarkerSpot] 
//===============================================================================

class XLandingMarkerSpot extends HProps;
#exec MESH  MODELIMPORT MESH=XLandingMarkerSpotMesh MODELFILE=models\XLandingMarkerSpot.PSK LODSTYLE=10
#exec MESH  ORIGIN MESH=XLandingMarkerSpotMesh X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM  IMPORT ANIM=XLandingMarkerSpotAnims ANIMFILE=models\XLandingMarkerSpot.PSA COMPRESS=1 MAXKEYS=999999 IMPORTSEQS=1
#exec MESHMAP   SCALE MESHMAP=XLandingMarkerSpotMesh X=1.0 Y=1.0 Z=1.0
#exec MESH  DEFAULTANIM MESH=XLandingMarkerSpotMesh ANIM=XLandingMarkerSpotAnims

// Digest and compress the animation data. Must come after the sequence declarations.
// 'VERBOSE' gives more debugging info in UCC.log 
#exec ANIM DIGEST  ANIM=XLandingMarkerSpotAnims VERBOSE

#EXEC TEXTURE IMPORT NAME=XLandingMarkerSpotTex0  FILE=TEXTURES\landingx_128.bmp  GROUP=Skins

#EXEC MESHMAP SETTEXTURE MESHMAP=XLandingMarkerSpotMesh NUM=0 TEXTURE=XLandingMarkerSpotTex0

// Original material [0] is [SKIN00.MASKED] SkinIndex: 0 Bitmap: landingx_128.bmp  Path: D:\Harry Potter\Art\Objects\General Objects\X marks the spot 

TestInfo

//=============================================================================
// For internal testing.
//=============================================================================
class TestInfo extends Info;

var() bool bTrue1;
var() bool bFalse1;
var() bool bTrue2;
var() bool bFalse2;
var bool bBool1;
var bool bBool2;
var() int xnum;
var float ppp;
var string sxx;
var int MyArray[2];
var vector v1,v2;
var string TestRepStr;
//var string[32] teststring;

const Pie=3.14;
const Str="Tim";
const Lotus=vect(1,2,3);

var struct STest
{
	var bool b1;
	var int i;
	var bool b2;
	var bool b3;
} ST;

function TestQ()
{
	local vector v;
	v.x = 2;
	v.y = 3;
	v.z = 4;
	assert(v==vect(2,3,4));
	assert(v.z==4);
	assert(v.y==3);
	assert(v.x==2);
}

static function test()
{
	class'testinfo'.default.v1 = vect(1,2,3);
}

function PostBeginPlay()
{
	local object o;
	local actor TempActor;
	log("!!BEGIN");

	default.v1=vect(5,4,3);
	assert(default.v1==vect(5,4,3));
	test();
	assert(default.v1==vect(1,2,3));

	BroadcastMessage(Tag);
	BroadcastMessage(string(Tag));
	BroadcastMessage("test "$string(Tag));
	assert(IsA('Actor'));
	assert(IsA('TestInfo'));
	assert(IsA('Info'));
	assert(!IsA('LevelInfo'));
	assert(!IsA('Texture'));
	//o=dynamicloadobject( "UnrealShare.AutoMag.Reload", class'object' );
	//assert(o!=None);
	//assert(o==None);
	log("!!END");
}

function TestStructBools()
{
	assert(ST.b1==false);
	assert(ST.b2==false);
	assert(ST.b3==false);

	ST.b1=true;
	assert(ST.b1==true);
	assert(ST.b2==false);
	assert(ST.b3==false);

	ST.b2=true;
	assert(ST.b1==true);
	assert(ST.b2==true);
	assert(ST.b3==false);

	ST.b3=true;
	assert(ST.b1==true);
	assert(ST.b2==true);
	assert(ST.b3==true);

	ST.b1=false;
	ST.b2=false;
	ST.b3=false;
}

function BeginPlay()
{
	local testobj to;
	local object oo;
	to = new class'TestObj';
	to = new()class'TestObj';
	to = new(self)class'TestObj';
	to = new(self,'')class'TestObj';
	to = new(self,'',0)class'TestObj';
	to.Test();
	TestStructBools();
}

function TestX( bool bResource )
{
	local int n;
	n = int(bResource);
	MyArray[ int(bResource) ] = 0;
	MyArray[ int(bResource) ]++;
}

function bool RecurseTest()
{
	bBool1=true;
	return false;
}

function TestLimitor( class c )
{
	local class<actor> NewClass;
	NewClass = class<actor>( c );
}

static function int OtherStatic( int i )
{
	assert(i==246);
	assert(default.xnum==777);
	return 555;
}

static function int TestStatic( int i )
{
	assert(i==123);
	assert(default.xnum==777);
	assert(OtherStatic(i*2)==555);
}

function TestContinueFor()
{
	local int i;
	log("TestContinue");
	for( i=0; i<20; i++ )
	{
		log("iteration "$i);
		if(i==7||i==9||i==19)
			continue;
		log("...");
	}
	log("DoneContinue");
}

function TestContinueWhile()
{
	local int i;
	log("TestContinue");
	while( ++i <= 20 )
	{
		log("iteration "$i);
		if(i==7||i==9)
			continue;
		log("...");
	}
	log("DoneContinue");
}

function TestContinueDoUntil()
{
	local int i;
	log("TestContinue");
	do
	{
		i++;
		log("iteration "$i);
		if(i==7||i==9||i>18)
			continue;
		log("...");
	} until( i>20 );
	log("DoneContinue");
}

function TestContinueForEach()
{
	local actor a;
	log("TestContinue");
	foreach AllActors( class'Actor', a )
	{
		log("actor "$a);
		if(light(a)==none)
			continue;
		log("...");
	}
	log("DoneContinue");
}


function SubTestOptionalOut( optional out int a, optional out int b, optional out int c )
{
	a *= 2;
	b = b*2;
	c += c;
}
function TestOptionalOut()
{
	local int a,b,c;
	a=1; b=2; c=3;

	SubTestOptionalOut(a,b,c);
	assert(a==2); assert(b==4); assert(c==6);

	SubTestOptionalOut(a,b);
	assert(a==4); assert(b==8); assert(c==6);

	SubTestOptionalOut(,b,c);
	assert(a==4); assert(b==16); assert(c==12);

	SubTestOptionalOut();
	assert(a==4); assert(b==16); assert(c==12);

	SubTestOptionalOut(a,b,c);
	assert(a==8); assert(b==32); assert(c==24);

	log("TestOptionalOut ok!");
}

function TestNullContext( actor a )
{
	bHidden = a.bHidden;
	a.bHidden = bHidden;
}

function TestSwitch()
{
	local string s;
	local int i;
	local bool b;
	s="Tim";
	i=2;
	switch( i )
	{
		case 0:
			assert(false);
			break;
		case 2:
			b=true;
			break;
		default:
			assert(false);
			break;
	}
	assert(b);
	switch( s )
	{
		case "":
			assert(false);
			break;
		case "xyzzy":
			assert(false);
			break;
		default:
			b=false;
			break;
	}
	assert(!b);
	log("testswitch succeeded");
}

function Tick( float DeltaTime )
{
	local class C;
	local class<testinfo> TC;
	local actor a;

	log("time="$Level.TimeSeconds);

	TestOptionalOut();
	TestNullContext( self );
	TestNullContext( None );
	TestSwitch();

	v1=vect(1,2,3);
	v2=vect(2,4,6);
	assert(v1!=v2);
	assert(!(v1==v2));
	assert(v1==vect(1,2,3));
	assert(v2==vect(2,4,6));
	assert(vect(1,2,5)!=v1);
	assert(v1*2==v2);
	assert(v1==v2/2);

	assert(Pie==3.14);
	assert(Pie!=2);
	assert(Str=="Tim");
	assert(Str!="Bob");
	assert(Lotus==vect(1,2,3));

	assert(GetPropertyText("sxx")=="Tim");
	assert(GetPropertyText("ppp")!="123");
	assert(GetPropertyText("bogus")=="");
	xnum=345;
	assert(GetPropertyText("xnum")=="345");
	SetPropertyText("xnum","999");
	assert(xnum==999);
	assert(xnum!=666);

	assert(bTrue1==true);
	assert(bFalse1==false);
	assert(bTrue2==true);
	assert(bFalse2==false);

	assert(default.bTrue1==true);
	assert(default.bFalse1==false);
	assert(default.bTrue2==true);
	assert(default.bFalse2==false);

	assert(class'TestInfo'.default.bTrue1==true);
	assert(class'TestInfo'.default.bFalse1==false);
	assert(class'TestInfo'.default.bTrue2==true);
	assert(class'TestInfo'.default.bFalse2==false);

	TC=Class;
	assert(TC.default.bTrue1==true);
	assert(TC.default.bFalse1==false);
	assert(TC.default.bTrue2==true);
	assert(TC.default.bFalse2==false);

	C=Class;
	assert(class<testinfo>(C).default.bTrue1==true);
	assert(class<testinfo>(C).default.bFalse1==false);
	assert(class<testinfo>(C).default.bTrue2==true);
	assert(class<testinfo>(C).default.bFalse2==false);

	assert(default.xnum==777);
	TestStatic(123);
	TC.static.TestStatic(123);
	class<testinfo>(C).static.TestStatic(123);

	bBool2=RecurseTest();
	assert(bBool2==false);

	TestStructBools();
	TestQ();

	log( "All tests passed" );
}

function f();

function temp()
{
	local int i;
	local playerpawn PlayerOwner;
	local name LeftList[20];
	for( i=0; i<20; i++ )
		PlayerOwner.WeaponPriority[i] = LeftList[i+1];
	temp();
}

state AA
{
	function f();
}
state BB
{
	function f();
}
state CCAA extends AA
{
	function f();
}
state DDAA extends AA
{
	function f();
}
state EEDDAA extends DDAA
{
	function f();
}

TestObj

//=============================================================================
// TestObj: A purely scripted object for internal testing.
//=============================================================================
class TestObj extends Object;

function Test()
{
	log( "TestObj.Test" );
}