As a TOJam vet and past organizer (TOJam 1 & 2), I’d have to say each year has been a completely different experience: New location, new jammers, new games. Each year has progressively gotten better in terms of size, quality and overall experience.
This year, I actually enjoyed myself and at no point felt stressed or guilty that I wasn’t helping out with the organization of the event. In short, this was my favourite TOJam!
What went right:
I finished my game!
Finishing a game in three day is a big accomplishment if you’ve dared to try it. In last two jams I completed “rather half-assed so-called games” that I would probably not play ever again and I don’t recommend you do either. For one, the first jam game require DK Konga controllers and a GameCube USB adapters (good luck!) and the second require a microphone and the Microsoft Speech SDK installed OR Microsoft Office… that eliminated 50% of the world!
I pre-visualized how the music-to-waveform tech would work beforehand.
Cowgirl and Gospelboy relied on a weird piece of technology played a MP3 file and generated 2D collision geometry on the fly. If I had tried to implement this in 3 days I would have ran out of time. Instead I built a sample app a few weeks ago to test out whether FMOD could dynamically generate a 2D waveform that looked reasonable. I did not write any music to physics code until the start of the game as I felt like that was cheating.
I also had experience with Box2D, the physics engine used, so all technology was well understood (or so I thought).
I didn’t use a 3D engine to make a 2D game!
Last year, I used OGRE to build a 2D game and that was a mistake. OGRE is fine 3D graphics engine, but is too complicated for simple tasks like drawing sprites and rotating them! I choose IndieLib because it was the easiest/cleanest 2D game engine I’ve seen in a long time. My second choice would have been PlayFirst or PopCap, but those game engines are overloaded and rather complex.
The game is actually fun!
My first two games were about experimentation and toying with novel technology like Konga controllers and microphones. This year, I decided upfront that this jam had to have all technology developed and understood. I swore to myself that I’d spend all Sunday gameplay tuning - which I did.
I found as people played the game Sunday night (as part of the open house gaming session), I slowly refined it to a point where by 11:00pm it was becoming addictive. As I’ve mentioned in another post, C & G was exactly the game I wanted to make in the first game jam, but I did not have the physics background then.
What went wrong:
IndieLib was missing features (or had features I thought were supported)
I didn’t realize IndieLib did not support joysticks nor TrueType fonts until the second day of the jam - I scrambled to include OIS support and made due with TWO fonts (big and small).
I also did not spend enough time with IndieLib before the jam and had to learn how it’s co-ordinate system worked when zoomed out and other quirks like issuing BeginScene(), EndScene(), RenderEntities2d calls.
The code was a disaster by Saturday night.
I was forced to refactor the codebase (took 3 hours) and add a state machine and migrate everything into classes because adding menus would have been impossible otherwise. The code was a mess of global variables due to how I just dove into making the game.
High-speed 2D physics creates major problems
There are some annoying bugs in the game and most of them are related to the wave moving at 150 units a second to give the player a sense of speed, but also causes the infamous “tunneling” problem.
Early on, I decided to remove constraining the max and min height of the wave and let it grow as high as possible to give a sense of worldly height without resorting shifting the wave up/down (causes physics problems).
The camera tries to keep the surfer in view, by zooming in and out and other tricks, but due to the high speed of action the player can slide out of view for a short period a time.
Some chosen songs were just not fun to play
The best songs to play are the ones with plenty of variation. Many radio-friendly pop songs keep an even keel with minor variations here and there, but not enough to keep interest for 4 minutes. Jill Barber’s “When I’m making love to you” is a fantastic song to surf to. It ebbs and flows like a bittersweet love song.
I did not provide clear art direction to the graphics floaters (artist)
The main characters needed to be re-designed THREE times during the jam due to my poor art direction. I told the artists to make “Stickin’ around” like characters which they did, but I didn’t realize that meant the clean and straight lines. I was thinking more like “Stickfigure theatre” with more squiggly animated lines. Not the case.
GTA IV has been universally acclaimed so I’m not about to stroke it’s ego by mentioning all the good things in it. This review is about the all POORLY IMPLEMENTED ASPECTS of GTA IV - my complaint list.
For a $100 million dollar project, it should be held to the highest standards of commercial art. So compared to an award winning commercial film, GTA IV’s story is about as deep as water in my toilet. The game is full of stock characters, on the nose dialogue, etc. It’s okay, just like the film “Dungeons & Dragons” was okay.
For the record, I loved the first GTA III… it deserved all the accolades it won that year even with all its warts because it worked so well gameplay-wise.
Now for the GTA IV complaint list:
Camera system
Disorienting due to its “smart behaviors” during fast actions sequences.
Gets stuck in small areas and tends to zoom in and out unexpectedly.
Has automatic behaviors when driving that frustrate me so I try to keep it behind the vehicle at all times.
When driving is too low to the ground for me to see ahead (especially with the ambulence)
Generally bad, but you “learn” to make it behave.
Some videos on the camera problem:
http://www.youtube.com/watch?v=iRuaAlFN4y4
Walking
Press A to run? Analog stick please!
Constant glitches with automated actions like getting into a car and going to trigger point.
I’m always bumping/nicking into people on the street who just insult me. Walking is the least enjoyable part of GTA IV.
Combat/Shooting
Hand to hand is stupid. Why three buttons? I mash a single buttons anyways.
Gun targeting picks things behind a wall or dying or something I have no interest in.
Camera zooms in and out when targeting causing some disorientation.
Honestly, I hate FPSes and GTA IVs targeting system feels like a bad FPS. Most gun battles are set up that way (shooting gallery) and are not very free form.
Driving
Soft + squirrely (problem with controls and physics)
All cars drift WAY TOO MUCH causing the driving missions to be frustrating!!!
Have to drive slow to avoid the vehicles from drifting.
Player must always map read to navigate city.
Map zooms in and out causing “map-reading distance estimation” to be wrong
Cars feel too similar. Yeah the trucks are slower and less responsive than the SueprGT, but not
Cars are weightless paper maiche toys when hit.
Cars get stuck in the highway dividers (that just fit) too easily.
I don’t like be ejected from the window when I nick the smallest collision object.
Too many small (pointless) corners and interferring props (lamp posts, mailboxes, etc.)
The motorcycles are HORRIBLE. Instead of 600-1000cc bikes they feel like 125cc GP… For the record, I’ve ridden both kinds in real life.
If you hit “Y” while in the helicopter you will be “ejected”… this is stupid because you can unintentially hit the button looking for the shoot button (which probably should be LB and not X or was it A?).
Police
Too aggressive overall.
They arrive immediately with helicopters and guns which is a bit unfair/unrealistic.
There are half a dozen cops (in cars/helis) sometimes yet you can out run them ALL if you just leave the tiny police search radius. I’d have then arrive slower, but force you to out run them for longer and farther.
Too sensitive. Sometimes a gun shot will trigger cops. Sometimes it won’t. Sometimes hitting a cop car will trigger a wanted level. Sometimes it won’t.
Inconsistent is how best to describe the police in GTA IV.
The police are too good at shooting. I had full health and armour and still died (I was switching weapons while standing next to my car).
City
Full of people and buildings, but NOTHING to do.
Darts + bowling + pool are fun ONCE.
Drinking + driving is fun ONCE.
Comedy clubs are fun ONCE.
Sex with hookers is fun ONCE. In GTA III it was always fun… nobody spoke or had some stupid comment to make.
Visuals
It’s too dark! Hard to see in alleyways and at night.
For a next-gen game, it almost looks PS2/Xbox like. Lots of popping artifacts and shadow aliasing.
Shadow aliasing is awful.
Texture aliasing is awful.
Reflections on the building windows are PS2 awful.
Draw distance is tiny.
Mobile phone
I can never remember the cell phone trigger - up or down? (habit)
I always use the analog stick first before the d-pad when the phone appears (habit)
It took a while before triggering the phone was almost natural - which means it was never a good design in the first place
Missions
I spent more time map reading/following than actual work like shooting.
GTA IV is about 70% driving (which sucks) and 15% action and 10% cut-scenes.
Story
While Niko and Roman are great, over half the secondary characters are merely over-the-top stereotypes.
Over half the dialogue is too “on the nose” and too often they merely reveal information (no subtext).
When driving + map reading, it’s kinda heard also to listen to conversation. It’s a great idea to use conversations to reveal the story of the game, but it’s hard to process the information while playing the game.
Relationships
Dating Michelle is fun for the first 3-4 times (same with screwing her).
Hanging with Little Jacob + Roman is nice change and fun for the first bit
Strip club is funny/sexy for the first time. Cops arrived immediately after I unintentionally stepped onto the stage.
Roman died swimming for no particular reason or I accidently hit him as I tried climbing out of the water. Made ZERO sense.
Certain things aren’t explained too well or at all in the game when you begin:
i.e why going to the airport immediately gives you a 5-star rating
i.e why going to the closed bridge immediately gives you a 5-star rating
i.e why swimming out too far immediately gives you a 5-star rating
1) If you have a bad character at top of file.. i.e Usually due to a typo / random key press
f/*****************************************************************************************
/* My comment
/*****************************************************************************************/
You will get this error:
c:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C2144: syntax error : ‘__w64 unsigned int’ should be preceded by ‘;’
c:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
2) If you don’t include when using STL strings in STL data structures (usually I assume has been included somewhere in the libraries I use)… you get an assortment of errors:
error C2678: binary ‘!=’ : no operator found which takes a left-hand operand of type ’std::string’ (or there is no acceptable conversion) could be ‘built-in C++ operator!=(const char [1], const char [1])’ while trying to match the argument list ‘(std::string, const char [1])’
OR
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\functional(143) : error C2784: ‘bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)’ : could not deduce template argument for ‘const std::_Tree<_Traits> &’ from ‘const std::string’
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(1466) : see declaration of ’std::operator <'
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\functional(142) : while compiling class template member function ‘bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const’
1> with
1> [
1> _Ty=std::string
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\map(68) : see reference to class template instantiation ’std::less<_Ty>‘ being compiled
1> with
1> [
1> _Ty=std::string
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(22) : see reference to class template instantiation ’std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,_Mfl>‘ being compiled
1> with
1> [
1> _Kty=std::string,
1> _Ty=GameState *,
1> _Pr=std::less,
1> _Alloc=std::allocator>,
1> _Mfl=false
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(63) : see reference to class template instantiation ’std::_Tree_nod<_Traits>‘ being compiled
1> with
1> [
1> _Traits=std::_Tmap_traits,std::allocator>,false>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(89) : see reference to class template instantiation ’std::_Tree_ptr<_Traits>‘ being compiled
1> with
1> [
1> _Traits=std::_Tmap_traits,std::allocator>,false>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(107) : see reference to class template instantiation ’std::_Tree_val<_Traits>‘ being compiled
1> with
1> [
1> _Traits=std::_Tmap_traits,std::allocator>,false>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\map(78) : see reference to class template instantiation ’std::_Tree<_Traits>‘ being compiled
1> with
1> [
1> _Traits=std::_Tmap_traits,std::allocator>,false>
1> ]
1> c:\documents and settings\hp_administrator\desktop\indielib_sdk\StateManager.h(52) : see reference to class template instantiation ’std::map<_Kty,_Ty,_Pr>‘ being compiled
1> with
1> [
1> _Kty=std::string,
1> _Ty=GameState *,
1> _Pr=std::less
1> ]
Which are unhelpful in telling you about your mistake.