Sunday, April 14, 2013

Final Sprint

BIG THURSDAY CRUNCH TIME
Final day for crunching down all stuff to pass for Xbox live previews. You would not believe how many things can go wrong when testing the game with different monitors, resolutions or different Xbox machines in regards to its UI. Here is the small list of unpleasant issues that I encountered and that were after some thought fixed:

  • Text and images won't scale and position appropriately
    I think we were scaling all twice, there are two main screen variable _UI.SX resp _UI.SY and _UI.SXM resp _UI.SYM, former is the safe width resp height of the screen, the later is the coordinate of the center of the screen. There is also screenScale variable which is 1 when screen is 1080p and 1.5 when 480p. It is important not to use both SX resp SY and screenScale at the same time. 
  • Credits screen was scrolling with different speeds on different Xbox machines
    Okay, that was my fault :-). I created TimerByUpdate and ClockByUpdate objects and they were correctly to be running off the OnUpdate(frameTime) method but I put the page.move(speed) method inside the OnProcessInput(input) method which update rate seems to be dependent on Xbox hardware and consequently running with different speeds on different Xbox machines. Putting move method inside the OnUpdate method fixed the different scrolling speed issue.
We were using open source XUI system for Xbox 360 and windows from http://xui.codeplex.com/.

Here is the final screenshot of the credits screen page (Avatars were developed and put there by Blake, the actual text content was written by Ross), thumbstick up/down will stop auto-scroll and start flipping pages up/down, A will start auto-scroll again, B will exit the screen:


Tuesday, March 26, 2013

Game Splashscreens

I did some brainstorming on Game Screens... I used Photoshop paint oil filter and other effects to mesh up and alter some public domain photos (Free public domain photos http://www.turbophoto.com/, http://office.microsoft.com/en-us/images/, http://sxc.hu/, http://www.freedigitalphotos.net/ , Free public domain fonts http://www.urbanfonts.com/fontsearch.php?s=ninja) with our game-play  images...



Photos I used (the 2nd photo I took at Solitaire Utah, others are public domain photos):





Thursday, March 21, 2013

Gamification


REALITY IS BROKEN
I think I got my new religion after I started reading the McGonical's bestseller book. I was a big fan of gamification and serious gaming before, and I think I was implementing a lot of its ideas in small educational games I was creating in Adobe Flash at my current job as a  e-learnerning developer, but this book kind of made it all clear and easy to see.
This is a video with the script of McGonical's famous presentation of her book on TED talk
IT IS WORTH OF WATCHING!


She is a great presenter and I really feel sorry I missed her presentation at the UofU the other day.
We need to play more games the make the world better!

"One way or another, if human evolution is to go on, we shall have to learn to enjoy life more thoroughly."
- Mihaly Csikszentmihalyi




INCREASE YOUR LIFESPAN BY 7.5 MINUTES BY EXPERIENCING THIS PRESENTATION
This is cool! You got to watch it, it is also a great presentation.

Sunday, March 17, 2013

4th Sprint and Clock

CLOCK
I was to implement Clock object to measure time, since XBOX can't access current time I am incrementing my clock by frame time variable. I just created simple ClockByUpdate class with Update method which keeps track of  time in format HH:MM:SS. It worked awesome on my test XBOX project, the only problem was displaying it on the HUD of our Ninja game. We use XUI library extensively with its Widget objects and for some reason it won't show WidgetText objects on HUD, it works with WidgetGraphic objects great. To make it even more weird the WidgetText object works great  when it is instantiated inside the GameScreen constructor but will not work when calling from it OnInit method.
Update:
Fixed displaying a clock (timer), fixed credit screen auto scrolling
Here is the screenshot


GAME REVIEWS
I did a lot of game reviews on our Xbox LIVE Indie game account. I have to say I started enjoying those reviews, I was quite surprised how various and interesting those Indie games can be. People can be insanely creative :-). There were cool 2D retro games with pixelated graphics and nice MIDI loop music reminding me Doom game and with nice storytelling. The last one I reviewed today was basically story-driven mystery game. You were choosing between male and female characters that were running small PI business. The coolest thing in this game that it was all shot like a machinima and the scenes were seamlessly connected to one another, changing from 1st to 3rd person views depending on your choices.

