 |
|
 |
|
| Posts by tehaxor69 |
|
|
|
|
|
|
|
|
Yoshi's Island score system editing
SNES 0x0EB4C3 ROM 0x0736C3 Max number of flowers that can be collected.
SNES 0x03B369 ROM 0x01B569 Max number of red coins that can be collected.
SNES 0x7EE23C ROM 0x00643C Max number of stars that can be collected, 0x012C = 30.0 normal
SNES 0x7EE333-0x7EE334 ROM 0x006533 If number of stars exceeds this value, the next value will be stored, value is normally 100.0
SNES 0x7EE338-0x7EE339 ROM 0x006538 Value to store use with previous line
SNES 0x7EE2D0 ROM 0x0064D0 What the stars count up to(The 10 free ones), 0x6D = 10.9 normal
SNES 0x7EE2E9 ROM 0x0064E9 What value the SFX plays, 0x64 = 10.0 normal
SNES 0x02944D ROM 0x01164D Number of stars mid ring adds, 0x64 = 10.0 normal
SNES 0x01DAC4 ROM 0x00DCC4 Number of +10 stars adds, 0x64 = 10.0 normal
SNES 0x01DAE7 ROM 0x00DCE7 Number of +20 stars adds, 0xC8 = 20.0 normal
SNES 0x01DC8F ROM 0x00DE8F If the number of stars you have is >= this value then you will be denied the +10/+20 stars 0x012C = 30.0 normal
The number of stars is just the StarValue / 10
RAM 0x010396 Stars to add
RAM 0x7E03B8 Number of flowers
RAM 0x7E03B4 Number of red coins
RAM 0x7E03B6 Number of starts * 10
RAM 0x010380 Total score
RAM 0x010398 Item to give Yoshi
Items:
0x00 None
0x01 10+ stars
0x02 20+ stars
0x03 POW
0x04 6 Eggs
0x05 Magnifying glass
0x06 Enemies turn into ?clouds
0x07 Water mellon
0x08 Ice mellon
0x09 Fire mellon
Scoring system
Code
Stars
$01/BA75 C9 1E 00 CMP #$001E A:0001 X:001B Y:0030 P:envmxdizC //Checks if at max or over
$01/BA84 A9 1E 00 LDA #$001E A:057B X:0138 Y:0018 P:envmxdiZC //Stores value
SNES 0x01B7FD ROM 0x00B9FD = (MaxAmountOfStars / 10) * 2 + 0x50
SNES 0x01B7FE ROM 0x00B9FE = (MaxAmountOfStars % 10) * 2 + 0x50
Changes the value for the pause menu
$01/D050 C9 1E 00 CMP #$001E A:0019 X:0018 Y:0000 P:envmXdizc //Target for max stars
$01/D05A A9 1E 00 LDA #$001E A:0400 X:0018 Y:0000 P:envmXdizC //Number to show when condition is set
Changes the value at the end of level score screen
$01/BA75 C9 1E 00 CMP #$001E A:0009 X:001B Y:00A0 P:envmxdizC //Target for max stars
$01/BA84 A9 1E 00 LDA #$001E A:057B X:0138 Y:0018 P:envmxdiZC //Number to show when condition is set
Max red coins
$01/BAD8 C9 14 00 CMP #$0014 A:0000 X:001F Y:00A0 P:envmxdizc //Checks if at max or over
$01/BB12 A9 14 00 LDA #$0014 A:48FF X:0002 Y:00A0 P:eNvmxdizc //Stores value
SNES 0x01B815 ROM 0x00BA15 = (MaxAmountOfRedCoins / 10) * 2 + 0x50
SNES 0x01B816 ROM 0x00BA16 = (MaxAmountOfRedCoins % 10) * 2 + 0x50
Changes the value for the pause menu
$01/D0E6 C9 14 00 CMP #$0014 A:0019 X:0001 Y:0000 P:envmXdizc //Target for max red coins
$01/D0F0 A9 14 00 LDA #$0014 A:0400 X:0001 Y:0000 P:envmXdizC //Number to show when condition is set
Corrects the value at the end level score screen
$01/BB03 C9 14 00 CMP #$0014 A:0001 X:001F Y:00A0 P:envmxdizc //Target for max red coins
$01/BAD8 C9 14 00 CMP #$0014 A:000B X:001F Y:00A0 P:envmxdizc //Target for max red coins, another
$01/BB12 A9 14 00 LDA #$0014 A:057B X:01F8 Y:0018 P:envmxdiZC //Number to show when condition is set
Max flowers
Changes the value for the pause menu
$01/D182 E0 0A CPX #$0A A:000A X:000A Y:0000 P:envmXdizc //Value should be MaxFlowerCount * 2
Corrects the values at the end level score screen
$01/BB91 E0 05 00 CPX #$0005 A:0000 X:0005 Y:0006 P:eNvmxdizc //Target for max flowers
SNES 0x01B82E ROM 0x00BA2E = MaxAmountOfFlowers * 2 + 0x50
Pots that generate stars
$0D/9339 C9 36 01 CMP #$0136 A:0104 X:0050 Y:000A P:envmXdizc //This value should be the max number of stars + 0x0A
Flowers that generate stars
$0C/C9DE AD B6 03 LDA $03B6 [$0C:03B6] A:0006 X:004C Y:00FC P:envmXdizc //Load star value
...
$0C/C9FA A9 1E LDA #$1E A:0015 X:0044 Y:000A P:envMXdizc //This value - StarCount is the number of stars to generate before turning into coins
$0C/CA02 A9 08 LDA #$08 A:0009 X:0044 Y:000A P:envMXdizC //Number of stars/coins for flower to generate
?Clouds that generate stars
$03/C790 AD B6 03 LDA $03B6 [$03:03B6] A:00FF X:003C Y:00FF P:envmXdizC //Load star value
$03/C793 85 04 STA $04 [$00:7964] A:006D X:0044 Y:00FF P:envmXdizC
$03/C795 C9 2C 01 CMP #$012C A:006D X:0044 Y:00FF P:envmXdizC //This value - StarCount is the number of stars to generate before turning into coins
Midring
SNES 0x7EE23C ROM 0x00643C [2C 01] Midring bails if this value reached, 0x12C = 30.0
Score Board
$01/BC2D C9 64 00 CMP #$0064 A:002D X:0004 Y:0002 P:envmxdizc //This is the value of the High Score condition
If this value is less than or more than 100, you are sill awarded 100 pts and level will be marked 100% complete.
How to edit the score table, I might write a utility to edit this -Visually
SNES 0x01B7D7-0x01B7EC ROM 0x00B9D7-0x00B9EC "HIGH SCORE" table
3A 3C 4E 0E 10 0C 0E 4E 24 04 1C 22 08 36 36 36 36 54 5C 4E 3A 3C
SNES 0x01B7ED-0x01B804 ROM 0x00B9ED-0x00BA04 Star line table
3E 40 4E 24 26 00 22 24 36 36 36 36 36 36 50 34 56 50 68 6A 4E 50 6C 6E
SNES 0x01B805-0x01B81C ROM 0x00BA05-0x00BA1C Red coin table
46 48 4E 04 1C 10 1A 24 36 36 36 36 36 36 50 34 54 50 68 6A 4E 50 6C 6E
SNES 0x01B81D-0x01B834 ROM 0x00BA1D-0x00BA34 Flower table
42 44 4E 0A 16 1C 2C 08 22 24 36 36 36 36 36 50 34 5A 68 6A 4E 50 6C 6E
SNES 0x01B835-0x01B849 ROM 0x00BA35-0x00BA49 "TOTAL POINTS" table
26 1C 26 00 16 4E 1E 1C 10 1A 26 24 36 36 36 36 36 36 50 6C 6E
0x3E 0x40 = Star image
0x42 0x44 = Flower image
0x46 0x48 = Red coin image
0x6C 0x6E = Pts.
0x00 = A
0x02 = B
0x04 = C
0x06 = D
0x08 = E
0x0A = F
0x0C = G
0x0E = H
0x10 = I
0x12 = J
0x14 = K
0x16 = L
0x18 = M
0x1A = N
0x1C = O
0x1E = P
0x20 = Q
0x22 = R
0x24 = S
0x26 = T
0x28 = U
0x2A = V
0x2C = W
0x2E = X
0x30 = Y
0x32 = Z
0x34 = /
0x36 = CENTER DOT
0x38 = -
0x3A 0x3C = Un-light lights?
0x4E = SPACE
0x50 = 0
0x52 = 1
0x54 = 2
0x56 = 3
0x58 = 4
0x5A = 5
0x5C = 6
0x5E = 7
0x60 = 8
0x62 = 9
Setup score table
SNES 0x01E291 Setup score screen jump table, This gets called when you complete a level
A7 E2 Window out
F0 E2
78 E3
42 E4
E4 B5 Clears tiles
B9 B6
C9 B6 Draws the score board
5B B9
BA B9
F0 E2
A0 E4
Calculate scores jump table
$01/B58E FC 92 B5 JSR ($B592,x)[$01:BA1C] A:FF7F X:0019 Y:0030 P:envMXdizC
0x19 Waits
0x1B Calculates stars
0x1D Waits
0x1F Calculates red coins
0x21 Waits
0x23 Calculates flowers
0x25 Waits
0x27
0x29 Waits
0x2B Draws chalk under or around score
0x3D Waits
Here are some screen shots with edited text, and a 25/25/50 score system



