![](/gfx/play80.png)
![](/bbs/thumbs/pico8_demon_castle-1.png)
Demon Castle is a Castlevania-style game for PICO-8
Story
An evil sorcerer is trying to summon an ancient demon into the world. You are the only one who can travel to the sorcerer’s castle and prevent him from completing the summoning. Best of luck.
Controls
At the title screen, use the arrow keys to select your difficulty, then press the Z or X key to start the game.
Use the arrow keys to move, and press up or down to start climbing stairs.
Use the Z key to jump and the X key to attack with your whip.
If you prefer, you can use the C and X keys instead of Z and X.
Items
Heart Crystal
When you defeat a level boss, it will leave this behind. Collecting it will increase your maximum health, and end the level.
Chicken
This secret snack can be found hidden in secret walls throughout the game. If you’re lucky enough to find some, your health will be fully restored.
Crypt Key
This old key has been lost for centuries. Where could it be now, and what could it unlock?
Stone of Sealing
If you are unable to stop the sorcerer, these stones will be your best chance to reverse the summoning. You should try to find as many as you can.
About Hard Difficulty
At the title screen, you are given the option to pick either Normal or Hard difficulty. When playing on Hard, you will start the game with less life than on Normal. You will also encounter more enemies in more difficult locations. Finally, when playing on Hard, you will not be given checkpoints throughout a level, so you will need to start the level from the beginning if you lose all your life.
Tips and Advice
- Sometimes, after you beat a level, you will be given a choice of which way to go next. There are multiple paths through the game, and you can see the path you’ve taken so far on the map.
- There is no “correct” path through the game, and the game can be fully completed using any path on either difficulty.
- Be observant. Investigate suspicious-looking areas for hidden items, and more.
About the Code
Due to the size of this game, it was necessary to reduce the size of the code before the game could be released. I used the picotool library to reduce the size of the code, at the cost of readability. However, the original code, before being reduced, can be found on GitHub, here.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/38398/Annotation 2019-07-22 195240.jpg)
Very fun! I took all the southern routes to get to the castle. https://i.ibb.co/jDm7tRL/image.png
I'll be sure to take some other paths. Great job
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/25532/icon.png)
Very good!
I love the walk up/down stair animation/sound!
The map/transition really sell the (perceived) size of the world.
Has some bits of Black Tiger/Dragon in it :]
Couple of comments:
- world feels a bit empty (some more monster left and right could help)
- jumping feels to linear
- I lost my first play and don't know why (got a single stone)
Code comment:
- looked in the repo, I only found a minified png :(
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/30435/Alakazam.png)
Hi freds72,
Thanks for the feedback :)
The file you're looking for in the repo is called vampire.p8. The full code is too large to compress into the p8.png format.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/25532/icon.png)
!thought vampire was another game :)
To save tokens for your next game, you might want to move away from traditional OOP and use a lot more functions.
I switched to that programming style for pico and found out that "self" is only necessary for fields/methods that are part of the entity "API" (ex: position, health....).
Anything else (timer, state...) can be stored as local variables, kept within the function closures.
Example (Ghost Rally):
function make_ghost(plyr) local model,k,best,hist,m=all_models["205gti"],1,{},{} -- listen to track event (global callback) on_new_lap=function(t,best_t) -- new best? if t<=best_t then best,hist=hist,{} end -- restart replay k=1 end -- actual entity return { pos=v_zero(), q=make_q(v_up,0), draw=function(self) if m then draw_model(model,m,self.pos,true) end end, is_active=function() return m end, update=function(self) if time_t%2==0 then -- capture current pos serialize(plyr.pos,hist) serialize(plyr.q,hist) -- replay best track local n=#best if n>0 then k=deserialize(best,k,self.pos) k=deserialize(best,k,self.q) -- update model matrix m=m_from_q(self.q) -- loop if(k>n) k=1 end end return true end } end |
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/30435/Alakazam.png)
Yeah, that was just the name I used in development before I settled on a final name.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/bimg/pi/pi25.png)
Nice! It's short and sweet. Multiple paths is pretty neat. Thank you for having difficulty options cause other Pico games tend to be hard.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/media/24585/5_avatar2.png)
Nicely done! I haven't played the original Castlevanias myself, but from what I've seen this is a very good recreation of their aesthetics and core gameplay. The map screen, branching paths, difficulty options, and secrets are all great touches. The way some levels start differently depending on the direction you approach from is really neat (the northern entrance to the castle especially).
My only gripes are with the boss fights:
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/bimg/pi/pi8.png)
Awesomeness! One thing I would change is the whip. I feel it makes the game to East having it move in a quarter circle. Make it behave like a traditional Castlevania game. Would probably free up tokens also
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/15232/me-square.jpg)
Wow ! This has a real Castlevania vibe going on in it. I kept looking for objects to hit to gain hearts but didn't see any.
Man if you didn't get the scrolling and movement flat perfect of the NES original. Well done !!
⭐ Star and ❤ Heart both duly earned.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/bimg/pi/pi17.png)
Very nice. But I don't know how to pick up the stone left by the demon.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
I had a night to play pico games with the baby brothers and this was their favorite! They really appreciated the checkpoints, and I really appreciated the movement, the combat felt awesome! My only issue was that the bat boss felt tougher than any enemy I fought, even compared to the final boss. Other than that, the whole game had an awesome atmosphere! We had fun fighting the bosses, trying to figure out which way to go on the map, and find out how to collect stones! Thanks for the fun times ^-^
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/33558/voltix_64.png)
This is amazing! I can't believe I haven't seen this cart before. I love Castlevania so much. As soon as I saw the whip, I knew it was going to be good. You get a star from me <3
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/6561/hsi.jpg)
Very good effort! It felt weird being able to direct my jump in mid air, but I did like that the whip goes overhead, it makes situations on stairs a little more fair than the original castlevania games...
Also, I 3/3'd it in one life on normal on my first try in 6:23.
I'm not one who likes unfair difficulty, but I do like a challenge. I'll try again on hard. There was only one 'enemy trap' I thought was good and it was a kamikaze slime in my particular path's stage 3.
At any rate, very nice game, well done!
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/37810/Screenshot 2019-09-17 at 11.18.45.png)
This game is AWESOME! :D Have only tried one route on normal but plan to play through all routes on both difficulties. <3
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/6561/hsi.jpg)
Played it again on Hard and to me, Hard mode should be normal and hard should be harder.
But I like games make me work out a plan of action/tactics/strategy to clear a stage. :)
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/14922/zlg-logo-with-fade.png)
Great inspiration for an action platformer! The Castlevania vibe is clear. Some things I noticed that are neat compared to Castlevania are:
- you can move while whipping
- the whip travels above your head and deals damage
- you can walk backwards while whipping; time it correctly and you can attack while retreating.
- the character cannot crouch
I would personally slow the walking pace, do something to add weight to the jump, and mix up the final boss battle, but those are minor nitpicks considering how much level content you've crammed into a cartridge. It was fun to travel through and find secrets, even wall meat!
Great job.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/11224/sprite-avatar.png)
The game feels so polished and detailed. The camera pans to reveal hidden areas is a really great touch and the whip feels nice to use. I only wish it was tougher and longer.
Excellent work!
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/media/41376/unnamed.png)
Will you do a sequel where evil mages resurrect the demon and you have to defeat it again
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/bimg/pi/pi25.png)
I love this game, I really love the castlevania series, so this was awesome, please create more games like this
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/28038/logo_000.png)
This is an awesome and polished game/recreation! Great job! It feels weird to play old-school Castlevania without tank controls... (not that I like tank controls, it's just different) ;)
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/media/42638/JL Logo.png)
Wow, just came across this, excellent work!
I'm curious, how did you store the layouts for all the areas? Looking at the map area in the cartridge, I only saw a relatively small area filled in. Did you use the filled areas as room templates, then reuse and alter each one as necessary?
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/30435/Alakazam.png)
Hi Jade,
I've written a bit about how I did the maps here if you're interested:
http://matthew-watson.co.uk/games/demoncastle/
But the short answer is, I created all the levels in an external editor, then used a script to turn each level into a string.
In the code you can find long strings of characters representing each level. There's some code in the cartridge which converts the strings back into map data.
The first level is pre-loaded into the map to save space on the character limits, but all the others are only loaded into the map when needed.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/media/42638/JL Logo.png)
Okay, that makes sense. Nice writeup, btw.
I'm working on a editor for making level strings also, and I'm using the map system in an unorthodox way to increase effective storage space, and was curious if someone else was working along the same lines.
That's good you made use of the map area, even though you were using level strings, I've seen a lot of projects totally ignore that area in favor of strings, but it can hold a lot of data.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/media/41412/4_tn_warden.jpg)
Great game here. Really impressed with how you coded the levels/map (I'm going to give the post you made about it a proper read and hopefully learn some new tricks!) I love the platforming mechanics, having air control in a Castlevania game is a godsend. Cheers!
I've posted a review of the game on YouTube:
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/media/41376/unnamed.png)
the game is incompatible with newer versions of pico-8, for example it crashes when trying to boot it
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](https://www.lexaloffle.com/bbs/files/30435/Alakazam.png)
Thanks for reporting, Dogerizer and Athas. I've just uploaded a new version that fixes the crash in Splore.
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/bimg/pi/pi22.png)
Great Game!
And now I want to know how the code of stairs up/down works.
I really love that sound and motion, but I couldn't find the code...
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/bimg/pi/pi20.png)
Yes. Mush is one of my favorite p8 devs. Thank you for making excellent games!
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/bimg/pi/pi24.png)
Awesome game. As a 8 and 16 bit hater, because it is so hard to see if a game offers the exact gameplay rules like jumping with steering vs castle vania where I havent had the time nor interest to start learning it; I am a ps1 person.... I really enjoyed the game. Super Easy on normal diff and super well destilled to the basics. !!!! awesome !!!!
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
![](/media/91153/4_Coin Boy.gif)
This game is fun, but I think the bosses are too easy. (Maybe make the whip have a longer cooldown.)
![](/gfx/set_like0.png)
![](/gfx/top_drop.png)
Cool game! Some things I noticed:
There are no sub-weapons, like in Castlevania: The Adventure.
Multiple paths, like in Dracula’s Curse (minus the partners)
Whip stays the same, like in Rondo of Blood.
Final boss has 1 phase, like in Simon’s Quest and Belmont’s Revenge.
Whip deals damage behind you like in Bloodlines.
I loved taking the hidden paths, and getting the orbs.
One thing I tried to do is get the good ending while using the key, which I couldn’t seem to do.
Overall, excellent game. I love Pico-8, and I love Castlevania!
Keep it up, Mush!
[Please log in to post a comment]