Suggested A New Idea for a Module: (Modded) Soccer

J Young Kim

New Member
One thing for sure is that in the future, the multiplayer feature will become a major part of Terasology. The multiplayer should not only be restricted to several players working together (or against each other) in order to survive. In other words, the game of Terasology should have activities which engage many, while introducing a different aspect to the game other than survival. Thus, a module I would like to suggest is a soccer module, where players can gather to play soccer and have fun in the sense of playing a game (within a game :p). With such a module, it can be possible to bring whole communities together via Terasology. For instance, we can have Terasology events where teams of players can register to compete in soccer tournaments. Not only the players will have fun, we can have spectators in a big stadium actually watching. Maybe we can livestream matches! In short, with such a module, we can have events to unite the community. After all, being an OpenSource project, wouldn't we want players all over the world all on one server! (I know in reality this is very hard... but maybe it's a good dream!)

Methods of Playing Soccer:
Terasology, in all honesty, doesn't give much room for controls in terms of legs. The players can't slide tackle, chip the ball, etc. Considering this, I thought of two methods of implementing soccer.

1. Rocket League Style (Recommended)
Although not exactly soccer, we can have player's bodies hitting the soccer ball. In other words, punching the ball would have no effect. *Although not required, to make the game more interesting, we can have various spots of the soccer field to spawn speed/slow potions once in a while. The soccer field will also need to have a glass dome, to prevent stoppages. The advantage of this is having a game without many pauses, but the disadvantage would be that the game of soccer would not have an out-of-bounds rule (easier for coding?). It is heavily suggested that the game is to be played in a dome-like structure because the ball will go out of bounds too frequently with such a play-style.

Rocket League Video:

2. Punching

Because the game does not give good leg controls, we can have the players punch the ball to move. The important necessary feature required would be the ability to charge up a punch, so that the ball can be dribbled, passed, and shot depending on the power level. The ball can be launched in the direction that the player is facing. However, if where the ball was hit can be detected, we can add an aspect of curving the ball. *This would resemble soccer the most.

Regardless of which one is chosen, there will be no foul mechanisms, since the game will have no fouls. If two players decide to fight, it's also entertainment :p.

Without allowing punching players, it'll be too easy for attackers to score goals.

Another important thing to note is that there will be no 'positions,' meaning that all players can attack or defend, and goalkeepers will not be given any special abilities. This goes along with no fouls, meaning that there cannot be a 'handball,' since those fouls will occur way too frequently, along with arguments between players claiming that one touched the ball with the hand.

Blocks/Items Required:
  • Blocks
    • White Line Blocks: These are just white textured blocks to help define the field of play.
    • Grass Blocks: These are the typical grass blocks for the field.
    • Goal Posts: The goal posts can be any existing block, or a custom block, just as long as it protects the invisible goal trigger blocks (i.e. the invisible goal trigger blocks cannot be touched by the ball without going in the goal). The goal posts should be very different in color at least, so that the players understand where they are supposed to score. As an option, the posts can have a property which causes the ball to bounce off the post.
    • Goal Nets: The goal nets can be any block, as long as it is distinguishable to the player from any other blocks, as well as protect the invisible goal trigger blocks. It should protect the blocks in a way so that the ball cannot touch the invisible goal trigger blocks via the side of the goal (the ball should only be able to touch the trigger blocks by first going through the 'arch' created by the goal posts.
    • Invisible Goal Trigger Blocks: This is what will tell the game that a player scored a goal. It will be invisible blocks which the players can go through, but contact with the ball will launch an event (see below). For simplicity purposes, these blocks should be placed in a wall covering the entire goal one block in from the goal line.
    • Field Center Block: The field center block can be a block with a special texture or just a simple grass texture. The point of this block is to signify the center of the soccer field. The location of the block will be used to place the ball on the center of the field after a goal has been scored or at the start of a new game/round.
  • Items:
    • Soccer ball: A soccer ball should look like this: Soccer Ball. The soccer ball's reaction to hits will change based on the type of soccer (Rocket League reacts to body touches, and Punching reacts to players' punches). The ball will recalculate the physics for its next move/behavior during the onBallHitEvent (see below).
    • Jerseys: Jerseys will be used to help differentiate the players from each other so that there are two sides discretely defined. In addition, these jerseys will not be able to be crafted during special events such as large tournaments. In addition to providing a good method of dividing the team's appearances, a player without a jersey should not be able to enter the field. To do this, an "onFieldEnterEvent" will be used. The jerseys can be like a regular suit of armor. The armor will give players high damage resistance,
    • Binoculars: This is not for the players, but rather for the spectators. When spectating in a large stadium, it may be hard to see the field. With this in mind, the spectator can 'zoom in' by right clicking on binoculars.
  • onGoalEvent: This is an event which will be triggered when the soccer ball touches the invisible goal trigger blocks. This event is arguably the most important event. Upon the interaction, the ball will go to the field center block, update the players' positions so that they are on opposite sides, update the score, and update the UI.
  • onGameEndEvent: This is an event when the soccer match is over (for half-time or for the complete end). When this occurs, fireworks (future module?) can be launched in the stadium, and it will say in the chat the winner of the soccer game (name to be given before the match). When this is the case, all the players will have their jerseys removed, and the ball will be back to the center and cannot be moved. At this point, anyone can enter the field, and the field becomes 'deactivated,' meaning that anyone has access to the field.
  • onGameStartEvent: This is an event which is used to globally notify via the chat system that a game has started. When the game starts, fireworks will also be launched. When this occurs, the players will be teleported to their respective sides, nonplayers will be booted from the field, and the field will become 'activated,' meaning that nobody can enter during a match.
  • onBallHitEvent: This is for the ball. This event occurs when the ball is hit by an external force. This is either when the player hits the ball, or the ball hits with any surface while in motion. When this event is fired, the ball's velocity is recalculated in terms of vectors. When there is no game, the ball is locked in the middle of the field, and nothing can make it move.
  • onFieldEnterEvent: This is for when a game is active. This event is fired when non-soccer-player attempts to enter the field during a game. When this event is fired, it'll prevent the player from entering the field. For this to work, a wall of invisible blocks that can be passed through can be used on the entrance to the field. This wall can activate whenever a game starts, and deactivate when there's no on-going game.
  • Scoreboard: The scoreboard will be a UI which can be toggled by the player via the command line (F1). On this UI, there will be the team names, the score, and the time remaining. The team names should be abbreviated to the first three characters. In the case that the characters are the same, then the second team inputted with have the number "2" attached to the end of the abbreviation. This UI should be at the corner of the player's screen.
  • Field Map (optional): The field map UI is more complex, and can be toggled via the command line. The field map will give real-time updates for the player's positions and the position of the ball during a match.
  • Game Updates: Technically, although not a UI, the player should be able toggle in the command line so that game updates are given in private messages in the chat. The updates will consist of game start, end, breaks, kicking of players (i.e. someone was cheating during a match), and goals.