Notice how the "TE" gets cut off
|
| Last edited on 2011-01-18 07:38:16 AM by tehaxor69. |
|
|
|
Here are all of Sluggy's tables
TABLES:
0x02D4AF - Heart speed
06 00 0A 00 0E 00 12 00
0x02D4B7 - Time heart stays big
00 02 C0 01 80 01 40 01
0X02D4BF - Size scale
C0 00 D0 00 E0 00 F0 00
0X02D4C7 - Value at which to reverse size scaling (from shrinking to growing)
60 00 68 00 70 00 78 00
0X02D4CF - Size scale
40 00 30 00 20 00 10 00
0x02D435 - Push rate / move forward
80 64 48 2C
0x02D189 - Softness table
60 FF 5C FF 58 FF 54 FF
POINTERS:
Table 1
0x02D556
Table 2
0x02D564
Table 3 a same as b
0x02D569
Table 3 b same as a
0x02D56E
Table 4
0x02D571
Table 5
0x02D57C
Table 6
0x02D48B
Table 7
0x02D219
Code
$02/D555 F9 AF D4 SBC $D4AF,y[$02:D4AF] A:0074 X:0044 Y:0000 P:envmXdizC //Reads table 1
$02/D563 B9 B7 D4 LDA $D4B7,y[$02:D4B7] A:0014 X:0044 Y:0000 P:envmXdiZc //Reads table 2
$02/D568 D9 BF D4 CMP $D4BF,y[$02:D4BF] A:0200 X:0044 Y:0000 P:envmXdizc //Reads table 3
$02/D56D B9 BF D4 LDA $D4BF,y[$02:D4BF] A:0200 X:0044 Y:0000 P:envmXdizC //Reads table 3
$02/D570 D9 C7 D4 CMP $D4C7,y[$02:D4C7] A:00C0 X:0044 Y:0000 P:envmXdizC //Reads table 4
$02/D57B 79 CF D4 ADC $D4CF,y[$02:D4CF] A:00C0 X:0044 Y:0000 P:envmXdizc //Reads table 5
$02/D48A B9 35 D4 LDA $D435,y[$02:D435] A:0020 X:0044 Y:0000 P:envmXdiZC //Reads table 6
$02/D218 BD 89 D1 LDA $D189,x[$02:D189] A:0000 X:0000 Y:005C P:envmXdiZc //Reads table 7
Edit:
@Yoshis Fan
The extra flowers should count as long as you change:
0x0EB4C3 = Limit
0x01D183 = MaxFlowers * 2
0x01BB92 = MaxFlowers
0x01B82E = MaxFlowers * 2 + 0x50
The max score is still 100
and the goal does requires a FX modification.
|
| Last edited on 2011-01-18 11:20:48 AM by tehaxor69. |
|
|
|
@Zeldara109
For big Bowser's battle the start positions are:
0x0DD33B 2 Bytes = X axis
The Y-axis carries over from the battle before.
Code
X-axis
$0D/D33A A9 40 02 LDA #$0240 A:0202 X:0044 Y:0001 P:envmXdizC
$0D/D33D 8D 8C 60 STA $608C [$0D:608C] A:0240 X:0044 Y:0001 P:envmXdizC
|
|
|
|
@Yoshis Fan
To give Boo 6 hits use
0x04B8B4 = 0x0028
0x04BAEF = 0x0200
|
|
|
|
Kamek modifications
0x03E813 = Kamek's BG to FG transistion time
0x03E8A7 = Kamek's FG to BG transistion time
0x03E881 = Kamek makes noise when this value is reached
0x03E7C5 = Kamek's BG speed
0x03E848 = Kamek's FG speed
0x03E7A3 = Kamek's BG X-axis offset
0x03E7A5 = Kamek's FG X-axis offset
0x03E7BF = Kamek's BG Y-axis offset
0x03E842 = Kamek's FG Y-axis offset
Code
The time it takes Kamek to transition from the BG to FG
$03/E813 A9 3C 00 LDA #$003C A:FFCE X:0058 Y:0002 P:eNvmXdizc
$03/E816 9D 96 7A STA $7A96,x[$03:7AEE] A:003C X:0058 Y:0002 P:envmXdizc
The time it takes Kamek to transition from the FG to BG
$03/E8A7 A9 3C 00 LDA #$003C A:0120 X:0058 Y:0000 P:envmXdiZC
$03/E8AA 9D 96 7A STA $7A96,x[$03:7AEE] A:003C X:0058 Y:0000 P:envmXdizC
The value at which Kamek makes noise
$03/E881 C9 20 00 CMP #$0020 A:002D X:0058 Y:0004 P:envmXdizC
Kamek's BG speed
$03/E7C5 A9 00 FE LDA #$FE00 A:073C X:0058 Y:0000 P:envmXdizc
$03/E7C8 9D 20 72 STA $7220,x[$03:7278] A:FE00 X:0058 Y:0000 P:eNvmXdizc
Kamek's FG speed
$03/E848 A9 80 04 LDA #$0480 A:07B0 X:0058 Y:0004 P:envmXdizc
$03/E84B 9D 20 72 STA $7220,x[$03:7278] A:0480 X:0058 Y:0004 P:envmXdizc
Kameks BG X-axis
$03/E7B1 AD 39 00 LDA $0039 [$03:0039] A:0000 X:0058 Y:0000 P:envmXdiZC
$03/E7B4 18 CLC A:0000 X:0058 Y:0000 P:envmXdiZC
$03/E7B5 6D A3 E7 ADC $E7A3 [$03:E7A3] A:0000 X:0058 Y:0000 P:envmXdiZc
$03/E7B8 9D E2 70 STA $70E2,x[$03:713A] A:0120 X:0058 Y:0000 P:envmXdizc
Kameks FG X-axis
$03/E834 AD 39 00 LDA $0039 [$03:0039] A:0002 X:0058 Y:0004 P:envmXdizC
$03/E837 18 CLC A:0000 X:0058 Y:0004 P:envmXdiZC
$03/E838 6D A5 E7 ADC $E7A5 [$03:E7A5] A:0000 X:0058 Y:0004 P:envmXdiZc
$03/E83B 9D E2 70 STA $70E2,x[$03:713A] A:FFD0 X:0058 Y:0004 P:eNvmXdizc
Kameks BG Y-axis
$03/E7BB AD 3B 00 LDA $003B [$03:003B] A:0120 X:0058 Y:0000 P:envmXdizc
$03/E7BE 18 CLC A:070C X:0058 Y:0000 P:envmXdizc
$03/E7BF 69 30 00 ADC #$0030 A:070C X:0058 Y:0000 P:envmXdizc
$03/E7C2 9D 82 71 STA $7182,x[$03:71DA] A:073C X:0058 Y:0000 P:envmXdizc
Kameks FG Y-axis
$03/E83E AD 90 60 LDA $6090 [$03:6090] A:FFD0 X:0058 Y:0004 P:eNvmXdizc
$03/E841 18 CLC A:07A0 X:0058 Y:0004 P:envmXdizc
$03/E842 69 10 00 ADC #$0010 A:07A0 X:0058 Y:0004 P:envmXdizc
$03/E845 9D 82 71 STA $7182,x[$03:71DA] A:07B0 X:0058 Y:0004 P:envmXdizc
@Yoshis Fan
Im working on 3 sprites,
One will add 0xFFD8 instead of 0x0010 to Kamek's Y-axis,
a Kamek blocker
another Kamek blocker that allows one more pass.
There is a difference of 56 pixels for the Y-axis, in secret 6 on the GBA.
|
|
|
|
@Zeldara109
Here is how to prevent the wall from rising in Naval Piranha's battle
0x01A4A3 = [EA EA EA EA]
0x01A4D7 = [EA EA EA EA]
0x01A510 = [F0]
Offsets:
0x017A84 = How high the wall will rise
0x01A49B = How fast the wall rises
Code
$01/A30C 9D 38 7A STA $7A38,x[$01:7A84] A:0005 X:004C Y:0026 P:envmxdizc //Store wall hight, from 0x017A84, 0x05
$01/A510 D0 0C BNE $0C [$A51E] A:07C0 X:004C Y:003C P:envmXdizC //Checks if the wall is done rising
$01/A4A3 22 D2 85 00 JSL $0085D2[$00:85D2] A:0047 X:004C Y:004C P:envmXdizc //Makes the booming sound
$01/A4D7 22 95 92 10 JSL $109295[$10:9295] A:7978 X:004C Y:0000 P:envmXdizC //Causes the wall to rises up
$01/A4D7 22 95 92 10 JSL $109295[$10:9295] A:7979 X:0004 Y:0002 P:envmXdizC
$01/A49A A9 20 00 LDA #$0020 A:0000 X:004C Y:004C P:envmXdiZc //How fast the wall rises
$01/A49D 9D F8 7A STA $7AF8,x[$01:7B44] A:0020 X:004C Y:004C P:envmXdizc
Salvo's battle
Here is how to prevent the wall from being created in Salvo's battle
0x01A41B = [EA EA EA EA]
0x01A449 = [EA EA EA EA]
0x01A450 = [EA EA EA EA]
0x01A427 = [F0]
Offsets:
0x01A3B2 Wall creation speed table, 2 bytes per entry
20 00 00 00 1F 00 20 00 20 00
Code
$01/A427 D0 0A BNE $0A [$A433] A:07A0 X:0054 Y:0000 P:eNvmXdizc //Checks if the wall is done generating
$01/A41B 22 95 92 10 JSL $109295[$10:9295] A:0001 X:0054 Y:0000 P:envmXdizc //Draw block
$01/A449 22 D2 85 00 JSL $0085D2[$00:85D2] A:0047 X:0054 Y:0000 P:envmXdizc //Sound
$01/A450 22 21 8B 00 JSL $008B21[$00:8B21] A:01E6 X:0054 Y:0000 P:envmXdizc //Draw smoke
$01/A3ED B9 B2 A3 LDA $A3B2,y[$01:A3B2] A:0000 X:0054 Y:0000 P:envmXdiZc
$01/A3F0 9D 98 7A STA $7A98,x[$01:7AEC] A:0020 X:0054 Y:0000 P:envmXdizc //Store wall speed
@Yoshis Fan
Yes I am using the 0x1BA-0x1FF sprites, Kamek's sprite is being modified to work with the blockers. The first one will stop Kamek and with no final pass,
like the GBA one in secret 6 just above the area in the screenshot below
|
|
|
|
To get a 1-up(non bubble)
Change 0x0F8EAC from 0xB7 to 0xBE
To prevent it from moving, either change:
0x03C1B0 from 0xF0 to 0xD0 -swaps X type movements
or
0x03C1AE from 0x10 to 0x00 -Both X types don't move
|
|
|
|
@Yoshis Fan
Originally posted by Yoshis FanWorld Maps' Tilemaps
Where are the tilemaps of each world map stored? They consist of Layer 1 and Layer 2 tiles. For example in World 1 the Level Points, the paths, the chomp sharks, some hills, some clouds, the cave mushrooms, the white flowers and the 1-4 and 1-8 castle are Layer 1. Some clouds and hills, some tulips, small hills and rocks are Layer 2. I think they have got different tables for each world, one for Layer 1 objects and one for Layer 2 objects.
The map tile data uses the same compression as the sprites,
If you already decompressed the sprites using Ycompress, then all you need to do is open the ALLGFX.bin file in a hex editor.
World 1 compressed data starts at SNES 0x5B2BAB ROM 0x1B2DAB and decompressed data at ALLGFX 0x11DE00
World 2 compressed data starts at SNES 0x5B35C3 ROM 0x1B37C3 and decompressed data at ALLGFX 0x120E00
World 3 compressed data starts at SNES 0x5B3C69 ROM 0x1B3E69 and decompressed data at ALLGFX 0x122E00
World 4 compressed data starts at SNES 0x5B457B ROM 0x1B477B and decompressed data at ALLGFX 0x124E00
World 5 compressed data starts at SNES 0x5B4D88 ROM 0x1B4F88 and decompressed data at ALLGFX 0x126E00
World 6 compressed data starts at SNES 0x5B561D ROM 0x1B581D and decompressed data at ALLGFX 0x128E00
All data gets decompressed by the FX Chip, SNES 0x08A980 is the address of the decompressor.
Data gets decompressed to 0x705800, then a DMA copies from here to VRAM
|
|
|
|
World 1
BG1 ALLGFX 0x11DE00 BG2 ALLGFX 0x11EE00
World 2
BG1 ALLGFX 0x120E00 BG2 ALLGFX 0x121E00
World 3
BG1 ALLGFX 0x122E00 BG2 ALLGFX 0x123E00
World 4
BG1 ALLGFX 0x124E00 BG2 ALLGFX 0x125E00
World 5
BG1 ALLGFX 0x126E00 BG2 ALLGFX 0x127E00
World 6
BG1 ALLGFX 0x128E00 BG2 ALLGFX 0x129E00
If you want I can also find the all the Yoshi positions.
Edit:
Now a overworld editor needs to be created.
|
| Last edited on 2011-01-24 08:33:04 AM by tehaxor69. |
|
|
|
Here are all 1024 tiles and what they look like for all 6 worlds

