Hello fellow Pico-nites! Its my first thread here on the forum and I'd like to greet all of you in the Lakota language:
Haú mitákuyepi. Iyúha čaŋtéwašteya napéčiyutapi.
One thing I've been excited about with this "fantasy console" is that I can imagine a fantasy world where game cartridges representing indian people in a positive way came out back in the 1980s. the only indian people i can even think of in video games are T.Hawk from Street Fighter and Turok... and i'm not even sure what he's supposed to be. not that they aren't positive representations, but here I can create something that is based on real living culture and not just a stereotype. i like imagining myself back as a little kid, going to the video store to rent some NES game and finding this on the shelf. And in our real world I can begin to make and distribute that fantasy not only to console users, but to whomever i please with the HTML export.
This is certainly a lesson in learning to work with limitations, but also the first successful "game" I've ever made too! I set out with some grand ideas about the indian game i wanted to make, but then Pico's limitations (and my own) helped me to craft an idea that seemed actually possible to me. A dance game based on pow-wow dancing!
Modern pow-wows have competitive dance events with prize money. Dancers are judged on many things, including their regalia, behavior, participation in the Grand Entry, and more. This game only focuses on whether or not the dancer can step in time to the beat. It is reflective only of men's traditional dance. There are a wide variety of dances, and perhaps future versions will include more game modes to reflect that.
I plan to add more game mechanics to make scoring more fun, like bonuses for not missing a beat, time limit, and possibly some kind of special moves. These will be more fantasy like with bells and whistles. Obviously I need to add more graphics, I plan to utilize my extra sprite space (no map) to put some extra love into animation.
My biggest problem right now is the music and sound. Currently, the beat sound effects are being triggered in the _draw() function on every frame where a beat should happen (every 10 frames). I found that I couldn't get the music() function to maintain a sync with my frame counter variable T, and therefore I wouldnt be able to detect if the buttons were being pressed in time with the rhythm. Any advice would be welcome. I want to be able to add some real music.
Thanks for reading and testing my game!
update: i fixed the tolerance for beat detecting and took out some modulo operations, maybe it will work better in browser now?
- added game states (thanks misato), game now ends after 60 second time limit
- added scoring based on timing of steps
- code organized slightly better
- added closures! maybe a little clumsily, but i was excited to be able to use this functional technique in lua and pico8.
heres how i'm using it: simple counter using closures
Looks like you're off to a good start. Can't really figure out how to play.
What would I do ? Have arrow keys appear at the top and scroll down. Match them with your keypresses.
Each successful arrow causes the Indian to dance a little. Get a level and he does a real POW WOW right around the campfire. Then get ready for level 2.
Also add embellishments for background, sky, moon, grass, receding 3D images.
This is so cool. I hope you keep working on this, I really love it.
It plays well in the pico-8 app, and I can make the dancing happen in the web player, but there's such a large input lag that I'm tapping the button almost in between the audio beats.
It seems like there's a lot of interest in musical rhythm games, but a lot of folks have hit similar problems you have. The two relevant threads that come to mind immediately are this piano roll visualizer and the cartoon cat karaoke cart. Those carts might have some good hints on synchronization.
Looking at your code, you might get tighter synchronization on the web if you move the beat sound into _update, where the button press beat detection happens. This will also ensure your beat sound/detection happens reliably at 30fps, instead of _draw which may be slowed down during high cpu usage.
thanks for the recommendations, i've got the sync working a little bit better, but the web player still won't hack it. moving the sound code into update does seem a little tighter, I think i had it in draw before just because i wanted to see how well it could stay synced with graphics drawing. i don't know if there is something else holding back the efficiency of the game (like the functional style i was trying to use) but i just tried playing it myself in browser and got a score of -70 when on my old laptop (which can't even play the JS game) i can play just fine in Pico8 and get scores in the 200+ range
i certainly feel like Ennuigi is exploring the intersection of video games and art, and your comment makes me feel like i'm on the right track here. the beautiful thing about a fantasy console like this is how it gives those of us who were 8-bit kids a sort of new box of crayons. pixel art, animation, and chip tunes were some of the most prevalent experiences of art in my childhood. i'd let the game over music from Zelda play on repeat for long stretches, just to listen. While Pico8 lets us make modern games in a retro style, it also allows us to make real art using the media we grew up with. Its as if we have a long-lost console that existed in the underground art-scene of the 80s which is only now surfacing. We can begin to see the kind of games and art created for their own sake, rather than as a commodity.
that being said... i also have a fantasy about working as a community to make some really great games that can help push the Pico8 platform, to get this console into the more general public by inviting them into the fantasy world too. if it can generate some $$$ for talented coders, that's great! but what i've seen so far in this community is a coming together of the creative minds shaped by the art of pixels and bleeps and bloops of electronic media.
its great to meet everyone, i'm enjoying reading all the code here too!
sorry for all the posts... even though nothing changed except the machine i'm on the beat detection seems to be working poorly now. sorry everyone, i thought i had this working a bit better than it is. just tried playing from SPLORE on my desktop machine and its not working too well :/ i wonder what was different on my laptop just last night?
This is really cool! I love the sprites and the animation, it's a fantastic use of color!
On your beat detection issue, have you considered adjusting the timing to allow a "correct" input for more than one frame? 1/30th of a second is pretty tight, and it might help balance things a bit better for the lag. You can still reward players for hitting it exactly with something like DDR's good/great/perfect scoring on notes. Something else I noticed while playing was that the timing is very consistent, even on the web player, but there's a constant delay. I'm not sure what's causing it, but experimenting with a tunable delay on both the beat detection and the moon visual might help mitigate the problem.
Keep at it, and good luck figuring it out! This concept is great and I'm excited to see where it goes.
Thanks so much Sibwara! I think i may take a break on the code and add some more sprites and animation. I have a hunch about what is causing my problem, i think that i am checking the beat too many times, i thought i was being clever, but i need to shift a few things around so beat detection happens only once.
your suggestion is right on, and i actually thought i had it working with a Great! if it was on the exact frame, Late and Early had an extra frame built in, so there was a 3/30 window. I tried with 5/30 but it seemed too easy. but now that delay is there like you said. and i can't figure out what i did. i think i was cleaning up code and moved something that caused it. i should probably go thru and put a bunch of printh's in everywhere to debug. its all been from my gut so far.
It's a good concept and in genre terms, might fit in both with rhythm games like DDR or Beatmania and freestyle sports games like Tony Hawk. Parappa the Rapper, the first instance of a rhythm game, actually did some of both.
If I hold down the buttons, it will spam inputs, which probably isn't intended - maybe add some kind of "debounce time" or require a frame of release before it registers another press. The synchronization is a real problem too, but it is more a problem with PICO-8's limitations than your code, I think - in the worst case you could opt to move the game around visuals and have audio cues be secondary.
For structuring the gameplay, a model that helps most games become "more fun" is to focus on elements that add anticipation and to coordinate around those elements, for example in a fighting game, one often makes a decision about fast moves vs. powerful ones, as the powerful ones have a wind-up and cooldown that leaves you vulnerable. In games with a lot of shooting, the time it takes for projectiles to hit vs. how fast targets move is often the focus of interest. RPGs and simple "idle games" focus on a numeric power progression, where the game guarantees that your in-game power goes up by spending a certain amount of time grinding. Strategy games usually make you wait a few turns to consummate a decision, by which point a few new options have also opened up and complicated things. There is some element of philosophy in what you choose to focus on or make important to the game, but once you have the focus it becomes more straightforward to align everything around that and turn it into fun.
Here it could be "learn to predict a move sequence or a changing rhythm" - and the way in which you have to predict that sequence could involve many different elements - for example, maybe creatures appear and impede your dance, but if you learn a certain skillful pattern you can dance with them and even get some kind of bonus.
[Please log in to post a comment]