Sunday, 22 April 2012
Well, that's not good...
Because of this, we need to have as much ready as possible. Everyone bring any "tools" that might be needed. That means stuff to draw with/on, and all kinds of useful stuff you all use for the stuff you do.
James and Dan, talk amongst yourselves and ensure we have all models, drawings and textures needed for the first level. If you're confused about something, give me a call.
Nick and David, is all the code for those levels OK? What more is needed? Let me know. I know there was some puzzle stuff, and with the third puzzle superficially. Dan has that info, so call/FB him to get it :).
David, we might need to edit the audio a little, so any chance you can bring the audio file + the editing program tomorrow?
Hopefully I'll have all the animations for the PC and NPC done, if 3DS works for me at home...
General: Optimally we have the start menu for the demonstration as well, so that when we show it we can start the game from there, but we'll see... How shall we do it in terms of demonstrating both phases (running and puzzle)? Simply put them as two different games and play both separately?
Can anyone else think of something that I'm forgetting?
Saturday, 21 April 2012
I'm working on the animation of the playable character, and will try to have that with the neccessary code on sunday. Dan, if you can please have the model for the zombie on sunday, I'll animate it there so we have both of them. :)
David, based on feedback we might need to do something about the music I'm afraid. It's a file you made youself right? in any case, I really like it so I don't want to remove it or anything, but we might need to make it a bit more intense. Hmmm.... Hard to explain here, we'll deal with this on sunday.
Friday, 20 April 2012
User Experience Digital Prototype
Will put more detail up later, for now though. Nothing will be put up. : )
User Experience: Digital Prototype Testing
- Pre-Test Questionnaire - Demographic, determines player experience.
- Digital Prototype - Digital representation of the game to allow the player in game experience.
- Post-Test Questionnaire - To test player experience and game play mechanics.
Pre-Test Questionnaire -
The Pre-Test Questionnaire follows the same path as the paper prototype as all it is doing is testing our demographic and if were to change it, we would have inaccurate demographic information across our tests.
Digital Prototype -
The digital prototype will demonstrate the running phases and test the overall feel of the game. It is imperative we create this as this is the only way we can test all of our gameplay mechanics working together.
Post-Test Questionnaire-
The post-test questionnaire is different compared to the paper prototype. The following questions are thus;
How much do you agree with these statements:
--The powerup were well spaced.
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
--The level was challenging
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
--The level was too cluttered with obstacles
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
--The music was appropriate
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
--The sounds were appropriate
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
--The controls were responsive and familiar
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
--The checkpoints were well spaced
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
--It would've been fine if after 5 deaths, I was returned to the beginning.
Strongly Agree, Agree, Neither Agree nor Disagee, Disagree, Strongly Disagree
----------------
During the digital prototype, we will record how many times the player dies and record problematic places where the player dies often.
Thursday, 19 April 2012
AUDIO:
//****************************************************************************************************
//VARIABLE DECLARATION
//****************************************************************************************************
public var levelNo: int = 1;
public var firstPlay: boolean = true;
private var pc: GameObject;
private var cam: GameObject;
var pcZ: double;
var camZ: double;
var ambClips: AudioClip[];
var FXClips: AudioClip[];
var clipNo: int;
var soundName: String;
//****************************************************************************************************
//FIND NECESSARY GAME OBJECTS
//****************************************************************************************************
function Start()
{
pc = GameObject.Find("PC Prefab(Clone)");
cam = GameObject.Find("PC Camera(Clone)");
}
//****************************************************************************************************
//AMBIENT MUSIC CODE FOR LEVELS 1, 2 AND 3
//****************************************************************************************************
function Update()
{
pcZ = pc.transform.position.z;
camZ = cam.transform.position.z;
if(pcZ > (camZ - 5) && firstPlay == true)
{
firstPlay = false;
clipNo = (levelNo*2) - 1;
audio.Stop();
clipNo = (levelNo*2) - 2;
audio.clip = ambClips[clipNo];
audio.Play();
}
else if(pcZ <= (camZ - 5) && firstPlay == false)
{
firstPlay = true;
clipNo = (levelNo*2) - 2;
audio.Stop();
clipNo = (levelNo*2) - 1;
audio.clip = ambClips[clipNo];
audio.Play();
}
}
//****************************************************************************************************
//PLAY EVENT ACTIVATED SOUND
//****************************************************************************************************
function PlayFXSound(soundName: String)
{
switch(soundName)
{
case "jump":
AudioSource.PlayClipAtPoint(FXClips[0], cam.transform.position, 0.1);
break;
case "slide":
AudioSource.PlayClipAtPoint(FXClips[1], cam.transform.position, 0.4);
break;
case "pickup":
AudioSource.PlayClipAtPoint(FXClips[2], cam.transform.position, 0.5);
break;
case "die":
AudioSource.PlayClipAtPoint(FXClips[3], cam.transform.position, 0.7);
break;
case "zombie":
AudioSource.PlayClipAtPoint(FXClips[4], cam.transform.position, 0.5);
break;
default:
print("Sound Manager: ERROR! invalid sound clip name.");
break;
}
}
PICKUPS:
//****************************************************************************************************
//VARIABLE DECLARATION
//****************************************************************************************************
private var pc: GameObject;
private var pcScript: PC_Movement_Puzzel;
var mesh: Mesh;
var sound: SoundManager;
var powerValue: int = 1;
var powerType: int = 1;
var collision: boolean;
var distance: float;
function Start()
{
pc = GameObject.FindGameObjectWithTag("Player");
pcScript = pc.GetComponent(PC_Movement_Puzzel);
sound = GameObject.Find("Sound Manager").GetComponent(SoundManager);
mesh = GetComponentInChildren(MeshFilter).mesh;
powerValue = 1;
powerType = 1;
}
//****************************************************************************************************
//POWER-UP LOGIC
//****************************************************************************************************
function Update()
{
print(pc);
print(pcScript);
transform.Rotate(0, 3, 0);
distance = Vector3.Distance(pc.transform.position, transform.position);
if(distance < 1)
{
print("pickup");
PickUpHandle();
}
}
function PickUpHandle()
{
switch(powerType)
{
case 1:
sound.PlayFXSound("pickup");
pcScript.SpeedUp(1);
print("case 1");
Destroy(mesh);
yield WaitForSeconds(2.5);
pcScript.SpeedUp(0);
break;
case 2:
sound.PlayFXSound("pickup");
Time.timeScale = 0.5;
Destroy(mesh);
yield WaitForSeconds(15);
Time.timeScale = 1;
break;
case 3:
sound.PlayFXSound("pickup");
pc.godMode = true;
Destroy(mesh);
yield WaitForSeconds(15);
pc.godMode = false;
break;
case 4:
sound.PlayFXSound("pickup");
if(!pc.godMode)
{
pc.pcLives -= 1;
pc.pcSpeed = pc.pcSpeed/2;
Destroy(mesh);
yield WaitForSeconds(0.33);
pc.pcSpeed = pc.pcSpeed*2;
}
break;
case 5:
sound.PlayFXSound("pickup");
Destroy(mesh);
break;
}
Destroy(this);
}
Sunday, 15 April 2012
Sound Management:
//****************************************************************************************************
//VARIABLE DECLARATION
//****************************************************************************************************
public var levelNo: int = 1;
public var firstPlay: boolean = true;
private var levelManager: GameObject;
private var pc: GameObject;
private var cam: GameObject;
var pcZ: double;
var camZ: double;
var sounds: GameObject[];
var clipNo: int;
var soundName: String;
//****************************************************************************************************
//FIND NECESSARY GAME OBJECTS
//****************************************************************************************************
function Start()
{
levelManager = GameObject.Find("Level Manager");
pc = GameObject.Find("PC Prefab(Clone)");
cam = GameObject.Find("PC Camera(Clone)");
}
//****************************************************************************************************
//AMBIENT MUSIC CODE FOR LEVELS 1, 2 AND 3
//****************************************************************************************************
function Update()
{
pcZ = pc.transform.position.z;
camZ = cam.transform.position.z;
if(pcZ > (camZ - 10) && firstPlay == true)
{
cleanUp();
clipNo = (levelNo*2) - 2;
firstPlay = false;
Instantiate(sounds[clipNo], cam.transform.position, transform.rotation);
}
else if(pcZ <= (camZ - 10) && firstPlay == false)
{
cleanUp();
firstPlay = true;
clipNo = (levelNo*2) - 1;
Instantiate(sounds[clipNo], cam.transform.position, transform.rotation);
}
}
//****************************************************************************************************
//EVENT ACTIVATED SOUND
//****************************************************************************************************
function PlayPCSound(soundName: String)
{
switch(soundName)
{
case "jump":
break;
default:
levelManager.DisplayMessage("Sound Manager: ERROR! invalid sound clip name.");
break;
}
}
//****************************************************************************************************
//DELETE ALL EXISTING AMBIENT SOUNDS
//****************************************************************************************************
function cleanUp()
{
var soundObj: GameObject;
soundObj = GameObject.Find("Sound0(Clone)");
Destroy(soundObj);
soundObj = GameObject.Find("Sound1(Clone)");
Destroy(soundObj);
soundObj = GameObject.Find("Sound2(Clone)");
Destroy(soundObj);
soundObj = GameObject.Find("Sound3(Clone)");
Destroy(soundObj);
soundObj = GameObject.Find("Sound4(Clone)");
Destroy(soundObj);
soundObj = GameObject.Find("Sound5(Clone)");
Destroy(soundObj);
}
Play Sound:
var clip: AudioClip;
var Cam: GameObject;
function Start()
{
AudioSource.PlayClipAtPoint(clip, Cam.transform.position, 0.5);
}
var clip: AudioClip;
var Cam: GameObject;
function Start()
{
AudioSource.PlayClipAtPoint(clip, Cam.transform.position, 0.3);
}
function End()
{
Destroy(this);
}
Saturday, 14 April 2012
Level Design: Level Prototypes.
After some basic play throughs of our digital level prototype, we quickly came to the conclusion that there were simply too many objects. Deleting quite a few of the objects has improved the experience while also maintaining a challenging game.
Not only has this been done, the level prototypes have also classified checkpoints and zombie locations, they also include separate textures for standard obstacles and zombies.
Testing for these will occur on Tuesday.