palettes are not correct in image.
I was also thinking about adding tiles after the X-8 Castles for the extra and special levels.
|
|
|
|
The first 2 bits of the second byte are used with the 8 from the first for 1024 tiles.
Byte 1 Byte 2
TTTTTTTT-VHLPPPTT
T = Tile, 1024
P = Palette, 8
L = Layer priority
H = Horizontal flip
V = Vertical flip
The icons differ in all worlds, there are two slots used for them shown in the image.
|
| Last edited on 2011-01-24 12:41:17 PM by tehaxor69. |
|
|
|
SRAM modification
Here is a xkas patch that allows YI to save the number/type of eggs, lives and coins you collect per file.
You only need to complete a level to save the values.
Code
header
lorom
ORG $01B6E7
JSL $10FFAF
NOP
NOP
ORG $10814E
JSL $10FFA2
ORG $10FFA2
LOAD_SRAM:
JSL $10FFBE
JSL $10FFCB
SEP #$20
LDY #$00
RTL
SAVE_SRAM:
SEP #$10
JSL $10FFCF
REP #$10
LDX #$03CE
LDY #$0000
RTL
LOAD_FILE_NUMBER:
LDA $111D
ASL
ASL
ASL
ASL
ASL
CLC
TAX
LDY #$00
RTL
LOAD:
JML $11FD86
SAVE:
JML $11FDBD
ORG $11FD86
STA $701FF0
PHX
LOAD_2:
LDA $707F80,X
PHX
TYX
STA $7E5D98,X
PLX
INX
INX
INY
INY
CPY #$10
BNE LOAD_2
LDA $707F7E,X
STA $7E0379
LDA $707F80,X
STA $7E037B
LDA #$0000
PLX
LDY #$0C
CLEAR_SRAM:
STA $707F80,X
INX
DEY
BNE CLEAR_SRAM
RTL
LDA $701FF0
TAX
JSR GET_ALL_EGGS
LDY #$00
SAVE_2:
PHX
TYX
LDA $7E5D9A,X
PLX
STA $707F82,X
INX
INX
INY
INY
CPY #$0E
BNE SAVE_2
LDA $7E0379
STA $707F80,X
LDA $7E037B
STA $707F82,X
LDA $701FF0
TAX
LDA $017DF6
STA $707F80,X
RTL
GET_ALL_EGGS:
PHX
SEP #$20
LDA #$00
LDY #$00
LP:
STA $7E5D9A,X
INX
INY
CPY #$0C
BNE LP
LDX #$3C
LDY #$00
READ_EGG_LOOP:
LDA $017380,X
CMP #$25
BEQ STORE_EGG
CMP #$24
BEQ STORE_EGG
CMP #$23
BEQ STORE_EGG
NEXT:
DEX
DEX
DEX
DEX
CPX #$00
BNE READ_EGG_LOOP
REP #$20
PLX
RTS
STORE_EGG:
PHX
TYX
STA $7E5D9A,X
PLX
INY
INY
BRA NEXT
;HIJACK GIVE 3 LIVES ROUTINE
ORG $179932
JSL $17FCF7
NOP
ORG $17FCF7
REP #$20
LDA $701FF0
TAX
LDA $707F8E
CMP #$0000
BNE SKIP
LDA #$0003
SKIP:
STA $7E0379
SEP #$20
RTL
I have tested it, haven't seen any side effects, it works well per file.
You can test the SRAM manually by changing values in the .sav file
File 1
0x7F80 <- [0C 00 25 00 25 00 24 00 24 00 23 00 23 00 E7 03 63 00]
File 2
0x7FA0 <- [0C 00 24 00 24 00 24 00 24 00 24 00 24 00 64 00 63 00]
File 3
0x7FC0 <- [0C 00 23 00 23 00 23 00 23 00 23 00 23 00 32 00 32 00]
File 1 should have 6 eggs, 2 green, 2 yellow, 2 red, 999 lives, 99 coins
File 2 should have 6 eggs, 6 yellow, 100 lives, 99 coins
File 3 should have 6 eggs, 6 red, 50 lives, 50 coins
|
|
| (restricted) |
|
|
Here is the new SRAM patch
Code
header
lorom
ORG $01B761
JSL $10FFAF
NOP
NOP
ORG $10814E
JSL $10FFA2
ORG $10FFA2
LOAD_SRAM:
JSL $10FFBE
JSL $10FFCB
SEP #$20
LDY #$00
RTL
SAVE_SRAM:
SEP #$10
JSL $10FFCF
REP #$10
LDY #$1000
LDX #$1E00
RTL
LOAD_FILE_NUMBER:
LDA $111D
ASL
ASL
ASL
ASL
ASL
CLC
TAX
LDY #$00
RTL
LOAD:
JML $11FD86
SAVE:
JML $11FDFC
;WE NEED TO BAIL IF IT'S A NEW GAME
ORG $11FD86
PHA
STA $701FF0
SEP #$20
CMP #$00
BEQ CHECK_IF_FILE_1_NEW
CMP #$20
BEQ CHECK_IF_FILE_2_NEW
CMP #$40
BEQ CHECK_IF_FILE_3_NEW
CHECK_IF_FILE_1_NEW:
LDA $707C02
BMI BAIL
BRA LOAD_1
CHECK_IF_FILE_2_NEW:
LDA $707C6A
BMI BAIL
BRA LOAD_1
CHECK_IF_FILE_3_NEW:
LDA $707CD2
BMI BAIL
BRA LOAD_1
BAIL:
REP #$20
PLA
TAX
LDA #$0003
STA $707F8E,X
LDA #$0000
STA $707F90,X
RTL
LOAD_1:
REP #$20
PLA
STA $701FF0
PHX
LOAD_2:
LDA $707F80,X
PHX
TYX
STA $7E5D98,X
PLX
INX
INX
INY
INY
CPY #$10
BNE LOAD_2
LDA $701FF0
TAX
LDA $707F8E,X
STA $7E0379
SEP #$20
LDA $707F90,X
STA $7E037B
REP #$20
LDA #$0000
PLX
LDY #$0C
CLEAR_SRAM:
STA $707F80,X
INX
DEY
BNE CLEAR_SRAM
RTL
LDA $701FF0
TAX
JSR GET_ALL_EGGS
LDY #$00
SAVE_2:
PHX
TYX
LDA $7E5D9A,X
PLX
STA $707F82,X
INX
INX
INY
INY
CPY #$0E
BNE SAVE_2
LDA $701FF0
TAX
LDA $7E0379
STA $707F8E,X
LDA $7E037B
STA $707F90,X
LDA $017DF6
STA $707F80,X
RTL
GET_ALL_EGGS:
PHX
SEP #$20
LDA #$00
LDY #$00
LDX #$00
LP:
STA $7E5D9A,X
INX
INY
CPY #$0C
BNE LP
LDX #$3C
LDY #$00
READ_EGG_LOOP:
LDA $017380,X
CMP #$25
BEQ STORE_EGG
CMP #$24
BEQ STORE_EGG
CMP #$23
BEQ STORE_EGG
NEXT:
DEX
DEX
DEX
DEX
CPX #$00
BNE READ_EGG_LOOP
REP #$20
PLX
RTS
STORE_EGG:
PHX
TYX
STA $7E5D9A,X
PLX
INY
INY
BRA NEXT
;HIJACK GIVE 3 LIVES ROUTINE
ORG $179932
JSL $17FCF7
NOP
ORG $17FCF7
REP #$20
LDA $701FF0
TAX
LDA $707F8E,X
CMP #$0000
BNE SKIP
LDA #$0003
SKIP:
STA $7E0379
SEP #$20
RTL
Getting the eggs the right color and amount was the hardest part.
There was no check for a new file, now there is one.
The way to determine if a file is new or has a save is to check these
SRAM 0x7C02 File 1
SRAM 0x7C6A File 2
SRAM 0x7CD2 File 3
If the value is >= 0x80 the file is new other wise it has save data.
Edit:
@Zeldara109
Here is how to make the intro play music from the header
change:
SNES 0x01B0D7 ROM 0x00B2D7 from [8D 4E 01] to [EA EA EA]
Or you could change the hard-coded music:
Prologue -still works with 0x01B0D7 NOPed
SNES 0x10DB70 ROM 0x085D70
Level part
SNES 0x01B0D6 ROM 0x00B2D6
Here is a patch that will stop Kamek
For Kamek to stop attacking 2 conditions must be met:
1). You must be in the normal Yoshi form.
2). Kamek must pass sprite 0x1FF.
Code
header
lorom
;Hijack Kamek routine
ORG $03E3BC
JSL $BFFCE4
NOP
ORG $03D4F9
DB $F0, $FE
ORG $03D56F
DB $F5, $FE
;New 0x1FF pointer 1
ORG $03FEF0
JSL $BFFCEF
RTS
;New 0x1FF pointer 2
ORG $03FEF5
JSL $BFFD00
RTS
;New Kamek code
ORG $BFFCE4
TXA
STA $701FFF
LDA $70E2,X
SEP #$20
RTL
ORG $BFFCEF
;NEW SP 0X1FF CODE
LDA $007960
ASL
ASL
ASL
ASL
STA $701FF0
RTL
ORG $BFFD00
PHY
REP #$20
LDA $701FFF
TAX
LDA $70E2,X
CMP $701FF0
BPL KILL
LDA #$0000
STA $701FF2
DONE:
PLY
RTL
KILL:
LDA $7000AE
CMP #$0000
BNE DONE
LDY $16,X
CPY #$0000
BNE DONE
LDA #$FFFF
STA $7A96,X
BRA DONE
|
| Last edited on 2011-01-25 11:24:55 PM by tehaxor69. |
|
| (restricted) |
|
|
@Zeldara109
The patch won't save anything other than the green, yellow, red eggs, nothing to worry about.
This code flushes the egg stock
Code
LDA #$00
LDY #$00
LP:
STA $7E5D9A,X
INX
INY
CPY #$0C
BNE LP
This code reads in the eggs you have
Code
LDA $017380,X
CMP #$25 ;Green
BEQ STORE_EGG
CMP #$24 ;Yellow
BEQ STORE_EGG
CMP #$23 ;Red
BEQ STORE_EGG
@Yoshis Fan
Here are the other patches
Kamek blocker 2: SP 0x1FE
Once you get in range of this sprite, Kamek will never show again once he passes to the right or left of the screen.
Code
header
lorom
;Hijack Kamek routine, needs to be the same with all 3 codes
ORG $03E3BC
JSL $BFFCE4
NOP
;Type SP 0x1FE
ORG $03D4F7
DB $FA, $FE
ORG $03D56D
DB $FF, $FE
;New 0x1FE pointer 1
ORG $03FEFA
JSL $BFFD1C
RTS
;New 0x1FE pointer 2
ORG $03FEFF
JSL $BFFD29
RTS
;This code here is compatible with all 3 codes
;New Kamek code
ORG $BFFCE4
TXA
STA $701FFF
LDA $70E2,X
SEP #$20
RTL
ORG $BFFD1C
;NEW SP 0X1FF CODE
LDA $007960
ASL
ASL
ASL
ASL
STA $701FF0
RTL
ORG $BFFD29
PHY
LDA $701FFF
TAX
LDY $16,X
CPY #$0000
BEQ KILL
CPY #$0004
BEQ KILL
DONE:
PLY
RTL
KILL:
LDA #$FFFF
STA $7A96,X
BRA DONE
Kamek Y-offset: SP 0x1FD
This sprite increases the Y-offset of Kamek, should be placed anywhere after the Kamek sprite.
Code
header
lorom
;Hijack Kamek routine, needs to be the same with all 3 codes
ORG $03E3BC
JSL $BFFCE4
NOP
ORG $03E841
JSL $BFFD50
;Type SP 0x1FD
ORG $03D4F5
DB $04, $FF
ORG $03D56B
DB $09, $FF
;New 0x1FD pointer 1
ORG $03FF04
JSL $BFFD45
RTS
;New 0x1FD pointer 2
ORG $03FF09
JSL $BFFD45
RTS
;This code here is compatible with all 3 codes
;New Kamek code
ORG $BFFCE4
TXA
STA $701FFF
LDA $70E2,X
SEP #$20
RTL
ORG $BFFD45
LDA #$0001
STA $701FF4
RTL
ORG $BFFD50
PHA
LDA $701FF4
CMP #$0000
BEQ NORMAL
CMP #$0001
BEQ OFFSET
PLA
DONE:
RTL
NORMAL:
PLA
CLC
ADC #$0010
BRA DONE
OFFSET:
PLA
CLC
ADC #$FFD8
BRA DONE
|
| Last edited on 2011-01-26 10:14:43 AM by tehaxor69. |
|
|
|
Here is the progress on the overworld editor I've been working on
Supports:
Editing BG 1 Layer
Editing BG 2 Layer
Editing Yoshis positions
Imports/Exports world tile data
Toggle BG1/BG2/BG3/Sprites
Does animations
Grid boundaries
I would like to know what features others want to see in the overworld editor, so I can put them in before I release it.

