Zeldix Magic

Page 8 of 9 Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next

View previous topic View next topic Go down

Re: Zeldix Magic

Post by Euclid on Wed 15 Mar 2017 - 7:40

heh that's pretty much what my notes are like back then, inconsistent and confusing, you can probably tell the reason why I've never publicly released them (I have similar cat scratches for sprite placement / selection for the scrolling ending credits as well including changing how the exits scroll, as you may have noticed that's "different" in PW than original lttp)

Sorry for that, didn't have too much time to dump it (I just copied and pasted)

Lets start over again - all UNHEADERED addresses for sure this time.

To parse the ending credits data (both return of the king text and scrolling credits), I'll take one as an example:

0x7317A = EXECUTIVE PRODUCER

0x73170 - XX XX XX XX XX XX XX XX 07 23 3C 4F 3C 3A 4C 4B
0x73180 - 40 4D 3C 9F 47 49 46 3B 4C 3A 3C 49 FF


07 - start from the 7th tile from the left of the screen (Note scrolling credits have no vertical position, and return of the king section have them hardcoded)
23 - (23+1) / 2 = 0x12 bytes to read
Then read 12 bytes - 3C 4F 3C 3A 4C 4B 40 4D 3C 9F 47 49 46 3B 4C 3A 3C 49

For each 12 bytes look up the table definition and draw the character on screen at the position.

Now to pointers to the data.

Pointers start at 0x7393D

Data around there is as follows:
94 91 9B 97 8D 8B 9F 9B 83 8F 83 86 83 00 00 14
00 14 00 14 00 15 00 27 00 14 00 14 00 14 00 14
00 14 00 14 00 14 00 14 00 39 00 14 00 14 00 14


That 00 00, is a relative position to 0x73178, funnily enough, the next value is 14 00, which points straight to the FF! FF is a special placeholder to show a blank line (as the game's engine does)

In other words from the above
00 00 EXECUTIVE PRODUCER
14 00 BLANK
14 00 BLANK
14 00 BLANK
15 00 NAME FIRST LINE
27 00 NAME SECOND LINE
14 00 BLANK
14 00 BLANK
14 00 BLANK
14 00 BLANK
14 00 BLANK
14 00 BLANK
14 00 BLANK
14 00 BLANK
39 00 NEXT LABEL (forgot what it is)
14 00 BLANK
14 00 BLANK
...


This continues until the last pointer @ 0x73C4F, so the data ends at 0x73C50 (0x73C51 has assembly!) - you'll notice that the lines with the death counts have the place names written this way but not the actual number. That bit is hardcoded.


So the next thing is what about the RETURN OF THE KING data? (puns)

As you've graciously pointed out by your pictorial there's 4 byte control code rather than two in the credits area.

For the line THE RETURN OF THE KING, the data actually starts 4 bytes before 0x73F50 @ 0x73F4C
@0x73F40
30 A9 FF 9D 02 10 A9 01 85 14 AB 60 62 65 00 2B
2D 21 1E 9F 2B 1E 2D 2E 2B 27 9F 28 1F 9F 2D 21
1E 9F 24 22 27 20 62 E9 00 19 64 75 6E 71 68 61

62 65 00 2B
62 E9 00 19
63 09 00 19
62 EB 00 11
63 0B 00 11


First + second byte are related to the position of the data (16 bytes BIG endian) - to actually control the starting location of the text, you would subtract 2ONE for every tile you want to move left (62 64), and add 2ONE if you want to move it right (62 66). I could go into snes screen positioning tutorial but that would just bore you, but I can assure this this goes straight into a DMA RAM area to the GPU.
3rd byte is always - 00 (the code ANDs them out anyway lol)
4th byte - length - formula is (value + 1) / 2 in terms of text to read after that byte just like the above. So the first line we would read $16 bytes (THE RETURN OF THE KING)

Now last thing on the list is the pointers to THE RETURN OF THE KING.

See post below. Ignore all this stuff here.

DO note that they're extremely hardcoded and scattered around the rom - the first lot of it start at 0x742E1 - all relative positions to 73F4C - I have a feeling there's multiple lists of pointers based off the event control asm so if you want to juggle them it might become annoying.
@0x742E0
9E 00 00 3C 00 68 00 AA 00 E8 00 28 01 5B 01 98
01 CF 01 07 02 42 02 7D 02 B0 02 EA 02 22 03 52
03 95 03

00 00 - THE RETURN OF THE KING
3C 00 - HYRULE CASTLE (top)
68 00 - HYRULE CASTLE (bottom)
...
...

If you're really interested into getting into the gritty pointers, I'll need to dig up the rest of the data for you, unfortunately I've already spent like 90+ minutes writing this and I am sleepy and have work tomorrow so you'll have to wait till another day for rest of this data.



Last edited by Trovsky on Thu 23 Mar 2017 - 12:04; edited 3 times in total (Reason for editing : reformatted for me)
avatar
Euclid
                        
                        

Since : 2012-06-21

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Wed 15 Mar 2017 - 12:24

Euclid wrote:If you're really interested into getting into the gritty pointers, I'll need to dig up the rest of the data for you, unfortunately I've already spent like 90+ minutes writing this and I am sleepy and have work tomorrow so you'll have to wait till another day for rest of this data.

Thank you so much I really appreciate that you took over an hour to make this. If you could get info on those other pointers, I would greatly appreciate it. Again thank you! Very Happy

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Euclid on Sat 18 Mar 2017 - 9:11

I have make a few mistakes up there which I'll have to correct here

After having some time to go through the ending with a debugger on the credits pointers

@0x742E0
9E 00 00 3C 00 68 00 AA 00 E8 00 28 01 5B 01 98
01 CF 01 07 02 42 02 7D 02 B0 02 EA 02 22 03 52
03 95 03

00 00 - First screen (return of the king)
3C 00 - second screen (sanctuary)
68 00 - village
... etc

There are 16 screens in total so 17 pointers (one to mark the end) makes sense.

Basically the data for the pointers to the screens are
73F4C + 00 -> 73F4C + 3C - 1
73F4C + 3C -> 73F4C + 68 - 1

and so forth.

If you see any control code data at the end of the block of data, make sure you keep it there when you make modifications.


With regards to the position, the value you change is by 1 (not 2, i keep thinking of different addresses), edited the post above to correct this.


Also had a look at my music notes - 0xD0000 was the only offset i have, but I'm sure you know that already.


Last edited by Trovsky on Thu 23 Mar 2017 - 12:06; edited 1 time in total (Reason for editing : format)
avatar
Euclid
                        
                        

Since : 2012-06-21

Back to top Go down

Re: Zeldix Magic

Post by Euclid on Sat 18 Mar 2017 - 9:48

Misc offsets by various people which you may find useful

Code:

Normal entrance addresses are:
14E4F - X Scroll
14D45 - Y Scroll
15724 - Door location
Starting location addresses are:
15BB4 - X Scroll
15BC2 - Y Scroll
15C32 - Door location
+ 0x200 header

PS: Sephiroth3 swapped X and Y scrolls in HM!

Dungeon Maps (default lttp one, not conkers)
Code:

Agahnim 2 dungeon map (used as temp and test since i don't need it)

57BCB:
0F 0F 0F 0F 0F
0F 0F 0D 0F 0F
0F 0F 1D 0F 0F
0F 0F 0F 0F 0F
0F 0F 0F 0F 0F

Room pointers for 7F Agahnim 2 from the looks of it.

57621: start of room pointers...

0F 0F 0F 0F 0F
0F 0F 11 0F 0F
0F 0F 21 22 0F
0F 0F 0F 32 0F
0F 0F 0F 0F 0F

Room pointers for B1 Church. (first ever map)

57C00 - 57CB9 dungeon map graphic data (tile to use...)

Entrance blocksets
Code:

0x15C08 in a non headered rom, the start location 0 blockset.
Sequential


Enemy Damages (they're in Hyrule Add ons)
Code:

Here's the snippet of code in Hyrule Add ons which reads the rom for data

Public Sub readData()

    Dim i As Integer
    Open fileName For Binary As #1
    'get damage table
    i = 0
    While (i < 50)
        Get #1, &H37627 + 1 + i, damageTable(i + 1)
        i = i + 1
    Wend
    'get health
    i = 0
    While (i < 256)
        Get #1, &H6B373 + 1 + i, enemyHealth(i + 1)
        i = i + 1
    Wend
    'get enemy damage area
    i = 0
    While (i < 256)
        Get #1, &H6B466 + 1 + i, enemyDamage(i + 1)
        i = i + 1
    Wend
    Close #1
   
    'read sprite names text
    i = 0
    Open (App.Path + "\names.cfg") For Input As #2
    While (i < 256)
        Line Input #2, enemyName(i + 1)
        i = i + 1
    Wend
    Close #2
   
End Sub

Magic Usage
Code:

3B287 - fire/ice rod
3B28A - 3 spells
3B28D - magic powder
3B290 -
3B293 - Red Staff (block making one)
3B296 -
3B299 - torch
3B29C -
3B29F - Blue Staff (start using)

Note Cape is coded somewhere else.

Damage Pointers
Code:

36F33 - Damage ptr of weapon - 4 bytes (also determines which enemies you can kill with)
6BAF1 - Damage table of weapons (including items like boomerang)

Overworld Events:
Code:

0x77664 - overworld events
Area   Event         
0   64F7      64F7   Tree Stump gets drawn
1   64F7         
2   64F7         
3   AAF7      AAF7   ?
4   AAF7         
5   AAF7         
6   AAF7         
7   AAF7         
8   B1F7      B1F7   
9   B1F7         
A   64F7         
B   B1F7         
C   B1F7         
D   B1F7         
E   B1F7         
F   B1F7         
10   B1F7         
11   B1F7         
12   B1F7         
13   B1F7         
14   C7F7      C7F7   Stair grave gets drawn and is opened.
15   E4F7         
16   E4F7         
17   E4F7         
18   E4F7      E4F7   Bird Statue
19   E4F7         
1A   FEF7         
1B   FEF7      FEF7   Hyrule Castle Gate gfx gets drawn
1C   FEF7         
1D   27F8      27F8   
1E   27F8         
1F   27F8         
20   E4F7         
21   E4F7         
22   27F8         
23   FEF7         
24   FEF7         
25   27F8         
26   27F8         
27   27F8         
28   27F8         
29   27F8         
2A   27F8         
2B   27F8         
2C   2DF8         
2D   2DF8         
2E   2DF8         
2F   2DF8         
30   2DF8      2DF8   Staircase for heart piece.
31   2DF8         
32   33F8         
33   33F8         
34   33F8         
35   33F8         
36   33F8         
37   33F8      33F8   Bombable (ice cave) and staircase shared with dark world
38   2DF8         
39   2DF8         
3A   39F8      39F8   Staircase kept open.
3B   3FF8      3FF8   Watergate, shared with dark world.
3C   E6F9      E6F9   Fire Rod burn, keep open.
3D   E6F9         
3E   E6F9         
3F   E6F9         
40   E6F9         
41   E6F9         
42   2EFA      2EFA   Ganon tower seal open.
43   2EFA         
44   2EFA         
45   5BFA      5BFA   Staircase opened.
46   5BFA         
47   61FA      61FA   Turtle rock keep open
48   E6F9         
49   E6F9         
4A   B4FA      B4FA   Gargoyle Switch pulled
4B   2EFA         
4C   2EFA         
4D   5BFA         
4E   5BFA         
4F   B4FA         
50   B4FA         
51   B4FA         
52   B4FA         
53   B4FA         
54   B4FA         
55   B4FA         
56   B4FA         
57   B4FA         
58   B4FA         
59   B4FA         
5A   CFFA      CFFA   Big Bomb wall bombed.
5B   CFFA         
5C   CFFA         
5D   F6FA         
5E   F6FA      F6FA   Monkey and the level 1 door.
5F   F6FA         
60   B4FA         
61   B4FA         
62   0BFB      0BFB   Hammered all things down, cave opened.
63   CFFA         
64   CFFA         
65   11FB      11FB   Mazy Mire rain stoped and level opened.
66   F6FA         
67   F6FA         
68   11FB         
69   11FB         
6A   11FB         
6B   27F8         
6C   11FB         
6D   11FB         
6E   11FB         
6F   11FB         
70   11FB         
71   11FB         
72   64FB      64FB   
73   64FB         
74   64FB         
75   64FB         
76   64FB         
77   33F8         
78   11FB         
79   11FB         
7A   64FB         
7B   3FF8         
7C   64FB         
7D   64FB         
7E   64FB         
7F   64FB         


Grass Colors and issues
Code:

Grass Color
$0B/FEB2 A2 32 2A    LDX #$2A32 <-- xBBB BBGG GGGR RRRR

You hate brown grass corners?
$02/C698 - Area 03/43
$02/C69C - Area 05/45
$02/C6A0 - Area 07/47

Change the C9 XX to C9 FF and it should disappear from the areas listed above.
avatar
Euclid
                        
                        

Since : 2012-06-21

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Sat 18 Mar 2017 - 11:08

Thanks, Euclid!

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Thu 23 Mar 2017 - 23:11

Do you happen to have the table the credits use for the character values and colors? I know this was provided to me, but I'd like to have documentation on how the game stores the colors and tiles and the ROM location for it. I'd rather not have the character values embedded into the editor. Currently, I can read the developer credit pointers and select tiles from an image of tiles.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Thu 23 Mar 2017 - 23:39



A WIP screenshot for fun. The CHR table on the left is just for debugging, it will be gone once the character ROM data is located or is embedded into the program.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Euclid on Sat 25 Mar 2017 - 6:56

Trovsky wrote:Do you happen to have the table the credits use for the character values and colors? I know this was provided to me, but I'd like to have documentation on how the game stores the colors and tiles and the ROM location for it. I'd rather not have the character values embedded into the editor. Currently, I can read the developer credit pointers and select tiles from an image of tiles.
Never looked into it and don't intend to. I decompiled the table via taking a zst save state and checked out the vram data there, it's probably loaded there just after the triforce room.
avatar
Euclid
                        
                        

Since : 2012-06-21

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Sun 9 Apr 2017 - 23:51

Credit text is now viewable (the people credits, “The King Returns” text is not viewable). The text viewing gets messed up after 40 or so pointers. Perhaps there's multiple pointer tables for the credits?

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Fri 12 May 2017 - 21:12

New update:

  • The above bug was fixed
  • The utility was split up into separate projects to keep things organized
  • I converted Sylvain "Skarsnik" Colinet's C++ for BPP reading to C# and it makes reading much faster.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Sun 14 May 2017 - 2:45

Minor update: Reading monologues is much more efficient. It takes a half a second instead of three seconds to read the first bank. The speed issue was from weird quirks in the code I made. Currently working on implementing DTE table.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Sat 20 May 2017 - 20:03

Currently working on displaying the dialogue like it would in the game. The game uses variable width font and stores the width of each character somewhere. Documentation for this would be helpful. I did implement DTE table reading thanks to Euclid's help.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by ShadowOne333 on Tue 23 May 2017 - 22:44

It's amazing how well this project is progressing Smile
Is there anyway in which we can try beta builds of it to test it out and bring up feedback about it?

ShadowOne333
Rank: Rope
Rank: Rope

Since : 2016-04-06

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Tue 23 May 2017 - 23:30

For SunGodPortal, a new feature:



ShadowOne333 wrote:It's amazing how well this project is progressing Smile
Is there anyway in which we can try beta builds of it to test it out and bring up feedback about it?

The program is in alpha instead of beta. You'll have to compile from the source code yourself. Stuff is incomplete, so I suggest holding off for now. I appreciate the enthusiasm. Smile

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by SunGodPortal on Wed 24 May 2017 - 0:01

I have a quick way that I test my text changes but it still involves loading the game up in an emulator. Being able to see the text as it would appear in game would save so much time and headache.
avatar
SunGodPortal
                             
                             

Since : 2015-01-26

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Wed 24 May 2017 - 0:16

SunGodPortal wrote:I have a quick way that I test my text changes but it still involves loading the game up in an emulator. Being able to see the text as it would appear in game would save so much time and headache.

I recall an offhand comment about you testing out your new monologue with the Zelda text. That's why I coded this feature. The code's up so you can try it out now!

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by SunGodPortal on Wed 24 May 2017 - 0:48

Trovsky wrote:The code's up so you can try it out now!

But I never learned how to use the stuff you've been uploading. Crying or Very sad

Do these files need a front end or have to be compiled by something?
avatar
SunGodPortal
                             
                             

Since : 2015-01-26

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Wed 24 May 2017 - 1:33

The latter.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Puzzledude on Wed 24 May 2017 - 8:55

Do these files need a front end or have to be compiled by something?
The source code needs to be compiled with a compiler. Similar to ASM. When you write the actual code with something that a human can understand - you need to then assemble it with Xkas for a machine to understand it. Basically you thus convert a list of comands into a sequence of bytes. In the case of ASM the bytes will be written into Rom, which will be run with an emulator, in the case of a compiler the bytes will form a standalone exe.

Puzzledude
   
   

Since : 2012-06-20

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Wed 24 May 2017 - 11:45

Or you could run import the code into a program like visual studio, it's more helpful in finding bugs.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Wed 24 May 2017 - 23:10

Update:
  • Made the Hex View less bad.
  • Put the finishing touches on the monologue editor. Yes, that's right. It's done!
  • Added metadata for the Monologue classes.

To do:
  • Bug Zarby about the overworld documentation. There's something I'm missing because the pointers are read wrong.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Sat 3 Jun 2017 - 18:35



The overworld editor is getting there. The hex you see on screen correlates to the tile IDs you see in Hyrule Magic.

Also I'll take feedback and suggestions now.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Fri 16 Jun 2017 - 16:53

Uploaded a binary with a better monologue GUI.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Trovsky on Sun 18 Jun 2017 - 3:19

New commit:
  • Improved graphic window GUI
  • Fixed graphic window bugs

Not going to bother updating the binary.

Trovsky
    
    

Since : 2014-04-10

Back to top Go down

Re: Zeldix Magic

Post by Euclid on Mon 19 Jun 2017 - 9:29

Forgot the package the charset.tbl file in the binary so the monologue editor's broke.

Tools -> address converter broke, think you forgot to set some compile flags that or missing the gigantic resources directory with the different languages in the package.

System.Resources.MissingManifestResourceException: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "Zeldix.resources.Resource.resources" was correctly embedded or linked into assembly "Zeldix" at compile time, or that all the satellite assemblies required are loadable and fully signed.

avatar
Euclid
                        
                        

Since : 2012-06-21

Back to top Go down

Page 8 of 9 Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next

View previous topic View next topic Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum