News:

11 March 2016 - Forum Rules

Main Menu

Tinkering with TMNT (NES)

Started by SomeOldGuy, April 25, 2023, 05:39:04 PM

Previous topic - Next topic

SomeOldGuy

Hey guys, how goes it!
Another game I've always thought should've had better graphics was TMNT.  In particular, I never cared for the way Konam...err Ultra drew the Shredder cut scene.  This is my attempt to make him look more like the cartoon version (still a very rough draft).



My plan, at the very least, is to redraw all of the cut scenes.  I'll be putting together notes, something I wish I would have done with Robocop, as I make progress/figure things out and post them here for anyone who's interested.  ;D  And please, If any of y'all have anything to add or correct let me know.  I could really use an explanation of what the numbers I've put in parenthesis are for/are doing in regard to the background tiles.



Hmmm... this image should be much larger.  Link is below:

https://images2.imgbox.com/cc/b8/yDnEyqqb_o.png

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

Googie

Bruh, that looks tight I really dig it. Can't wait to see more.  :thumbsup:

Noside

This is a fresh spin to the game! awesome! :woot!:

Creature667

That game could also use an overhaul in level design as well as enemy behavior. But I am digging the graphical changes you've made thus far. I'll be keeping an eye out for this one for sure.
Yo! I be gettin' them fat stacks shootin smack, makin rom hacks and sniffin butt-cracks... Boy,  I know this rhyme is whack, and my use of alliteration isn't exactly exhilarating, but it sure beats being depressed and on medicine, dressed like a furry and beating my meat to venison.

Uberdubie

#4
I love your ideas and this looks phenomenal!  My only tiny criticism is currently Shredder's eyes look a bit 'warm' (I know it's not final).  Smaller pupils and slightly narrower eyes would help the definitive look as well imo.

I don't know if you'd consider making this an addendum to the 'Return to New York' hack, since gameplaywise I consider that the best way to play this game now.  That hack has been planning to add more appropriate characters etc, so your work combined there could be dream come true... either way though, I look forward to seeing what you do with this!

Antonio Nero

This is ace. I like when people put a different style on a game. Changing the graphic as the cartoon version can be a good feature for those who like to play the game with that draw style.

It reminds me the Genesis version of Hyperstone Heist where the player can choose between the comic or cartoon colours of the turtles (original, not a hack).

SomeOldGuy

Hey Googie and Noside, thanks for the kind words.  I wouldn't have the slightest idea how to edit enemy behavior Creature667, but level design, maybe  ;D   Hope the eyes look a bit better now Uberdubie.  And yeah, I wouldn't mind doing a colab with Guitarpalooz, it'd be fun.  Thanks Antonio Nero, might just have to attempt a comic faithful version next.  ;)   
 


Well, he's coming along slowly but surely.  In order to cover the parts of his arms that were showing as blue, I had to repurpose the sprites used for the effect to make his eyes blink.  Problem is they disappear and re-appear every few seconds. Anybody got any ideas how to stop them disappearing?  Guitarpalooz???     

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

SomeOldGuy

