Posts for HHS


1 2
5 6 7
14 15
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Yes, when you get a password, it will store the fact that you've got the hadouken. But when you enter the password, it will take away your hadouken if you don't hold those buttons. So, if the hadouken bit is not set, you won't have the hadouken no matter what. I suppose this was a last minute change, where they decided to keep the old behaviour accessible via a secret code. Otherwise, it would be too easy for players to discover the Hadouken by accident by entering random passwords until they got one that worked.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
There is a hadouken bit, as seen on page 4, but players normally don't know about it. Now, as for how to actually create a password based on those 36 bits: First eor bits 28-31 into each of the first 6 nibbles. Then, digit n of the password is defined by concatenating the bits specified by the mask in the nth column of the following table:
0x20,1, 0x80,   0,  4,   0,   2,   0,   8, 0x10,0x40,   0,
1,   0, 0x10,   4,  0, 0x20,  0,   8,   2,   0, 0x80,0x40,
0,   8,   0, 0x10,  1, 0x40,  4, 0x20,  0,   2,    0,0x80,
0,   4, 0x20,0x80,  0,   8,   0, 0x10,  0, 0x40,   2,   1,
8,   0,   0,   0,   2,   0,   1,   0,   4,   0,    0,   0
For example, for the 2nd digit, you would concatenate bits 0, 19 and 26. This gives an index into the nth row of the following table, which is the digit value:
7, 2, 1, 4, 8, 3, 6, 5,
6, 5, 4, 1, 7, 8, 3, 2,
7, 5, 6, 1, 4, 5, 2, 8,
1, 3, 8, 5, 7, 6, 4, 2,
2, 3, 5, 7, 4, 6, 1, 8,
8, 2, 4, 7, 1, 3, 6, 5,
4, 5, 1, 8, 7, 3, 2, 6,
4, 8, 5, 7, 1, 2, 3, 6,
3, 7, 5, 2, 1, 8, 6, 4,
2, 5, 1, 4, 8, 7, 3, 6,
8, 7, 2, 6, 4, 1, 5, 3,
4, 7, 1, 3, 8, 2, 6, 5
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
It allows you to keep your hadouken when you continue with a password, if you hold them as you confirm the password. Otherwise, you'll lose your hadouken and have to get it again.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
There are 2 RNGs. One is defined by an = an-24 ^ an-55 and is used for bosses. The other, which is used for everything else, is defined by an = an-1 + an-15. Boss RNG buffer is at 7E0306 and the other one is at 7E03F1. By the way, I found a small hidden textbox by setting 7ECF66 to 02 and going to turtle island. Enter the top right house and some kind of diary entry will pop up. If 7ECF66 is set to 03 or higher, the field music will play and the houses will be empty. I am guessing that something was planned for this area, but never got finished.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
To get Hadouken, you need to have all subtanks, all upgrades, all hearts and you have to have watched the dialogue with Zero after beating all stages, and you also need 32 full bars of health. To actually use it, you just need 32 bars of health, although the animation won't display correctly if you don't have the helmet upgrade. You can see this by inputting the password 7774 5142 5822 and holding R+L+X+down as you press Start.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Make sure that the pot is loaded at a higher index and that you hit the tile at the first possible frame. Otherwise, the tile code will run first and it will be set as invincible ($7E0BAx nonzero). You should also ensure that the previously loaded sprite at the index where the tile appears was not invincible.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Alpha beta pruning has no relevance to TASing, as there is only one player. Perhaps you meant A*?
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Hm, you're right. When two characters simultaneously activate a "Near", "Face" or "BothFace" trigger, the game will go to $C1D017 with M cleared. From there it soon reaches a COP instruction at $C1D02D or $C1D050. COP goes to $00FFFF which contains a $FF byte (sbc al,x). The next instruction is at $000003. At this point, we have: $03 = FF if the last displayed character's size is 0, otherwise 0 $04 = 10 if in a town, otherwise 10 + character size*4 $05 = 0 $06 = $80 if NPC is to the right of the player, otherwise 0 $07 = $80 is NPC is below player, otherwise 0 $08 = X distance - the value in $04, clamped to 0-128 $09 = Y distance - 8, clamped to 0-128 $0A = X distance low byte $0B = Y distance low byte The last displayed character size must be 0 and the NPC must be below the second player to avoid a BRK loop. Then your adjusted X distance is the operand of a BRA instruction. Then there are a bunch of RAM locations we could execute from. If we managed to place a jump to C0009B, C00075 or C10018 somewhere in low RAM, we'd be done. Or, by jumping to C18000 we could start the script given in A.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
The cart was probably loose and someone bumped the SNES.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Okay, updated the files (uniscpt.txt and uniroom.txt). I also included the source code for my program for reference: http://www.mediafire.com/folder/2914s2az1z0nlv5,v2sr5omwmvzms0x,j7uho22n1tpticb/shared
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
I've been playing with flying into Icecap 2 with Sonic and Tails above the boss room. It often fails to load various objects, and sometimes those springy platforms will be doubled. You can actually be hit by an enemy and not lose your rings in highly crowded areas. Haven't managed to trigger the loading zone bug yet, but there is a chance that it might be possible.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Height does not affect the hit rate, it just affects whether you can reach him or not. Damage calculations work the same way as for normal enemies. Standing on stairs does not affect your height, but executing a jumping attack does. It seems that when no icons are on the screen, the menu advances to its next phase. Therefore it won't work properly when it is off screen. Don't know what happened when you reset, though. Maybe not all character fields are initialized properly.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
I just tested it, and I am just barely able to hit Jabberwocky with the sword at that distance. Jabberwocky's hitbox is actually centered at his bottom and extends a bit below him, and your weapon's hitbox is quite large. You can watch them using my script here. (Functions operated with controller 4) Spring Beak has a height of 64 pixels when standing. You can monitor the height by watching offset $66 in the boss structure (i.e. $7EE666) which is in half pixels. The question of whether you can sell things depends on the last menu you were in. If you were in the Y-menu, it will check for armor. If you were in the selling menu, it will check for armor and items. You can actually lock up the game if you go into the shop in Potos at the beginning and sell your overalls as well as any items you have, then select Buy, leave, and select Sell again. The menu type is stored in $7E1847 where 0 is Y-menu, 1 is buy, 2 is sell, 3 is forge.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
You can't go through NPCs when you're on stairs. When you are fighting a boss, your hitboxes are twice as large as it is normally. That's why you can hit bosses from far away. To hit a boss, the player must be on the same floor as the boss, and the height difference must be at most 64 pixels. There is also a bug here where you'll miss if the bit corresponding to the enemy slot is set in the byte at $7EE05A+($200*height difference in half pixels). If the boss is defending, this bit will become set if it was not. So, this could possibly be used to change a normal tile into a script tile, if you launched a charged attack against a boss part in slot 6 or 7 which was defending. And yeah, changing values above $7ECCFF seems possible, although I haven't tested it.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
I see, when you change rooms, it saves the information in $7ECD00-$7ECDFF but also at $7ECE00-$7ECEFF, and it loads the information back from $7ECE00-$7ECEFF when stepping on an exit tile. Map data is at $7F0000 for BG1 and $7F4000 for BG2. Attributes for each tile are stored at $7FB800 for BG1 and $7FBC00 for BG2. By "exit" tile I mean one that has attribute bit 12 set, which takes you to the room you just came from. On the other hand, a tile whose index is greater than or equal to the byte at $7E004D triggers a script or a transition. Somroom.txt lists the scripts for each room in order. $0800-$0BFF stand for paths. For example, the door in room $0091 that leads to the guard room is tile $C2, which has the corresponding entry $08DF in the script list. Searching for "Ent 00DF" you'll see that it corresponds to room $0109. Most transitions between rooms work in this way, while only a few use "exit" tiles. $7E011F indicates whether you can use flammie drum (bit 7) and the magic rope (bit 6) and whether you're indoors (bit 5). Going from outdoors to indoors saves the last entrance at $7E0108, which is what the magic rope uses as the destination. The room number is a word, by the way, and the entrance is also a word. So 0100 is bridge, 0101 is elder's house, 0102 is various houses in potos, etc. 01C1 is the turtle island shop. Invisibility at the bridge is triggered by entrance number 0000, not the room number 0100.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
All controls are disabled when you call Flammie. Every time you go between rooms, it saves the current position so that an exit tile will take you to the previous room. It turns out this is what the $7ECD00 variables were for. When using the magic rope while stepping on an exit tile, the destination room will be saved. So you'll end up at the corresponding location in the room outside the next time you exit the room. If you could write to $7ECD08 with the trash glitch, you could exit to a different room. For example, you could warp from the turtle island shop to the elder's house in potos.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Oh, I see what you're getting at. You can use the magic rope while the girl or sprite is in the lead and still be able to interact with things. That's interesting. You can't stop scripts from completing in this way, though. Possible uses would be: - Going through one of those vertical passageways that connect parts of a room in the wrong location - Jumping with the whip in the wrong location - Preventing something that normally happens when you enter the room that you teleport to - etc.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
It works in the exact same way. The flag is at 7ECFD7 for magic rope, and 7ECF5C for midge mallet. It's also impossible to leave a room in the middle of something.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
The enemies are ordered by their index, yes. Enemy names can be found in somscpt.txt starting at 08CF.
=> Why is the glitched item "F" called 'Blat'?
Item F is not Blat, 1F is. The item names start at 08BA in somscpt.txt, so item 1F would be the one at 08D9. We have 0=Candy, 1=Chocolate, 2=Royal Jam, 3=Faerie Walnut, 4=Medical Herb, 5=Cup of Wishes, 6=Magic Rope, 7=Flammie Drum, 8=Moogle Belt, 9=Midge Mallet, A=Barrel.
There are a total of "32 kinds of items". I would have assumed it's 16, since 0xF is the highest single digit Hex number. How are those ordered/stored in the memory?
As touch-me said, the lower 5 bits indicate what kind of item you have, and the upper 3 bits tell you how many items you have.
Edit: Also, sorry for bugging you again, but: What happens if my item list is full, and I should receive a fixed item, such as the Flammie Drum, Escape Rope, Midge Mallet and Moogle Belt?
Nothing happens. 7ECF0F is set to 2 to indicate that the inventory is full.
Edit2: Also, how do I get into the more coding-related-knowledge? I'd like to figure out these things myself so I don't have to bug you constantly, but I have no idea where to start ^^;
I have disassembled most of this game already, which is where the information I have comes from. IDA Pro is required to read the disassembly. If needed, I can post the IDB file along with the files necessary for SNES support in IDA Pro.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Here is the script. http://www.mediafire.com/?5hysu54ra4d6j6i,qth3hwuy33ih2zk,z1e0r3626ikxckn I have included the object type and number for every object here because there are some that have the same name. Notes: - "itemover" checks if your inventory is full - "additem" and "removemed" are the only commands that add something to your inventory - It seems you can load the gun directly from the counter as long as you've bought at least one bullet.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
I have done Deja Vu already (that's how those bugs were discovered), so I'll post the information I have in the Deja Vu thread. I'll try to do Shadowgate as well some day.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
I can't seem to view that video. But if Flammie Drum was used indoors, you'd just end up at a slightly random location on the map like when you exit the Mana Fortress.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
Haven't found any bugs yet, but using A on B instead of B on A can sometimes make a difference. For example, it seems that using the cage on the hawk seems to have a slightly different animation from using the hawk on the cage. uninvite.txt just contains all the text, and all the item names. uniroom.txt lists the objects contained in each room. Each room begins with the word "Room" followed by the room number. Then, for every object, the click rectangle is given, then the word "spr" if it is a sprite, followed by the object name, an and optional "when XX" which says that the object is only sometimes shown. Objects are named by what shows on the property screen, or with "Type-XX" where Type is one of the following: Scenery - Stationary objects. Verbs: Examine, Use, Hit, Speak FixCont - Stationary objects that contain items. Verbs: Examine, Open, Use, Close Trash - Places where items can be discarded. Verbs: Examine, Open, Use, Close Item - Objects that you can carry. Verbs: Examine, Use, Leave, Take Cont - Items with other items inside. Verbs: Examine, Open, Use, Leave, Take, Close Door - Doors. Verbs: Examine, Open, Close, Move Magic - Spells. Verbs: Examine, Use, Speak Some objects may accept other commands as well. uniscpt.txt describes what happens when you perform an action. Lines that start with the name of an object followed by a verb mark the beginning of the code for that verb. Lines that start with a semicolon show the text that is displayed at that point. All other lines start with an address followed by the command that resides there. The commands are: text - Display text jt - Jump if true jf - Jump if false call - Call subroutine return - Return from subroutine j - Jump test - Test event flag set - Set event flag clear - Set event flag isdooropen - Test if a door is open opendoor - Open a door closedoor - Close a door has - Test if object was taken takeaway - Set object as taken drop - Set object as not taken isgone - Is the object deleted delete - Delete the object replace - Undelete the object hasit, takeitaway, dropit, isitgone, deleteit, replaceit - Same as above, object is implied doorbetween - Pass between the specified rooms. Used in door scripts. If the door is closed, the action fails. openthedoor - Open this door. opendoorhere - Open a door in this room. closethedoor - Close this door. closedoorhere - Close a door in this room. isroom - Test if we are in a specific room. takeit - Take the current object opencont - Opens the container. isshown - Test if something is shown. show - Show something. hide - Hide something. The parameter to these commands corresponds to the "when" parameter in the room table. redraw - Update and redraw all sprites. getspell - Add a spell to your inventory. useon - Select the object to use this object on. longtext - Keep the text window open. endlongtext - Do not keep the text window open. name1 - Set item code in 0514. name2 - Set item code in 0515. switch - Jump to different locations depending on the object. removeit - Remove the current object from your inventory. remove - Remove something from your inventory. this - Select the first object. that - Select the second object. gameover - End the game closecont - Close the container. dizzy - Shows dizzy message. death - Shows death message. gobetween - Pass between the specified rooms. updateroom - Redraw the room. removefromcont - Removes the item from the current container. sound - Plays a sound closecurpage - Close the current page. countto - Counts using the specified counter to a given value. flash - Flash the screen animation - Display an animation sometimes - True one out of four times safe - Display safe puzzle thisname - Set 0514 to the item that this script applies to. isit - Check if it's the specified item. wait - Wait for a number of frames curobjname - Set 0514 to the selected item. teleport - Teleport cloud - Show Cloudisi message update - Update sprite list take - Take an item spirit - When the spirit comes out of your sister. rmvcont - Removes the current container. gonosave - Go between rooms without making quicksave. ending - Show the ending isobj1 - Test if the first object is as specified isobj2 - Test if the second object is as specified Scripts are stored in bank 4 and in bank 7. The master table is at the beginning of bank 4 and is indexed by type: Scenery, FixCont, Trash, Item, Cont, Door, Magic, and more Scenery (shown as Scenery-80 and up in the dump). The sub-tables point to the list of verbs for each object of the given type. The verbs vary depending on the type of object. 6:$ACAB (1acbb in ROM file) lists objects that don't follow the usual pattern, and contains entries like this: type, index, replacement type, and ends with $FF. Type 8 has all the commands: examine, open, use, leave, take, close, hit, speak, move.
HHS
Experienced Forum User, Published Author, Active player (282)
Joined: 10/8/2006
Posts: 356
The variables at $7ECD00 are only temporary and just say where you were so that it can show the screen that you were just on. The byte that tells whether you can actually use Flammie (and the magic rope) is at $7E011F (bit 7 for Flammie drum, bit 6 for magic rope). The entrance number is stored at $7E010E. If you came there by air, it is just the room number with bit 15 set. So when you load the saved game, it doesn't recognize it and does nothing. Soft resetting at the title screen ensures that variables don't get zeroed out since the D register points to the title screen stack instead of the zero page. The X position of the menu item is relative to the screen. It is stored at $7E186A. I don't know if I've posted these already, but if people don't have them, here they are: http://www.mediafire.com/?6ga1vidqcoc8coz,s971u01cs1gh5eq,l328ub6gu17t8i6 This is the game script, a listing of all the rooms, and the behaviours for enemies and computer controlled players.
1 2
5 6 7
14 15