A small piece of code to dynamically create a functional cart from another cart and load it.
Why is this useful? Well, obviously this opens the door for somebody to write an alternative code editor for pico-8 carts! (j/k)
function _init() printh("pico-8 cartridge\n\n__lua__\n".. [[ -- your cart code here function _draw() cls(7) print("hello world",60,60) end ]],"dynamic.p8",true) load("dynamic.p8.p8l","back") end
- Generated cart has ".p8l" extension, but it seems to load just fine
- It doesn't work for carts embedded on the BBS or loaded with Splore
Here's a WIP of my first game for Pico8. A turn-based football (or soccer as you prefer) game starring animals (because they're easier to draw).
This version of the game allows for 1P and 2P matches between two randomly generated teams. For 2P games both players use the same controller during their turn.
The game is, in its current state, heavily unbalanced (after all, the player stats are generated randomly) and it still requires a lot of gametest to work on that. But I think the main mechanics are in place and matches can be played from start to end (with some occasional crashes). Please provide any feedback or ideas you might have after playing the game
29/12/2018 - Initial AI implementation
- Now you can play against the CPU by selecting "1P Friendly" on the start menu. AI is pretty simple and acts a bit silly sometimes but, AFAIK, it can deal with all the possible situations during the match. It should be easy but fun to win against it.
19/11/2018 - QoL improvements and bugfixes
- You can speed-up transition message (like the kick-off or change of turn one) by pressing the action button.
- Team players blink at the beginning of each turn to make easier to identify which team is active.
- Improved the line of sight for actions (still not final) and made it visible with yellow highlight of the cells.
- Fixed: tack action was never stealing the ball.
- Fixed: game crash on match end.
How to play
- Each team has 11 players positioned on the cells of the field.
- Each player has a role (GK:Goalkeeper, DF:Defence, MF:Midfielder, FW:Forward) that defines their position on the field (based on team formation)
- Each team can make up to 3 actions per turn. The amount of remaining actions are indicated by the white dots under the match score at the bottom of the screen. After all actions are exhausted for one team, the game moves to the next turn and the other team takes control.
- Each action takes 1 minute of match time and a match lasts 90 minutes. The current match time is displayed at the top of the screen.
- After 45 minutes, the teams swap sides and the game restarts from the middle of the field with the players back to their original positions.
- At the end of the 90 minutes the team that scored more goals wins.
- Each player has 6 abilities (DEF:defence, DRB:dribble, TCK:tackle, SHT:shot, PAS:pass, CTL:control) with a value from 0 to 100. You can see the values by positioning the cursor on the player cell.
- Each action outcome is defined by one or more dice throws for specific player abilities. Once the die is thrown, the result can be seen on screen and the "winner" and "loser" players will blink green and red depending on the outcome.
Player11 tries to tackle Player12. Player12 has a TCK value of 31. So it'll throw a die ï¿½ a random value ï¿½ between 0 31. Player12 will throw a die for DEF (between 0 and 70). Player11 result is 9 and Player12 is 51, so Player12 wins and keeps the ball.
The available actions are:
- Move: Position the player in another empty cell. If the player has the ball and want to pass thru a rival player the outcome will be decided with based on the DRB and DEF values of both players.
- Pass: If the player has the ball, pass it to another player. The difficulty of the pass increases with the distance, and if it fails the pass can be too short or too long (or even end up out of bounds). If a rival player is in the way of the pass it might intercept it (using DEF).
- Tack: Try to steal the ball from a rival in an adjacent cell using TCK. If the rival player doesn't have the ball when tackled, the rival team will be granted a free-kick from the position of the foul. If the tack fails the player becomes inactive and can't do any other action during the current turn.
- Shot: Can only be done from around the rival area. Try to score a goal, any player on the way of the ball will try to stop it using DEF, if the goalkeeper fails to stop it your team will score.
[Tip: if you don't want to make any action during your turn you can end your turn from the pause menu. In that menu, there's also some debug options that allow you to cheat a bit :)]
Next step would be balancing the game, providing non-random initial values for skills and instead base them on each player role and player level. Also, improve the game AI to make it more challenging (for example: Forward players should more aggressively try to shot to goal).
The idea for the final game is to include a "campaign" mode where you take control of a team of low-level players and play thru different tournaments winning trophies and levelling-up your team, training players into special "skills" depending on their role in the field.
Formation and Player management screens (WIP)
Some parts of this are already implemented (and you can access if you tinker with the code) but I'm struggling to fit the match mechanics and the team management (+ AI for rival teams!) into one cartridge.
On top of that, I don't even have a name for the game!. So if you can think of a good title for this weird combination of stuff, please send it my way :)
MP8 is a music player for Pico8. It plays the music from the carts on your local system.
How to try it
The cart doesn't work on the BBS (because there's no access to the filesystem), so in order to test it please follow this steps in your Pico8 command line:
> load #57557 > save mp8.p8 > load mp8.p8
And then run the cart.