[This is really a work in progress, so this will be updated eventually. There is some gaps that I realize after I wrote this. In particular, there are a few things that I realize are missing:
But, that's it for now :) ]
I have an idea for a project that I have been toying with for a couple of days. The idea started as a joke in my head, but I need to actually figure out the game dynamics to make the joke come to life :)
You can imagine this as a soccer game, but in the game, no one knows the rules of playing actual soccer (sorry, "football"). Instead, the game is a game of avoiding personal involvement. You avoid to make a goal, you avoid getting involved and when you must get involved, you need to protect yourself from being forced to play. Call it a modern gladiator event ... gladiators have to fight large wild animals or other gladiators to the death. There is no violence here except some "friendly" shoving.
The game, as I wrote it here, sounds like a strategy board game that reminds me of Stratego. As the game evolves, it could take on more types of characters like Stratego - that in subsequent games, players start to gain certain features that are only known by the player or team. This is because I will also add in a RPG element to it (or "fantasy 'football'" :D Need to figure out how to add in dungeons or labyrinths into this). You will see that I use RPG terminology, like "experience points" and "armor class" to define strength.
Note that I just came up with the idea, more to think about how to program it. I never played it yet, so I don't know what I could be missing yet. This is a turn-based version of the game. An arcade version would have to do more real-time calculations; this is something I can imagine as more chaotic looking, which makes for different types of strategies.
Later on, I am going to tie in my other work somehow, which I have ideas for.
EDIT: Started on the code: https://gitlab.com/bolsen80/soccer-standoff.
Imagine a 20x20 grid, with 5 players on each side. The players are either human or computer. There is a ball and two "robots". The goal for your own character and team is to avoid the ball and the robots who wish to push you into the ball. If a member of a team gets involved in making a goal, the game is over and that team lost.
The robots come after you (it will come after anyone) that is in the vicinity of a ball, forcing it to kick it. You can probably get into a situation that all players moved far from the ball, so this means that the robots need to "redistribute" players. Since players need to avoid robots, players will want to disperse immediately.
All players, robots and the ball can move in all directions, but the purpose of the grid is to visualize and calculate the spacing. For robots and computer players, it calculates the relationship between the 'enemy' and the ball as an affinity score. An affinity score is the likely condition to kick a ball to a goal. Robots can calculate a player's affinity in relation to others to decide who to make a move against.
The affinity score is calculated on the fly: 1. Player Distance (PD): How far is the player from the robot? 2. Ball Distance (BD): How far is the player from the ball? 3. Directionality (R): Players facing a ball? Robots can charge a person from behind easier, but can do sideways push). Balls have directionality to the goal.
Example:
R | ||||
P1(s) | ||||
P2(se) | ||||
B(s) |
------- goal area ------------
R = Robot P1 = Player one which is facing south P2 = Player two which is facing south east.
Which is the best one for the robot to move towards? P1(s) looks like the best option here because:
R ("Retning" mean Direction) is most favorable. You can give each direction a number. N = 1, NE = 2, E = 3, SE = 4, S = 5, SW = 6, W = 7, NW = 8. If P1 is South, then it is 5. Ball direction is also South, so 5 - 5 = 0. We minus the answer by 8 and get R number.
So for P1(s)
PD = 3
For P2(se)
Since 29 is greater than 10, R goes for P1(s)
(I don't know if this logic is perfect, but it works with this example.)
In an arcade-style game, before drawing each frame will calculate the affinity of players for the two robots. In this highly dynamic scenario then, it will have to find clusters of players near balls, but I can do that in a second version. I am assuming a turn-oriented version (all players move then all robots)
Robots find higher affinities, but players seek to lower their affinities:
Players can move freely around the grid. Robots are limited to 5 square moves at a time. However, you can't occupy the same place at once. Teams can use this to corner the other team and robots to force the robot to charge the other team's players. You can strategy a plan (which your computer players can recognize, with a modified affinity score) to work those strategies.
Players by default would have an "armor class" (pulled from RPGs) that protects them from aggressive robots. Every player starts at 1 and it proceeds to go up after many competitions. For single disconnected games, players starting at 1 means a robot-push would result in a ball going 6 spaces towards the goal line. The directionality of a player however, can limit the that. This is a bit of logic to figure out.
The important thing though is that the ball will keep going until something blocks it. If it goes to a player in direction, that player's affinity just jumped.
If this was not a computer game, it could be played with a board with 3 people: the robot master and one for each team. Team 1 goes first, moving all their players around the board. Then team 2 plays. The robot master rolls 3 die: one for direction (there are 6 sides, but 8 directions. Double the first roll and second roll, add them together, then find the modulo of 8. Example roll 5 and 3. So 10 + 6 = 16 mod 8 = 0 + 1 = North.) Robot master then starts to deploy his robots.
Maybe it can be played by 2 players if you use the die and the logic above to move the robots. But, the robots don't act autonomous. The two players can roll one die and allows them to move a robot into a direction towards their opponent by the number on the die. It gives the robots some brains that can be decided without calculating affinity scores, like the autonomous robots could use.
This repeats, but without the die being rolled, since players will be used to kick the balls. Each round, any players that do not get used as robot-fodder gets 1 XP (so add up the team's XPs as points for the game.)
The winner either has the most XPs after 10 minutes or the other team scores a goal.
I came up with the rules for this, like, yesterday. I haven't actually played it yet, but getting some die and grid paper can at least test out the idea a bit allowing me to tweak the rules before writing the program.
But at least let's see what it could look like ...
The simplest version of this game would be implemented as two screens:
+------------------------------+----------------------------+
| | |
| | |
| Board | Input of rules |
| | |
| | |
+------------------------------+----------------------------+
A multi-player version would be a networked one, sharing the state across different computers. I haven't really thought of that one yet.
I can have it where you input all the locations for all your players and then committing on the decision, for each round. A single input can take in parameters above:
P1:
DIR> N
SQR> F15
P2:
DIR> S
SQR> D10
...
Have to have it with a bit of a 8-bit computing vibe, with uncomfortably short names. Each occupied box would have
[X|O|B|R]\([N|S]?[E|W]?\)
X would be the first team, O would be the other, B would be the ball and R would be a robot. then it shows direction.
So for the example above? Maybe:
R(S) | ||||
O(S) | ||||
X(SE) | ||||
B(S) |
------- goal area ------------
... The hard work, writing the program. :D
Made with Bootstrap and my site generator script.