On the topic of scrolling

User avatar
CutterCross
Posts: 87
Joined: Sat Apr 28, 2018 9:42 pm

On the topic of scrolling

Post by CutterCross » Fri Jun 22, 2018 7:24 pm

You've probably heard this question many times before, but are you planning on implementing horizontal/vertical scrolling by the time NESmaker releases in August? That being, will there be an easy, intuitive way to add scrolling built into NESmaker? Seeing as how it's a pretty ubiquitous feature in NES games. If not, at the very least, will there be an explanation/tutorial on how scrolling is handled in assembler?
Bucket Mouse
Posts: 84
Joined: Wed Mar 07, 2018 2:25 am

Re: On the topic of scrolling

Post by Bucket Mouse » Sat Jun 23, 2018 7:17 am

Scrolling is the most important part of the Platformers module and I'm surprised it's not there already. Maybe it needs a bit more tinkering.

They haven't responded yet. If their response is to link to this, we're all in trouble.
User avatar
Mihoshi20
Posts: 273
Joined: Tue Mar 06, 2018 11:47 pm

Re: On the topic of scrolling

Post by Mihoshi20 » Sat Jun 23, 2018 10:08 am

Mostly, currently I think they're just working on getting the tool functional and the assembly code modular enough to easily swap code in and out. The tool mostly being adventure came centric was because they started with it's design for Mystic Searches which is a zelda style adventure game. When they start planning out the modules (which they're thinking of right now with adjusting the tool for swapping out platformer specific code.) I imagine we'll see common elements for those types of games be added which includes scrolling the screen type functionality.

Scrolling is such a common functionality and really what defined and set the NES apart from all the systems that came before it that I have no doubts it's on their minds as a feature they have to get into the engine at least for the August release. Hopefully at least...
User avatar
TheNew8bitHeroes
Posts: 251
Joined: Fri Feb 16, 2018 9:24 pm
Location: Sarasota, FL
Contact:

Re: On the topic of scrolling

Post by TheNew8bitHeroes » Sat Jun 23, 2018 3:12 pm

So let me give you guys some of the issues with scrolling, as it pertains to the engine right now.

Right now, how it works is, a screen is loaded, including its tilesets, its palettes, its nametable data, its collision data, its monster placements, its music, etc, which you define screen by screen. So then, the question starts to become...how do you translate that to scrolling across multiple screens? For most of that data, it is imperative that the screen be turned OFF in order to load (like tilesets, etc). So then...you'd have to load a whole platform level's data in one shot. But that would work different from a platform game than a screen specific, as you'd have to preload x amount of screens worth of data (like monster placement)...OR...you could have some check that when a player gets to a certain point, it loads monsters just off screen, based on the screen data for that new screen being loaded...but that's completely different than the current monster load protocols.

Now, add in collision to that. Our collision data is loaded into ram on a screen by screen basis when the screen loads. There isn't enough RAM space for 16 screens worth of collision data to be loaded in, so a routine has to be used to load in collision data procedurally. This, again, is completely different than how it handles things now, and there's no one way to do it.

Right now, you can ALREADY make the screen scroll (from one screen to the next) if you were to write a code to load in a second nametable to $2400. You can even test basically graphical scrolling right now...I think the variable is called xScroll and yScroll in our engine. Write a code that, when you press the right dpad button, it increases xScroll, and you'll see the screen "scroll" behind you. That doesn't handle anything practical, though, like the collisions or data loads. It's a lot to work out how to make this not only work, but work in a way that is congruent with the rest of the code for all the variable options a game might have.

Lastly, the "will NESmaker support scrolling" is the wrong question. NESmaker is a front end that allows you WYSIWYG access to the engine underneath. The engine underneath is meant to be infinitely modifiable. There is no single engine underneath...code for the underlying engine will likely be created for years to come by us, by other users, etc. NESmaker can "do" whatever a NES, using mapper30, can do, which absolutely includes scrolling. Whether we'll have a "one button press" solution to engage scrolling or non scrolling in August? I'm not sure. But don't make the misconception that NESmaker 'can't do scrolling yet'. We just have many other things that are primary fundamentals of ANY game engine that need to be nailed down first, before we get to particulars of genres. Someone who was into it could absolutely write routines into the underlying ASM that would make NESmaker games observe scrolling right now. And let's not forget, still one of the most renowned homebrews thus far is Battlekid...a platformer that has zero scrolling. Just something to consider :-)
User avatar
MistSonata
Posts: 125
Joined: Fri Feb 16, 2018 7:10 am

Re: On the topic of scrolling

Post by MistSonata » Sat Jun 23, 2018 7:05 pm

You know, something has always bugged me about the answer to the "Can NESmaker do _____" question, it always leaves me with more questions and it never seems satisfying. I think I know why. First I think it's because people who ask this aren't experienced NES programmers, and saying "yeah it's possible if you write it into the code" isn't helpful because if they were capable of writing complicated engines in ASM they wouldn't really need NESmaker. But also I think it's because we (and I'm including Joe in this) don't know what's going to be possible with NESmaker and its modules, not really.

I'm sure Joe has a pretty good idea, based on what the NES is capable of and what can be done easily with it, but it's possible that when it comes time to code the module, there'll be hiccups and setbacks that mean we won't be able to include x feature in the base module. It's like asking what a person will be like before they're even born. Sure, you could reasonably assume that they'll have legs, but sometimes people are born without legs. Both parents have brown eyes, so the baby will probably have brown eyes too, unless they have blue eyes, or green eyes. That's how I see it at least.

Anyway, right now I've been perusing through a commented disassembly of Final Fantasy 1's code, hoping to get an idea of how I might get NESmaker to do the kind of vertical and horizontal scrolling you see in that game. Just in case it's not going to be a feature in the RPG module.
Bucket Mouse
Posts: 84
Joined: Wed Mar 07, 2018 2:25 am

