People are still looking at this? Oh boy.
Er, I haven't just been replaced by Sam Beckett there, although that would have been a tremendous excuse. Seven PhDs, he claims to have, but I bet none of them involve ridiculously ambitious football games. Just physics and stuff. Anyone can do that.
Anyway, I got an email because someone posted a comment on the last post wondering what happened. It's been over four years since I posted anything here, which is frightening because it means I'm four years older than I was without having made any real progress. Oh well, I've got an excuse now. Even better, I've got a reason...
The reason is... I kinda gave up. More specifically, I lost confidence that I could actually pull it off, given what I knew at the time. I'd been battering up against a brick wall for ages and although the underlying competition stuff was working, I was no closer to having a decent game of football. I'd managed to get people half-heartedly running around a pitch, a spaghetti codebase littered with bugs, and sometimes you could kick the ball out of play and never see it again.
Which is quite realistic, if my regular Friday games are anything to go by.
So I shelved it, and decided that if I actually wanted to make any games, they had to be smaller, more sensible, and hopefully more doable. My well of infinite wisdom having not yet run dry, I decided to make a platform game. Because sure, that's not complicated.
The curious thing is, I finished it. And released it, as both an Xbox Live Indie title, and an even better PC version. It's called Rasternauts and it's got lots of running, jumping and shooting in it, with glowing vectors and the very best pixel art that I've ever been able to do. I set up a little website, also named Mostly Fictional, and from there you can head off to Desura and both try and (if I'm lucky) buy it. It's pretty good, but I'm biased as hell.
Since finishing that up, I've been preoccupied with studying and things like that, but I still like the idea of a football game, and it's one of the things I'm toying with at the minute while I decide what to do next. What I do know is that if I opt to return to that world, it'll be pared down from the behemoth it used to be, focusing on the core gameplay and forgetting everything about cramming in this amazingly expansive world around it.
For now at least. If the experience of making Rasternauts and a burgeoning addiction to clichés have taught me anything, there's not much point in trying to run before you can walk. Any game is worthless if it's not fun and it took a long time for Rasternauts to get anywhere near there. I do still believe it would be rather an amazing game, and I do still have an inordinate amount of love for the genre and its inner workings. The passion is still there, I've just got older and and wiser.
I'll be posting stuff every now and then to that new site, so it'll be the best place to find out if I do start to make real progress. For now though, I'm gonna just enjoy the World Cup, fiddle about with some AI, and try not to commit to anything too drastic.
Cheers for the interest, Anonymous Person, I hope your own projects bear fruit, and I hope one day I can deliver something you'll enjoy.
If you don't like Rasternauts, that is... :P
Friday, May 30, 2014
Friday, April 02, 2010
A Lack of Control
The past month has been spent building up the moveset of players, and then tearing the whole thing down again. That was intentional though, I swear.
Having earlier given players a physical presence, the next task was to get them to interact with the ball. I stuck with a sticky ball system, as it's easiest to get up and running in game-form, so when a player is in possession the ball is pretty much locked to his feet until he releases it, or he's tackled. Passes were added, with some nifty code that allowed a player to weight a pass just perfectly, and then I topped it off with shots capable of breaking the net.
Well, ignoring the net. One of the things I had yet to do with the collision detection system is deal with objects that move faster in one frame than their own size, allowing them to easily pass through thin objects like goal nets. Oh well, that was fairly easy to solve, simply splitting the motion in a single frame into several smaller chunks to ensure everything's caught.
That left first-touch football as the only thing that still needed doing, and thanks to the aforementioned tearing down, that's still largely the case.
The game deals with everything using an Action system. Everything a player can do is ultimately an action. Some are continuous, like running, where as along as the action is set the player will run in the given direction. Others are timed, and an example of that might be a volley - it takes time to swing your leg, with only the point where the swing connects with the ball being of any concern.
Naturally, because of this the game needs to work out exactly where and when you should start swinging, which depends on the ball's trajectory, your position, and so on. Unfortunately, what I've managed so far is first to have the player move to position then stand like a goober because he can't work out the timing, presumably because of the archaic intercept timing system I have which wasn't designed for this purpose. I've also managed to tweak a few values and have a player run to the ball and then encircle it forever, which I think might be a good model for some footballers, but doesn't exactly lead to a fun game.
Looks to me like I'll have to tackle the interception system. Which sounds obvious, and that's probably because it is and I didn't think of it until now.
I tell you, this blog's like a Mac. Pays for itself.
Having earlier given players a physical presence, the next task was to get them to interact with the ball. I stuck with a sticky ball system, as it's easiest to get up and running in game-form, so when a player is in possession the ball is pretty much locked to his feet until he releases it, or he's tackled. Passes were added, with some nifty code that allowed a player to weight a pass just perfectly, and then I topped it off with shots capable of breaking the net.
Well, ignoring the net. One of the things I had yet to do with the collision detection system is deal with objects that move faster in one frame than their own size, allowing them to easily pass through thin objects like goal nets. Oh well, that was fairly easy to solve, simply splitting the motion in a single frame into several smaller chunks to ensure everything's caught.
That left first-touch football as the only thing that still needed doing, and thanks to the aforementioned tearing down, that's still largely the case.
The game deals with everything using an Action system. Everything a player can do is ultimately an action. Some are continuous, like running, where as along as the action is set the player will run in the given direction. Others are timed, and an example of that might be a volley - it takes time to swing your leg, with only the point where the swing connects with the ball being of any concern.
Naturally, because of this the game needs to work out exactly where and when you should start swinging, which depends on the ball's trajectory, your position, and so on. Unfortunately, what I've managed so far is first to have the player move to position then stand like a goober because he can't work out the timing, presumably because of the archaic intercept timing system I have which wasn't designed for this purpose. I've also managed to tweak a few values and have a player run to the ball and then encircle it forever, which I think might be a good model for some footballers, but doesn't exactly lead to a fun game.
Looks to me like I'll have to tackle the interception system. Which sounds obvious, and that's probably because it is and I didn't think of it until now.
I tell you, this blog's like a Mac. Pays for itself.
Thursday, February 25, 2010
Year 2010 of development
Oh, how I do love my big long gaps between posts.
Picking up where I left off, I expanded the match engine to include some rudimentary set pieces, then trotted off to work on FryGUI2 for some time, even though I said I wouldn't. Eventually though I was lured back to the match engine.
My next task was to inject a bit of physical presence. Players were ghosts at this point, freely floating through one another in their pursuit of the ball. Of course, some existing games work like that, even the mighty Sensi, but there's a lack of satisfaction when you can't use your ample frame to block an opponent's attempts to dispossess you, and the likes of NSS3 show it can even be done in the classic top-down viewpoint.
Added to that, I wanted some momentum. I had players reaching top speed instantly, and equally quickly they'd grind to a halt when the stick was released - good enough to get things moving, but again it just wasn't satisfying. Players need to feel weighty.
After some experimentation, I quickly decided in that familar way of mine to start writing another engine, this time featuring the basic physics and collision detection along with the graphics display. Using the old graphics engine as a base, I added some bounding volumes for collision detection, got immensely frustrated a number of times that possibly entered three figures, got drunk a lot, and eventually landed with a working system. Again, it was one of those things that was quite pleasing to finally have working, and again it was one of those things that didn't really bring me any closer to having an actual game.
No matter! Back to the match engine, rebuilt now using the newly named FryWorld, back to largely working order but with the added bonus of collision detection. It only took about six months. I'm so proud.
In the coming weeks I'll be building up the move set and expanding on the basic AI, hopefully getting myself a playable match for the first time ever.
Then, I think, I might just get drunk.
Picking up where I left off, I expanded the match engine to include some rudimentary set pieces, then trotted off to work on FryGUI2 for some time, even though I said I wouldn't. Eventually though I was lured back to the match engine.
My next task was to inject a bit of physical presence. Players were ghosts at this point, freely floating through one another in their pursuit of the ball. Of course, some existing games work like that, even the mighty Sensi, but there's a lack of satisfaction when you can't use your ample frame to block an opponent's attempts to dispossess you, and the likes of NSS3 show it can even be done in the classic top-down viewpoint.
Added to that, I wanted some momentum. I had players reaching top speed instantly, and equally quickly they'd grind to a halt when the stick was released - good enough to get things moving, but again it just wasn't satisfying. Players need to feel weighty.
After some experimentation, I quickly decided in that familar way of mine to start writing another engine, this time featuring the basic physics and collision detection along with the graphics display. Using the old graphics engine as a base, I added some bounding volumes for collision detection, got immensely frustrated a number of times that possibly entered three figures, got drunk a lot, and eventually landed with a working system. Again, it was one of those things that was quite pleasing to finally have working, and again it was one of those things that didn't really bring me any closer to having an actual game.
No matter! Back to the match engine, rebuilt now using the newly named FryWorld, back to largely working order but with the added bonus of collision detection. It only took about six months. I'm so proud.
In the coming weeks I'll be building up the move set and expanding on the basic AI, hopefully getting myself a playable match for the first time ever.
Then, I think, I might just get drunk.
Sunday, August 02, 2009
Playing in a box
Well, two weeks later and that's what I've got. 22 poorly drawn and animated men running around playing something approaching football in a big enclosed space. There are no set pieces (not even kick off), the defenders don't do anything and every player is exceedingly single minded when he finally gets on the ball, but at least it's all a start.
There's no kick off - the ball just floats in from the sideline and all 22 men start right on the centre spot, inhabiting each others bodies in ways that I didn't intend. There are no goals to be scored, not just because there are no goalposts but because there's an invisible forcefield surrounding the entire pitch that's deflecting the ball should it dare venture in that direction. Even if there were goals, there's no ref to allow them.
So there's still a lot to be done on this basic version before I can start building upon things. I'd have liked at this point to say "well, I've got a start, let's go tackle the GUI" but that's the sort of lazy thinking that got me here in the first place - several years on without a football match.
There's no kick off - the ball just floats in from the sideline and all 22 men start right on the centre spot, inhabiting each others bodies in ways that I didn't intend. There are no goals to be scored, not just because there are no goalposts but because there's an invisible forcefield surrounding the entire pitch that's deflecting the ball should it dare venture in that direction. Even if there were goals, there's no ref to allow them.
So there's still a lot to be done on this basic version before I can start building upon things. I'd have liked at this point to say "well, I've got a start, let's go tackle the GUI" but that's the sort of lazy thinking that got me here in the first place - several years on without a football match.
Saturday, July 18, 2009
Football, football, football.
About two years ago I posted about my frustrations with creating a good match engine. I got severely pissed off about it all and went off to do other parts of the game. Those done, I recently went back to the match and am feeling no different, unfortunately.
I spent a short while mucking about with 3D engines and in the end decided that it would probably be too much effort right now fretting about that. I created a 2D engine based on the same principles as Blitz3D's system (a world full of entities, basically) as a kind of stepping stone, and also so it's easy enough to update and draw each frame. That's working brilliantly, so as you can guess, it isn't the problem.
Getting the perspective right is the issue. I'm wondering if it's worth pushing on until I've got it sorted. Now, the right attitude should be to press on - I'm using placeholder art anyway - and then correct things when the basic game is up and running and tweaks can be made. The match engine's inner workings are separate from the graphics, so it should be pretty simple to do so. I'll just have to ignore some graphical quirks - currently the actual pitch is being viewed from directly overhead, whilst the players are from an angle, lending the whole thing a rather odd feel.
Still, pushing ahead I did manage to create a control abstraction system. This lets me poll what I call a virtual joypad for input. The actual input could come from key, joypad or even the mouse, but as far as the game's concerned it all comes from this one joypad. It works quite well, though it still needs a few things tidied up.
I'm going to make a big push over the next few weeks to get somewhere with the match engine and see if I can have it play an utterly terrible, but thankfully complete game of football. From there, I can start tweaking the perspective, improving the AI and expanding the controls and options.
I spent a short while mucking about with 3D engines and in the end decided that it would probably be too much effort right now fretting about that. I created a 2D engine based on the same principles as Blitz3D's system (a world full of entities, basically) as a kind of stepping stone, and also so it's easy enough to update and draw each frame. That's working brilliantly, so as you can guess, it isn't the problem.
Getting the perspective right is the issue. I'm wondering if it's worth pushing on until I've got it sorted. Now, the right attitude should be to press on - I'm using placeholder art anyway - and then correct things when the basic game is up and running and tweaks can be made. The match engine's inner workings are separate from the graphics, so it should be pretty simple to do so. I'll just have to ignore some graphical quirks - currently the actual pitch is being viewed from directly overhead, whilst the players are from an angle, lending the whole thing a rather odd feel.
Still, pushing ahead I did manage to create a control abstraction system. This lets me poll what I call a virtual joypad for input. The actual input could come from key, joypad or even the mouse, but as far as the game's concerned it all comes from this one joypad. It works quite well, though it still needs a few things tidied up.
I'm going to make a big push over the next few weeks to get somewhere with the match engine and see if I can have it play an utterly terrible, but thankfully complete game of football. From there, I can start tweaking the perspective, improving the AI and expanding the controls and options.
Saturday, March 07, 2009
Platini said my game rocks. Allegedly.
Today, I started work on a new GUI system. As much as I like the original FryGUI, there are a few features that I'd like to support that, whilst possible to implement in the existing code, would require enough rewrites and redesigns that I'd be as well starting afresh.
I'm sticking with the Screens and Panels system which works well, and adding support for things that I think really ought to be there. Chief among these is multiple resolution support. Instead of sticking rigidly to an intial res, the interface will scale appropriately when altered by resizing the panels and gadgets appropriately. Fonts might get bigger, tables might get more info visible on-screen at once, and so forth.
The other major inclusion is joypad control. I'm making a football game, the joypad will be the primary method of control during a match, so it's pretty important that I can navigate screens using it rather than have to reach for the mouse every time I fancy making a substitution. Navigation using Tab or the cursor keys will also be supported.
Other additions include allowing individual screens to reposition panels, more flexibility regarding skins (previously, skin border details etc. were hard coded, I never did get around to making them editable), positioning gadgets using reference points rather than hard coordinates (e.g. BOTTOM_RIGHT for the bottom right of a panel, regardless of size), animated gadgets, improved tables and better text input (with clipboard support, or at least that's the plan).
Meanwhile, Michel Platini was in the stands as Newry City (my home town team) lost to Portadown last weekend. The footballing world is certainly a strange place.
I'm sticking with the Screens and Panels system which works well, and adding support for things that I think really ought to be there. Chief among these is multiple resolution support. Instead of sticking rigidly to an intial res, the interface will scale appropriately when altered by resizing the panels and gadgets appropriately. Fonts might get bigger, tables might get more info visible on-screen at once, and so forth.
The other major inclusion is joypad control. I'm making a football game, the joypad will be the primary method of control during a match, so it's pretty important that I can navigate screens using it rather than have to reach for the mouse every time I fancy making a substitution. Navigation using Tab or the cursor keys will also be supported.
Other additions include allowing individual screens to reposition panels, more flexibility regarding skins (previously, skin border details etc. were hard coded, I never did get around to making them editable), positioning gadgets using reference points rather than hard coordinates (e.g. BOTTOM_RIGHT for the bottom right of a panel, regardless of size), animated gadgets, improved tables and better text input (with clipboard support, or at least that's the plan).
Meanwhile, Michel Platini was in the stands as Newry City (my home town team) lost to Portadown last weekend. The footballing world is certainly a strange place.
Sunday, February 22, 2009
Leagues forever
Leagues have taken up a fair bit of my time recently. More specifically, promotions and relegations.
I didn't want to have a simple system where teams go up and down willy nilly, I wanted to match some of the complexity of the various leagues from around the world. There should be restrictions on teams climbing the leagues, ground requirements to be met and limits on the progress of B teams, blocking promotions or even forcibly relegating them to accomodate relegated first squads. It was tough, but I've a working system.
I've had one of my frequent worries recently about whether or not things would hold together. Individual competitions and leagues are working, as are the connections between them, but I've never been able to test it properly over a long period of time, to see how the game copes with the data being thrown around, to make sure little oversights here or there don't conspire to bring things crumbling down ten or twenty seasons later.
That's what I've just been doing today. There's only a small selection of competitions forming a league system and a cup, but it's a good test for now.
Happily, 32 seasons later the game's still blasting away. That's about half of what I really need, as careers can start with the player as young as 14, so we really need to keep him going until he's about 70. 55 seasons at the very least. Looking at the test competitions I've been using, they've been working every season, no crashes, and the league is still structured as expected.
And happily, something that's difficult to fully test for but brilliantly came out anyhow - a team won the second division of the league in 2036, and their B team won the same division in 2037, showing that B teams will still be promoted if their A team is promoted ahead of them. Sweet!
I didn't want to have a simple system where teams go up and down willy nilly, I wanted to match some of the complexity of the various leagues from around the world. There should be restrictions on teams climbing the leagues, ground requirements to be met and limits on the progress of B teams, blocking promotions or even forcibly relegating them to accomodate relegated first squads. It was tough, but I've a working system.
I've had one of my frequent worries recently about whether or not things would hold together. Individual competitions and leagues are working, as are the connections between them, but I've never been able to test it properly over a long period of time, to see how the game copes with the data being thrown around, to make sure little oversights here or there don't conspire to bring things crumbling down ten or twenty seasons later.
That's what I've just been doing today. There's only a small selection of competitions forming a league system and a cup, but it's a good test for now.
Happily, 32 seasons later the game's still blasting away. That's about half of what I really need, as careers can start with the player as young as 14, so we really need to keep him going until he's about 70. 55 seasons at the very least. Looking at the test competitions I've been using, they've been working every season, no crashes, and the league is still structured as expected.
And happily, something that's difficult to fully test for but brilliantly came out anyhow - a team won the second division of the league in 2036, and their B team won the same division in 2037, showing that B teams will still be promoted if their A team is promoted ahead of them. Sweet!
Wednesday, January 28, 2009
Round and Round
Knockout competitions are fun things, aren't they? Full of excitement and drama, and because they're so simple, you'd think they'd be easier than a league to put into a game. And in thinking that, you'd be wrong - at least as far as this game goes.
The biggest concern is in coping whenever you've got fewer entrants than you expected. A league can simply adjust the number of fixtures everyone plays in order to compensate but in a knockout, playing fewer games in one round will affect those that come later. This is worth considering, because with so many competitions and possibilities, it's next to impossible to guarantee that something won't go wrong somewhere and render a knockout short on teams. It won't necessarily be a bug or an oversight either - the Europa League has differing numbers of entrants depending on whether or not the holders are participating in this season's Champions League, whilst in the English League Cup, teams playing in Europe get byes to later in the competition.
The game needs to be able to react to this. One possible solution would be to cater for every possibility by creating several formats and choosing the one that works, but that's awfully wasteful. Instead, I decided that knockout stages should be able to take control of their own destiny.
By telling the game how many teams are supposed to reach the final, the rounds that some teams get seeded into automatically, and how many teams are expected to join midway (think the CL failures dropping into the Europa League), any knockout competition can adjust its format. All I need to do is tell the game what rounds might possibly be played - the League Cup actually has a preliminary round that has only been played once, but if nine English sides are in Europe in a given season, it'll turn up.
Seeing this work has been hugely satisfying because it was a major cause of headaches over the last while. Knowing that a competition will be react to changes takes a lot of pressure off, as the whole thing is less likely to break down because things didn't work out entirely as expected, and in football, you just can't expect anything.
The biggest concern is in coping whenever you've got fewer entrants than you expected. A league can simply adjust the number of fixtures everyone plays in order to compensate but in a knockout, playing fewer games in one round will affect those that come later. This is worth considering, because with so many competitions and possibilities, it's next to impossible to guarantee that something won't go wrong somewhere and render a knockout short on teams. It won't necessarily be a bug or an oversight either - the Europa League has differing numbers of entrants depending on whether or not the holders are participating in this season's Champions League, whilst in the English League Cup, teams playing in Europe get byes to later in the competition.
The game needs to be able to react to this. One possible solution would be to cater for every possibility by creating several formats and choosing the one that works, but that's awfully wasteful. Instead, I decided that knockout stages should be able to take control of their own destiny.
By telling the game how many teams are supposed to reach the final, the rounds that some teams get seeded into automatically, and how many teams are expected to join midway (think the CL failures dropping into the Europa League), any knockout competition can adjust its format. All I need to do is tell the game what rounds might possibly be played - the League Cup actually has a preliminary round that has only been played once, but if nine English sides are in Europe in a given season, it'll turn up.
Seeing this work has been hugely satisfying because it was a major cause of headaches over the last while. Knowing that a competition will be react to changes takes a lot of pressure off, as the whole thing is less likely to break down because things didn't work out entirely as expected, and in football, you just can't expect anything.
Monday, December 22, 2008
And some other stuff
I didn't really want to put this in the other post, because it's not related to my game. Much.
Since the last post, I've played some new football games, and I figure I ought to give some impressions. So, let's get down to it.
Euro 2008 and FIFA 09
EA really pulled something out of the bag with these ones. I've actually enjoyed the FIFA series since 2005, but it wasn't until 08 that I saw it get better than Konami's efforts. The game now is an excellent tactical football game, tremendous multiplayer fodder, and with a solid single player experience to help it along.
Euro 2008's major draw was the international minnows, so it's a huge shame to yet again see EA ditch the work that's already been done and go back to having about 40 national sides from around the world. Every year I cry for more to be done with the FIFA license, especially following games that back up major tournaments, and every year they fail to deliver.
Still, Euro 2008 had another trick up its sleeve with the Captain Your Country mode. A fleshed out version of 08's Be A Pro, it gave you a new way to play the game and a 20-odd match campaign in which to do it. It had its problems and oddities - player stats decreasing over the two year period like they've just been shot in the legs, and the bizarre need to select three other players whether you've got that many friends or not, but it took over my football gaming time. Sod the team game, I wanted to be me.
FIFA 09 topped it. A better game all round, but the Be A Pro Seasons mode is terrific. It's an arcadey bent in terms of presentation, and as such suffers from some of the same flaws that beset the Career mode in the game, but has a tremendous sense of playing through four years of a player's on-pitch life. Scoring a goal in FIFA has been satisfying for some time. Scoring it thanks to your off the ball movements and link up play is even better.
However, FIFA fell by the wayside when something else arrived...
New Star Soccer 4
Hooray, it arrived!
Now, I'm not suggesting NSS4 is better than FIFA. It's an unfair comparison for a start, like comparing Mario Kart to Gran Turismo, as both have different takes on how football should be played. FIFA is a pure simulation, whilst NSS4 harks back to the arcadey football games of old, where your skill as a player is all that really matters.
No, what made me drop FIFA for NSS4 (in addition to not having to wait for the telly to be free) was the prospect of playing an entire career, across a host of real life leagues. The game lets you start as a 15 year old in any position on the pitch, and play out over 20 or more years as you try to take the world by storm, which provides an interesting comparison - FIFA's the football simulation that takes an arcade approach to playing a career, and NSS4 is almost a polar opposite. It does have arcade-like systems for relationship management and skill improvement through mini-game training sessions, but basing it in a world of real competitions gives it a strong appeal.
I loved NSS3, so was always looking forward to this. Then one day it was revealed that NSS4 would be in 3D, and I think I probably bit my tongue hard. The previous game's 2D mode had only just been introduced and made for an excellent game, and I was skeptical that the same gameplay could be carried over to an extra dimension.
It managed it. In fact, it more than managed it, as I rate the new game even higher than its predecessor. The fully analogue controls certainly help matters, and everything here feels right. Players have a very satisfying weight, which is very evident in-game with stronger players pushing others off the ball and using their bodies to hold possession. After sufficient training, I was able to dribble between gaps in the defence and rely on my player being able to hold off the jostles.
Graphically, it's an interesting one. Up close, the angular players look robotic and blank, and you pine for the pixel art of NSS3. Yet at a playable distance, the bold colours and minimal textures give the game an almost stylised look.
It's not without its faults. Although you can play as a goalkeeper, it's a virtual afterthought with the CPU taking control of everything bar your own positioning, and no training challenges are available. Thankfully, this is already being looked at for a future update. If the controls are as simple and effective as the outfield play, this could be a tremendous feature.
Regardless, it has me hooked, with the same addictive feel that saw me pump so many hours into the last game. And, I guess, it's nice to see FryGUI holding up well in an actual release!
Since the last post, I've played some new football games, and I figure I ought to give some impressions. So, let's get down to it.
Euro 2008 and FIFA 09
EA really pulled something out of the bag with these ones. I've actually enjoyed the FIFA series since 2005, but it wasn't until 08 that I saw it get better than Konami's efforts. The game now is an excellent tactical football game, tremendous multiplayer fodder, and with a solid single player experience to help it along.
Euro 2008's major draw was the international minnows, so it's a huge shame to yet again see EA ditch the work that's already been done and go back to having about 40 national sides from around the world. Every year I cry for more to be done with the FIFA license, especially following games that back up major tournaments, and every year they fail to deliver.
Still, Euro 2008 had another trick up its sleeve with the Captain Your Country mode. A fleshed out version of 08's Be A Pro, it gave you a new way to play the game and a 20-odd match campaign in which to do it. It had its problems and oddities - player stats decreasing over the two year period like they've just been shot in the legs, and the bizarre need to select three other players whether you've got that many friends or not, but it took over my football gaming time. Sod the team game, I wanted to be me.
FIFA 09 topped it. A better game all round, but the Be A Pro Seasons mode is terrific. It's an arcadey bent in terms of presentation, and as such suffers from some of the same flaws that beset the Career mode in the game, but has a tremendous sense of playing through four years of a player's on-pitch life. Scoring a goal in FIFA has been satisfying for some time. Scoring it thanks to your off the ball movements and link up play is even better.
However, FIFA fell by the wayside when something else arrived...
New Star Soccer 4
Hooray, it arrived!
Now, I'm not suggesting NSS4 is better than FIFA. It's an unfair comparison for a start, like comparing Mario Kart to Gran Turismo, as both have different takes on how football should be played. FIFA is a pure simulation, whilst NSS4 harks back to the arcadey football games of old, where your skill as a player is all that really matters.
No, what made me drop FIFA for NSS4 (in addition to not having to wait for the telly to be free) was the prospect of playing an entire career, across a host of real life leagues. The game lets you start as a 15 year old in any position on the pitch, and play out over 20 or more years as you try to take the world by storm, which provides an interesting comparison - FIFA's the football simulation that takes an arcade approach to playing a career, and NSS4 is almost a polar opposite. It does have arcade-like systems for relationship management and skill improvement through mini-game training sessions, but basing it in a world of real competitions gives it a strong appeal.
I loved NSS3, so was always looking forward to this. Then one day it was revealed that NSS4 would be in 3D, and I think I probably bit my tongue hard. The previous game's 2D mode had only just been introduced and made for an excellent game, and I was skeptical that the same gameplay could be carried over to an extra dimension.
It managed it. In fact, it more than managed it, as I rate the new game even higher than its predecessor. The fully analogue controls certainly help matters, and everything here feels right. Players have a very satisfying weight, which is very evident in-game with stronger players pushing others off the ball and using their bodies to hold possession. After sufficient training, I was able to dribble between gaps in the defence and rely on my player being able to hold off the jostles.
Graphically, it's an interesting one. Up close, the angular players look robotic and blank, and you pine for the pixel art of NSS3. Yet at a playable distance, the bold colours and minimal textures give the game an almost stylised look.
It's not without its faults. Although you can play as a goalkeeper, it's a virtual afterthought with the CPU taking control of everything bar your own positioning, and no training challenges are available. Thankfully, this is already being looked at for a future update. If the controls are as simple and effective as the outfield play, this could be a tremendous feature.
Regardless, it has me hooked, with the same addictive feel that saw me pump so many hours into the last game. And, I guess, it's nice to see FryGUI holding up well in an actual release!
Yes, I'm still alive.
And so is the game.
The refactoring kept on going through that delicious blogging hiatus. As I had said before, everything is so much smoother with the competitions and although there are still things to go, I'm pretty confident that it was worth all the effort. I was setting myself up for major headaches further down the line with the old system, so the streamlined one is a great improvement.
I've been thinking recently about what the game consists of, and I think I've got it broken down into five key areas.
Competition Engine
If football games were a car (and oh, how people seem to love treating them as as metaphorical automobiles), the competition engine would actually be the network of roads on which they drive. Except, er, inside the car. So a satnav perhaps. Oh, I dunno.
Anyway, the competition engine's job is naturally to manage the competitions in the game. It has the structures, generates the fixtures, deals with the results, and so on. This is the area of the game that's most complete at the moment, with only a little bit more tidying really required. It could have been so much easier, but I wanted competitions to be accurate, so the complexity ramped up.
Navigation
The steering wheel, I guess. And maybe your pedals, handbrake and gear knob. Heh, knob.
Off the pitch, this is your interface with the game. You need to be able to view competitions, clubs, players, and a host of other information in a clean and accessible way. It's underdeveloped at the moment, as it's just a testing area for the competitions. Thus, it's pig ugly, has a host of bugs, and doesn't actually allow for anything other than viewing competitions one stage at a time. Luckily, FryGUI's decent enough in my view to allow all this to be fixed.
Game Engine
This is your engine. Your car engine, that is. It drives the game forward, progressing through time. Actually, this is more like an entire car - electricals and all - than just the engine, because the game engine is split into myriad different parts that all do something important. It controls the game clock, generates news events, deals with off-pitch AI concerns, picks teams, selects squads, and anything else. If you click on a button that does more than just move you to another screen, the game engine is beavering away and carrying that out.
Like the navigation, this is basic right now and serves only to test the competitions. The clock advances properly (hooray), daily fixtures are passed to the fledgling match engine, results are returned, and not much else. The core is there, but it needs a lot more to it - they will come as the features require them.
Match Engine
Every football game needs one. I dunno what part of a car it is though, so we'll just pretend it's the wipers. If you don't know what it does, you probably don't care much for the sport.
This is virtually non-existant at the moment. I've got an old formation editor, a 2D graphics engine that works but might get chucked, and a bunch of notes on how I plan to approach the AI. It's simultaneously depressing and exciting - the most important part of the game hasn't even been worked on properly, but on the other hand, I get to make a football game and experiment with a host of control options and things that might work and might not.
At the minute, fixtures are passed to this and random results are returned. It's all the competition testing needs.
Data
Without data, you've got nothing. A football match cannot be played without players, is disorganised without teams, and has no meaning without competitions in which to play them.
What's actually great about data entry though is that it's so passive. You research, you fill in spreadsheets or data editor forms, and it requires next to no thought. As such, on one of the many days when I've sat around bored, this is what I do.
Right now, around half of the FIFA affiliated nations in the game have clubs, essential for any league to be created. Europe and South America have been created in their entirety, whilst Africa, North America, Asia and Oceania have work remaining - and this is before I get into creating the competitions and getting to work on players.
Reading that all back, it does seem like so little has been done and to a certain extent that is true, but as ever a lot is in the planning. The database structure is complete. The competition structure is complete. The game engine's core is complete. What's left is to bolt on the little segments here and there that make the game come alive, the internal details that turn a sterile world into something almost real.
And also, I guess, to get some men playing football.
And so is the game.
The refactoring kept on going through that delicious blogging hiatus. As I had said before, everything is so much smoother with the competitions and although there are still things to go, I'm pretty confident that it was worth all the effort. I was setting myself up for major headaches further down the line with the old system, so the streamlined one is a great improvement.
I've been thinking recently about what the game consists of, and I think I've got it broken down into five key areas.
Competition Engine
If football games were a car (and oh, how people seem to love treating them as as metaphorical automobiles), the competition engine would actually be the network of roads on which they drive. Except, er, inside the car. So a satnav perhaps. Oh, I dunno.
Anyway, the competition engine's job is naturally to manage the competitions in the game. It has the structures, generates the fixtures, deals with the results, and so on. This is the area of the game that's most complete at the moment, with only a little bit more tidying really required. It could have been so much easier, but I wanted competitions to be accurate, so the complexity ramped up.
Navigation
The steering wheel, I guess. And maybe your pedals, handbrake and gear knob. Heh, knob.
Off the pitch, this is your interface with the game. You need to be able to view competitions, clubs, players, and a host of other information in a clean and accessible way. It's underdeveloped at the moment, as it's just a testing area for the competitions. Thus, it's pig ugly, has a host of bugs, and doesn't actually allow for anything other than viewing competitions one stage at a time. Luckily, FryGUI's decent enough in my view to allow all this to be fixed.
Game Engine
This is your engine. Your car engine, that is. It drives the game forward, progressing through time. Actually, this is more like an entire car - electricals and all - than just the engine, because the game engine is split into myriad different parts that all do something important. It controls the game clock, generates news events, deals with off-pitch AI concerns, picks teams, selects squads, and anything else. If you click on a button that does more than just move you to another screen, the game engine is beavering away and carrying that out.
Like the navigation, this is basic right now and serves only to test the competitions. The clock advances properly (hooray), daily fixtures are passed to the fledgling match engine, results are returned, and not much else. The core is there, but it needs a lot more to it - they will come as the features require them.
Match Engine
Every football game needs one. I dunno what part of a car it is though, so we'll just pretend it's the wipers. If you don't know what it does, you probably don't care much for the sport.
This is virtually non-existant at the moment. I've got an old formation editor, a 2D graphics engine that works but might get chucked, and a bunch of notes on how I plan to approach the AI. It's simultaneously depressing and exciting - the most important part of the game hasn't even been worked on properly, but on the other hand, I get to make a football game and experiment with a host of control options and things that might work and might not.
At the minute, fixtures are passed to this and random results are returned. It's all the competition testing needs.
Data
Without data, you've got nothing. A football match cannot be played without players, is disorganised without teams, and has no meaning without competitions in which to play them.
What's actually great about data entry though is that it's so passive. You research, you fill in spreadsheets or data editor forms, and it requires next to no thought. As such, on one of the many days when I've sat around bored, this is what I do.
Right now, around half of the FIFA affiliated nations in the game have clubs, essential for any league to be created. Europe and South America have been created in their entirety, whilst Africa, North America, Asia and Oceania have work remaining - and this is before I get into creating the competitions and getting to work on players.
Reading that all back, it does seem like so little has been done and to a certain extent that is true, but as ever a lot is in the planning. The database structure is complete. The competition structure is complete. The game engine's core is complete. What's left is to bolt on the little segments here and there that make the game come alive, the internal details that turn a sterile world into something almost real.
And also, I guess, to get some men playing football.
Saturday, April 26, 2008
Warum hast Du nichts getan?
Well I wouldn't say that! I've done something, it just hasn't been that major in the grand scheme of things.
Ok, first up. The big three and a half month gap, what's with that? Well, various things happened in my actual life which slowed down development somewhat. I guess shit like that happens, but everyone's all the better for it. In a topsy-turvy period of potential house moves (I didn't in the end) and television purchasing (I did), it was pretty hard to find the time to sit down and really get stuck into the meat of the game. My mind, sadly, was elsewhere.
As seems to be the case, when I finally got back into the swing of things I've been refactoring. This game's been in development for longer than some national football teams have existed (I'm looking at you, Saarland) and so some parts are much older than others, coded using methods that have long since been bettered, and there comes a time when trying to extend the old code to provide new functionality becomes so tiresome that it would be more beneficial to rewrite it. I've said this before. Maybe this is why the game hasn't been finished...
So where once I had working competitions and league systems, now I have nothing but shells. Thankfully, pace has picked up a fair bit over the last few weeks and things are really thundering on, so I've made plenty more progress and I'm far happier working with the new code. Improvements have been made to a few areas and everything's so much cleaner.
I've got some targets now, targets I'd like to hit. However, I know for a fact that if I mention them here I'll never hit them, so I'll just keep them to myself. Needless to say the next one needs to be hit by Monday night or GTA is going to delay everything.
At least I still have Simon Read to keep me working on my GUI system, FryGUI. He has taken that module and done some great things with it in the latest in the New Star Soccer series, and he's been ever vigilant in finding bugs and recommending new features. NSS3 is certainly one of my favourite football games, NSS4 is coming along as a leap forward that's every bit as large as the leap from the second game, so get over there and take a look.
Ok, first up. The big three and a half month gap, what's with that? Well, various things happened in my actual life which slowed down development somewhat. I guess shit like that happens, but everyone's all the better for it. In a topsy-turvy period of potential house moves (I didn't in the end) and television purchasing (I did), it was pretty hard to find the time to sit down and really get stuck into the meat of the game. My mind, sadly, was elsewhere.
As seems to be the case, when I finally got back into the swing of things I've been refactoring. This game's been in development for longer than some national football teams have existed (I'm looking at you, Saarland) and so some parts are much older than others, coded using methods that have long since been bettered, and there comes a time when trying to extend the old code to provide new functionality becomes so tiresome that it would be more beneficial to rewrite it. I've said this before. Maybe this is why the game hasn't been finished...
So where once I had working competitions and league systems, now I have nothing but shells. Thankfully, pace has picked up a fair bit over the last few weeks and things are really thundering on, so I've made plenty more progress and I'm far happier working with the new code. Improvements have been made to a few areas and everything's so much cleaner.
I've got some targets now, targets I'd like to hit. However, I know for a fact that if I mention them here I'll never hit them, so I'll just keep them to myself. Needless to say the next one needs to be hit by Monday night or GTA is going to delay everything.
At least I still have Simon Read to keep me working on my GUI system, FryGUI. He has taken that module and done some great things with it in the latest in the New Star Soccer series, and he's been ever vigilant in finding bugs and recommending new features. NSS3 is certainly one of my favourite football games, NSS4 is coming along as a leap forward that's every bit as large as the leap from the second game, so get over there and take a look.
Monday, January 07, 2008
City 17
I've just been playing a lot of Half-Life 2 recently.
Cities, though. They're fiddly things. Ask a guy in Manchester where Arsenal are from, and he'll tell you "London". Ask a guy in London, and he'll probably tell you North London. Or, if he's really specific, Holloway.
Arsenal are a big club, known the world over, so it's fair to say they're from London, just as Everton are known to be from Liverpool, Rosenborg from Trondheim, and so on. They're big clubs in their areas, it's also fair to say that they can take their fans from across the entire city, although of course that's not always true (try finding a Cliftonville fan in Sandy Row in Belfast).
Anyhow, as you go lower in these major cities, especially in countries where the game has many levels, you can often end up with many teams in one league professing to be from one city. This came up yesterday when I was researching the Victorian Premier League in Australia - every team bar the Australian Institute of Sport come from Melbourne.
Melbourne has many parts, and each of the teams represents a particular part. Preston Lions, Oakleigh Cannons, Heidelberg United and so on all represent the areas they're named after. I could split Melbourne up into these constituent parts, but then if I searched for teams from Melbourne, I'd get Victory and Knights, and no-one else. So I figured they'd all be from Melbourne.
That's fairly good, although it does mean that the game would need extra code to stop treating every game as a derby, when they really aren't. It's also at odds with the situation in London.
The English leagues in the game are modelled down to the tenth level. As you drop down as low as level seven in the pyramid, teams from London tend to play in different regional leagues to each other, and the lower you get the more this can be apparent. Obviously, stating that they're all from London means that the clubs would be placed in the wrong divisions, not to mention creating several thousand London derbies each season.
So London is effectively split up in to its constituent areas and everyone's happy until you try to search for London clubs and none show up. Bah. I could try adding the major city to each place name, such as "Fulham, London" but it's not the cleanest of solutions.
I don't know why it took me this long, but I figured if I just add another field to each location in the game that allows me to say it's part of a larger city, it'd solve all problems. Search for teams from London, you get them all. Search for those from Holloway, and you get Arsenal, and if Arsenal turn to poo after Wenger leaves and drop down six divisions, they'll still be in the right place.
This doesn't make you as happy as it makes me, but I don't care.
Cities, though. They're fiddly things. Ask a guy in Manchester where Arsenal are from, and he'll tell you "London". Ask a guy in London, and he'll probably tell you North London. Or, if he's really specific, Holloway.
Arsenal are a big club, known the world over, so it's fair to say they're from London, just as Everton are known to be from Liverpool, Rosenborg from Trondheim, and so on. They're big clubs in their areas, it's also fair to say that they can take their fans from across the entire city, although of course that's not always true (try finding a Cliftonville fan in Sandy Row in Belfast).
Anyhow, as you go lower in these major cities, especially in countries where the game has many levels, you can often end up with many teams in one league professing to be from one city. This came up yesterday when I was researching the Victorian Premier League in Australia - every team bar the Australian Institute of Sport come from Melbourne.
Melbourne has many parts, and each of the teams represents a particular part. Preston Lions, Oakleigh Cannons, Heidelberg United and so on all represent the areas they're named after. I could split Melbourne up into these constituent parts, but then if I searched for teams from Melbourne, I'd get Victory and Knights, and no-one else. So I figured they'd all be from Melbourne.
That's fairly good, although it does mean that the game would need extra code to stop treating every game as a derby, when they really aren't. It's also at odds with the situation in London.
The English leagues in the game are modelled down to the tenth level. As you drop down as low as level seven in the pyramid, teams from London tend to play in different regional leagues to each other, and the lower you get the more this can be apparent. Obviously, stating that they're all from London means that the clubs would be placed in the wrong divisions, not to mention creating several thousand London derbies each season.
So London is effectively split up in to its constituent areas and everyone's happy until you try to search for London clubs and none show up. Bah. I could try adding the major city to each place name, such as "Fulham, London" but it's not the cleanest of solutions.
I don't know why it took me this long, but I figured if I just add another field to each location in the game that allows me to say it's part of a larger city, it'd solve all problems. Search for teams from London, you get them all. Search for those from Holloway, and you get Arsenal, and if Arsenal turn to poo after Wenger leaves and drop down six divisions, they'll still be in the right place.
This doesn't make you as happy as it makes me, but I don't care.
Sunday, December 30, 2007
I'm still here
Three and a half months, eh? Blimey.
The reason for that unsightly delay is pretty much that I managed to land myself a job, and as such haven't quite had so much time to work on the game in recent times. Most of the work I have been doing is data entry, which isn't really that exciting.
I'm currently in the process of getting a match engine up and working, which is coming along reasonably well but without players it's all a bit pointless. I keep hitting a hump when I approach it and end up running off to fill in Korean football teams, but unfortunately no amount of teams are going to make an adequate substitute for the actual football so I've got to push through that.
When I get a match engine in, however basic, I can then get a working alpha ready. Pick a team, play games, have fun, and little else but it's a good platform to build upon.
Next update: March 2013. Well, hopefully not.
The reason for that unsightly delay is pretty much that I managed to land myself a job, and as such haven't quite had so much time to work on the game in recent times. Most of the work I have been doing is data entry, which isn't really that exciting.
I'm currently in the process of getting a match engine up and working, which is coming along reasonably well but without players it's all a bit pointless. I keep hitting a hump when I approach it and end up running off to fill in Korean football teams, but unfortunately no amount of teams are going to make an adequate substitute for the actual football so I've got to push through that.
When I get a match engine in, however basic, I can then get a working alpha ready. Pick a team, play games, have fun, and little else but it's a good platform to build upon.
Next update: March 2013. Well, hopefully not.
Thursday, September 13, 2007
Content!
Over the last few weeks I've started putting some real content into the game. With lots of the competition engine in place and working, the game can now support the leagues and cups that form the backbone of the entire football world, and it's actually quite exciting to see this take shape.
Thus far, as I've decided to now indicate on the right hand side of the blog, the game contains the team data for three countries. Only England has competitions as yet, as the more I add at this point the slower the game gets to set up, but adding new ones can be done nice and quick these days. For England, I've got all the leagues down to Step 6 of the National League System, which is level 10 overall. 47 divisions in total, which took me bloody ages so people had better be grateful and start playing as Sport London e Benfica or something instead of Manchester United all the time.
Cup wise, it currently has the FA Cup, League Cup, League Trophy, FA Trophy, Conference Shield and FA Vase. The League Cup hasn't been fully modelled as the game still doesn't have the ability to reseed teams to keep everything neat, so the differing numbers of sides in European competition can't be done until then. In Scotland, I've got the teams for all senior and junior sides, so that's quite a few teams to choose from and was done purely to placate any Bankies fans. Wales is proving more difficult as club information is scarce. The Welsh Football League, which covers the south of the country below the Welsh Premiership, is pretty good on this front as their website gives me all the information I require, but the three leagues feeding the Cymru Alliance have only scattered information. I'm endeavouring to include them though, because last season Barry Town got relegated from the WFL Division One, and the ability to return them to their former glory would be nice.
For each league, I have a spreadsheet - we all love speadsheets. As well as the club name and some abbreviations, I have the year they were formed (adds a nice enyclopaedic feel, I think), their rough ability, their home kit, home town and stadium. When deciding whether or not a level will be included in the game, and assuming the level is strong enough to be worth while, I have a look to see what data I can collect. The absolute required info for every club is their name, strength and home town, and these are all fairly easy to come by. The strength is added so that when I generate fake players for the majority of clubs, the game will ensure that things feel right - no superstars plying their trade with Cefn United. The larger sides also get strengths but these will be altered later when more accurate player details are entered.
The real difficulty comes with finding kit details. When creating clubs, I'm only concerned with the home kits, and generally a great majority of accurate kits is required for any given level. Away kits are ignored mainly because they slow me down for detail that changes far too often anyway. Like players, I can go add accurate away kit data for the bigger clubs, and have the game generate suitable away colours for the other sides. It's really just a time issue.
So far there's over 1,250 teams in the game. Now if I can get them to play football, that would indeed be brilliant.
Thus far, as I've decided to now indicate on the right hand side of the blog, the game contains the team data for three countries. Only England has competitions as yet, as the more I add at this point the slower the game gets to set up, but adding new ones can be done nice and quick these days. For England, I've got all the leagues down to Step 6 of the National League System, which is level 10 overall. 47 divisions in total, which took me bloody ages so people had better be grateful and start playing as Sport London e Benfica or something instead of Manchester United all the time.
Cup wise, it currently has the FA Cup, League Cup, League Trophy, FA Trophy, Conference Shield and FA Vase. The League Cup hasn't been fully modelled as the game still doesn't have the ability to reseed teams to keep everything neat, so the differing numbers of sides in European competition can't be done until then. In Scotland, I've got the teams for all senior and junior sides, so that's quite a few teams to choose from and was done purely to placate any Bankies fans. Wales is proving more difficult as club information is scarce. The Welsh Football League, which covers the south of the country below the Welsh Premiership, is pretty good on this front as their website gives me all the information I require, but the three leagues feeding the Cymru Alliance have only scattered information. I'm endeavouring to include them though, because last season Barry Town got relegated from the WFL Division One, and the ability to return them to their former glory would be nice.
For each league, I have a spreadsheet - we all love speadsheets. As well as the club name and some abbreviations, I have the year they were formed (adds a nice enyclopaedic feel, I think), their rough ability, their home kit, home town and stadium. When deciding whether or not a level will be included in the game, and assuming the level is strong enough to be worth while, I have a look to see what data I can collect. The absolute required info for every club is their name, strength and home town, and these are all fairly easy to come by. The strength is added so that when I generate fake players for the majority of clubs, the game will ensure that things feel right - no superstars plying their trade with Cefn United. The larger sides also get strengths but these will be altered later when more accurate player details are entered.
The real difficulty comes with finding kit details. When creating clubs, I'm only concerned with the home kits, and generally a great majority of accurate kits is required for any given level. Away kits are ignored mainly because they slow me down for detail that changes far too often anyway. Like players, I can go add accurate away kit data for the bigger clubs, and have the game generate suitable away colours for the other sides. It's really just a time issue.
So far there's over 1,250 teams in the game. Now if I can get them to play football, that would indeed be brilliant.
Thursday, August 16, 2007
Tiny little bug
It's always the little ones.
Today I was developing the league ranking system, essentially a way for the game to record the finishing positions of all the teams in a league, and also for the teams to be ordered correctly. This can then be used by competitions to determine seedings, or collecting only the top 8 teams to play.
While testing this out I was frustrated for several hours by a bizarre error. At the end of the season, all the teams' rank information are updated accordingly. This is then followed by promotions and relegations, which involves updating the current level each team are playing at. Irritatingly, doing so tended to set the "rank level" - the level the team were playing at last season - to 0, the highest level available. As far as the game was then concerned, if Cardiff City won the Championship, they're ranked as high as Manchester United.
After a while I had traced it down to the exact function that sets the current level. A function that simply should not fail. I feared the worst - if a part of my database storage and retrieval code was broken, the entire database could be compromised. Sure, I have backups but I'd still need to find out the error, and if it's damaging I'd need to code an entire routine to reorganise the data and ensure it's fine.
Eventually, and naturally, I traced it to simply using the wrong variable at a crucial moment. My database works by only using the required storage for any given maximum data value in a field - if the field holds the numbers 0 to 15, it will use four bits. The next four bits in the byte will be used by something else. This enables me to store a great deal of data in a much smaller space. In order to store two values in a single byte, I need to be able to "mask out" the irrelevant data at any given point. This was the broken bit, with the code therefore ignoring the masking and wiping the entire bite before storing my data.
I think, but currently have no proof, that this error was the cause of a few other issues dotted here and there with some competitions "forgetting" what league they were part of if I edited them after setting the league up. All it would take is one editing of a preceding value and that data goes out the window.
Today I was developing the league ranking system, essentially a way for the game to record the finishing positions of all the teams in a league, and also for the teams to be ordered correctly. This can then be used by competitions to determine seedings, or collecting only the top 8 teams to play.
While testing this out I was frustrated for several hours by a bizarre error. At the end of the season, all the teams' rank information are updated accordingly. This is then followed by promotions and relegations, which involves updating the current level each team are playing at. Irritatingly, doing so tended to set the "rank level" - the level the team were playing at last season - to 0, the highest level available. As far as the game was then concerned, if Cardiff City won the Championship, they're ranked as high as Manchester United.
After a while I had traced it down to the exact function that sets the current level. A function that simply should not fail. I feared the worst - if a part of my database storage and retrieval code was broken, the entire database could be compromised. Sure, I have backups but I'd still need to find out the error, and if it's damaging I'd need to code an entire routine to reorganise the data and ensure it's fine.
Eventually, and naturally, I traced it to simply using the wrong variable at a crucial moment. My database works by only using the required storage for any given maximum data value in a field - if the field holds the numbers 0 to 15, it will use four bits. The next four bits in the byte will be used by something else. This enables me to store a great deal of data in a much smaller space. In order to store two values in a single byte, I need to be able to "mask out" the irrelevant data at any given point. This was the broken bit, with the code therefore ignoring the masking and wiping the entire bite before storing my data.
I think, but currently have no proof, that this error was the cause of a few other issues dotted here and there with some competitions "forgetting" what league they were part of if I edited them after setting the league up. All it would take is one editing of a preceding value and that data goes out the window.
Sunday, August 12, 2007
Ups and Downs
Individual competitions are almost complete. The engine is fully capable of coping with differing numbers of entrants, so there are only a few things left. Chief among these is the existence of what I've been terming the "half group" structures. The most prominent of these is the MLS - two groups, but with matches not restricted to those in your own group. Yesterday I discovered that it's not just the Americans using this system, and that any Englishmen still bitter at those "damn Yanks" for calling the sport soccer need to have a few words with some of the powers in their own garden. At the non-league level, at least
The Northern Premier League's first division was restructured this season in accordance with the FA's plans on sorting out a clear league pyramid. Unlike the other leagues at this level, the two created leagues (North and South) only have 18 teams, instead of 22. This caused a bit of a fuss among the clubs because 34 game seasons aren't really helpful, and the NPL duly responded not by increasing the league size or another cup competition to make up the deficit, but by splitting each league in two - sort of.
Each league is split into two groups of nine, on a regional basis. Each team will play those sides in their own group three times, and those in the other group once, thus giving an extra eight games each. Unlike the MLS, performance relative to the other teams in your group counts for nothing - it's the overall league table that matters. Whilst to the casual observer they don't seem to share structural DNA, the generation of fixtures and general workings are practically the same from my point of view.
The English league itself has been created in the game now, down to Step Four of the National League System, or the eighth level overall if you prefer. Whilst doing this, I helped myself out by introducing a few handy functions and changing the way clubs get added to the database. I can now duplicate an entire competition, which is handy given that most share similar characteristics with few changes. The club spreadsheets I'm using, one per division, contain club info as well as their city and stadium. I've ditched seating information, largely because the information simply isn't conveniently available and to use it would slow the input process down. I reckon now I can add an entire division in about a half hour, including creating the structure in the game and adding it to the league structure.
I make that about... oooh... 390 hours of work to get the world in there.
The regionalisation of lower levels is working brilliantly, although a few hiccups earlier did give me a bit of concern. The first was the bizarre omission of Newcastle Blue Star from the NPL First Division North in the second season. As the northenmost club at that level (by some distance), they definitely should have been there. They weren't in the First Division South either. Well, not the right one, they were in the Isthmian League First Division South. It turns out that I'd added the team with the city "Newcastle-upon-Tyne", and omitted the coordinates because I knew the city to be in the database. It was, sans hyphens, and the game thought that Newcastle Blue Star play in the heart of the world, in the Atlantic Ocean off the coast of Africa. I can't be arsed coding in severely flooded pitches, so I just set them to the right place.
I later got concerned that the game wasn't properly dividing teams up into Isthmian and Southern leagues, but I quickly discovered that I'd placed Bury St Edmunds in the West, not the East. Oh well. Everything else was positioned rather lovely, so I did a little dance.
Promotion and relegation isn't yet done. I've worked out the process and in theory it's fine. Promotion is dealt with first, with teams promoted provided they meet the criteria, and provision is there for other teams to take their place if necessary. Relegation is then dealt with, and repreives are available if the number of teams coming up isn't enough.
I then read about the Italian Coppa Dilettanti, a competition played in Italy between sides in the Eccellenza and Promozione, the sixth and seventh levels of the Italian league system. The quirk of this competition is that the winners are promoted to Serie D. I like quirks, so I instantly wanted to make the Eccellenza available, and thus this cup competition playable.
Unfortunately, my league system doesn't cope with teams potentially being promoted more than one level. In fact, it freaks out completely and doesn't know what's going on, leading usually to the level in between the two having far too many teams. I could spend time devising a new system, but I've decided that for now it just isn't worth devoting time to a non-essential. Not when there's so much else to do.
At the moment I'm looking at ways to make inputting the promotion data as stress free as possible. Currently I have to set up the data in the competition itself, and then let the league know where to expect the promotions/relegations to come from and what priorities to assign to them. I should be able to get some of that done quicker. Once that's done, I'll get the English system finished up and tested, and use that as a basis for working on the focus system and other details.
The Northern Premier League's first division was restructured this season in accordance with the FA's plans on sorting out a clear league pyramid. Unlike the other leagues at this level, the two created leagues (North and South) only have 18 teams, instead of 22. This caused a bit of a fuss among the clubs because 34 game seasons aren't really helpful, and the NPL duly responded not by increasing the league size or another cup competition to make up the deficit, but by splitting each league in two - sort of.
Each league is split into two groups of nine, on a regional basis. Each team will play those sides in their own group three times, and those in the other group once, thus giving an extra eight games each. Unlike the MLS, performance relative to the other teams in your group counts for nothing - it's the overall league table that matters. Whilst to the casual observer they don't seem to share structural DNA, the generation of fixtures and general workings are practically the same from my point of view.
The English league itself has been created in the game now, down to Step Four of the National League System, or the eighth level overall if you prefer. Whilst doing this, I helped myself out by introducing a few handy functions and changing the way clubs get added to the database. I can now duplicate an entire competition, which is handy given that most share similar characteristics with few changes. The club spreadsheets I'm using, one per division, contain club info as well as their city and stadium. I've ditched seating information, largely because the information simply isn't conveniently available and to use it would slow the input process down. I reckon now I can add an entire division in about a half hour, including creating the structure in the game and adding it to the league structure.
I make that about... oooh... 390 hours of work to get the world in there.
The regionalisation of lower levels is working brilliantly, although a few hiccups earlier did give me a bit of concern. The first was the bizarre omission of Newcastle Blue Star from the NPL First Division North in the second season. As the northenmost club at that level (by some distance), they definitely should have been there. They weren't in the First Division South either. Well, not the right one, they were in the Isthmian League First Division South. It turns out that I'd added the team with the city "Newcastle-upon-Tyne", and omitted the coordinates because I knew the city to be in the database. It was, sans hyphens, and the game thought that Newcastle Blue Star play in the heart of the world, in the Atlantic Ocean off the coast of Africa. I can't be arsed coding in severely flooded pitches, so I just set them to the right place.
I later got concerned that the game wasn't properly dividing teams up into Isthmian and Southern leagues, but I quickly discovered that I'd placed Bury St Edmunds in the West, not the East. Oh well. Everything else was positioned rather lovely, so I did a little dance.
Promotion and relegation isn't yet done. I've worked out the process and in theory it's fine. Promotion is dealt with first, with teams promoted provided they meet the criteria, and provision is there for other teams to take their place if necessary. Relegation is then dealt with, and repreives are available if the number of teams coming up isn't enough.
I then read about the Italian Coppa Dilettanti, a competition played in Italy between sides in the Eccellenza and Promozione, the sixth and seventh levels of the Italian league system. The quirk of this competition is that the winners are promoted to Serie D. I like quirks, so I instantly wanted to make the Eccellenza available, and thus this cup competition playable.
Unfortunately, my league system doesn't cope with teams potentially being promoted more than one level. In fact, it freaks out completely and doesn't know what's going on, leading usually to the level in between the two having far too many teams. I could spend time devising a new system, but I've decided that for now it just isn't worth devoting time to a non-essential. Not when there's so much else to do.
At the moment I'm looking at ways to make inputting the promotion data as stress free as possible. Currently I have to set up the data in the competition itself, and then let the league know where to expect the promotions/relegations to come from and what priorities to assign to them. I should be able to get some of that done quicker. Once that's done, I'll get the English system finished up and tested, and use that as a basis for working on the focus system and other details.
Wednesday, June 20, 2007
The circus that is the development of a unified competition system for the game continues unabated. The latest problem to rear its ugly head yet again is the concept of qualification.
Currently, competitions in the game are static structures - a set number of teams from each rigid stage progress to the next stage, and the parade continues until the competition ends. Such stoic behaviour won't work for qualification, unfortunately. The problem arises when a team achieves a qualification place that it is incapable of accepting because it does not meet the criteria (for example, a B team winning a place in a cup competition).
The qualification system in the game goes into specific detail about which positions qualify teams for other contests - instead of simply saying "the winners of the FA Cup will play in the Community Shield", it's "The team who win the final of the FA Cup". It's a subtle difference, the accuracy allowing for any position at any stage of the competition to have an associated qualification, one that can't be done by simply taking the "top six" teams.
If a B team, or another undesirable side finish in one of these positions, the system also can specify a number of backup positions to consider. For the most part, this should cover the loss.
However, I can't possibly guarantee that enough teams will qualify. It is possible that the backup list will be exhausted (perhaps they're all B teams?) before the places are filled. Rather than grudgingly accept the teams into the competition, the alternative solution is to allow the competition to continue with a dearth of teams.
So, the formerly rigid competitions need new functions and rules to ensure that they work adequately in any scenario. Knockouts are easiest, as the system reduces the number of teams in the early rounds and creates more byes in order to ensure the final rounds are fully populated. Leagues are fairly simple, requiring the game to work out how many rounds need to be played given the new number of teams. Group stages may prove more complex in the face of the varying ways of distributing the teams but I'm sure an adequate solution will be found.
All of which has been rather annoying for me, as I was hoping to start creating European leagues and cups starting tomorrow. That will have to wait until I'm happy the system can cope adequately with the changing data. It'll be worth it in the end.
Currently, competitions in the game are static structures - a set number of teams from each rigid stage progress to the next stage, and the parade continues until the competition ends. Such stoic behaviour won't work for qualification, unfortunately. The problem arises when a team achieves a qualification place that it is incapable of accepting because it does not meet the criteria (for example, a B team winning a place in a cup competition).
The qualification system in the game goes into specific detail about which positions qualify teams for other contests - instead of simply saying "the winners of the FA Cup will play in the Community Shield", it's "The team who win the final of the FA Cup". It's a subtle difference, the accuracy allowing for any position at any stage of the competition to have an associated qualification, one that can't be done by simply taking the "top six" teams.
If a B team, or another undesirable side finish in one of these positions, the system also can specify a number of backup positions to consider. For the most part, this should cover the loss.
However, I can't possibly guarantee that enough teams will qualify. It is possible that the backup list will be exhausted (perhaps they're all B teams?) before the places are filled. Rather than grudgingly accept the teams into the competition, the alternative solution is to allow the competition to continue with a dearth of teams.
So, the formerly rigid competitions need new functions and rules to ensure that they work adequately in any scenario. Knockouts are easiest, as the system reduces the number of teams in the early rounds and creates more byes in order to ensure the final rounds are fully populated. Leagues are fairly simple, requiring the game to work out how many rounds need to be played given the new number of teams. Group stages may prove more complex in the face of the varying ways of distributing the teams but I'm sure an adequate solution will be found.
All of which has been rather annoying for me, as I was hoping to start creating European leagues and cups starting tomorrow. That will have to wait until I'm happy the system can cope adequately with the changing data. It'll be worth it in the end.
Sunday, June 03, 2007
The hassle of Extra Tables
Some competitions, in the far flung corners of the world, aren't as straightforward as they bloody well ought to be.
In Belgian's Second Division, for example, the eighteen sides play each other twice in a regular round-robin format. The top team at the end of the season will get promoted, and there's a playoff to determine which team will follow them. All very good so far, it's something that anyone in the UK can instantly recognise.
Unfortunately for me, the Belgians didn't quite run with the same system that I'm used to. Instead of taking the teams who finish second through fourth and sending them into the playoff that also features a side from the top flight, they use a system of "periods". The 34 games are split into three periods of ten, twelve and twelve matches respectively, and the teams who "win" each of these periods will enter the playoffs. Only in the event of extra places needing to be filled, such as whenever a team wins more than one period, will the full league table be used.
Ok, I can do that. I have the fixtures, so surely I can just tell the game to create a table that consists only of fixtures played in rounds 1-10, then 11-22, then finally 23-34. Three additional tables that I can use to determine winners. Easy!
Belgium aren't alone. In the USA's Major League Soccer, the teams are split into two conferences and the top two sides in each conference advance to the playoffs, together with the next four teams with the best record. Again, this requires the creation of a table which effectively merges the two conferences together, producing a 13-team table from which the required sides can be plucked. I can do that too, right? Just collect all the fixtures and create a single table out of them.
It's all quite easy to create new tables whenever you're using all the teams and all the fixtures. Sadly, there are times when that won't be possible. UEFA's World Cup qualifiers involve a playoff featuring whichever sides finished second in their group, and to complicate matters, certain results against the lowest sides are discarded when creating the table.
Let me get this straight then. I need a system that will take a set of fixtures and create a new league table, discriminating against teams and results based on their position within a group, which round the match is a part of and who the opposition are? Bugger.
I didn't really want to do that. Damn you, UEFA! It caused me no end of headaches trying to come up with a system which I considered fast enough to be worthwhile, but in the end I think I got there and I now have a working Extra Table system that can conjure up a single league table of no more than 30 sides, based on whatever criteria I specify. It works perfectly well so far - the only remaining test is to see if it successfully merges data from matches played across multiple stages - rather than listing Germany twice in the table, all results should collected together. I'd have tested that by now but I'm far too lazy to create a new competition to do it. Something for later.
The next task is to create a working draw system for competitions, based on seedings, geography or downright prejudice. Well, maybe not that.
In Belgian's Second Division, for example, the eighteen sides play each other twice in a regular round-robin format. The top team at the end of the season will get promoted, and there's a playoff to determine which team will follow them. All very good so far, it's something that anyone in the UK can instantly recognise.
Unfortunately for me, the Belgians didn't quite run with the same system that I'm used to. Instead of taking the teams who finish second through fourth and sending them into the playoff that also features a side from the top flight, they use a system of "periods". The 34 games are split into three periods of ten, twelve and twelve matches respectively, and the teams who "win" each of these periods will enter the playoffs. Only in the event of extra places needing to be filled, such as whenever a team wins more than one period, will the full league table be used.
Ok, I can do that. I have the fixtures, so surely I can just tell the game to create a table that consists only of fixtures played in rounds 1-10, then 11-22, then finally 23-34. Three additional tables that I can use to determine winners. Easy!
Belgium aren't alone. In the USA's Major League Soccer, the teams are split into two conferences and the top two sides in each conference advance to the playoffs, together with the next four teams with the best record. Again, this requires the creation of a table which effectively merges the two conferences together, producing a 13-team table from which the required sides can be plucked. I can do that too, right? Just collect all the fixtures and create a single table out of them.
It's all quite easy to create new tables whenever you're using all the teams and all the fixtures. Sadly, there are times when that won't be possible. UEFA's World Cup qualifiers involve a playoff featuring whichever sides finished second in their group, and to complicate matters, certain results against the lowest sides are discarded when creating the table.
Let me get this straight then. I need a system that will take a set of fixtures and create a new league table, discriminating against teams and results based on their position within a group, which round the match is a part of and who the opposition are? Bugger.
I didn't really want to do that. Damn you, UEFA! It caused me no end of headaches trying to come up with a system which I considered fast enough to be worthwhile, but in the end I think I got there and I now have a working Extra Table system that can conjure up a single league table of no more than 30 sides, based on whatever criteria I specify. It works perfectly well so far - the only remaining test is to see if it successfully merges data from matches played across multiple stages - rather than listing Germany twice in the table, all results should collected together. I'd have tested that by now but I'm far too lazy to create a new competition to do it. Something for later.
The next task is to create a working draw system for competitions, based on seedings, geography or downright prejudice. Well, maybe not that.
Thursday, May 17, 2007
I'm not dead. Physically.
It's been a month. Probably a good idea to update, although I'm not entirely sure what to write. I'll have to actually go and read previous posts so I don't repeat myself, and so I can see how much I've failed. In the meantime, have a picture of a beard:

I hope you've enjoyed that as much as I have. Perhaps more! Now then. Back at the start of the year I was working on competitions, and everything was going quite well. Then I shifted focus to the data editor, changed an awful lot, and had to redo most of the competition work.
Thankfully, that has taken about two days (the rest of the time may have been spent scratching various parts of my body). Things are working again and are much tidier than before, so I feel a tad more confident that it will all hang together well enough to fool people into thinking I know what I'm doing. I've still got to add a bit of code that will sort a league table for me. The existing routine just assumes that you're using the same system as the Premiership - Points, Goal Difference, Goals Scored. That's fine but other leagues aren't quite so simple, with the number of flying mice having an affect on whether or not throw ins are worth an extra place or two in the table and all sorts of nonsense. I have a vague idea of how I intend to do that, but actually doing it is another thing.

I hope you've enjoyed that as much as I have. Perhaps more! Now then. Back at the start of the year I was working on competitions, and everything was going quite well. Then I shifted focus to the data editor, changed an awful lot, and had to redo most of the competition work.
Thankfully, that has taken about two days (the rest of the time may have been spent scratching various parts of my body). Things are working again and are much tidier than before, so I feel a tad more confident that it will all hang together well enough to fool people into thinking I know what I'm doing. I've still got to add a bit of code that will sort a league table for me. The existing routine just assumes that you're using the same system as the Premiership - Points, Goal Difference, Goals Scored. That's fine but other leagues aren't quite so simple, with the number of flying mice having an affect on whether or not throw ins are worth an extra place or two in the table and all sorts of nonsense. I have a vague idea of how I intend to do that, but actually doing it is another thing.
Thursday, April 19, 2007
Viva Ecuador!
Viva indeed, as they've finally seen sense over there and stopped their habit of promoting teams halfway through the season. Now, whilst that made things very interesting, especially from a gamer point of view, it was always going to be difficult to cater for.
Thankfully, that's no longer the case and as I'm not presently aware of any other nations doing the same, I can ignore it happily.
Whoo!
Thankfully, that's no longer the case and as I'm not presently aware of any other nations doing the same, I can ignore it happily.
Whoo!
Subscribe to:
Posts (Atom)
