1
Scripting and Reverse Engineering / Re: (PSX) FF7 - Creating custom AKAO data (music/sound)?
« on: 2013-04-11 12:32:27 »
Nope, FFT doesn't becuase the sound wasn't programmed by Minoru Akao, but by Hidenori Suzuki.
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
0x0010: word HP
0x0012: word MP
0x0014: word Gil
0x0016: word Experience
0x0018: byte Drop Item (Slot 1)
0x0019: byte Drop Item (Slot 2)
0x001A: byte Drop Item (Slot 3)
0x001B: byte Drop Item (Slot 4)
0x001C: byte Steal Item (Slot 1)
0x001D: byte Steal Item (Slot 2)
0x001E: byte Steal Item (Slot 3)
0x001F: byte Steal Item (Slot 4)
0x0022: word Model ID
0x0024: word Animation ID 1
0x0026: word Animation ID 2
0x0028: word Animation ID 3
0x002A: word Animation ID 4
0x002C: word Animation ID 5
0x002E: word Animation ID 6
0x0036: word Attack Power
0x0038: byte Speed
0x0039: byte Strength
0x003A: byte Magic
0x003B: byte Spirit
0x0040: byte Elemental Guard
0x0041: byte Elemental Absorb
0x0042: byte Elemental Half
0x0043: byte Elemental Weakness
0x0044: byte Level
0x0045: byte Class
0x0047: byte Physical Defence
0x0048: byte Physical Evade
0x0049: byte Magical Defence
0x004A: byte Magical Evade
0x004B: byte Blue Magic (0x4D-0x64, or 0x00 for none)
Elemental Flags:
Bit 1 = Fire
Bit 2 = Ice
Bit 3 = Thunder
Bit 4 = Earth
Bit 5 = Water
Bit 6 = Wind
Bit 7 = Holy
Bit 8 = Shadow
Class Flags:
Bit 1 = Humanoid
Bit 2 = Beast
Bit 3 = Demon
Bit 4 = Dragon
Bit 5 = Undead
Bit 6 = Stone
Bit 7 = Insect
Bit 8 = Aerial
word Name Pointer
word Description Pointer
byte ?
byte ?
byte ?
byte ?
byte Icon ID (0-35 only)
byte Icon Palette ID (0-15 only)
byte ?
byte Base Stat Increase Flags?
byte Ability 1 (0 = None)
byte Ability 2 (0 = None)
byte Ability 3 (0 = None)
byte Flags {
Bit 1 = Useable
Bit 4 = Equipable (Add-on)
Bit 5 = Equipable (Armour)
Bit 6 = Equipable (Head gear)
Bit 7 = Equipable (Arm gear)
Bit 8 = Equipable (Weapon)
}
byte ?
byte ?
00 00 00 00 FA 00 08 00 00 00 01 00 00 00 00 80 15 00
05 00 0F 00 40 01 00 08 01 00 01 00 65 00 00 80 16 00
65 28 66 28 67 28 68 23 69 32 6A 37 6B 55 6C 64
; Target (Bits ???)
; Sub-Dialog (Bits 6-8)
; 0 = None
; 1 = HP MAX
; 2 = MP MAX
; 3 = Status Bad
; 4 = Status Good
; 5 = (illegal)
; 6 = (illegal)
; 7 = (illegal)
0x0000: byte Target/Sub-Dialog
0x0004: byte Command ID
0x0005: byte Coefficient
0x000A: byte MP Cost
0x000C: word Animation Pointer
0x000E: word String Pointer
Ability 0 (Void) 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00
Ability 1 (Cure) 33 09 00 20 0A 10 00 00 47 00 06 01 08 00 03 00
weapon 0 (Cinna's Hammer) = 01 00 25 00 05 0C 00 00 00 00 00 00
weapon 1 (Dagger) = 05 00 DC 01 01 0C 00 00 11 00 C8 00
Where would you think spell power or similar data is stored? SLUS file or in multiple modules?For PC's, in the SLUS file I would assume, yes. For enemies it's stored within the enemy formation data (directory 5 I think it is).
Engines:
0 = Dummy
1 = Field
2 = Battle
3 = Worldmap
4 = Tetra Master
5 = Title
6 = Blackjack
Submodules/Menusystem:
7 = Chocobo Hot & Cold
8 = Equip & Abilities
9 = Config
10 = Card
11 = Item
12 = Status
13 = Save & Load
14 = Name Input
15 = Party Select
16 = Shop
17 = Dummy
18 = Disc Change
19 = *Movie Module
20 = Victory
Did you see what it does to the stack?Nopes, don't think I have yet, what's it do?
* yoshi314 crosses fingers, hoping to see Dead or Alive: hot swedish blondes edition.I don't think so, it's most likely to expensive to make a new, seperate release for scandinavia.
On topic, yes I am aware that this law and certain others are overreactions and a bit silly.Total moral panic.. if you like that and very selfish and impolite people, then you'll love Sweden!
unsigned short LookupTable[256] = {
0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF,
0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E,
0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD,
0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C,
0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB,
0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A,
0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9,
0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738,
0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7,
0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036,
0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5,
0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134,
0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3,
0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232,
0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1,
0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330,
0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
};
void InitiateCRC(void) {
for(unsigned short Index = 0; Index < 256; Index++) {
unsigned short Value = Index;
for(unsigned short Bit = 0; Bit < 8; Bit++) {
if(Value & 0x0001) {
Value >>= 1;
Value ^= 0x8408;
} else {
Value >>= 1;
}
LookupTable[Index] = Value;
}
}
}
unsigned short CalculateCRC(unsigned char *Pointer, unsigned short Size = 0x13FE) {
unsigned short Checksum = 0xFFFF;
while(Size--)
Checksum = (Checksum >> 8) ^ LookupTable[(Checksum ^ *Pointer++) & 0xFF];
return Checksum;
}
Question 3: How do the NTSC codes look like, and are there other versions (Spanish, German, etc)?There's seven different versions of the game, here's the disc ID's for them all:
It would be great if there only were 2 versions of this: NTSC and PAL.
Japanese SLPS_020.00, SLPS_020.01, SLPS_020.02, SLPS_020.03
English (USA) SLUS_012.51, SLUS_012.95, SLUS_012.96, SLUS_012.97
English (EU) SLES_029.65, SLES_129.65, SLES_229.65, SLES_329.65
French SLES_029.66, SLES_129.66, SLES_229.66, SLES_329.66
German SLES_029.67, SLES_129.67, SLES_229.67, SLES_329.67
Italian SLES_029.68, SLES_129.68, SLES_229.68, SLES_329.68
Spanish SLES_029.69, SLES_129.69, SLES_229.69, SLES_329.69
Oh and the name size is not 8 it's 10 symbolsHmm, ye kinda seems so. In the japanese version (which is the only one I found right now), there's even 2 names stored for afew characters. Like Zidane have both "ジタン" and "?" stored within these 10 bytes, Garnet have both "ガーãƒãƒƒãƒˆ" and "ダガー" etc. Can remember that in the english version (besides, it kinda shouldn't be possible to store both anyway!). I also though it was 8 because Salamader wouldn't fit, hence he's called Amarant, oh well.
Also the directory supposedly containing the summons seems to have a different structure, can't read it yet.