🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

WEGO icehockey game? ideas, suggestions, opinions, caveats

Started by
0 comments, last by Mogli 6 years, 2 months ago

Hi, community! I’m new. I joined the club because I’m spending my freetime on working on my private little hobby project – a WEGO-turn-based 2D ice hockey game. Yes, that’s right. I figured it is a pretty unique combination. There are not a lot of turn based sports games out there. Blood Bowl and Football-Tactics&Glory come to my mind. But these are igougo. What is more, wego games are quite rare in general. The AGEOD games and the excellent Combat Mission series are the top dogs in this genre of game design, but these are not well known to the mainstream. Frozen Synapse, perhaps?

I think there is hardly any sport out there that lends itself well to a wego-approach. But ice hockey does!

  1. It is very fast – so even though turn intervals need to be short, turns are not meaningless. A lot of stuff can happen in a turn of 3 seconds real time! At the same time, 3 seconds are short enough so that you don't take away the responsiveness of the game (and the ice-hockey-skaters don't need to take decisions for themselves during the turn = I don't need to equip them with a sophisticated AI). 
  2. The number of players on the ice is small  (5+ goalie per team) - so not a lot of micro-managing is required per turn. Planning your turns is fast, the pace of the game is fast.
  3. Consistency of time and speed are paramount for an ice hockey game. And wego – in contrast to igougo - allows for that. Ice-skating tends to produce large speed-differences between players and the game should be able to track these differences and make them matter in a nuanced way.
  4. Another interesting point is that real-time sports game usually require a very tight responsiveness, as they're all about player skill/reaction while the user is in control of only a single skater. It might sound odd, but I think this does not go well together with ice-hockey, which, by it's nature, is less responsive in some respects (ice-skating) while more responsive in others (stick-handling). A wego-approach can help to mitigate the overly tight responsiveness of movement - without taking away tactical depth, that is!

I’m by no means a professional. The opposite is true. The “game” is my private hobby and before I started it, I knew literally nothing about programming. But I’ve grown into it a bit and I have already achieved more than I ever imagined. However, as you are all professionals (certainly compared to me), I wanted to ask you to give me some basic feedback or just your thoughts and opinions on the idea of a wego-turn-based ice hockey game. And especially if you foresee any major pitfalls.

This video shows the current state of my hobby project – for now, it’s all about the movement system. I’d also be very happy if you have any feedback/advice/suggestions for me on this particular topic.

https://www.youtube.com/watch?v=UgWSU0sptEk&feature=youtu.be

Explanation of the video (and some additional info on the game mechanics I have in mind)

Spoiler

 

In the planning phase, you can draw movement paths for your players.

The game tracks the position of your cursor and sets waypoints at fixed intervals.

How many waypoints you can set for the turn depends on the current speed of the player. If the player is skating very fast, you’ll be allowed to set more waypoints. If he’s going slowly, the movement path shrinks. Note that you can tell the player to accelerate/decelerate on the move (by pressing buttons while drawing the movement path). You can accelerate (lighter color), decelerate (darker color), break (red) or keep going (middle color) – in which case the skater will still slow down very slightly (“air-drag”). How fast a player can accelerate will depend on his skill and stamina. Whenever you run out of waypoints for the player, the ugly yellow bar shows up. Acceleration will drain stamina.

The allowed angle/curve-radius for the waypoints depends on the player's speed.

If you do not plan out the full turn (i.e. if you don't spend all waypoints for the player until the yellow bar shows up), then the player will spend the rest of the turn gliding in the direction he’s currently facing. I think that this has some elegance – you only need to steer your player if you want to decelerate/accelerate or skate a curve. If not, you don’t need to do anything, just keep him flying over the ice! ?

Speed is carried over from one turn to the next.  

If you look closely, the acceleration is not perfectly fluid. Speed only changes once the player reaches a waypoint. I could get a smoother result by lowering the intervalls between the waypoints, but that makes the movement-path-drawing a bit whimsical. And I think it's okay to keep it a bit clippy, as real skaters accelerate per push of their legs, not perfectly fluidly. And to be honest I couldn't really wrap my brain around programming a more fluid acceleration. The code for movement(-planning) is already more complicated than I want it to be, as it's not only about moving skaters around, but also about keeping their movements in-synch with each other (consistent time!) and allowing the user to know where his players will be at the end of the turn. So, right now, the game is calculating where the player will be on each frame of the turn WHILE you're planning his movement. Otherwise there is no way the game could tell you where the player will be at the end of the turn (=where the player runs out of movement allowance for this turn). The faster the speed, the farther the player goes per frame. 

------------------------

Game interactions and mechanics I'm planning to implement:

Players will also be able to skate backwards (at reduced speed).

Whenever a player controls the puck, the puck is not an actual physics-object on the ice-rink, but simply a status/flag of the player controling the puck. It is only spawned when the player passes, shoots or loses control of the puck.

There will be a single most important value for each player: "power" (I formerly called it awareness, but as I go with the working title "Power Puck", I thought power sounds more adequate ;) ). This value will be used to influence all "tests". Power increases when the player is idle on the ice. It decreases when the player has the puck, gets checked (quite drastically...), is tied up by an opponent or runs low on stamina. So, power is a measure for overall concentration and readiness and will go up and down quickly during a game (sometimes even within a single turn!).  

Every player gets a zone of control (ZoC). This is an area around players where they can "influence" things - e.g. intercept a puck/receive a pass, tie up an oponent, etc. Ideally, the ZoC should have several sectors (front/strong-weak side/rear) with varying degrees of player-effectiveness.