Wednesday, February 20, 2013

3rd Sprint

AUDIO CONTROLER/LOADER/MANAGER
I am doing some research on controlling and managing audio in XNA game. XACT may be answer to this, looking into this tutorial.
More cool tutorials from RB Whitaker's Wiki.

SHADOWS
Our game doesn't have a shadow effect. The answer may be using High Level Shader Language (HLSL). I found this HLSL Riemer's XNA tutorial

ENTITY IN GAME DEVELOPMENT
I was trying to get a grasp of what entity framework is and I found this excellent tutorial What is an entity system framework for game development? from Richard Lord. It suddenly made it clear and I just remembered problems I had when using inheritance and trying to fit movable, collidable, but not drawable  object (as invisible trap or force field) into the game loop.

CREDITS SCREEN - POLISHED
I was working on credits screen again. This shows the idea of static background and flip-able pages for intro with the title and each team member with some image and about me info.


Saturday, February 9, 2013

2nd Sprint

CREDITS SCREEN
Working on the second sprint. I was given a task to create a credits screen. The credits should have both text and images and player should be able to scroll by using controller. I also think it is a good idea to start the scrolling down automatically or after certain time interval when idle. I am going through some text rendering tutorials. I am also hoping to build it as one of the game states and be one of the clickable options on the intro screen.

IMPLEMENTATION
I built Timer class that is driven by the Update method, every team member has his own page, this is taken care of by the Page class, all is tied up inside the CreditsScreen class. I was not able to reset XUI effects like  that I was planning for pages to have fade in/out transitions. I just declared another Timer object that scrolls page up/down for a half a second and then it flips up/down the page. There was a problem that if you hold thumb-stick it will just start flipping pages too fast. I timed flipping with another Timer object that even if you hold thumb-stick it will flip pages only like every half a second.

Here is the screen recording of the credits page. If you don't touch the thumbstick up/down it will scroll up automaticaly after 5 seconds. If you move thumbstick up or down it will start flipping pages with slide in/out effect. All images and texts are just place holders and need to be updated with the actual stuff.


Random thoughts about Unity and BPEUPhysics

UNITY
Unity is cool! I created some quick tests and put it online here:
I wonder if Unity can be used with lipsync avatars, this may require more testing. There are almost endless possibilities in use of Unity in serious gaming. It can be used to set up 3D scenes and take snapshots, this would be useful for creating static e-Learning scenarios. More use would be to use lip-synced avatars to replace live e-Learning presenters or to shoot educational machinima movies. No need for time consuming green-screen video recording with live people or going to and setting up shooting locations. Another ultimate use of Unity in e-Learning would be to build 3D or 2D teaching games, but this would probably require to change the corporate thinking about employees playing games at work.

Here is cool demo from Unity 4 DirectX11 contest.

BPEUPhysics
I tested this free open source physics library on both PC and Xbox and I was surprised with its ease of use. For our Ninja game I was asked to add some way to register when the collision ended. The idea is that when the player stays too long inside some room (or 3D object like building) some help message with instruction would pop up every minute or two. Once the player successfully leaves the area this popup messaging would stop. I came up with adding this CollisionEnded event

public void AddCollisionHandler(InitialCollisionDetectedEventHandler<EntityCollidable> h, CollisionEndedEventHandler<EntityCollidable> g = null )
{
            Body.CollisionInformation.Events.InitialCollisionDetected += h;
            // registering the collision end
            if (g != null)
                Body.CollisionInformation.Events.CollisionEnded += g;
}

This was not tested yet but it should fire up CollisionEndedEventHandler once the PhysicsBody entity would leave the EntityCollidable entity bounding box.



Thursday, January 31, 2013

Ideas about levels

