What do you need help on? Cancel X

BOOKMARK
Jump to:
Would you recommend this Guide? Yes No Hide
Send Skip Hide

World Map Guide by KhazWolf

Version: 1.3 | Updated: 10/27/2014

===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.

View in: