THE SEUCK VAULT
Menus | Tips | Archive | Links | Contact
MORE TIPS FROM RICHARD BAYLISS
Looking at the memory map I noticed how the SEUCK score codes work. So I did a little experiment. Jon Wells pointed out in The Secret of SEUCKcess where to find the data that is being used for the player scores and it works as well.
Note: this will only work on games that have not been altered or had the Kit removed from memory.
Score for player 1 is at $5EA3-$5EA8 and the score for player 2 is at $5EA9-$5EAE.
Say you were doing something like a high-score table in assembly language or you just wanted to do the "game over" and show the result of what the player did score, then you would need to convert all 6 chars of the score data into screen char values. The general routine uses chars @ABCDEFGHI, which represents the numbers that were used in the game's score.
@ = 0, A = 1, B = 2, C = 3, D = 4, E = 5, F = 6, G = 7, H = 8, i = 9
Now then, if you wanted to turn the score data into screen code then you could use a M/C monitor or (preferably an assembler or cross assembler) to do the job nicely.
CONVSC LDA $5EA3,X ; For player 1, use $5EA9 for player 2
STA $0400,X ;(plot to screen)
CPX #$06 ; READ 6 CHARS BEFORE END JOB!
The screen shot below is for those who are using an Action Replay cartridge M/C monitor.
Andrew: This example code simply plots the score value into the top left corner of the screen assuming it is at $0400.
Reset using a cartridge like Action Replay and execute where you placed the
code. (In the example above, this would be $6600). Now that you know of the @ABCDEFGHI, you should be aware that if the score value @@AGF@ were used, it would produce the score as 001750 at the top left of the screen, just like the screen below.
In a few games which I had found on a Binary Zone PD games disk, there were some SEUCK games, which had the score and lives displayed in multi-colour instead of hi-resolution. This was originally discovered with Halloween Police. I wondered to myself how was that done? Would a lot of programming be required? The answer to that is in fact, NO because all it takes to make a multi-colour score is a simple little poke, and here it is:
or, in machine code:
A 4565 LDA #$FF
The disadvantage to this is that you will have to save the SEUCK font data from $F400-$F800 and load it into a font editor and make your multi-colour score data, then load the new multi-colour font to $F400 again.
Assuming you like to make your SEUCK games more interesting, like add some enhancements to the background of your game. SEUCK does not support options to make animated backgrounds. A pity really, because it would make things slightly more interesting for the gamer.
When I was enhancing Imaginator with a new front end and also music, etc. I thought that the level's background would look really cool if I added a waterfall type of effect. The simple way around it for me was to animate the chars that used the water, by scrolling each char and after the end of the chars, wrap all over again. Here is how I did it.
First of all, I used chars 160 to 163. Knowing that the SEUCK's own background charset data lies at $f800-$ffff. It was time to calculate values. Each 1x1 char is #$08 bytes long. So I had to figure out where char 160 lies (160 is not hexadecimal in SEUCK) so to calculate where the char lies:
CHAR NUMBER * 8 + CHARSET MEMORY START ($F800)
160 * 8 + $F800 = $FD00
That is where char 160 lies in the SEUCK game. So now, we shall add some code to animate the chars.
In the game Imaginator V3 this is the M/C source of how to animate the waterfall chars.
Now here it is as assmembly mode (for those using a cross assembler or any other assembler). Don't forget to change value $4503 to JSR $6580 (or where you are placing additional code). At $6580 add JSR $6600 and then at $6583 JSR $6643 then at $6586 add RTS.
;PLACE CODE AT $6600 (OR WHERE ELSE YOU
WANT TO PUT IT)
ANIMCHAR INC $02 ; DELAY COUNTER
LDA $02 ; CHECK DELAY
CMP #$04 ; VALUE OF DELAY = 4?
RTS ; ELSE TERMINATE PROCESS
DOANIM LDA #$00 ;ZERO COUNTER
LDA $FD07 ; LAST BYTE OF CHAR 160
STA $FD00 ; STORE TO FIRST BYTE OF CHAR 160
LDA $FD0F ; LAST BYTE OF CHAR 161
STA $FD08 ; STORE TO FIRST BYTE OF CHAR 161
LDA $FD17 ; LAST BYTE OF CHAR 162
STA $FD10 ; STORE TO FIRST BYTE OF CHAR 162
LDA $FD1F ; LAST BYTE OF CHAR 163
STA $FD18 ; STORE TO FIRST BYTE OF CHAR 163
WRAPCHRS LDA $FCFF,X ; PUSH BYTE FORWARD
STA $FD00,X ; TO NEXT BYTE
JSR $5C94 ; Sound effects
Here's the result:
Back to the top