Hey Everybody!  ;D
Was working on the title screen and could use some help.  So, when the player presses start, the "press start" text will flash for a few seconds before going into the game.  To accomplish this the text tiles are swapped out temporarily for a blank tile.  Since the background in the unmodified game is black, the tile is 00.  Being that I changed the background to blue, I need that tile to be 0E (the tile I'm using for blue).

Could someone take a look at the debugger pic and help me change the 00 to 0E:angel:       




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

theNightStar

#8
I honestly think Konami's Shredder opening sprite is a hundred times better and (MOD EDIT: removed unnecessary remark)

Besides this game was never based on the cartoon anyway, it was based on the Playmates toy line, so these changes seem pointless to me.

Lawlezz


Cyneprepou4uk

#10
QuoteCould someone take a look at the debugger pic and help me change the 00 to 0E.

You need to add LDA #$0E before CA86, and also replace BEQ with BNE at CA89.

Your changes will affect all the other blinking text which is drawn via this subroutine. You might consider going back to 00 again, making blue background some other way.

Bavi_H

#11
Quote from: SomeOldGuy on May 13, 2023, 06:05:48 PMCould someone take a look at the debugger pic and help me change the 00 to 0E.
Here is my attempt to fix it:

NES file         │  CPU
─────────────────┼────────────────────
1CA96: 20 E0 FF  │  CA86: JSR $FFE0
                 │               
1FFF0: A9 0E     │  FFE0: LDA #$0E
       9D 00 03  │        STA $0300,X
       A9 00     │        LDA #0
       60        │        RTS


Quote from: Cyneprepou4uk on May 14, 2023, 01:18:20 AMchanges will affect all the other blinking text which is drawn via this subroutine.
If I understand the routine correctly, I think the blinking might only apply to the "PUSH START" text. But I may not have analyzed the code enough, and I didn't play the game very far to test.

Spoiler
It appears the routine below is called with A set to an index into a table of addresses starting at CAB7, and the routine begins copying from the address in the table to a buffer somewhere in the $300 to $3FF range. Mem[$22] is used as the index into the $300 buffer.

The routine below appears to have two entry points:

Set A to 0 and call CA58 to blank out the PUSH START text.
Set A to 0 and call CA5E to print the PUSH START text.
Set A to other numbers and call CA5E to print other items.


Edit:
Calling CA58 with A set to hex 00 to 7F will print the entries from hex 00 to 7F in the table.
Calling CA58 with A set to hex 80 to FF will blank out the entries from hex 00 to 7F in the table.

A is saved to Mem[2] at the beginning of the routine, then later Mem[2] is checked if it is positive non-negative in the instruction CA80. This check seems to be so that the instructions from CA82 to CA8B are only executed if the first address (index 0) in the CAB7 table is being processed. (The first address in the CAB7 table is for the "PUSH START" text.) In the instructions from CA82 to CA8B, the Mem[3] counter is used to keep the first three bytes that were copied (the number of bytes in the data and the PPU address), but then after Mem[3] is decremented down to zero, the rest of the bytes that were copied (the "PUSH START" characters) are overwritten with zeros.

In fact, after the Mem[3] counter reaches zero, this causes a zero to end up in the accumulator (instruction CA82), which is then used to zero out the each of the "PUSH START" characters that were loaded into the $300 buffer (instruction CA86).

; A = Index of word address from CAB7 to begin copying to $300
; Mem[$22] = index into $300 buffer.

CA58  TAY          ; \
CA59  LDA #$03     ; |
CA5B  STA $03      ; | Mem[3] = 3
CA5D  TYA          ; /

CA5E  STA $02      ;   Mem[2] = A

CA60  ASL A        ; \                          ; \
CA61  TAY          ; / Y = A*2                  ; |
CA62  LDA $CAB7,Y  ; \                          ; |
CA65  STA $00      ; / Mem[0] = Mem[$CAB7 + Y]  ; |
CA67  LDA $CAB8,Y  ; \                          ; |
CA6A  STA $01      ; / Mem[1] = Mem[$CAB8 + Y]  ; / Word[0] = Word[$CAB7 + A*2]

CA6C  LDX $22      ;   X = Mem[$22]
CA6E  LDY #$00     ;   Y = 0

CA70  LDA ($00),Y  ;   A = Mem[Word[0] + Y]
CA72  INY          ;   ++Y
CA73  CMP #$FF     ;   If $FF
CA75  BEQ $CA98    ;   Goto $CA98
CA77  CMP #$FE     ;   If $FE
CA79  BEQ $CA98    ;   Goto $CA98

CA7B  STA $0300,X  ;   Mem[$300 + X] = A
CA7E  LDA $02      ; \
CA80  BPL $CA8D    ; / If Mem[2] is non-negative, Goto $CA8D
CA82  LDA $03      ; \
CA84  BNE $CA8B    ; / If Mem[3] <> 0, Goto $CA8B
CA86  STA $0300,X  ;   Mem[$300 + X] = A
CA89  BEQ $CA8D    ;   If zero, goto $CA8D
CA8B  DEC $03      ;   --Mem[3]
CA8D  INX          ;   ++X
CA8E  BNE $CA70    ;   If not zero, Goto $CA70

CA90  LDA #$FF     ;
CA92  LDX $22      ;
CA94  STA $0300,X  ;
CA97  INX          ;
CA98  STX $22      ;
CA9A  RTS          ;   Return


CAB7  D6 CA F7 CA FF CA D3 AA  ;   CAD6, CAF7, CAFF, AAD3,
      DA AA E1 AA E4 CA EB CA  ;   AADA, AAE1, CAE4, CAEB...

CAD6  0A 22 CB 1F 24 22 17 00  ; \ 0A 22CB "PUSH START" FE
      22 23 10 21 23 FE        ; /

CAE4  03 22 0D 14 1D 13 FE     ;   03 220D "END" FE

CAEB  08 21 AD 12 1E 1D 23 18  ; \ 08 21AD "CONTINUE" FE
      1D 24 14 FE              ; /

CAF7  04 23 E3 AA AA AA AA FE  ;   04 23E3 attributes AA AA AA AA, FE

CAFF  04 22 0F E4 FA FB FC FE  ;   04 220F "WEAPON:" FE

[close]

Bavi_H

Quote from: Cyneprepou4uk on May 14, 2023, 01:18:20 AMchanges will affect all the other blinking text which is drawn via this subroutine.
I was looking at it again, and now I agree with you. I edited my previous post.

Spoiler
Calling CA58 with A set to hex 00 to 7F will print the entries from hex 00 to 7F in the table.
Calling CA58 with A set to hex 80 to FF will blank out the entries from hex 00 to 7F in the table.

I forgot that the "positive" in the BPL instruction really means "non-negative" (the N flag is clear). My previous comments were based on thinking the zero would fail the BPL check, I forgot that zero actually passes a BPL check.

After the A*2 calculation, original A values of hex 80 to FF will be the same as original A values of hex 00 to 7F. So it can make sense to pass in "negative" A values (A in the range of hex 80 to FF) and test for them later on with the BPL check.

My previous claim there were two entry points was based on how Mesen showed the routine. Now I'm not so sure.
[close]

Cyneprepou4uk

Quote from: Bavi_H on May 14, 2023, 01:31:49 PMI was looking at it again, and now I agree with you. I edited my previous post.

Hey, that's cool. As your NES hacker colleague, I appreciate you always take a deep look into things and help others on this forum.

SomeOldGuy

Well, you can't please everybody NightStar:laugh:

Thanks Lawlezz;D

Cyneprepou4uk, once again, thank you Sir for providing me with your expert guidance.  :beer:

Bavi_H, thank you. Your code works perfectly!  :thumbsup: 

After playing through the game, other than the time blinking in the swimming stage, I'm not sure where you'd find another instance of blinking text.  After losing all 4 turtles, pressing continue takes you immediately back to the level you were in and end just immediately ends your game.  Maybe the feature was never implemented... or am I missing something here? ?


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

Bavi_H

Quote from: SomeOldGuy on May 15, 2023, 09:46:54 PMAfter playing through the game [...] I'm not sure where you'd find another instance of blinking text. [...] am I missing something here? ?

I'm not sure if there is blinking text elsewhere in the game (I only got a little into the first level), but I just wanted to take back my previous statements that (I thought) the code had a special check and only blinked the PUSH START text. After I looked at it again, I agree with Cyneprepou4uk that it could apply to anything that routine can print out. It appears the routine can either print text or blank out the same about of cells that the text would take, depending on how the routine is called. I don't know how often the "blank out" type of call happens, but if it does happen in other places then it will now blank out with the "full blue block" tile (or whatever color it happens to be at the time).

SomeOldGuy

Hmmm... That's interesting Bavi_H, I'll have to see if I can make the text on the Continue/End screen blink.  ;D   

So, been working on the Party Wagon today and, at this scale, I think this is the best I'm gonna be able to do.  I think it's pretty close to the source materiel but if any of y'all experienced spriters have suggestions to make it better, I'm all ears.  ;D
 



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

SomeOldGuy

Hey guys, once again I'm a bit over my head and can use some help.  ;D   

Been working on the turtle select screen and pretty much got it looking the way I want, but need to remove the numbers that show the amount of special weapons your turtle has left.  If you take a look at the pic below, they show up as garbage tiles under the scroll weapon in the hack (had to repurposed the numbers for other things).   

I've been able to find the PPU addresses to move these tiles around the screen ( 0xEDBD to 0xEDC4 ) but can't figure out how to edit the number tiles that are being displayed.   I would just write EA's where the PPU addresses go, and remove them, but the way the game was coded, there are 6 tiles drawn in a row.  The first 4 tiles show how much damage your turtle has taken, followed by the 2 tiles for the numbers. 

It seems I'd need a solution that writes blank tiles (00) instead of numbers.  Any thoughts fellas?
 

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

Cyneprepou4uk

At 0x0EB78 write 2C instead of 20. This will disable printing weapon counter on the screen.