Re: On the topic of scrolling

Post by Bucket Mouse » Sat Jun 23, 2018 8:13 pm

I hope you guys haven't coded yourselves into a corner. When this is a non-beta finished product, people are going to be buying it expecting to make scrolling platformers. There will probably be more people wishing to make platformers than people wishing to make RPGs. And it's not just that genre...the shooting module will need a scrolling background, unless the intent is to make really old Space Invaders clones. A fighting game or brawler without the ability to scroll and advance would feel dull. So what now?
User avatar
Mihoshi20
Posts: 273
Joined: Tue Mar 06, 2018 11:47 pm

Re: On the topic of scrolling

Post by Mihoshi20 » Sat Jun 23, 2018 10:52 pm

There's a lot you can do with the Pitfall approach and Battle Kid, Metal Gear, or even TrollBurner are very good examples, but even those two would have benefited greatly if their levels could scroll as even if you look at Battle Kid there isn't too much going on and many rooms play path double duty. Granted I am happy you guys are setting the tool up for flexibility and focused on making it diverse in the beta phase. Though when it comes to working on and finalizing the modules, many people who have and will take interest in NESmaker for making their dream platformer won't be thinking Battle Kid. Instead they'll be thinking Megaman or Mario 3, myself included. When the platformer module is considered ready for consumer consumption, I think it's safe to assume some form of at least rudimentary horizontal or toggle-able horizontal/vertical scrolling functionality will be included out of the box as it's the single most function above all else that defined the NES. Adventure, fighting, or RPG modules don't need it as much, or clever NESmaker users will find ways to mix it into their games given the wonderful modular nature of the tool.

It's safe to say though most of the general market for NESmaker will be making platformers or brawlers the most and will expect basic scrolling functions out of the box.
User avatar
CutterCross
Posts: 87
Joined: Sat Apr 28, 2018 9:42 pm

Re: On the topic of scrolling

Post by CutterCross » Sat Jun 23, 2018 11:24 pm

I think the best UI solution is that NESmaker should let the user make "metascreens" in the overworld editor, made up of several individual screens. There could be three different colored metascreens: One would allow X-axis scrolling only, one would allow Y-axis scrolling only, and one would allow scrolling in both the X and Y axis (Not at the same time though, I'm talking more along the lines of Dragon Quest/Final Fantasy scrolling, where it scrolls in the direction the player moves, up down left or right. I'm not talking about 4-way scrolling like SMB3). This would allow the user to easily tell how the scrolling connects each individual screen (whether it be a level, or an entire overworld), and let them control where and how they want their screens to scroll.

Obviously, there would be some extra limitations for metascreens. You wouldn't be able to change tilesets or palettes inside the metascreen (or at least not without disasterous results). And if you're planning for X and Y axis scrolling like an RPG overworld and have a HUD that appears when you press a button (like Dragon Quest) you'd have to have grid-based movement to make sure the HUD lines up correctly with the screen every time. Also diagonal movement with an X and Y axis scrolling would be out of the question. (I know 4-way scrolling is a nightmare.)

Now I'm no programmer, and I know the engine would need a MASSIVE overhaul for scrolling to be implemented in an intuitive way, but it's one of those things that should have been included and planned from the outset. I can safely say that most people (including myself) expected one-directional scrolling to be a base feature in NESmaker, and have been planning games around that feature.

I'm still very happy for the progress NESmaker has made so far! I'm not dismissing any of the hard work that's making it a reality, but I think it could have been planned better with reguards to scrolling.
User avatar
Mihoshi20
Posts: 273
Joined: Tue Mar 06, 2018 11:47 pm

Re: On the topic of scrolling

Post by Mihoshi20 » Sat Jun 23, 2018 11:37 pm

I'd be perfectly happy with the in tool option to lock the game to only horizontal or vertical scrolling, least for the basic platformer module. Most general users won't need 4 way directional scrolling or even Mario 2 horizontal and vertical scrolling and those who do will probably have the knowhow to code it up anyhow.

As for the best way to do it, that parts tricky, if doing mario 1 style one way scrolling, could probably just do the screen you're on in $2000 and the next screen to the right of your current screen on $2400 though I'm not sure how you'd do the screen above or below ala Ducktales unless that could be handled the same way the engine does it now.

If doing two way scrolling ala Mario 2's horizontal parts or Ducktales, I wouldn't even know where to begin as I don't know enough about the hardware only what I've observed watching the nametable debug function of FCEUX.
User avatar
CutterCross
Posts: 87
Joined: Sat Apr 28, 2018 9:42 pm

Re: On the topic of scrolling

Post by CutterCross » Sat Jun 23, 2018 11:50 pm

Mihoshi20 wrote:
Sat Jun 23, 2018 11:37 pm
I'd be perfectly happy with the in tool option to lock the game to only horizontal or vertical scrolling, least for the basic platformer module. Most general users won't need 4 way directional scrolling or even Mario 2 horizontal and vertical scrolling and those who do will probably have the knowhow to code it up anyhow.

As for the best way to do it, that parts tricky, if doing mario 1 style one way scrolling, could probably just do the screen you're on in $2000 and the next screen to the right of your current screen on $2400 though I'm not sure how you'd do the screen above or below ala Ducktales unless that could be handled the same way the engine does it now.

If doing two way scrolling ala Mario 2's horizontal parts or Ducktales, I wouldn't even know where to begin as I don't know enough about the hardware only what I've observed watching the nametable debug function of FCEUX.
Like I said, I'm no programmer, but most of what I know about NES scrolling came from here: https://www.youtube.com/watch?v=wfrNnwJrujw
It's a really good video showing how the NES handles all kinds of scrolling.
Post Reply