News:

11 March 2016 - Forum Rules

Main Menu

NES RoboCop with Arcade sprites

Started by SomeOldGuy, November 02, 2019, 05:54:49 PM

Previous topic - Next topic

Spooniest

Quote from: SomeOldGuy on December 06, 2019, 06:52:49 PM




Ohohohohohohoho

I was just goofing around, I didn't think you'd actually bother to do anything with it. :D Also, yeah, you don't see a lot of improvements to controls/gameplay and the like, that takes hard coding stuff that you can't simply hex edit in, it's kind of a pain to do. And of course, music is something only very few people know how to make for a NES game, so far as I know.
Yamero~~!

SomeOldGuy

Spooniest, There's no way I couldn't use your line, it's too perfect!  ;D
Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

SomeOldGuy

Hey Everybody!

I've been trying to educate myself on how NES sprites work and could use some help.  Forgive me if I use terms incorrectly as I'm still learning. 

Looking at the picture posted below, you can see that the first frame of Robocop's walking animation (left hand side) uses 8 sprites.  If I move sprite 5 up so that it's on the same plane as sprites 1 and 2, then shift sprites 6 through 8 back a few pixels so they line up properly with sprites 3 and 4, I can ALMOST get a complete image of the Arcade version of Robocop without adding any extra sprites.

   

My first question, can someone please show me how to find Robocop's sprite attributes so I can make the changes described above?

My second question, is there a way to add the extra sprite needed to complete the image? 

Any help you guys could provide would be greatly appreciated!  ;D





Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

Cyneprepou4uk

Usually sprite attributes are located in RAM at $0200-$02FF. If you get rid of enemies on the screen and move your player, you can easily see his sprites starting from $0200. If you set write breakpoints, you can find where these bytes are taken from. Better set breakpoints to tile number attributes because it's likely should be written "as is" unlike coordinates and flipping, which makes it easier to find.

To add more sprites to an animation, you need to move animation's data to some free space, then add more sprite data and change pointers to that data since you have moved it somewhere else.

SomeOldGuy

Cyneprepou4uk, the rom has been Nflated ( Thanks KingMike! ) from 256KB to 512KB.  Would it be a good idea to start fresh, move all of Robocop's redrawn sprites to the newly created extra space, and change the pointers/sprite data?     





Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...


SomeOldGuy

#46
Quote from: Cyneprepou4uk on December 24, 2019, 03:14:09 PM
Maybe

This makes me think I'm on the right track.  ;D

Here's the Nflated Patch
http://www.mediafire.com/file/ipq1msufxht0wbl/RoboCop_Nflated.ips/file

You can use yychr to see how the sprites should look in-game.


December 28, 2019, 12:50:51 AM - (Auto Merged - Double Posts are not allowed before 7 days.)

Cyneprepou4uk,  I took a look at the NES Memory address you told me about ($0200-$02FF) and I think I'm getting a better understanding of sprite attributes. ;D

If you look at the picture below, starting at $0200:
70 = Byte 0, the y-axis
41 = Byte 1, the tile index number
00 = Byte 2, the sprite's attributes - 40 flips the sprite horizontal, 80 vertical, C0 both horizontal & vertical
28 = Byte 3, the x-axis 

Using this info I was able to draw a complete Robocop on the screen in-game!  Of course when I moved him, his sprites went back to normal.

     

So I'm trying to do what you instructed and create some breakpoints (breakpoints, breakpoints, breakpoints) ;)  but I'm not quite sure I'm doing it correctly.  Will you give me a little more guidance? 





                                                                                         ;D








December 29, 2019, 05:59:20 PM - (Auto Merged - Double Posts are not allowed before 7 days.)




Hey Guys! 

Can somebody out there tell me if I have these breakpoints set up correctly and if so, what they're telling me?   ;D










Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

SomeOldGuy


Hey Everybody!

Check out my final patch of the year below:
http://www.mediafire.com/file/dxb8cvrs6m184mv/RoboCop_-_New_Years_Edit.ips/file

I finally figured out how to edit the targets on the bonus stage!  It looks much more like the arcade version now.  There are a few tweaks here and there but the bonus stage is pretty much complete.  ;D



And I had to add Spoonies quote cause it's awesome!  ;D



Happy New Year Y'all!  :beer:

Old Guy


;D




Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

Cyneprepou4uk

#48
Quote
Can somebody out there tell me if I have these breakpoints set up correctly and if so, what they're telling me?

Write breakpoint gets hit when something is trying to be written into that address.

Breakpoints are correct, but you don't need so many, usually a single one will do if you choose it right.

Forget about $C03E routine, it clears sprite memory before re-setting sprites. Concentrate on other breakpoint hits and see where byte is read from before writing to addresses of breakpoints.

To get you started:
LDA - load byte from somewhere into register A
STA - set byte from register A into address

Read manuals about 6502 opcodes and addressing modes

SomeOldGuy

Cyneprepou4uk, as always, thank you for your guidance!  ;D  I've downloaded the "MCS 6500 Microcomputer Family Programming Manual" and will look for other reference material when I have more free time.

I discovered where Robocop's sprites are in the ROM a few days ago and have been busy shifting them around like I mentioned in the previous post. 

