===DRAKKHEN II: DRAGON VIEW WORLD MAP GUIDE=== Version 1.3 by Khaz, 27Oct2014 0. TABLE OF CONTENTS --------------- 1. INTRODUCTION 2. POSITION / ORIENTATION 3. REGION 4. WORLD MAP 5. TILES 6. LANDSCAPE OBJECTS 7. SCENERY OBJECTS 8. RANDOM ENCOUNTERS 9. RAM ADDRESSES 10. MAJOR LANDMARK COORDINATES =============================================================================== 1. INTRODUCTION --------------- This guide details how the World Map part of the game functions. I obtained this information in an attempt to create a more accurate World Map image directly from the game's ROM. A compressed version of this World Map is now available here on GameFAQs! A high-resolution, unlabelled version is also available at vgmaps.com, or the link below: http://www.pictureshack.us/images/79741_DragonView_World_VGMaps_2c.png IF YOU FIND THIS LINK IS BROKEN or if anything else in this guide is lacking, please contact me right away! =============================================================================== 2. POSITION / ORIENTATION ------------------------- In-game your position is represented by the two-byte values at $001C14 (X) and $001C16 (Y). Your current direction is represented by $001909, where $00 is South, $40 is West, $80 is North, $C0 is East. The smallest increment to your orientation is $02. Manually setting your orientation to an odd number will break the game. When you move, the game looks up your orientation on a table in ROM at $809F84 to get a pair of delta-X and delta-Y values that define how far you move in each direction every movement frame. Not every increment of rotation actually changes your direction of movement - your point of view may shift but you will still be walking along the same line until these delta-X and -Y values change. You move at the same speed whether you walk forwards or backwards, but your actual real-time "movement speed" will mostly be dictated by the number of lag frames between movement frames, which increases when more scenery is on screen. You do not, however, move at the same speed regardless of angle. The most you can move along either axis in a frame is $0008 but your total velocity can be less or greater than 8. For example, a section of the angle lookup table at $809F84 (with an added "Speed" column): $1909 dY dX Speed ----------------------------- C0 0000 f8ff 8 C2 0000 f8ff 8 C4 0100 f8ff 8.0622 C6 0100 f8ff 8.0622 C8 0200 f8ff 8.2462 CA 0200 f8ff 8.2462 CC 0200 f8ff 8.2462 CE 0300 f8ff 8.5440 D0 0300 f8ff 8.5440 D2 0400 f9ff 7.6157 D4 0400 f9ff 8.0622 D6 0400 f9ff 8.0622 D8 0500 f9ff 8.6023 DA 0500 f9ff 8.6023 DC 0500 faff 7.8102 DE 0500 faff 7.8102 E0 0600 faff 8.4852 E2 0600 fbff 7.8102 E4 0600 fbff 7.8102 E6 0600 faff 8.4852 E8 0700 fbff 8.6023 EA 0700 fcff 8.0622 EC 0700 fcff 8.0622 EE 0700 fcff 8.0622 F0 0800 fdff 8.5440 F2 0800 fdff 8.5440 F4 0800 feff 8.2462 F6 0800 feff 8.2462 F8 0800 feff 8.2462 FA 0800 ffff 8.0622 FC 0800 ffff 8.0622 FE 0800 0000 8 00 0800 0000 8 As if it weren't odd enough that the table lists a positive Y value when going in the positive Y direction but a negative X value when going in the positive X direction, there also appears to be a mistake in this section of the table: Angle E0 is, as expected, 45 degrees between East ($C0) and South ($00). As your angle increases toward South the X component starts to decrease, but at angle E6 it's suddenly 6 and 6 again - back to 45 degrees. You face the correct direction in-game but you can see visually how you slide sideways along the perfect diagonal when you try to walk. =============================================================================== 3. REGION --------- To explore the full world map you will need to manipulate your X and Y position ($001C14 and $001C16) manually. If you attempt this you will frequently end up stuck and the game may occasionally crash depending on how you manage your "Region Code" ($001900). The region code defines many things including how objects are rendered and where you are able to move. Generally speaking being in the incorrect region for your coordinates is a bad thing. Even if you set the region code manually upon teleporting yourself somewhere, you will often find the world does not appear properly anyways. Moving between regions on the map normally (eg/ walking between Lake, Desert and Swamp areas) calls a special transition event that sets up the next area. Most region-to- region transitions do not have this event since you can't walk directly between them, which will leave everything looking screwed up. As far as I can tell this is just a graphical problem, but it can be very difficult to find your way around when everything looks like a glitched mess. To fix it, simply enter and exit any dungeon or town and you should be fine - though this has not been tested extensively. Dragon View also tries very hard to keep you from reaching plot events in the wrong order and it's very easy to render your game unfinishable by walking into one at the wrong time or from the wrong direction. If you save after manipulating these addresses you do so at your own risk. Usable region codes are as follows (others I've tested all crash the game): 00 = Hujia Region 01 = Casdra / Lake Region 02 = Swamp 03 = Desert 04 = Fire Cave 05 = Underworld 06 = Underworld II 07 = Snowfield 08 = Keire Region 09 = Mt. Badsel One important note is that, in regions 06 and up, you can move through most normally out-of-bounds areas. These regions are all enclosed by a different type of wall object than you find around Hujia and Miraj, therefore the walls from the earlier areas are not rendered in the later region codes. I do not know the purpose of the second Underworld region, 06. The Underworld normally appears as region 05. Region 06 has the same music and general color as 05, but a different graphic object set and you have free movement through water and most walls in 06. =============================================================================== 4. WORLD MAP ------------ The overall World Map exists in the ROM at addresses $9792d6 - $9796d5, a 32 by 32 square of bytes. Each byte represents a square tile of world map $0200 by $0200, making the entire map $4000 by $4000 in size. In-game, you can walk beyond these limits if you get outside the normal boundaries. Sometimes you will find objects rendered out there, but these are unfortunately not some kind of secret: To read from this map the game takes your X and Y coordinates, rounds them down to the nearest tile coordinates (ie/ removes the lower 9 bits), then manipulates and adds them so that each major X division is an increment of 1 and each major Y division is an increment of $20. This gives a raw offset from $9792d6 that is used to read the map. Because of this, coordinates East of $4000 X will take tiles from a wrong location further down the map, and coordinates south of $4000 Y will theoretically fetch tile numbers from the next data in the ROM (which is the tile data itself). =============================================================================== 5. TILES -------- The first thing the game does upon reading a byte from the main World Map at $9792d6 is multiply it by two then use it as an index for a 16-bit read from $97cf18. $97cf18 is a table 512 bytes long where every one byte "Tile Number" taken from the World Map corresponds to two bytes that describe the location of that tile in ROM relative to address $9796d6. (Note: ___6d6, not ___2d6) There are two kinds of information stored in the main Tile Table at $9796d6: "Landscape" objects and "Scenery" objects (my personal naming convention). Each tile entry is organized as follows: -The first two bytes define the size of the data. The first byte represents how many Landscape objects are in the tile, the second how many Scenery objects. -Following the size bytes are the Landscape Object bytes. Each byte corresponds to one object as per section 6. -The remaining data defines the Scenery objects in the tile. Every Scenery Object consists of a one-byte-two-byte pair, the one byte representing its identity and the remaining two defining its location. The single "Identity" bytes are listed first, followed by the coordinate pairs in the same order, and then the Scenery list repeats in a different order. Every Scenery Object is listed twice: The first list is in order of West-To-East, the second list is in order of North-To-South. Several tiles exist in the ROM that were never actually used in the game. They all contain a solid block of "Landscape Object Type" 0b (see next section) covering the entire tile. This type 0b is not used in the game. Two of these unused tiles are unique, as they also contain a full-tile block of one type of wall object as well as the 0b - tiles 83 and 9a. The remaining unused tiles are as follows: 09 30 32 35 36 3e 48 53 83 90 9a 9e a3 a7 af b2 b4 b5 bb bc c5 cf e8 e9 ea ec =============================================================================== 6. LANDSCAPE OBJECTS -------------------- The Landscape Object bytes found in the Tile data in section 5 are used in much the same way as the original world map: -The "Object number" byte is multiplied by two -The result is used to index a 16-bit read starting at $97DC08 $97DC08, just like $97CF18, is a table 512 bytes long where every one byte "Object Number" taken from the tile data corresponds to a two byte index that describes the location of that object in ROM relative to address $97D118. Each "Landscape Object" is a relatively simple set of data. The first byte defines what type of object it is. For example (not a complete list): 00 = Road 1 - Region Dependent/Variable Colour (eg/ warp star parts, emblems) 01 = Road 2 (Usually Brown / Black) 02 = Water / Invisible Ortah Road 07 = Wall for some Regions (eg/ Desert) 09 = Ice Road / Badsel Road 0A = Frozen Lake / Badsel Lake 0F = Wall for some Regions The second byte represents the number of points around the edge of the object. The data itself is a series of X, Y coordinates (ranging from $00 to $80) that define the outer edge of the object. The final point connects back to the first one and the enclosed area is filled with whatever object type was specified in the first byte. As the tiles are $0200 by $0200 and coordinates can be at most $80, each coordinate is multiplied by four to get the true location. =============================================================================== 7. SCENERY OBJECTS ------------------ As explained in section 5, Scenery objects are listed twice in the tile data. Each listing consists of an object number and a location in X, Y coordinates (ranging from $00 to $80 as with the Landscape Objects). The object number defines what type of scenery item appears, in conjunction with your "Region Code" ($001900). The same object numbers are re-used in different regions and simply appear as different objects with different properties. For example, the small stumps in the lake region that you can walk through are the same object number as the thin dead trees in the Fire Cave region, which you collide with. These same "Scenery" objects are also used as invisible triggers for certain events, such as on warp stars and emblems, the small star where you reveal the path to Ortah, the bridge to Sektra, etc. Another interesting note is that while map entry/exit points in an open space exist as a single object point, ones on walls are generally constructed as one object for the image of the opening in the wall, and three placed directly in front of it that you hit to trigger the transition. The following are the object numbers I know (also not a complete list): 00 = Grass in Swamp / Hujia region 01 = Small Rocks in Desert / Swamp / Hujia region (commonly around water) 03 = Hujia, Lake & Swamp Area Trees / Desert Cactus / Snowfield Nothing* 04 = Desert Skulls / Swamp Rocks / Fire Cave Glowing Bushes 05 = Tiny Hujia & Lake Rgn Stumps/Fire Cave Thin Tree/Desert Statue/Swamp Bush 06 = Fire Cave Bones / Small Sand Dunes / Hujia Bushes / Lake Area Grass 0A = Purple snowy rocks 0B = Ice Pillars / Badsel Trees 0C = Large Snowdrifts 0D = Small Badsel Rocks 0E = Small snowdrifts / Badsel Brickpiles F9 = Lions FB = Badsel Giant Boulders FE = Warp Star Trigger Points *While object type 03 appears as nothing in the Snowfield, there are four of them in the Snowfield on the empty patch next to the chest game. The tile they are on isn't used anywhere else, so why the invisible trees are there is beyond me. This is the only instance of normally-invisible and seemingly useless scenery I have found. I have personally observed pieces of scenery (found outside the world map coordinates, ie/ generated from wrong data) that appear as a coherent image that's not in the game normally: some small plants and green tree stumps in the Badsel region, tall green rocks in the Snowfield/Keire region, and what appear to be glowing red skulls in the Underworld. While these seem to be deliberate World Map graphics, they generally do not scale with distance. In an effort to investigate this, I hacked the ROM data to replace several tiles with a grid of every scenery object number and walked through it in-game in each region. There are several objects that will cause the game to crash either immediately upon loading the tile or while on-screen, but the majority of the list of 256 scenery objects seem to be the same repeating set of graphics. Some objects also obstruct your movement strangely, such as one rendered as a glitched tree stump in most regions that prevents you from facing directly toward it (and also causes lots of crashing). =============================================================================== 8. RANDOM ENCOUNTERS -------------------- While travelling around the world map normally, you will constantly be pursued by a pair of white clouds that will periodically disappear and reappear in a different location. Upon contact you will enter a fight you cannot run away from. This can be very obnoxious when trying to test and plot various map features. Each cloud is defined by six key addresses in memory (that you can find in the next section): -Four addresses make up the two-byte X and Y coordinates of the cloud in the same manner as your own coordinates. -One address is a one-byte timer that continuously counts down to zero. Upon reaching zero, the cloud disappears and respawns in a new location. This new location seems to be determined by the game's standard RNG seed address $0000a5, which is updated using the Horizontal and Vertical scanline counters (special registers at $80213C and $80213D) every time it is needed. -The final relevant byte is the animation timer, which seems to cycle from 00 to 03. If you fix this address to one value the clouds will remain a static image (which makes observing their actual movement much easier). If you don't want to be disturbed by these encounters, freeze at least their position and timer addresses. If you freeze only their position they will still reappear in new locations when they expire, often right on top of you. These clouds are only forced to stay near you in a roundabout way; you can freeze them in place and walk away and they'll still be there when you come back. Normally in game however, whenever you get too far away the cloud's timer will jump down to 03 and immediately trigger a respawn. =============================================================================== 9. USEFUL RAM ADDRESSES ----------------------- The following is a list of addresses I found useful or otherwise interesting to watch during this investigation: 0000a5 Source of all(?) "random" numbers in the game 001C14 Overworld X Position (East-West) (2 Bytes) 001C16 Overworld Y Position (North-South) (2 Bytes) 001900 Overworld Region 001909 Overworld Angle (South = $00 / North = $80) (even values only) 001A86 CurrentTileIndex Index of current tile (from $97cf18, for $9796d6) 001A8A CurrentTileCoords (Tile coordinates are all 4 bytes) 001B06 NextXTileIndex Index of Next X tile 001B0A NextXTileCoords (Tile to East or West depending on angle & pos'n) 001B86 NextYTileIndex Index of Next Y tile 001B8A NextYTileCoords (Tile to North or South depending on angle & pos'n) 001C06 NextXYTileIndex Index of Next XY tile 001C0A NextXYTileCoords (Tile to NE/NW/SE/SW to form a square with other 3) 001C12 01 When Heading East, 00 Otherwise 001C13 01 When Heading North, 00 Otherwise 00FBC9 Cloud 1 X Posn (Coarse) (As per section 8) 00FBC2 Cloud 1 X Posn (Fine) 00FBCB Cloud 1 Y Posn (Coarse) 00FBC4 Cloud 1 Y Posn (Fine) 00FBDA Cloud 1 Timer 00FBCD Cloud 1 Animation 00FBE9 Cloud 2 X Posn (Coarse) 00FBE2 Cloud 2 X Posn (Fine) 00FBEB Cloud 2 Y Posn (Coarse) 00FBE4 Cloud 2 Y Posn (Fine) 00FBFA Cloud 2 Timer 00FBED Cloud 2 Animation 00038B Warp Star Trigger - Initiates warp star exit/arrival on non-zero. 002011 Desert Cave Door Switch ($FF = Door Open, $FD = Door Closed) (I only included the last one because it took forever to figure out. The switch is 1 bit so the same address likely holds other switches too.) =============================================================================== 10. MAJOR LANDMARK COORDINATES ----------------------------- Since I have the information, the following is a listing of the coordinates, region and exit angle of every major entry/exit/warp point on the world map. The direction you face on returning to the world map is set by the room you're emerging from, not by the direction you were facing when you entered. This list can be useful when editing your location manually, as you will frequently want to find a major point to enter and exit to reset the graphics on screen. (C) stands for "Coarse" and (F) for "Fine", ie/ the hi and lo bytes of your position, respectively. Locations listed from West to East. X(C) X(F) Y(C) Y(F) Rgn $1909 Identity ------------------------------------------------------------------------------ 01 00 2F 00 00 82 Rysis Warp Star 01 00 17 00 01 A2 Casdra Warp Star 01 2C 1E DC 01 40 Casdra Stump (Fire Up) 02 FE 15 02 01 20 North Cave 03 05 2D 00 00 D6 Rysis 03 08 23 60 04 C0 Fire Cave 03 00 3D 04 05 00 Underworld Cave 05 00 0E 40 07 00 Fortress 05 00 0B 00 08 82 Keire Warp Star 05 28 1B 00 01 C0 Casdra 07 00 13 08 07 00 Snowfield W. Castle (Hauza Up) 07 00 0A 02 08 00 Keire Ice Cavern 09 04 26 84 00 EC Arsenal 09 00 2E F8 00 80 Hujia 0A FE 1D 02 01 20 Landslide Casdra Side 0A F8 3D 00 05 40 Giza's Palace 0B 22 1C DE 07 A0 Landslide Snowfield Side 0B 34 13 48 07 00 Snowfield Chest Game 0B 00 11 08 07 80 Snowfield Emblem (Ice Up) 0B 08 05 00 08 C0 Keire Castle (Sword Up) 0D 00 1D 00 07 42 Snowfield Warp Star 0F 00 26 78 01 80 Galys Pass Casdra Side 0F 00 27 88 00 00 Galys Pass Hujia Side 0F 00 30 FC 00 80 Storehouse 0F 00 05 08 08 00 Keire Temple 10 88 11 04 02 D4 Wet Cavern 10 53 10 D4 07 54 Snowfield (MP UP) 11 00 09 08 07 00 Snowfield N. Castle (Ice Up) 15 00 27 00 01 42 Lake Area Warp Star 15 00 1E 00 01 00 Lake Cave (Rodister) 17 00 0D 10 02 00 Swamp West Stump (Lit Up) 18 86 2F 04 01 D4 Meadow 19 00 0D 08 02 80 Swamp Emblem (Lit Up) 19 00 29 08 01 80 Lake Area Emblem (Hauza Up) 1B 08 27 88 01 C0 Lake Area Stump (Swd Tech) 1D 10 0F 00 02 C0 Swamp SE Stump (Large Bag) 1F 00 0A F0 02 80 Swamp NE Stump (Potion) 1F 00 1D 00 03 82 Miraj Warp Star 1F 50 34 B8 01 00 Old Well 22 EA 23 00 01 40 Fall (Lightning Ring) 22 F0 09 00 02 40 Sektra Temple 23 00 1B 08 03 00 Miraj 23 6C 2D 1A 01 56 "Clinic" near Neil (Healer) 23 00 37 08 01 00 Neil Ruins 25 74 11 40 02 6A Swamp Wandering Healer 25 00 39 00 01 A2 Neil Ruins Warp Star 25 22 36 DE 09 A0 South Badsel Cave (HP UP) 26 58 31 B0 09 80 Badsel Fire Boots Boulder 28 78 1D 00 03 40 Quicksand Cave, Miraj Side 28 FE 3B 02 01 20 Illusion Forest 29 88 1D 00 03 C0 Quicksand Cave, Ortah Side 29 00 28 40 09 00 Badsel Area HP UP Tree 29 FC 3B 00 09 40 Mt. Badsel I 29 00 2D 08 09 80 Badsel Emblem (Armor Up) 29 00 09 00 02 02 Swamp Warp Star 2C FC 03 00 02 40 Jade Mine 2D BC 2F 00 09 40 Mt. Badsel II 2E F0 19 00 03 40 NorthWest Lion (Hauza Tech) 2E 20 28 C0 09 00 Badsel Mid Boulder (HP UP) 30 F0 0B 00 02 40 Orusort 31 00 13 04 03 00 Desert Wandering Healer 32 B4 29 53 03 A0 Desert Cave 32 80 2A 2C 09 80 Badsel Chest Game 34 F8 23 00 03 40 South Lion (Mirror) 36 F2 18 F8 03 54 Ortah Temple 39 00 21 0A 03 80 Desert N. Emblem (Fire Up) 3A F8 1F 00 03 40 East Lion (Fruit = Crystal) 3B 00 2B 08 03 80 Desert S. Emblem (Sword Up) 3D 00 0D 04 02 00 Ancient Forest 3D 00 2F BE 09 80 Dead End Cave Note: These numbers were taken as close to the entrance as possible, facing as you would upon exiting. If you enter these exact coordinates without specifying the exact angle too, you might end up stuck slightly inside the object/wall. I suggest trying to put yourself out in the open nearby.