Can anyone confirm that there is a missing tile on the world 1 BG 2 layer?

I have checked several versions, and even have seen this in YI walkthroughs on Youtube 5:38
|
|
|
|
You can use Tile Molester for that, use codec 4bpp planar, composite (2x2bpp)
Then for the palettes, you can import from a ZSNES save state
Here is a link Tile Molester 0.16
|
| Last edited on 2011-02-14 05:53:31 AM by tehaxor69. |
|
|
|
Yes, In addition to the overworld editor I am also adding a editor for the rotating 3D stuff in the title screen back ground
Title Screen 3D BG editing
Here are the addresses for the sprites/ rotating objects
ROM 0x87124-0x872DF -World 1-5
ROM 0x87361-0x87460 -Completed world 6
There are 4 bytes per object
Object format OO XX ZZ YY
OO = Object
XX = X cord
YY = Y cord
ZZ = Z cord
The cords all start from the center and move out from there.
Object list
0x00 = None
0x01 = Big Mountain
0x02 = Medium Mountain
0x03 = Small Mountain
0x04 = Tower with red pointy top
0x05 = Red castle large
0x06 = Volcano
0x07 = Small green mountain
0x08 = Flat raised green pain
0x09 = Small light gray castle
0x0A = Bigger small light gray castle
0x0B = Smaller green mountain
0x0C = Tiny light gray building
0x0D = Yoshi House?
0x0E = Ruble
0x0F = Green Tree
0x10 = Blue/Red fungus?
0x11 = Small brown tree
0x12 = Small green tree
0x13 = Brown tree
0x14 = Light gray ruble
0x15 = Cloud
0x16 = Buildings on cloud
0x17 = TNT Plunger?
0x18 = Grass
0x19 = Fungus?
0x1A = Small gray mountain
0x1B = path dot?
0x1C = White particle -frame 1
0x1D = White particle -frame 1
0x1E = White particle -frame 1
0x1F = White particle -frame 1
0x20 = White particle -frame 1
0x21 = White particle -frame 1
0x22 = White particle -frame 1
0x23 = Seagull -frame 1
0x24 = Seagull -frame 2
0x25 = Seagull -frame 3
0x26 = Seagull -frame 4
0x27 = Seagull -frame 5
0x28 = Seagull -frame 6
0x29 = Seagull -frame 7
0x2A = Seagull -frame 8
0x2B = Yoshi
0x2C = Yoshi
0x2D = Yoshi
0x2E = Yoshi
0x2F = Yoshi
0x30 = Yoshi
0x31 = Yoshi
0x32 = Yoshi
0x33 = Yoshi
0x34 = Yoshi
0x35 = Yoshi
0x36 = Yoshi
0x37 = Yoshi
0x38 = Yoshi
0x39 = Yoshi
0x3A = Yoshi
0x3B = Yoshi
0x3C = Yoshi
0x3D = Yoshi
0x3E = Yoshi
0x3F = Yoshi
0x40 = Yoshi
0x41 = Yoshi
0x42 = Yoshi
0x43 = Yoshi
0x44 = Yoshi
0x45 = Yoshi
0x46 = Yoshi
0x47 = Yoshi
0x48 = Yoshi
0x49 = Yoshi
0x4A = Yoshi
0x4B = Yoshi
0x4C = Yoshi
0x4D = Yoshi
0x4E = Yoshi
0x4F = Yoshi
0x50 = Yoshi
0x51 = Yoshi
0x52 = Yoshi
0x53 = Yoshi
0x54 = Yoshi
0x55 = Yoshi
0x56 = Yoshi
0x57 = Yoshi
0x58 = Yoshi
0x59 = Yoshi
0x5A = Yoshi
0x5B = Vine with white top
0x5C = small vine with white top
0x5D = 2 fungus
0x5E = Large shroom
0x5F = Small shroom
0x60 = Curled plant
0x61 = Pointy rock
0x62 = Small rock
0x63 = Small rock dark 1
0x64 = Small rock dark 2
0x65 = Small house
0x66 = Tall shroom 1
0x67 = Tall shroom 2
0x68 = Tall shroom 3
0x69 = Tall shroom 4
0x6A = Tall shroom 5
0x6B = Blank
0x6C = Dark tree
0x6D = Dark tree small
0x6E = Castle ruble
0x6F = Small ruble
0x70 = Dark building
0x71 = Dark building small
0x72 = Grey Castle
0x73 = Red wide castle
0x74 = Explosion 1 -palette flashes
0x75 = Explosion 2 -palette flashes
0x76 = Explosion 3 -palette flashes
0x77 = Explosion 4
0x78 = Explosion 5
0x79 = Explosion 6
0x7A = Explosion 7
0x7B = Explosion 8
0x7C = Explosion 9
0x7D = Explosion 10
0x7E = Flag 1
0x7F = Flag 2
0x80 = Flag 3
0x81 = Flag 4
0x82 = Flag 5
0x83 = Flag 6
0x84 = Flag 7
0x85 = Flag 8
0x86 = Flag 9
0x87 = Flag 10
0x88 = Flag 11
0x89 = Flag 12
0x8A = Cloud
0x8B = Yoshi -radiating 1
0x8C = Yoshi -radiating 2
0x8D = Yoshi -radiating 3
0x8E = Yoshi -radiating 4
0x8F = Yoshi -radiating 5
0x90-0xFF Garbage
Some objects are hardcoded like the Yoshi, Seagull, Volcano Smoke, Y-Flags, and ruble, but are still easy to edit.
These are the addresses for the ground tilemaps
Light
ROM 0x1F9A00
ROM 0x1F9DFF
Dark
ROM 0x1F9E00
ROM 0x1FA1FF
Edit:
Here are the tile map sets, these can be found in the ALLGFX 0x144E40, using codec 4bpp linear, reversed-order
and in ram at 0x7E8BBE, using codec 8bpp linear.
Light

Dark

I took the time to put the maps together
Light

Dark

As for the overworld map editor
Right now it supports:
BG 1 Editing
BG 2 Editing
BG 3 Editing
Yoshi position Editing
Hacks:
Fix green Yoshi offset bug
World limitation hack -support for easy 1-5 world setup
Change event triggers like the darkword and others
Can edit the Mini-Game code button sequence
Not done yet:
Yoshi walk paths.
Assign different palette indexes to Yoshis
Add icons to blank buttons
Add preview to world selector
Make GUI better looking
And others as I think of them.
|
| Last edited on 2011-02-22 04:09:37 PM by tehaxor69. |
|
| (restricted) |
|
|
|
|
|
|
|
|
 |
|
 |
The purpose of this site is not to distribute copyrighted material, but to honor one of our favourite games.
Copyright © 2005 - 2013 - SMW Central Legal Information - Link To UsTotal queries: 27
|
|
|
|