Last Ray of Hope Home of Kaluriel Hargrove

28Apr/08Off

Guest Lecture: Paul Hollins from University of Bolton

The final guest lecture as part of the Business of Computer Games module, this time from a man named Paul Hollins who works at the University of Bolton, but had work experience with a company known as Midas Interactive back in the 1990s when he first joined them.

The Midas company was involved with the "grey market" - importing games into Europe and making a profit by reselling them. However Midas eventually became a development company after purchasing Interactive Entertainment. When this happened Paul was given the job of creating external licensing for their games with people such as Gianluca Vialli (Chelsea Football Manager), Andre Agassi (Tennis) and the Rugby Football League.

However the one that made the most money was a equestrian simulation game known as Mary Kings Riding Star which he aquired for next to nothing from an Australian Developer, which targetted young girls, a market which nobody really made games for.

Paul led on to tell us the good and bad parts of working in the games industry. First of all for him, no two days were ever the same and he was able to mix with celebrities whilst negociating licensing deals (this also mean't he could get free tickets to sporting events).

The bad part was the poor working conditions, as well as little job security since "you were only as good as your last game" (the company had lost alot of money on his last game when at the company). As well as being under constant pressure to meet hard milestones. Whether the industry is still like this today probably depends on what developer you are with.

He told us how if you are a developer, getting a publisher behind you can be hard and sometimes impossible if you haven't had any games published commercially before, and how publishers set high expectations that if you didn't reach you wouldn't get paid.

The talk came to an end with him telling us that if we want to get into the games industry, we better eat, drink, sleep and breathe games.

20Apr/08Off

Team Fortress 2

Team Fortress 2 Group PhotoRecently started getting into Team Fortress 2, all started one night when I was bored and wanted to play something shootery, unfortunately I had already completed Call of Duty 4, so since I got TF2 with the Orange Box, I thought I'd give it a go.

Now I can't stop playing, Soldier being my strongest class, and Spy being my weakest, with the occassional work on the QuickPic application, before my friends I've made on it invite me to play more.

Not as addictive or time consuming as World of Warcraft, where a guild will disown you if you don't turn up to a raid, my steam group don't mind if I don't play. Which gives me tons of time to do other things.

I might sell my WoW account when Wrath of the Lich King is released, there is no way I'm wasting my life on that forsaken game again.

Anyone who hasn't played it yet I recommend they do, it plays differently to most FPS multiplayers. Also get Ninja Reflex on Steam too, the Wii price is a ripoff and if you own a Wiimote, you can make it work as a mouse pointer anyways.

16Apr/08Off

Legend of Bob: Title Screen

Legend of Bob - Loading ScreenThe day of the hand was today, so myself and my housemates did an all nighter to add the finishing touches to our AGT projects, and despite not liking coffee, by the end of the night I was drinking it.

One of my housemates, Johnny, made me a great loading screen and title screen. The loading screen, would have been better if the candle flickered, but I didn't have time to multithread it.

More research is needed to know if Ogre3D can be multithreaded safely.

Legend of Bob - Title ScreenThe title screen is just as basic as the loading screen, after I created a Lua script to control it. It has only two options, "Start New Game" and "Exit".

I wish, as with the loading screen I had time to improve it, maybe some ambient music for the background, and the ability to save and load.

15Apr/08Off

Legend of Bob: Bloom and Cel Shading

agt_16I finally rewrote my Cel Shading shader from DirectX to Cg, giving a very nice effect compared with the old one. The one I was using previously was per vertex shading, which gave an ugly look, however the one I've converted over from DirectX I wrote a while ago uses per pixel shading.

However there is a downside, the black outline edge is current done by drawing backfaces in wireframe with line thickness, the lower the anti-aliasing, the worse it appears. I'm thinking that if I use the depth buffer I can generate my own outlines based on depth change per pixel.

agt_17

I have also modified the texture splat ARGB map to be smoother and use more toon like textures rather than realistic to go more with the overall theme of the game.

The contrast before was noticable, however the lack of shadows does give the impression now that the character is hovering above the ground, so I added basic shadows to solve this.

To finish off the post process effects, I added a Bloom shader.

14Apr/08Off

Guest Lecture: Anthony Hartley-Denton from AHD Imaging

A guest lecture at university today, this time from AHD Imaging.

Anthony Hartley-Denton is one of the founders of AHD Imaging, an animation and architectural design studio.</p>\r\n<p>When he started he was doing freelancing architect work using AutoCAD before setting up AHD. Most of the clients he got were at the beginning were through his wife, and his first big commission was because of his connections.

He told us about how when you work in a technology based company, it costs more to keep up to date, such as his rendering farms where it is better to buy a new computer than to upgrade the old ones. And the 80-20 rule, where 80% of your company's income is usually from 20% of your total client base.

Finally, Anthony gave us his top tips when starting up your own business as he did:

  • Keep positive about things.
  • Always aim high.
  • Prepare for the worst, and hope for the best.
  • Cash is KING.
  • Don't be apologetic about money owed.
  • Be upfront about the amount you are being paid.
  • Be prepared to fire your clients.
  • Keep in mind the Pareto Principle or 80/20 rule for business- where anything in a few is vital, anything in many is trivial i.e. 80% of your sales comes from 20% of your customers/clients or 80% of complaints are from 20% or your products.
  • Keep in mind that not all clients are equal.

One key factor he did mention throughout the talk was that image was everything, and you must be willing to spend money to impress clients, such as letterheads for your company, a good company website and if your showing your portfolio, a nice leather wallet rather than a ring binder or plastic wallet.

Unlike Richard Jones' guest lecture, I don't think I really learn't anything about starting up my own company that I didn't already know or couldn't have guessed on my own.

9Apr/08Off

Early Bird Gets the Worm, but Second Mouse Gets the Cheese

Lots more work done on Tales of Phantasia last night, animations, NPC interaction and a bit more framework optimization. Screenshots to be added soon.

Not only did I do that, but I finally got around to putting the finishing touches to my event system, now it now the type of variable that is being set, and I also finally found a use for template functions (thats right, functions, not classes, didn't know they existed til last month).

What use you say? Quick function overloading, not really much point, but it saves the hassle of type casts. I'm currently using a 32bit unsigned integer for storing the variable type, which gives me 32 potential arguments for my events, I only use 5 at the moment, and I think I can remove one of them.

template<typename T>
void SetArgumentAsNumber( const unsigned int inIndex, const T inValue )
{
	Arg[inIndex].d = (double)inValue;
	m_type &= ~( 1 << inIndex );
}
 
void SetArgumentAsString( const unsigned int inIndex, const char *string )
{
	Arg[inIndex].text = string;
	m_type |= ( 1 << inIndex );
}
 
bool IsArgumentAString( const unsigned int inIndex ) const
{
	return ( m_type & ( 1 << inIndex ) ) ? true : false;
}