This game is now what I had hoped it would be! Big thanks to the community for the art advice, and code fixes, and honest opinions.
HOW TO PLAY:
Button 1 to jump
Button 2 to peck
The regular peck strikes at an angle and give Poulet greater velocity, to allow jumping father. HOLD UP while pecking to do a "soft" peck, where your regular jump arc is not changed, for precise and controlled attacks. HOLD DOWN while pecking to do a vertical peck, to avoid flying off a ledge during an attack.
Every third balloon popped has a prize-- the first prize is a TOQUE, which lets Poulet take one hit before defeat. If you have your Toque when you collect yet another prize, then you get HOTSAUCE which turns Poulet into HOTWINGS! who is an INVINCIBLE FLAMING DEATH BIRD
Killing blows struck consecutively without hitting the ground will give you a score multiplier. Same goes for when using Hotwings.
Enjoy! Right now, the high score is 639200!
Thanks again to Pizza and Innomin and of course Zep, and the whole community.
Fighting towards FINAL.
Caught some bugs, made some level tweaks.
Alright, here's my changelog. I'm about to finish this one for good this weekend I hope.
- Extra zero added to score display to pad it against rolling.
- Max score multiplier is 200 x 64. Once a hit is worth 12800, all consecutive hits are capped at that.
- Some levels have minor tweaks to make them less frustrating. I still want input on this!
- If you beat all the "Remixed" levels, you enter the NASTY levels. These are designed for a truly cruel end to your score run.
I'd like feedback on any parts of the level design that bug people. As I'd like to feel this is a finished game soon, and in all the hackin' the level design gets forgotten.
I'm fired up for some Pico8 Action. I've got to get my first ever game polished before I hack on something new. Here's a new pass.
Changes and Fixes:
- Glitchy bees fixed
- Level two less prickish
- Weird slowdown dealt with
- Some graphical taste improvements.
Left to do:
- Finish the "dungeon" music.
- Maybe make some stages more interesting.
- Some enemy physics is not as polished as player physics.
- A third type of "level-remix" after you beat the 8th.
- An attract mode explaining some controls and introducing some enemies.
- A delicious easter-egg I've got planned.
Yeah, so with all this work over the horizon, I just wanna take a final stab at completing this cart before I don't have any more time.
Total physics re-vamp. Collisions are handled more sensibly thanks to Innomin's advice. The new physics system made the speed and ranges of things a little different, so constants have been tweaked, and levels have been adjusted. I think it's less slippery, more controllable, and I can't duplicate any embedding in tiles bugs at this point. (I bet one of you folks can though!)
- Toques now protect from spikes
- Baubles are worth a little more, hoping players won't ignore them as much
- Level "remixing" after you beat level 4.
There's bound to be bugs with all the changes, so please let lose and break it!
In response to the forum feedback, and watching someone else play it for a bit, I've decided it needed a lot of changes! Here they are...
There's four frames of "skidding" when a headbutt attack collides with the ground. That way, if you get driven face first into an enemy, you have a better chance of them getting hurt instead of you.
- If you hold the down button while headbutting, you do a completely vertical smash, helping you air-break on a crazy headbutt.
If you hold the up button while headbutting, your velocity doesn't change at all. This is for super careful maneuvers while attacking.
Every third prize balloon drops a Toque! Wearing the toque gives you one hit, with a blinkrate from an enemy. It doesn't protect you from lava, spikes, or falls!
If you open three more prize balloons, without losing your toque, you get hotsauce!
- Some new music and sound. Not all the songs are ready, so right now some recycle.
I've been cranking on this for a while, only sparsely tweeting about it from time to time. I figure it's done enough now to get some code review and bug finding by the community.
It's quite playable, but if you beat the fourth level, there's only a black abyss as your reward. I can't fit any more levels proper on the cart, so the last big feature I want to put in is some level-mutator code to repeat the existing levels with some re-arrangement to extend the game (And that there, is the joy of Pico 8-- the limitations taking us to wild places like that!)
I'd enjoy hearing what you guys think. Personally I look forward to feedback on just how hard it might be-- it might suffer from programmer-is-the-only-playtester syndrome at the moment, resulting in some serious difficulty.
I feel the collision code needs some tips from the masters. There's also some really dumb work around for my lack of knowledge about how we concatenate strings in Lua.
Oh and I desperately need to write more music-- this tune is gonna drive you insane pretty soon.
I hope you all like it!
I didn't tell you how to play!
Z to jump.
X/C to Headbutt-dash
If you get multiple kills on a single dash, you get a score multiplier!
Free lives are awarded by score.
Very nice! Love the flame effect, and the game feels incredibly complete, like it were developed by HAL Laboratory or something. ;) Graphics and audio are fab.
Since you've got some code space, you could consider using zep's compression code to squeeze in some more levels:
Definite problem: I died like 300 times in the process of completing the game. A combination of weird collision detection, floaty air controls and this unusual input lag made me consistently miss/slide off of platforms, and it seemed like random chance whether my air corrective movements would actually work.
I kinda fell through the edge of a platform more than a few times. No other platformers do it this way so I never actually got used to it. If you jump into a corner, you can kind of break this and get stuck in a wall.
Agreed with Rhys pretty much everywhere, game feels extremely solid, and I absolutely adore the chicken sprite. The collision detection is indeed a little sketchy, and I found myself getting stuck inside blocks fairly often. The physics were interesting, definitely feel unlike most other platformers I've played, which is neat. Some weird stuff can happen, like if you hold jump and dash at the same time, the chicken gets crazy on the ground (sometimes this happens when I'm not holding dash, too). The dash also feels pretty punishing if you're just a little too early when you try to dash into an enemy.
LOVE the part at the end of the first level where you can bounce off of like 4 enemies in a row.
I think if you tightened up some of the mechanics, you'd have an instant classic on your hands. The music and graphics are all wonderful.
If you want to make jumping off ledges a little friendlier, maybe take a look at this.
About fitting more levels, maybe that idea that I got from original super mario bros might help
Though you'd need probably redesign level system and map data, but this way you could fit more levels at the cost of levels becoming slightly repetitive.
Thanks everyone! This is the feedback I desperately needed!
Collision and control lag are definitely needed fixes. The level design is pretty arbitrary at the moment too.
Rhys- thanks for the demo of that broken collision. I think when you play your own game a lot you become blind to little flaws like that.
If anyone else wants to show gifs of the most obnoxious parts of the levels, I'd love that.
Jamming more levels in is super appealing, but I'm a little weary- I want to call this "done" soon.
So pumped that you folks like it!
Alright, got some fixed collision a little. I realize why it sucked now-- I only checked one pixel for collision vertically. That made me happy, so I moved on! I was excited. I'm not a programmer by heart-- that's why I commit terrible crimes like that.
Now I'm iterating through a row of pixels at our hero's feet the same size as the sprite. I could make it a touch smaller to give the collision a thinner "skin" I guess. This feels decent though.
I'm gonna clean up the rest of the bugs and poorly implemented stuff and deny the cravings to add more wacky features.
Some stuff from a designers perspective: Keep in mind, I'm saying all of this thinking that your game is incredibly awesome. The beat is great, though it's a pity that there's only one song for both title screen and gameplay. the outline of the poulet poulet title looks pretty ugly, I'm guessing that's due to size restraints, but I'm sure there'd be a better way. The red/pink blocks look incredible, though the violet/pink dots inside the ground look terrible, maybe there's just too many of them, or there's not enough shading and acridity as with the blocks. the character animations are really good, though the feet seem a little big, like he's some kind of cyborg chicken. Personally I'd set the jump to only jump once per button press, the way it is in Mario, Sonic and every major 2d platformer. All of the enemy graphics have that same problem as the title where the outline is mostly cut off, I don't think that look particularly good. You still collect coins after being hit and sent flying, dunno if you wanna have that or not. Super cool. Excited to see where this is going!
Okay, got a new version in based on your feedback.
I took the art advice-- thanks Pizza-- no more broken selective outlines. It's mighty tough to get as much life in the design I want into the 8x8 space. But there always seems to be a way. A few enemies get a redesign now.
Collision is smarter-- not totally broken, but not the feel I want yet.
I'm using BTNP for jump and such now, but it doesn't fully "debounce" the effects, but rather does the every 4 frames thing. I'd better make a flag to make a proper, permanent debounce next pass.
As for the physics-- I think if the level design is a bit less merciless, it won't be a complaint anymore. I'll have to see what people think. I do intend for the headbutt to make you very slippery and out of control, but able to do longer jumps as a result.
Have a go, folks!
In no manner do I mean to harm your precious baby, as this game is exquisite and you should be very proud of it. I just couldn't find myself very at home with the current feeling of control. I await a finished result where you have the headbutt's momentum fully implemented. Until that time, I made the following changes so I could play the game.
Bounce a little higher on headbutt kill.
Headbutt refreshes after kill. (This makes chaining kills feel way more natural.)
Removed the forward momentum on the headbutt.
(It just makes it very difficult to chain or even just kill sometimes.)
(I'm excited to see the slippery out of control version of headbutt!)
Hrm... That's a totally different take on the attack!
It's got me thinking. I was liking the "skipping" effect of one headbutt button press being able to chain. I also liked the initial momentum, but most others who try it out are not getting the attack or finding it controllable or fun, it's true.
I'll have to make a couple versions at once and start to get people weighing in on which they like better...
You still sometimes can get into a wall. Don't know how to reproduce, but I know it happens. Possibly you need to collide with platform/wall in a very specific way (from a corner?).
Also crashing when dying isn't "a bit broken". "A bit broken" is what Skyrunner65 wrote or the issue I've just pointed out. Crashing, for any reason whatsoever is very, very, very, broken.
We're all just here to have fun :) I think Retsyn is taking the right approach by being chill towards small stuff like this (which it is, especially since this is still a WIP).
Nobody's going to die or lose any money because there's a crash in the game, and I'd rather Retsyn keep having fun working on his game than stress out over a bug and feel obligated to fix it as soon as possible (and stressing over something is a quick way to stop having fun with it!).
You said it mate. For me, I'm reliving the glory days with my bro, back when we programmed games in our house as kids, teaching each other what we learned and staying up all night making stuff.
The Pico8 is so addictive that it's sucked up all my time and left lots of deadlines unmet back in real less-pixelly life, so maybe having the wind knocked out of me is a sign to put this down for a while!
I'll hover around in the meantime, and I promised some content for Arnaud, so you haven't seen the last of me. But unfortunately, this 8x8 chicken is on indefinite hiatus.
Sad to hear about the hiatus, Retsyn, this was really getting somewhere. But if you have other obligations I think most of us completely understand.
Just don't let the critiques get to you! I get the feeling you posted in WIPs to get some help with collision, and everybody threw in their two cents on everything else. And then demanded bugfixes........
And since nobody really went into a way to do collision, here's a simple way: the player is a rectangle, break all moves (like dx=4,dy=3) into two for loops, then step one pixel at a time and see if you're currently colliding. There are better ways, but this method is pretty foolproof. (plus, you can add one way platforms easily, by checking if dy>0 and btn(3) and btnp(jump) and fget(n,0) then no collision in the y loop, but that's more advanced so I'll just leave that hint for now. =) )
Here's the basic code:
local sx = player.dx<0 and -1 or 1 local sy = player.dy<0 and -1 or 1 for i=1, abs(player.dx), 1 do player.x += sx if(rect_collide(player.x,player.y,player.w,player.h)) player.x -= sx break end for i=1, abs(player.dy), 1 do player.y += sy if(rect_collide(player.x,player.y,player.w,player.h)) player.y -= sy break end
Hey, thanks man.
This code is way smarter than mine. It'll take some doing to revamp my stuff and make it this way, but probably worth it, is this looks like it's cheaper token wise.
When I snag a free moment, I'll re-work it.
I appreciate the help greatly!
The physics are getting much better! I was less worried that attacking an enemy near a pit was instant death, and I actually beat the four main levels for the first time. I would make the drag when moving the opposite direction to your current x velocity a little stronger, but other than that it's great.
For the collision, no issues with the player, but I did notice some enemies and baubles fall into the walls. I think I forgot to mention that rect_collide needs to check against all tilemap locations in that rectangle. So this:
function rect_collide(x,y,w,h) for i=flr(x/8),flr((x+w-1)/8) do for j=flr(y/8),flr((y+h-1)/8) do if(fget(mget(i,j),0) return true end end return false end
You can actually improve that by only checking a row or column of map cells as you move, but again this is the version that will always work.
Thanks Pizza-- it's was directly in response to your comments that I was able to find those opportunities to improve the look.
And innomin-- big thanks for more clear examples of how to fix the code. The actors get a different version of the collision which hasn't been updated (This is stupid! And it'll get fixed next time I make a pass over it.)
Big thanks for the advice, all.
I'm not the best to learn from, I don't have a lot of coding experience. I have a lot of sloppy solutions because I wanted to forge ahead adding content. You should discuss all the stuff you're trying with the real coders, because I need to dig into that code and tighten it up big-time.
I love the graphics and detail in this game, though I think there's some small stuff to tweak and add some more risk reward to certain actions...for instance, when you're on fire/invincible, it would be neat to have the point values goe up for each foe in this state you kill until you get a 1up. This could lead to interesting level design things where a 1up can be hidden in plain site and you have to hit that 'perfect line' while invincible to snag it...
I wasn't sure how the game played at first (no instructions or descriptions of items) but I quickly figured it out and really like where this is at. The only thing that feels weird is having a point on your head that doesn't work to be able to impale enemies with an upward jump on it.
Also, I like that little Chicken Stock joke at the end of each stage. ;)
It's been too long... I think it's time to resuscitate this project and put the polish on it.
A few things have changed since the version update-- a new bug cropped up involving slowdown. Does anyone have any guesses?
EDIT: Caught this one!
I think you're right Matt,
I found that enemies (when killed or otherwise) fell out of world I had no check to stop them from continuing to fly out into the realms of empty data forever. Eventually they'd gain so much velocity that they'd wrap around the world and start to teleport about.
It seemed like even just one sprite being rendering off screen for enough frames in a row fired up the slowdown.
For the past few updates of Pico, I didn't try enough times to catch exactly when this changed. My last work on this game was September last year, and this bug didn't show it's face then.
Congratulations Retsyn!! Reaching a point when you are satisfied with your game is not easy, and Super Poulet Poulet is one of the most solid games out for Pico8 in my opinion, and no doubt one of my favorites. It's challenging, but feels fair thanks to the different options to attack, really fun and polished.
I can't wait to play this on the PocketCHIP!
I really like this game a lot. In fact, it's one of my favourite Pico-8 games to date. Somebody at Nintendo needs to reach out and give you a job!
Anyway, I've been doing some Let's Play Pico-8 videos recently and I just HAD to do this! ^_^
[Please log in to post a comment]