You are all invited to the Tiny-TV Jam, a Pico-8 gamejam in which you'll have to make a tiny game for a tiny TV!
Here is the base cart:
I fixed the fix because it was stealing 7% of CPU from you when the TV was on, sorry about that. Also, no more weird screen display thanks to qbicfeet!
Here are the instructions to use the cart:
I know the instructions are intimidating but it's actually easier than it looks. If you're hesitating, please give it a go and see how it turns out. If you have any question, feel free to ask here.
tiny tv base cart instructions:
On the limitations:
The main limitation is of course the 10x11 screen resolution.
But there is also the regular CPU limitation which already ~70-75% filled by the TV rendering. The remaining 25% will need to be enough (it should be largely enough in most cases) for your games. Otherwise, consider reskinning your TV to something lighter (see "on the sprite-sheet" section).
Those are the only limitations for the jam but of course, regular Pico-8 restrictions apply as well.
The TV can be turned on and off with the player2's 'O' button ('tab' on a keyboard) or through the pause menu (hit 'enter').
On the cart's code:
At the beginning of the cart there are a few variables you can set only once and only there:
....that's the transparency color on your voxel TV plans.
....It's only useful if you wish to reskin your TV.
....that's the height of the middle of the TV screen.
....Again, this is only useful if you wish to reskin your TV.
....when set to true, 'tab' on a keyboard will let you turn the tv on and off
Then, there are variables you can change whenever in your code:
....rotation around the y axis (0-1, NOT 0-360 or 0-pi)
this variable is added to tv_angle each frame
....x and y offset of the TV on the Pico-8 screen
....because I'm not that good at maths, I couldn't figure out rotation around the x axis.
....instead you have this fake rotation which is very limited and can take values from -1 to 1.
....sorry about that.
....when set to true, the memory and the cpu used by the cart will be displayed at the top-left corner of the screen
These variables are also used by the base cart, which will automatically recenter the tv and direct it towards you. This can be ignored by setting these variables again each frame.
Next are the base functions of your game: _game_init(), _game_update(), _game_draw(). They behave exactly like the regular _init(), _update() and _draw() functions except _game_init() is called when the tv is turned on.
_game_shutdown() is called when turning off the TV.
_set_screen_text() lets you add static text around your tv. it uses the tv_add_text function:
....sets static text to be displayed on the Pico-8 screen.
....alignment can be 0: aligned left
...............................1: aligned center
...............................2: aligned right
Both _game_shutdown() and _set_screen_text() are optional and can be deleted if you don't wish to use them.
Then there is space for your own functions but you can put them before that if you like.
And then there are the base cart's internal functions which you should not change. Changing these functions is against the rules of the jam. Please don't do it.
Note: the TV can be turned on/off in the code by calling 'tv_turn_onoff()'
The base cart calls sfx(0) and sfx(1) upon turning on and off the tv. You can of course change these sfx to whatever you like.
You are free to use as many sfx as you normally can in Pico-8 and same thing for the music!
On the sprite-sheet and the map: (+reskinning TV)
The base cart uses the second half of the sprite-sheet (which is also the second half of the map) as voxel layers for the TV and also for the tile in the background.
You are invited to modify these layers and reskin your tv this way.
If you do so, don't forget to set the tv_transparency_col and tv_screen_height variables if needed.
Note that if black cells are in the screen frame, they will get the screen color, whatever their depth.
Also note that the rendering of the TV renders all non-transparent cells and that is heavy on CPU so try to do empty cases rather than filled ones (i.e. do like it is done on the base cart).
You are also invited to change the background tile.
You are free to use the free half of the sprite-sheet as well as the free half of the map, as you like!
Most important instruction here: when participating to the jam, please make sure to... have fun!!!
[ end of the instructions ]
Here is a video alternative version of the instructions: (sorry for the not-very-good audio :X)
You are more than welcome to customize both your TV and the tiles that are displayed in the background. However, you are not allowed to modify the voxel data and/or the background tiles at runtime.
And here are two reskins if you are into that! You need to click on the [128x64], hit ctrl+c then go to pico-8, sprite-sheet tab 2, first cell there and hit ctrl-v! Don't forget to change the tv_transparency_col and tv_screen_height!
Entries need to be upload here on the BBS, in the Jam section. The created BBS thread needs to be tagged "tinyTVjam"!
If anyone is encountering any problem with the base cart, please report it here as soon as possible!
This is all there is to know.
Good luck and have fun every one!
About the jam:
What: Over a week ago I did a Pico-8 doodle starring a voxel TV on which you could play a tiny Pong on the 10x11 screen. It was then suggested to me to make a jam out of this. This is the invite to this jam.
When: The jam will take place from the January 14th on 00:00 GMT to the January 22th at 24:00 GMT! That would leave you 2 weekends and 5 week days. Spend as much or little time as you need on your carts. You do not have to make something super impressive or anything, it really only has to be something.
Where: Here on the BBS, in the Jam section.
Who: ALL OF YOU!!! You don't have to know Pico-8 super well to participate in this jam. Pico-8 beginners are super welcome! Don't be shy to submit either, you have nothing to lose in it!!
How: A framework cart will be provided at the very start of the jam, with a how-to-use-it guide, stating what you can and can't change along with a few guidelines. The TV will be customizable but the screen resolution will have to stay at 10x11. Expect to be a bit limited in terms of allowed ram. By the way, the invite cart does not use the final framework at all. Teams and collaborations are allowed. There will not be any theme, just make a game for the tiny screen.
Submitting: You will be able to submit your cart before the deadline by creating a Jam thread with "tinyTVjam" in its tags. You can update your cart as many times as you like until the deadline.
Voting: The voting widget used for the p8jam will appear on all threads tagged #tinyTVjam. Voting will be anonymous and it will last the one week just after the jam finished. The results will be announced at the end of the voting period.
What do you win if you win: The high respect and appreciation from the community. And maybe a little surprise. But above all, the aim here is to have fun and make something cool!
During and after the jam, you will be able to browse through the entries from here.
edit ~ Here are some more details that were given further in this thread:
- you can have as much love and instructions as you want in the description of your games.
- you will also be able to have some static text outside the tv but nothing dynamic.
- you can have all the normal controls of Pico-8. The TV will be turned on either with the Player-2-buttons if you don't use them, either with a pause menu option.
- the maximum width for the tv screen is 10 and the maximum height is 11 but you can use less than that if you want to.
I probably should have mentioned this but you are allowed to have as much lore and instructions as you care to have in the description (you could even do a whole manual and link it as a pdf in the description). But please keep it simple enough that it's actually playable!
I hope we can remove this reflection on tv screen, and tv pixel in corners of screen, as it's robbing us from precious space we have for displaying a game...
How many buttons do we have? Can we have all pico8 buttons (directions + O/X) or can we only have (up,down and X)? I really hope for all buttons...
( If you are against giving players all inputs, because you need to have button to turn on/off tv, consider holding x and o buttons for a second as a restart command.)
- Can we put some text above/below tv screen? If so can it be only static (like lore) or something dynamic like player score/health etc.
Yes, you will be able to remove the reflection on the tv screen, same for the round corners and you will also be able to add any other obstruction if you want to do so!
You'll have the directions + O/X, the TV will be started and shut down with the player 2 buttons.
Static text will be allowed outside the tv screen, but no dynamic stuff.
TV will be reskinnable, just keep the 10x11 screen!
You can use less than 10x11 if you want! :P
> the TV will be started and shut down with the player 2 buttons.
please consider a pause menu option for doing that or something...? there's no way to push player 2 buttons when using a (single) controller (which I often do, with the nearest keyboard literally across the room ('cause wireless controller + TV screen))
Thank you everyone for showing your enthusiasm! :D
The Jam starts in just 18 hours now!
As said before, the framework cart will be given at the very start of the jam and the TV will be reskinable! Here is a Strawberry™ TV I made earlier!
That TV will also be downloadable as an alternative skin! :)
See you in 18 hours!! ;D
Question: I noticed the screen is actually 40x44 at the native resolution of 128x128 (screen is 160x176 @ 512x512). So for 10x11 resolution for the games, I assume you mean each pixel has to be 4x4 at native resolution? In other words, we must use a 110 pixel grid? Obviously if we do like a rectfill(0,0,0,0,7), we could fit 40 across and 40 down. I'm pretty sure it means minimum pixel size is 4, but just wanted to clarify.
Another question (admittedly I haven't glanced at the cart code yet): how do we deal with x,y coordinates when the tv/screen moves? Are these normalized somehow (such as the top left of the tv screen always being 0,0), or do we need to somehow compensate for tv/screen position/rotation when calculating coordinates for display objects?
This is all taken care of by the base cart! You just draw things as would normally do but on a 10x11 screen in the _game_draw() function and the base cart will then display it on the TV screen, magnified to 4x4 pixels, as you point it out and at the right position and rotation!
I just uploaded a fixed version of the base cart. The only two changes are the following:
- you can now access screen data (through pget) and draw on the screen from the _update_game() function.
- you can now actually delete the optional _set_screen_text() function and the cart will still work.
You don't have to change base cart if you already downloaded the previous one. Both versions of the base cart will be accepted for submission to the jam.
Very sorry for the inconvenience.
(by the way some of you are already making amazing stuff and it makes me really happy)
Thanks for the fix. I had to do pget for collisions because I don't think there's a way to make 1px map tiles, otherwise I'd do mset/fset/mget/fget instead of fillrect for the walls. So I have to do pixel checking for the collisions I think (at least, I'm not sure of a better way.) Thanks for fixing it!
Alright, I found another oddity that isn't a huge deal, but kinda weird. The 5th pixel going completely vertically over the entire height of the screen is about half as wide as the others. So when I move my pixel Pacman across the middle of the screen, he shrinks! Not a huge deal just thought it was a bit weird and wasn't sure if you were aware of it. I'm also not sure if it might somehow be my code, or if that's just how the display is coded to make it fit certain dimensions. I didn't notice it in your Pong game, so maybe it's my code.
Also wanted to bring it up so I don't get disqualified. I'm not intentionally making any pixels smaller than they should be to get around the resolution restrictions.
here's a demonstration (you can see the vertical path above the player is also half as wide, so it affects the whole screen in that column, not just the player):
I was aware of it but I didn't think it would be that easy to fix before looking into it. Not gonna upload a new cart but here's a one-line fix you can copy paste in your _update_game() function:
if tv_angle==0 then tv_angle=0.0001 end
this is a bit dump but it works.
@TRASEVOL_DOG Call me crazy, but are able/allowed to reskin the TV to REDUCE the resolution?
I may have a need to have pixels in absolute centre for my game, so would need odd number of pixels (even if that means reducing to 9 pixels wide!) :o/
@ilkke yes you can use that part if you need it. :)
And no this is actually the only one hidden in the code I think! I added it just below the instructions on this thread yesterday too because I had people ask me about it. Sorry I didn't make it more clear!
Note also that modifying tv_text is also against the rules of the jam, since the rule is that all text outside the screen should be static. :)
I'm pretty sure someone asked how to share a TV skin but then deleted their post... :/
But here's how you do it anyway!
that's a ctrl+C I'm doing at the end after I selected the half of the sprite-sheet and then you ctrl+V in a BBS post. :)
edit: looks like you figured it out! :3 Great skin, I love it!
I discovered that you can fix the awkward column of pixels in the center by changing the line in the off-limits section of code with "local lx=64+tv_xoffset" to "local lx=64.5+tv_xoffset" (note the .5).
Would I be allowed to use fix in my cart?
I fixed the fix! Yesterday's fix was using 7% of CPU for basically nothing when the TV was on so... um... yeah sorry.
Also I added qbicfeet's fix for the screen! Thank you qbicfeet!
hotfix .2 changelog:
- Fixed unfair 7% CPU usage added when TV is on.
- Fixed screen display, no more pixels not having the same size.
Again, very sorry for the inconvenience.
If you want you can apply the changes to the cart yourself:
Remove the "cls()" in the _update, after the "if tv_gameon then",originally at line 177.
In tv_draw_voxels() replace the first "64" after "for l=0,tv_height do", originally at line 269, with "64.5".
@qbicfeet: I invite you to download the new version of the cart or apply both of the changes. Thank you so much for your fix!
[Please log in to post a comment]