Neo TeAm Forum

NEO Coding Competitions => NEO Compo 2012 => The past Neo Coding Compos => The GAME zone => Topic started by: Mindbleach on August 17, 2012, 11:29:54 AM

Title: Dragon's Lair [NES] (withdrawn)
Post by: Mindbleach on August 17, 2012, 11:29:54 AM
EDIT: I'm sorry, this simply isn't going to be presentable (let alone playable) in time for the deadline. I'm having immense trouble with the frame conversions and as such haven't had any opportunity to produce more than rudimentary gameplay. I still intend to finish this and post the ROM and source code, but it will not happen before the end of the month.

Nickname: Mindbleach
Project Name: Dragon's Lair
From: USA
Division: GAME
Platform: NES
Original Entry: YES
In last NEO Compo this project have won in the top 10: NO

Dragon's Lair was a full-motion video game released in 1983 as a Laserdisc-based arcade cabinet. It features 'Simon says' gameplay centered around approximately twenty minutes of Don Bluth animation.

I aim to faithfully port it to the Nintendo Entertainment System.

So far, I have an NES program which can play back video at up to 16 FPS, programmed in NBasic. (It's not much easier than straight ASM, but it's nicer to read.) The game will run at 10 FPS to keep the bitrate down. It uses MMC3 (the most popular memory mapper in commercial games) which limits ROM size to six megabits. I expect to fit at least ten minutes of color footage into this space. The game content is only really fifteen minutes because so many scenes were horizontally flipped and then repeated.

As with Trixter's 8088 Corruption demo, most of the hard work is done by the encoder. The NES itself just copies information to RAM, uses it as a background, and does some per-scanline scrolling to achieve vertical scaling. It's because of this imbalance that I've spent the last five days banging my head against my handwritten frame encoder. It's still not pretty, but it finally works. (Screenshots missing because of exactly how not-pretty it is.) I'll keep improving it for the next day or so and then use whatever it produces. The resolution and bitrate can still be doubled if my expectations of visual quality aren't met.

Obviously this would've been waaay easier as an SNES game, not least because of Mode7 to make fullscreen scaling trivial, but the SNES never had a terrible platformer adaptation. Part of my intent is to show what an NES adaptation might've been like if the people responsible knew what they were doing.

Demos, media, and code will be shared as soon as they're worth looking at.
Title: Re: Dragon's Lair [NES]
Post by: Sektor on August 17, 2012, 12:19:12 PM
Cool. I didn't expect a NES entry. Dragon's Lair was the first arcade game that I asked for my money back (I didn't get it).
Title: Re: Dragon's Lair [NES] (withdrawn)
Post by: blastyrant on August 20, 2012, 04:26:05 PM
sorry to read that you have withdrawn this project. i was really looking forward to it. i hope that you do continue to develop it and that one day it is playable!
Title: Re: Dragon's Lair [NES] (withdrawn)
Post by: theloon on August 21, 2012, 10:52:14 PM
If you've gathered any useful tools or hints on using nBasic please share.  Bob Rost has alot of info but you've got real-world experience.
Title: Re: Dragon's Lair [NES] (withdrawn)
Post by: Mindbleach on August 23, 2012, 10:50:17 AM
It's pretty straightforward if you read his slides. Overall I prefer it to ASM simply because it reduces busywork.

A few bugs:
- The "data" command doesn't accept hex. You have to convert values to decimal if you want to store them in ROM... though I guess you could use assembly and ".dw".
- MMC3.bas doesn't work. Refer to the NESdev wiki to write $8000 / $8001 correctly.
- MMC3.bas functions are poorly-named. Even NESdev doesn't explain bank mapping well. Fortunately Everything2 set me straight: the $A000 memory block is always swappable, and command 7 always points to it. You can set the $8000 block xor the $E000 block to also be swappable.
- Oh yeah, the xor operator (^) doesn't work. This made some bitwise toggling difficult.
- You can't dereference 16-bit pointers. Arrays larger than 256 bytes are not fun.
- Forward Polish notation isn't technically a bug, but it's definitely a mistake.

Actually getting bankswapping to work was confusing, but that's not really an NBasic problem. The iNES format uses 16K PRG banks , so if you declare ".inesprg 2" then you have 32KiB of Program-ROM. However, the ".bank" command uses 8K banks and zero-based numbering, so to put something in the last bank, you'd have to declare ".bank 3". Just to be difficult, BG/sprite data also uses 8K banks, so ".ineschr 2" only gives you 16KiB of Character-ROM. CHR-ROM comes after PRG-ROM, so if you declare ".ineschr 2" and ".inesprg 2", the CHR banks are 4 and 5.

To actually boot a game, you need code in the first bank and three addresses at the end of the last bank . Those addresses are the NMI, RST, and IRQ jumps - the locations the NES jumps to at the start of vblank, when the reset button is pushed, and when an interrupt appears, respectively.
Title: Re: Dragon's Lair [NES] (withdrawn)
Post by: Sleepyeyed on November 21, 2012, 10:02:08 PM
Really would love to see this project come together. It's been a while, any new progress to report?