The following image represents what the scoreboard and the map should look like in general. Disregard the player information UI's.

Link to Image:


Commands are only meant to be used by the official of the match. The purpose of the commands is to ensure that the game runs smoothly. The commands will be inputted in the command line (F1). Parentheses are parameters.
*The Colors can either be Hex values or just strings (i.e. blue, green, etc.).
  • Kick (Player name): This command will be used to kick the specified player out of the game. This could be for reasons such as cheating.
  • Pause: In the case that something needs to be changed, the game will be paused, leading to restriction of movement of the players and the ball (ball will remember the velocity it had).
  • Set Game Settings (Team Name #1) (Team Name #2) (Color #1) (Color #2) (Time in minutes of halftimes): This command is to be used for setting a new game.
  • Get Game Settings: This command will get the current game settings.
  • Start: Starts the game with the current game settings. Kicks out all spectators (those who are not wearing jerseys) out of the field, and teleports the players to their respective sides.
  • Resume: Resumes the match from a paused state.
  • End Game: This will end the current game regardless of what's going on.
  • Toggle Field: This will turn on and off the ability for spectators to enter the field.
  • ChangeColor (Team Number) (New Color): Changes the color representing the team. Team number should either be a 1 or a 2.
  • ChangeName (Team Number) (New Name): Changes the name representing the team. Team number should either be a 1 or a 2.
  • ChangeTime (Time in minutes of halftimes): Changes the time of the match. The effect will take place starting the next game or new round (1st half/2nd half).
  • Restart Game: This will restart the game with the same settings. The scores will be reset.
  • Restart Round: This will restart the round (1st half/2nd half). If reset in the second half, then the score will reflect the first half's score. Otherwise, it'll be reset to 0-0.
Last edited:


Org Co-Founder & Project Lead
Very nicely written up, and great concept! I really want to see this and we already have most the pieces. Somebody even played with a scoreboard at one point.

Tossed some ideas on IRC on possibly using impulses to control the ball, quoted for reference:

my first thought is how auto move was recently implemented, by simply making a hot key trigger a continuous series of impulse events push the player along the path you're looking at

and the low gravity moon world a GCI student made uses the same to emulate low gravity

really you just need that for a non-player object shaped like a ball and set to NOT be picked up

if a player is within range of the "ball" send a continuous series of impulse events in the "holding" player's direction, that'll move and "control" the ball. Let other players interfere, which causes the ball to slow down / go other directions, and leave options to "punch" via toolbar item that sends a hard kick at the ball to make it go away from both players (with cooldown)

probably also another tool item for soccer that pushes the other player (illegal shove), or even make players repulse each other automatically