Whenever the puck enters the ZoC of a player, the player gets a chance to control it. There is a bonus if the puck was passed by a teammate. The faster the puck  is going when the attempt is made,, the more difficult it will be to pass the test and gain control over the puck. Passing will be interesting as - even though you can aim a pass pixel-perfectly (unless I apply some random deviation based on the player's passing-stat....), you still need to anticipate where your pass-receiver will be at the time your player reaches the passing-waypoint. So passing on the move will require some skill!

If the puck comes into the ZoC of two or more players, there will be a puck-battle between the involved players, which takes a certain amount of time=frames - so all other players continue to move on while the battle is raging! If a player can win the puck-battle with a certain margin, he gains control over the puck. If no player can win the puck, the puck randomly "bounces" a bit and a new puck-battle might occur.

When a player is in control of the puck, the degree of puck control is shown as a value. It depends on the player's current power, his puck-control-stat and the speed at which he's going. The faster he goes, the smaller the control. 

If a player who is in control of the puck enters the ZoC of an opponent, the opponent will try to tackle/gain control over the puck. A puck battle will occur in which the the current control of the puck-carrier and ideally also positioning matters the most (screening a puck at the board by getting your body between the opponent and the puck should be possible).

It's important to note that for all the tests mentioned above (puck-battles, tackles, interceptions/receptions) time and movement matter a lot, as most tests will have a time-out/cooldown. So, depending on how you move your players in relation to your opponents, you might get a single, two, or even more chances to tackle an opposing player if you manage to keep him in your ZoC. This way, the wego-aspect, combined with an interesting movement-system should really enhance the tactical appeal of the game. If you try to defend against a player with a very high speed while you yourself are going slowly, you might only get a single chance/test, then the enemy will be up and away.

Checks should work directly via player-collision. Something along the lines of: [power/awareness * speed+direction * physicality/checking stat] of player A versus that player B. If the win-margin of a player is great, the looser might go down and get injured. Both involved players also lose power based on the comparison. As for the interruption of the planned movement, I'm not entirely sure yet. A hard check can stop the movement for the rest of the turn (with a turn-length of 3 seconds, I think that's okay). But when suffering only minor checks, players should try to continue to the waypoints set by the user. So they will probably need re-calculate their movement path after being pushed by the check...

As for actual shots: I don't think it will be a good idea to make them fully based on physics. (I also don't think I'm capable of programming that...). This would require a very accurate implementation of goalie-movements and puck-traveling-height. Doesn't go well with 2d graphics. Of course shots should be blockable - so collisions between a shot and bodies (not ZoCs) should be tracked. Also, shots that enter the ZoC of a teammate should be deflectable (i.e. shot-quality will be increased). But when it comes to scoring and beating the goalie, I think a different approach might be better. E.g. each shot will have a quality when it is spawned. The quality primarily depends on these factors:

  • 1) Skill of the shooter * current power of the shooter * type of shot (backhand/forehand only; in this system, I don't really need to differentiate wrist- from slapshots)
  • 2) Position of shooter/angle to goal: Shots from the slot typically open up more angles, etc.
  • 3) Lateral puck movement close to the goal - the puck-object has a memory (the last x frames) so that it remembers the amount of its lateral (vis-a-vis the goal) movement and adds it to the shot-quality. In other words: the faster and the closer to the goal the puck is moved laterally to the goal immediately before the shot fires, the higher the quality of the shot. This should make one-timers really dangerous. (You are allowed to plan shots and passes even if you don't have the puck, so one-timers are possible.)
  • 4) Goalie line of sight. Similar to lateral puck movement, the game should keep track whether the goalie had a LOS on the puck for some time before and during the shot.
  • 5) Goalie skill

Although such an abstract system misses out on many interesting things revolving around the icons of the ice hockey sport (goalies with their super-cool masks...) - like telescoping movements, decisions when to enter the butterfly position, etc. -  think that it is more feasible and should produce very plausible results.

As you can already guess from watching the video, there needs to be a replay-function (all frames of a turn are saved). Unlike realtime, wego gives you control over all players. So you also need to be allowed to see the "results" for all players. This is especially true for icehockey, where all parts are moving at the same time, giving a chaotic impression.

I'm working in Python (pygame-library).

Proper pixel-graphics and even animations are planned, but they come last. First I try to get the game right, then I might add un-animated counters for players, and only then will I try to come up with proper animations. To keep the workload managable, I will start with few directions/facings, and also I will start with doing the characters half the pixel-size, blowing them up by *2. 

skater_stand_180_idle.gif

 

Notes to self:

  • Visual cues for the speed of players and the puck are obligatory in the planning phase. Might be tracks on the ice or comic-like "swoosh"-smears.
  • Planning move paths at the maximum turning-radius will occur very often. I really need to ease the movement-path-drawing for those tighter curves. Drawing works nicely when you go straight ahead, but setting up a tight curve is tedious (see video) as you need to figure out where the allowed angle is. I could go for button presses --> press right/left to automatically set the next waypoint at the maximum curve radius for the current speed. Other than that, I really like the idea of drawing movement paths (like in Ultimate General) on the ice-rink. It should feel as if you're the coach and draw on your planner in order to show the play to your team, like so: image-33777-1341746876.jpg

Post Scriptum: Sharp curves via button press: https://www.youtube.com/watch?v=AHiVghNQtFQ&feature=youtu.be

 

 

This topic is closed to new replies.

Advertisement