PRISON LEVEL
I was thinking about prison walls and how prisoners do engravings either from boredom or from desperation. This may be cool to show like instructions in game or directions where to go. I found this cool 500 year old engraving  from Puerto Rico.

This was scrawled into prison cell wall in 1500's by pirate in Puerto Rico

CHARACTER ANIMATIONS
I was wondering how difficult would be to zoom camera on the character during its animated action (sitting down or being killed). This way it can show nice closeups of the model and make the game more immersive. During those short zooms player would lost control for a couple of seconds.

Monday, January 28, 2013

Thoughts about ninja AI

I was sifting through some online resources about combat AI and of course I found an interesting one from Wikipedia's at Video game combat AI. It looks like the very popular approach is called

HUNTING STATE

  • Giving AI character (enemy) eyes and ears - start fighting player when enemy sees or hears him/her approaching (or wait behind some cover object for a player and then jump him/her with surprise attack :-) ), another option would be implementing flash or smoke bombs when enemies eyesight or hearing is impaired
  • Enemy can pickup health, guns or other items to utilize
  • Enemy can check on its health or other status and behave accordingly (defense, offense, pickup health-pack or search for cover)
  •  "Monster infighting" - cool would be to allow enemies fight one another or can be even provoked by the smart player approach ("drag" enemies behind so they converge together)


Sunday, January 27, 2013

1st Sprint

QUEST MANAGER
My task was to create a quest manager, something that would manage chaining quests for the game level, popup messages for each new quest, populate the HUD minimap, and let player know that the quests are successfully finished. Blake and Ron were nice and helped me and gave some ideas how to do this.
 
IMPLEMENTATION
I am assuming this QuestManager object will be inside the Level.cs where all items to collect will be available and passed through the quest manager's constructor. I think I have a working skeleton I just need to pull some data from Ron's new Level object to populate collectibles (items to pickup)

PROBLEMS
I am having problem with figuring out what collectibles (items to pickup) are for which quest though. Also I am still trying to understand the code. I was updated on the new ways of doing things in game development. It looks like class inheritance may be replaced with components and factories. 

IDEAS
I am starting getting ideas how things with quests may be simpler but don't know yet how to implement it. For example popup messages and actions when picking up the quest may be automated inside the onCollide method of each collectible item. Then there may be some global listener listening for this collisions and firing (or incrementing some counter for) the next quest and also checking on if this is the last quest.

英語 (ninja)

BACK TO SCHOOL FOR THE SENIOR CAPSTONE PROJECT
So back to school and it is the Spring semester 2013 and the 2nd part of my Senior Capstone project! I just plunged in and was in-grafted to Ninja-Royale team as a programmer. The team is a bunch of EAE students full of great ideas and with a good sense of humor. I promised to do the least damage to their current development :-) and hopefully add some of my things there. This game has its potential it sounds to me like RPG in 3D environment and if there is some interesting storytelling this can be very playable.

I was always interested in old BW Japanese movies about samurais, about quiet men following their codes of honor and combat. Especially how they with a lighting speed, guttural shout, and swishing sound of their samurai sword detach the heads of their enemies :-). Here I found some interesting info about differences between ninja and samurai:

"A ninja (忍者) or shinobi (忍び) was a covert agent or mercenary in feudal Japan who specialized in unorthodox warfare. The functions of the ninja included espionage, sabotage, infiltration, and assassination, and open combat in certain situations.[1] Their covert methods of waging war contrasted the ninja with the samurai, who observed strict rules about honor and combat"
Wikipedia at http://en.wikipedia.org/wiki/Ninja






As of now I am trying to catch up with their project they already spent 5 months in.

IMPORTANT INFO
Class page: http://capstone.eae.utah.edu/
Student blogs: http://eae.utah.edu/current-students/undergraduate/
Google group: https://groups.google.com/forum/?fromgroups#!forum/ninjaroyale
Github versioning: https://github.com/
Gitextensions: http://code.google.com/p/gitextensions/
Project tracking: http://www.asana.com