Many of the animation frames have enough sprites (or an extra) and have been fixed.  Some, like his walking frames, require an extra sprite or two.  If you look at the ROM, his first frame (the walking frame pictured in the previous post) starts at E0B8 and goes to E0D7.  Then the same frame is drawn in reverse from E0D9 to E0F8.  There is a byte, 7F (E0D8), that separates the frame and its reverse image.

Oddly, starting at E0FE, this first frame and its reverse are repeated.  Robocop's second walking frame starts at E144.  Was this a mistake, and more importantly, can I steal these 16 sprites to use in other frames that need them?     

Between unique frames, say walking frame 1 and walking frame 2, is also the 7F byte but it's followed by 4 additional bytes.  In this case they are 34 81 4D 81.  Is this the pointer information?  It seems like 7F tells the game to stop drawing the sprites.  What are the other 4 bytes telling the game?  Is it telling the game which bank to pull the sprites from?  Do you need 4 bytes for that or does it mean more?  Can someone please explain what these bytes are used for?  Can I manipulate them to steal the extra sprites I need and finally fix Robocop?










Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

Cyneprepou4uk

Not sure about your manual. I used this one when I was a noob.

Your game has 2 sets of sprite data for both directions independently. You can re-use any sprite data you want for another animation.

What makes you think those 4 bytes are important anyway? Don't go crazy about every byte you see. Use Code/Data Logger.

SomeOldGuy

Hey Everybody!  ;D

Got a HUGE update for y'all this week!   

Get the new patch here:
http://www.mediafire.com/file/nx110ztosi4tiew/RoboCop_-_Edit_6.ips/file

It took a lot of creative sprite shifting but almost all of Robocop's animations have been fixed!  There are some instances (walking up and down stairs) where he still needs an extra sprite or two but he's now mostly complete!  The coolest one has to be the gun twirling animation.  ;D






Try it out, let me know what you think and if you spot any errors that I need to correct.


;D

Old Guy











Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

sics

It looks amazing, the romhacking needs more people like you :thumbsup:
Linktree  | Better a small finished project than a thousand giant ideas stuck in your system.

SomeOldGuy

Thanks sics, I respect you as an artist and your praise means a lot to me.  ;D
Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

Morinis

So played the patch.  Forgot how shitty of a player I am at this game so can't complement on the ED-209 as I didn't get that far :P


Just a few issues I've ran in to.



Something is going on with his leg while going up.  A sprite missing?




Same with here.  Guess this Robocop runs more on air power?  :o



....and lastly, not much of an issue.




I see on what you did there ;)









Other than that, feels better though THICC.  Very THICC.  That's all I got as I'll try to get to ED-209 and see what's going on there  :beer:
ROM Hacker, Reviewer and Critic.

Don't Know What Else To Say So... <3 You!

Googie

I'm gonna give this a spin right now, been meaning to cause I've been mad busy with other things. I'm a big fan of Robocop, hated the remake though...  :D

Spooniest

Pretty good, but as I said before, I'd kill for a music hack for this game. It's the same theme from Stage 1 through 3, as far as I can tell -_- Yeah, yeah, it's the Robocop music. Again.

Anyhoo. I found this:



This happened when I aimed upwards with the submachinegun weapon and fired.
Yamero~~!

SomeOldGuy

Hey Everybody!  ;D

Thanks for trying out the hack guys!  Here's an up date that should fix the issue Spooniest mentioned with the sub machine gun. 

http://www.mediafire.com/file/2tfj7yst8x8f1er/RoboCop_-_Edit_7.ips/file

Hey Sin eerrrr Morinis!, yeah, unfortunately those frames you pointed out are going to require an extra sprite or two.  :o  I'm studying up on pointers now and I have a theory on how the game works, but I won't get around to testing it until this weekend.  ::)

As far as ED-209,  he's still gonna need a lot of help.  If you have any thoughts, please let me know.  Once Robocop is 100% fixed (hopefully soon  ;D)  I'll start trying to learn more about meta sprites.


Googie, lemme know what you think!  As a fellow Robocop fan, is there anything that should be added? 


Spoonie! What's up man!  Trust me, I'd kill for a little variety in the stage music too!  Or at the very least a better rendition of the Robocop theme.  Thanks for your input BTW, I think I fixed it!  ;D
Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...

SuperStarFox

Question: The Quote "Be Fresh As Heck" (Only Because I Don't Want To Say The Actual Swear Word) Was This Based On The Arcade Game Or Was It Based On The Movie?  :huh:

SomeOldGuy

SuperStarFox, It's from Epic Rap Battles of History - RoboCop Vs Terminator ;D

New Patches below!

Blue Version: http://www.mediafire.com/file/llcmsdom93120g6/RoboCop_-_Edit_8_-_Blue.ips/file
Grey Version: http://www.mediafire.com/file/2xlulaxv2nu6xf4/RoboCop_-_Edit_8_-_Grey.ips/file

Thanks to Cyneprepou4uk I was able to figure out how the pointers work and steal the sprites I needed. :beer:  The code/data logger is a pretty amazing tool!

Both issues pointed out by Morinis have been fixed.




I think most all of RoboCop's animation frames have been fixed, but haven't thoroughly tested.  At this point I'm satisfied with how he looks and plan to start on ED-209.

Does anyone have any tips on how to tackle him? 
   

Good times create weak men, weak men create hard times.  Hard times create strong men, strong men create good times...