My Lovely Wife vs. 100 Draculas
a small game by Chris 'Turd Boomerang' Armstrong
One hundred Draculas are after my lovely wife! Put your combat gardening skills to work as you behead, dismember, and devour wave after wave of undead Transylvanian counts.
Movement: P2 D-Pad (ESDF on the keyboard)
Aiming and Shooting: P1 D-Pad (Arrow Keys on the keyboard) or Mouse Left Button
Updates:
1/24/24
The latest version of "My Lovely Wife vs. 100 Draculas" adds two new menu items.
The "Swap Controllers" option was suggested and implemented by RealShadowCaster. You can now swap the movement and shooting control inputs - allowing you to move with the arrow keys and shoot with ESDF if that feels more comfortable.
The "Show Timer" option adds a speedrun timer, which starts after destroying the targets on the first tutorial screen, and stops when you defeat the 100th Dracula. Thanks to Protractor and Sapazu for the suggestion!
What a crazy but brilliant cart!! I love it.
My only gripe is that I'd rather play with arrow keys for the movement and mouse to aim and shoot.
Thanks so much for playing! I agonized over the controls - mouse-aim was super popular with my gamer friends, but my family member were much more comfortable with four-button movement and four-button shooting. It felt wrong to move with the right hand and shoot with the left. The result is a compromise that no-one loves, but everyone can tolerate haha.
Nice, much more subtle game-play than first meets the eye (legs hands eat? kill? ranged hands first?...).
Won after two death, will replay later for a deathless victory.
For @phil and @TurdBoomerang, I also like arrows keys better for movement, but since there was plenty of tokens left, I added a "SWAP CONTROLLERS" option to the pause menu (I love how easy it is to tweak things around with pico-8)
The tweaking was the following :
In _init initialize globals player_0 to 0 and player_1 to 1 and add a menu item that swaps their values.
Search in the code for every instance of btn and btnp and replace 0 by player_0, 1 by player_1 and add player_0 when no player is specified (lots of tokens consumed but there thankfully was plenty left so no optimization needed)
@RealShadowCaster
I am so impresseed how easily you were able to implement that! I spent so long agonizing over whether to write a custom event listener in javascript to intercept keyboard input en route to the pico html build, and you accomplished this with a few lines of code in-engine. I'm a relatively new pico dev, so seeing the pros at work makes me so excited for my future p8 projects.
@TurdBoomerang
Your Lua code is super clean, you'll probably learn the pico-8 specifics in no time, unless you want to turn to the dark side of the golf tweetcart witch is an entirely different skill set and mind set.
The biggest trap you've probably not fallen into yet is the overflows of fixed 16.16 bit format of numbers. You've already dealt with pico-8 trigonometry.
You could start to look at the more "consoly" side of things : memory, pal(), magic pokes, cartdata, cstore, reload...
When trying new things memory related, I found tweeking memsplore
(https://www.lexaloffle.com/bbs/?tid=39274) to be super useful.
@RealShadowCaster
I have seen some WILD particle decay effects in pico games that I know are closely related to memory poking - maybe I will dive in on my next cart! I'm def saving that memsplore cart for later.
@RealShadowCaster
I implemented your change, plus a few text changes, and a new speedrun timer requested by the itch.io players. You will also see your name added to the "special thanks" in the credits!
@TurdBoomerang : You have a few tokens left : you could spend them for your speedrunners and grant them a final livesplit-like stat screen they should freak about when winning (only if timer is shown).
The game already has checkpoints. When reaching one you could add red/green +1.03 next to the timer.
To keep track of player times across game sessions and checkpoints, use cartdata/dset/dget but store everything in frames to avoid rounding problems.
If you have no idea what I'm talking about, check for an in depth intro on livesplit
https://www.youtube.com/watch?v=xq2MCodtH34
If you need a few more tokens, a relatively clean trick is to use backslash for integer division.
flr(a/30) becomes a\30
Oh, thanks for the "special thanks" btw.
[Please log in to post a comment]