This Randomizer is made with a costume assembler made by SpiderDave. The assembler is still in a beta/alpha state. You will require python3 to run it:
I did include a older version of the free air movement made by NaOH:
I started out with RetroRain MMC5 for CV PRG0 conversion but made a lot of changes to it like using PRG1 ROM.. plus all the features.
Here is the link to the project:
How to use:
Copy your "Castlevania (U) (PRG1) [!].nes" Rom to the main folder with the make.bat file. Name the ROM as shown before. Double click the make.bat to get a randomized ROM.
(The randomisation is done in the ASM file thanks to the features the new assembler provides. Check the main.asm the view conditions and add level select and such)
- MMC5 Conversion used for CHR animation and the extra sprite page so all the enemies are available everywhere in the Castle.
- Palette variation. There is a general Dark and Light theme. Then also the Vanilla palette groups and sky randomization and such..
- I provide a full level select and cheat mode for testing for MMC1 and MMC5 version. (Needs to be enabled in the main.asm. Set condition to 1)
- Rearranged enemy assembly with some sprites that would allow for a smooth animation thanks to animated sprite bank. Or a idle frame for Simon. (Unfinished)
- There is a group of tiles animated for each stage but no animation is added so far. (Unfinished)
- Random music for each level. (Unfinished. The music should be shuffled as a group for each stage)
- Enemy Randomizer. (Unfinished. It is done till around the cave section and some choices are bad or placed wired)
- Boss locations.
- One extra playable Character. Richter (waiwai world style)
- Some general property only two damage through out the game.
- Some bosses are one block in the ground. The Bosses need to be generalized or at last make low ground rooms for them.
- Right now the music changes after a checkpoint when you die. This is because it is not shuffled as a group.
- Some enemies are not meant to be together. The game crashes when there are fishman and bone throwing skelly on the screen. Sometimes there are wired
interactions with the code and the music can reset one channel. I just try to avoid some enemy arrangements because of that so far..
- Holy water does no longer stun bosses. Still works great on enemies. I know I could call that a feature but I don't know yet why that happen..
- Second face Dracula does not react properly when crouching in the corner for some reason..
Why do I post a unfinished project?
This is on my desk for over two month and I just go after other project. I do not find time or motivation to do more right now. It is still fully playable and
I am glad for testing feedback or additional resources and ASM files if anyone is willing to provide.
This is a free fan project anyone can use for what they like. The ROM conversion does not change the original offset that much. Other tools like steaks can be
used to make changes to the levels. That tool might not like the header of the file so you need to change it back on forward. Or just set up a patching line
from a other ROM to update this version. Graphics are CHR so you need to update them with a tool like Tile molester anyway. Not convenient but doable.
I don't know when I return to this but I thank in advance for feedback and have fun testing.
Additional ideas/bugfixes I consider implementing some time later: (This will be updated when I get feedback)
- Difficulty setting in Game. (probably just let you choose the amount of damage you receive)
- Candle randomizer. At last the sub weapon should be random drops.
- Enemy AI Randomizer. This could give a lot of replay value when done right. I was looking forward to it and I have a lot of ideas in that regard.
- New/Replaced Enemy types.
- NewBosses. I had like to make some costume bosses. I also think this could help other hackers. Give ideas how to do them. So far I only did one boss but I need
to make a proper ASM first. I also had the idea to copy some stuff of Optomon Holy Relics and Chorus of Mysteries hack into this project. But I probably stick
to my own creations.
- Animation for Sprite and Backgrounds.
- Add more playable characters.
- Add full property pages to change desired values in the game.
- Replacing Music engine with ggsound engine to make it possible to create music in a easy way.
Very fascinating stuff right here :)
I did some bugfixes and also added a ips for people who don't like to install python 3 but like to have a small teaser.
What makes the Randomizer great so far is the enemy.asm. It feels interesting to me to get all the new situation in a familiar level layout.
This is just the enemy tracker for the levels and I add them when I play with the emulator. Mesen is great since it does highlight the byte that just got read. Then just try out what is good and write the byte down as a option to choose from in the ASM. It still takes some time to find good option. I feel like the global property that tell where on the screen the enemy appears should be optimized first.
I was thinking to restart that document and this was also the point when I started to do other things. It is some work but I have a lot of fun playing this. Would be cool to finish it and see some people doing races and stuff.
Here I made a Video of me setting it up and playing it.
Quote from: bogaabogaa on February 17, 2021, 07:18:30 PM
Why do I post a unfinished project?
This is on my desk for over two month and I just go after other project. I do not find time or motivation to do more right now.
I truly hope you finish this to whatever end goal you have for the project! Holds a lot of potential towards those in wanting to understand things like this :thumbsup:
I have to agree with you Morinis,this engine has potential :)
congratulations what a great job Bogaabogaa :thumbsup:
I hope you can finish it to enjoy so many good news and details :crazy:
This looks like fun. It's refreshing to see different enemies in familiar places. Just randomizing enemies and power-ups in the candles would add a lot of replay value, especially if it can all be seed-based in the ROM.
Thank you for posting an unfinished project. I have at least 3 projects at 90% or more completion that I had to set aside and have not yet aligned the time and inspiration to finish. Perhaps I should just release them anyway.
Quote from: PolishedTurd on February 24, 2021, 07:57:40 PM
Just randomizing enemies and power-ups in the candles would add a lot of replay value
.. at least 3 projects at 90% or more completion .. I should just release them anyway.
I do think that the enemy randomizer is the most fun part too. Still I need to sit down a view more nights to get it all done. I did think may be someone is more eager/has more time then me and is interested to learn a unconventional method to do this. Usually you would define enemy data in a high level language. Here you can do it in a ASM thanks the build in features of the patcher. The project could also be a base for a hack instead.
It depends on the situation if a pre release is useful. A unfinished project could bring you bad credits. A proper release does have a other footprint and leaves a good impression on you from a end user perspective.
When you find the project might be useful to others and you don't mind people sharing your work and do things with it. Then make a project post. Sometimes feedback can be a good motivator to establish some time for it in the future.
I like to add this project in here too since it might be interesting for some people. It is a practice hack for CV1 PRG1. "game trainer"
There is a in game menu you can call when pressing start. Then pressing up/down to choose things and button A to select.
- reset a section
- choose a level
- color mode since some might find it interesting to discover the NES can do that
- toggle second and first quest
- choose sub-weapons
- true frame counter (not visible)
- I just dumped the HUD as a constant and restoring it will not update everything properly.
- giving equipment should have a bunch of other flag cleared..
- using the frame counter to show a in game timer.
- have a time stopper to tell how fast you could beat a section.
- a lag frame counter by comparing to the in game frame counter outside of the NMI
- other stuff to display that can be toggled in the menu
- having indicators it you successfully could perform scroll glitches.
- balancing the game to hit the same cycle frames as the original when it runs.
- a standalone menu to choose weapons and upgrades.
The code is also structured around two tables. One points to the text and one to the program it will execute.
So when the pointers data exist it will just be executed when selecting. I think this should be good enough to do most menu things.
Nice project. I suggest you make your example IPS less difficult, because it's a nightmare. Is there a simple way to remove the free jump height? I feel like I'm going to break my keyboard, because of muscle memory.
The free air-movement is a toggle in the randomize. This is done in the main.asm by setting a 1 or 0 on the option. I never intended the example.ips to be used as it is there for people who fail to install python and click the make.bat. Or may be linux user who could not get the patcher to work.. never tried on linux would be good to install a VM to test things.
I consider the randomize easier as the original. I wonder how and why you did die to make adjustment to enemy placement.. was also the thing where I did stop after I was half the way done since I did them in hex and it is just very time consuming. I wished I could make a tool that would allow me the see enemy I place and where they appear. Sure steaks has a previewer but that tool makes it kinda even with doing it on the emulator and hex. Still the same not learned any high level language that would allow me to build tools and keep doing low level programing patches for NES and SNES..