Author Topic: Moon Cresta - improved free play  (Read 2284 times)

philmurr

  • Jr. Member
  • *
  • Posts: 31
    • View Profile
Moon Cresta - improved free play
« on: May 07, 2016, 10:51:38 PM »
Moon Cresta seems to be one of those games people either love or hate.  I've fond memories of playing it in a hotel bar in Scarborough (North East England) back in the early 1980's so I think it's a pretty cool game.

It was never on my list of games to hack, but a throw away comment by Jase on UKVAC a couple of weeks ago about a high score save kit got me interested.

I've already made the modifications to the high score saving code (it wasn't too hard as the game already has a high score table and name entry routine) so it was just a case of copying them to and from NVRAM.  Not having a boardset (yet), I haven't confirmed this works so it's not ready to be released, but hopefully will be in the next couple of weeks.

Whilst doing the high score save hack I noticed it's another game with annoying freeplay mode, where it sits at the "press start" screen rather than going through the attract mode.  I decided to also do this modification (and been able to test in Mame) which is what the code below is for.  Basically when in freeplay mode, it still displays "free play" on the screen, but now cycles through the attract mode.  Just pressing P1 or P2 start, begins the game.

The hack has been done for the "mooncrstuku" ROMset, and as the addressing is different across different variants it will only work with that one.  The code itself is simple so could be adapted to the other ROMs by changing the absolute addresses, so I've also included the source below.

Changes to be made:-

ROMset mooncrstuku

ROM smc1f

#0030 3A 00 B0 E6 0C FE 0C C2 4D 01 3A 35 80 B7 C2 4D 01 3A 00 A8 CB 47 3E 01 20 0A 3A 00 A8 CB 4F 3E 02 CA 4D 01 32 32 80 C3 81 01

#00F4 C3

#0115 30 00

ROM smc6f

#2FCE (individual ROM address #07CE) C9

Source code

; enhanced free play @0x0114
call freeplaycode    ;intercept for hack @ 0x0030

freeplaycode: ld a,(0xb000) ; are we in free play mode?
and 12
cp 12
jp nz,0x014d     ; return to main code if not
ld a,(0x8035)
or a
jp nz,0x014d     ; don't add dummy credits if already registered
ld a,(0xa800)
bit 0,a              ; P1 button pressed
ld a,1
jr nz,addcredit
ld a,(0xa800)
bit 1,a               ; P2 button pressed?
ld a,2
jp z,0x014d       ; return to main code if not
addcredit: ld (0x8032),a    ; add 1 or 2 credits depending on P1/P2 pressed
jp 0x0181          ; return to main code

; 0x2fce = RET (C9)   ; don't jump to static screen
; 0x00f4 = JP (C3)    ; don't jump to static screen