Doomdark's Revenge TIPS/CHEATS ----------------------------------- Note: This description was written for the Spectrum, biut it contains interesting data valid for the C64 version. ------------------------------------------ End of Game If Shareth is killed and all four of the main characters gather at the Gate of Varenorn then an overwhelming victory will have been won and the watchwords of Midnight will be revealed. Otherwise, to end the game, Luxor must be at the Gate and either Shareth must be killed or Morkin must be with Luxor. A worthy victory can be won if Shareth is still alive; a noble vitory is won if she is dead. How worthy or noble the victory is depends on how many of the four characters are assembled and how many of them are carrying their magical items. Magical Items Use of a crown summons all the Moonprince's forces to your location. Use of the Spell of Thigrorn transports you to Morkin's location. Use of the Runes of Finorn gives a very refreshing rest to all the Moonprince's forces. Also, merely carrying the Runes of Finorn will protect you from being killed in battle, and carrying any of the four magical items will make you more persuasive when approaching people for negotiations. Using any weapon gives yourself a refreshing rest. Spells and Creatures Each morning except possibly the first, creatures occupy approximately one in every four land locations, and a spell or creatures occupy every landmark, apart from those occupied by people. Which creatures or spells you find is indicated by the following table. Place | code 0 | code 1 | code 2 | code 3 ---------+--------+--------+--------+-------- Plains |dragons |skulkrin|wolves |horses Mountains|dragons |dragons |trolls |wolves Forest |dragons |skulkrin|wolves |wolves Hills |dragons |trolls |wolves |wolves flames=Flames of Dawn Gate |dragons |claws |flames |blood claws =Claws of Night Temple |flames |thorns |blood |languor blood=Blood ofCourage Pit |trolls |wolves |thorns|springs thorns=ThornsofDespair Palace |dragons |horses |claws |blood springs=SpringsofLife Fortress |dragons |wolves |shelter|shelter languor=LanguorofDeath Hall |trolls |shelter |shelter |blood Hut |skulkrin|wolves |shelter |shelter Tower |guidance|guidance|guidance|guidance City |dragons |shelter |shelter |springs Fountain |skulkrin|springs |springs |springs Stones |dragons |flames |flames |languor Tunnel |dragons |skulkrin|trolls |trolls The code number can be obtained either from the location by the formula [444(x+64y) MOD 6151] MOD 4 or from the last part of the name of the landmark using the following table. code 0 | 1 | 2 | 3 ----+-----+-----+----- orn | il | iel | im uk | ium | ia | eon ay | ak | arg | and ane | esh | ad | un If you get "guidance" then the program chooses a random character and selects one of the following. - If the character is not loyal to the Moonprince and is alive then the guidance is the location of this character. - If he does not have his own weapon or magical item then the guidance is the location of this object. - Otherwise the guidance is the location of Shareth the Heartstealer. Travelling time The time taken in hours for a person to advance one position is the sum of T1, T2 and various adjustments defined as follows. T1 is a constant depending on the terrain type of the destination location, taken from the following table. Plains 1/4 Mountains 2 Forest 1 Hills 3/4 Any other 1/2 T1 is instead [in theory] set to zero if the terrain is the person's favourite, as listed in this table. Luxor city Morkin plains Rorthron tower Tarithel forest Shareth plains Feys forest Barbarians hills Iceguards plains Giants mountains Dwarves tunnels T2 is a constant depending on the speed of the individual, as follows. riding walking ----------------------------- Luxor 3/4 1 1/2 Morkin 3/4 1 1/2 Rorthron 1/2 1 Tarithel 1/2 Shareth 1/2 Feys 3/4 1 1/2 Barbarians 1 1/4 2 Iceguards 3/4 1 1/4 Giants 1 1/4 Dwarves 1 1/4 The adjustments are half an hour each for: - walking into mist (except Shareth and the Iceguards) - diagonal moves - killing creatures, and also 1/4 hour if the person is not swift or 1/2 hour if he is slow. Each person has 7 3/4 hours initially, and can move until the last quarter is used up. Tiredness A character gets more tired every time he makes a move. The amount by which the tiredness is increased is one unit (described below) except when: - he encounters wild creatures (2 units) - he walks through mist and is not Shareth or an icelord (2 units) - he walks into mountains and is a giant (2 units) - he walks into mountains and is not a giant (3 units). A unit is the sum of two numbers, the first being 2, 4 or 3 according to whether the character is strong, weak or neither, and the second being from the following table. riding walking -------------------------- Luxor 1 2 Morkin 2 4 Rorthron 0 1 Tarithel 2 3 Shareth 2 4 Feys 1 2 Barbarians 1 Iceguards 2 Giants 0 Dwarves 3 A character becomes more despondent by 6 every time he makes a move in mist and is not Shareth or an icelord, and by 32 every time he is kicked out of a battle (see battles). Approaching When character A approaches character B, a count is made of the number of attributes (such as 'good' or 'loyal') which A and B have in common, excluding 'swift' and 'slow'. This number is then adjusted as follows. - add 1 if the B is not loyal - double the number if B is treacherous - add 3 if A is the liege of B - add 2 if A is carrying any of the magical items. If the total is 4 or more then the approach succeeds. Battles When a group of people who are not all friends are gathered together in one place, each of those people in turn becomes person A against a person B who is chosen at random from A's foes at that location. If a city (or fortress) contains a person or people who are unfriendly with its owners then the city's army becomes "person" A against a random person B from A's foes at that location. The results of a battle between A and B are calculated as follows. - If A is a person, let K = (2*reckless+despondent+tired)/4. If RND<=K (where RND is a random number between 0 and 255) or if A is carrying any weapon, then A will attack B personally: * if B is carrying the Runes of Finorn then B is unharmed. * with 25% probability, B will lose his horses (unless B has no horses or is Shareth or Tarithel). * if the RND calculated earlier is both odd and more than the recklessness of B then B will be killed, unless B has a weapon, in which case he has 69% chance of surviving. - The army of A then attacks the army of B, followed by the army of B attacking the army of A. Each battle between army 1 and army 2 is calculated as follows. * A value C for each army is calculated from (tiredness+constant)/2, where the constant is taken from the following table depending on the type of army. riders warriors ---------------------------- Moonguard 220 Fey 200 150 Barbarian 180 140 Iceguard 220 180 Giant 180 Dwarf 160 This constant is divided by 2 if the army belongs to a city (or fortress). Then the number of warriors lost by army 2 in the battle is ((N1*C1)/C2)*(RND/256) where N1 is the size of army 1. If this number is more than half of the size of army 2 then army 2 and its commander will be 'kicked out' and placed in a nearby location (the commander of army 2 will then be said to have won a victory). If a city loses its whole army then it will change ownership. If a commander loses his whole army then as well as being kicked out he will be attacked by 'the sword'; the rules of this battle follow those for people described above. Enemy Strategy Bits 4-7 of each element of table 13 describe the movement of a character with a number from 0-3, as follows. 0: Move towards the character's liege (if this person is dead then find his liege, and so on. If all the lieges are dead then move towards Luxor instead). 1: Move towards the character's foe (if this person is dead then find his liege, and so on as per (0)). 2: Move towards the character's weapon or magical item, if it is on the ground, otherwise move towards the character's fortress or city. 3: Move towards the character's fortress or city, except Shareth, who moves towards the City of Glireon. During the night all forces not loyal to the Moonprince are moved according to this pattern, but first the number is changed as follows. - if a character has a liege who is moving with code 0 or 1 then he will move with code 0. - otherwise, if a random number from 0-15 is less than 4 then the character's code is changed to this number. If it equals 4 then the character is not moved. A character will walk in the direction specified, picking up any item that he sees on the ground, until nightfall or until he gets very tired or meets a foe, at which point he stops. The character will always attempt to approach the foe if they are the only two people in the location. If when dawn arrives the character is still in the same location as a foe then he will move on with 50% probability. HACKING GUIDE DOOMDARKS'S REVENGE MAP AND TABLES SITES AND CHARACTERS -------------------- I=Icelord Example: G Imgarorn: Fortress/Citadel of G=Giant Imgarorn the Giant. Exceptions noted below. D=Dwarf B=Barbarian F=Fey S=Special All site names are created algorithmically from the map. There's a fixed seed at the upper left corner of the map, and the game traces recursively you position to this point, creating unique names (the name tables will be shown later) for each zone (plains, forest and so on). A citadel or fortress stands as a zone, and it gets its name the same way. There are 128 such sites, and 124 owners. The first 5 sites are special; their owner is not the character with the site name (as in all the others). There are 5 persons which receive special treatment: Luxor the Moonprince, Morkin the Free, Tarithel the Fey, Rorthron the Wise and Shareth the Heartstealer. Shareth owns the City of Imiriel. The other four are foreigners. This is the full character table: 0 S Luxor 32 I Berudrarg 64 D Torormarg 96 B Thorthak 1 S Morkin 33 I Imgudrur 65 I Ushangrane 97 F Thormand 2 S Tarithel 34 I Talorthane 66 I Fangrorn 98 B Anvorthun 3 S Rorthron 35 I Morangrim 67 I Carangresh 99 F Imgormand 4 S Shareth 36 G Obortharg 68 G Anvildrak 100 F Carorthorn 5 G Imgarorn 37 G Glortheon 69 I Anvarorn 101 B Imgorad 6 G Ingormad 38 I Ulfangruk 70 D Hagudril 102 F Tororthane 7 I Malisane 39 I Malarorn 71 G Ganigrorn 103 F Imorthorn 8 I Anvireon 40 I Ganormarg 72 D Berangrorn 104 F Berormorn 9 I Talormane 41 G Berorthim 73 G Fenorn 105 B Firak 10 I Imildrorn 42 I Firim 74 G Sildrorn 106 F Morildrane 11 I Carorthad 43 I Glireon 75 D Carorthay 107 F Thigrand 12 I Ushudrarg 44 I Kahangriel 76 B Glortharg 108 B Kahudrarg 13 G Glormeon 45 I Kahudruk 77 B Thortheon 109 F Lorangriel 14 G Thormuk 46 I Lororthane 78 D Glormane 110 F Carorthane 15 I Imgaril 47 I Malirane 79 D Gloruk 111 F Thorthand 16 G Obularg 48 I Kahudrun 80 D Gludreon 112 F Berormane 17 I Thigrim 49 G Ulformane 81 D Thudrun 113 F Ingormiel 18 I Lorelorn 50 D Hagildrorn 82 D Torelorn 114 B Careneon 19 I Kagangrorn 51 I Thildresh 83 D Thatruk 115 B Varangrand 20 I Malirarg 52 I Glormarg 84 B Carormand 116 F Imgorthand 21 G Imatrorn 53 I Carorand 85 D Lorangrarg 117 F Lorangrim 22 G Asorthane 54 G Carangrane 86 D Thelak 118 F Tharand 23 I Imasharg 55 G Thangrorn 87 D Imangruk 119 B Torinarg 24 I Torangrorn 56 I Malormun 88 D Glidril 120 F Imorthesh 25 I Sortharg 57 I Varormane 89 B Thangrad 121 B Anvortheon 26 I Zarashand 58 G Imgenarg 90 D Imulorn 122 F Obireon 27 I Glororn 59 G Thorarg 91 D Thigrak 123 G Obigrorn 28 I Malorthand 60 I Thirium 92 B Lorangrorn 124 I Imgasharg 29 G Varangrim 61 I Fenarg 93 B Varatrarg 125 I Thangrarg 30 I Sigrorn 62 D Imgorarg 94 D Imelorn 126 B Kahudrak 31 I Hagudrak 63 H Torelak 95 D Ulfangrak 127 F Carorthand The sites are in North-South order. This may serve as well as a clue to the distribution of the races. SAVE GAME FORMAT ---------------- All the addresses shown from now on are decimal. The saved data starts at Spectrum address 39933, and is 9219 bytes long. This includes: - Character index 1 - Day counter 2 - 24 tables (128 bytes each) 3072 - Map (64*96) 6144 ---- 9219 Address 39933 holds the number of the character you are using. Addresses 39934-5 hold the number of days 'since the Moonprince rode forth into the Icemark'. The map and several tables are included here. That's the reason why when you get killed, you must load a saved game to restart (there was no room for two copies of all these data). I will now list all of this. The tables are 128 bytes long, and are indexed by site or character number, as for the above table. TABLES 0/1 (39936/40064): Site coordinates ------------------------------------------ Table 0 contains the X coordinates (in the map) for the 128 sites, and table 1 the Y coords. I will not list them as all of you have the map or can get it easily using one of the PD editors. Each site belongs to the character with the same name. Exceptions: 0 Fortress of Varenand -> Lorangrim the Fey (117) 1 City of Carudrium -> Carorthay the Dwarf (75) 2 Fortress of Thigrorn -> Lorangriel the Fey (109) 3 Fortress of Finorn -> Carangrane the Giant (54) 4 City of Imiriel -> Shareth the Heartstealer TABLES 2/3 (40192/40320): Object coordinates -------------------------------------------- As tables 0/1, for objects. Unlike tables 0/1, these are not fixed, and are randomly set at the start of the game. Each object has an owner, who can use it *once*. Anyone who has an object but is not its owner, won't be able to use it, but will benefit from some minor advantages. They can also be used to approach new people (by giving some object to its true owner you can make him more inclined to join your side). Objects 5-128 are weapons, their power is in Battle, and belong to the character with the same number. These are Spears (for Barbarians), Bows (for the Fey), Axes (for Dwarves), Hammers (for Giants) and Swords (for Icelords). All of them give advantages in battle. Objects 0-4 are special. Here are their major powers: 0 Crown of Varenand: Used by Luxor brings all of his men with him. 1 Crown of Carudrium: Used by Morkin brings Luxor and his men. 2 Spell of Thigrorn: Used by Tarithel takes everyone to the city of Imiriel. 3 Runes of Finorn: Used by Rorthron... I don't remember!!! 4 Crown of Imiriel: Used by Shareth brings Luxor and his men. The Spell simply takes the person who uses it (namely Tarithel) to Morkin's location (of course she will then have to move away from him if he is still captive or else they will get into a fight). The Runes give rest to each person who is loyal to the Moonprince - which is the same as what an ordinary weapon does for the individual who uses it. This makes a person not at all tired and not at all despondent. Crowns have the minor power of Persuasion. They make easier to approach others in peace. It's worth noting that the Runes and the Spell also have this power. Spells have the minor power of Swiftness (more moves in a day time). Runes have the minor power of Protection in battle. It is impossible to get killed when carrying these. When an object is carried by a character, his number goes on table 3, and table 2 holds 255. TABLE 4 (40448): Enemies killed in the last battle. TABLE 5 (40576): Men lost in the last battle. TABLE 6 (40704): Campaign army size. TABLE 7 (40832): Home army size (in city or fortress). ------------------------------------------------------- All of these tables store the number divided by 5. Thus, 15 means 75 men and 255 (the maximum) means 1275 men. TABLE 8 (40960): Warrior type (based on table 13) ------------------------------------------------- 0-5: Moonguard 6-7: Fey 8-9: Barbarian 10, 11, 14: Iceguard 13: Giant 15: Dwarf The remaining values are unused. TABLE 9 (41088): Owner of each site ----------------------------------- The initial owners are explained somewhere above. This table holds the actual owners each time. TABLES 10/11 (41216/41344): Character coordinates ------------------------------------------------- X and Y respectively. Initially, each one is in his home site. Exceptions: Luxor: Gate of Varenorn. Morkin: City of Imiriel. Tarithel: Forest of Fangrim. Rorthron: Gate of Varenorn. Shareth: City of Imgaril. TABLE 12 (41472): Miscellaneous I --------------------------------- a) The 5 upper bits hold the daytime left: 0: Night 1: An hour 2-9: Two hours 10-12: Three hours 13-16: Four hours 17-20: Five hours 21-24: Six hours 25-27: Seven hours 28-30: Eight hours 31: Dawn Some people feel that this table is not correct. I prefer another interpretation that the number is simply the number of quarter-hours left in the day. When the value is printed it is rounded up to the next hour (so that if 2.25 hours remain then it will print 3). b) The 3 lower bits hold the direction of sight: 0: North 2: East 4: South 6: West 1: Northeast 3: Southeast 5: Southwest 7: Northwest TABLE 13 (41600): Character types --------------------------------- This table is used mainly to select a graphic representation: 0: Luxor (mounted) 1: Luxor (on foot) 2: Morkin (mounted) 3: Morkin (on foot) 4: Rorthron (mounted) 5: Rorthron (on foot) 6: Fey (mounted) 7: Fey (on foot) 8: Barbarian (mounted) 9: Barbarian (on foot) 10: Icelord (mounted) 11: Icelord (on foot) 12: Tarithel (always mounted) 13: Giant (always on foot) 14: Shareth (always mounted) 15: Dwarf (always on foot) There are other codes which are not used in this table, but I include them for completeness. See below for incident codes. 16: Dragon 17: Wolf 18: Troll 19: Skulkrin 20: Horse TABLE 14 (41728): Miscellaneous II ---------------------------------- Bits 0-2: Allegiance 0=Luxor 1=Shareth 2=Fey 3=Barbarians 4=Giants 5=Dwarves (6, 7 unused) Bit 3: Killed enemy in his last battle. Bit 4: Fought battle (bits 3 and 5 are meaningless if 4 is not set). Bit 5: Won victory in his last battle. Bit 6: In a tunnel. Bit 7: Used his object (only once allowed). TABLE 15 (41856): How tired --------------------------- Utterly: 000-031 Extremely: 032-062 Very: 064-095 Quite: 096-127 Somewhat: 128-159 Slightly: 160-191 Not: 192-223 Not at all: 224-255 TABLE 16 (41984): Last battle ----------------------------- In his last battle, this character fought whoever's number is here. TABLE 17 (42112): Foe --------------------- This character's foe. If bit 7 is set, none. TABLE 18 (42240): Liege ----------------------- This character's liege. If bit 7 is set, none. TABLE 19 (42368): How reckless ------------------------------ See table 15. 0 means DEAD. TABLE 20 (42496): Object/Slayer ------------------------------- This table has two meanings: a) If alive, then it holds the number of the carried object, or 255 for nothing. b) If dead, then it holds the number of the character who has killed him. If no character (i.e. dragons, trolls...), then bit 7 is set and the lower bits hold an incident code. See below for incident codes. TABLE 21 (42624): Positive attributes ------------------------------------- Bit Meaning 7 Loyal 6 Swift 5 Brave 4 Stubborn 3 Generous 2 Forceful 1 Strong 0 Good TABLE 22 (42752): Negative attributes ------------------------------------- Bit Meaning 7 Treacherous 6 Slow 5 Cowardly 4 Fawning 3 Greedy 2 Reticent 1 Weak 0 Evil ( ...note that it's possible to be simultaneously good and evil!) TABLE 23 (42880): How despondent -------------------------------- See table 15. TABLE 24 (43008): MAP (this one is not 128 bytes long!) ------------------------------------------------------- The map is 64 squares wide and 96 squares tall. The position at (X,Y) is in address 43008+64*Y+X. Every byte has the following meaning: Bits 0-3: Surface attributes 0 Plains 8 Fortress 1 Mountains 9 Hall 2 Forest 10 Hut 3 Hills 11 Tower 4 Gate 12 City 5 Temple 13 Fountain 6 Pit 14 Stones 7 Palace 15 Frozen Wastes Bits 4-7: Flags Bit 4: Incident Bit 5: Army (only graphical information: you could see an army which isn't really there, or vice versa, by poking this bit!) Bit 6: Mist. Bit 7: There's tunnel below. If the surface type is 4-7, there's a tunnel entrance. So far the saved information. Other tables: Table 29508: how does terrain (table 24) affect time (table 12a) ---------------------------------------------------------------- Plains: 1 Mountains: 8 Forest: 4 Hills: 3 (All the rest): 2 Table 29540: how does character type (table 13) affect time (table 12a) -------------------------------------------------------------- --------- (mounted/afoot) Luxor: 3/6 Morkin: 3/6 Rorthron: 2/4 Fey: 3/6 Barbarians: 5/8 Icelords: 3/5 Tarithel: 2/- Giants: -/5 Shareth: 2/- Dwarves: -/5 Table 29317: how does character type (table 13) affect tiredness (table 15) -------------------------------------------------------------- ------------- (mounted/afoot) Luxor: 1/2 Morkin: 2/4 Rorthron: 0/1 Fey: 2/3 Barbarians: 2/4 Icelords: 1/2 Tarithel: 1/0 Giants: -/2 Shareth: 0/- Dwarves: -/3 Table 29009: Four incident types for each possible terrain ---------------------------------------------------------- (only on empty squares; repeated values increase probability) Plains: 0,3,1,4 Fortress: 0,1,6,6 Mountains: 0,0,2,1 Hall: 2,6,6,10 Forest: 0,3,1,1 Hut: 3,1,6,6 Hills: 0,2,1,1 Tower: 5,5,5,5 Gate: 0,7,8,10 City: 0,6,6,12 Temple: 8,9,10,11 Fountain: 3,12,12,12 Pit: 2,1,9,12 Stones: 0,8,8,11 Palace: 0,4,7,10 Fr. Wastes: 0,3,3,2 Incident types: 0 Dragons 1 Wolves 2 Trolls 3 Skulkrin 4 Horses 5 Guidance 6 Shelter 7 Claws of Night (time left = 0) 8 Flames of Dawn (time left = 31) 9 Thorns of Despair (despondent = 0) 10 Blood of Courage (despondent = 255) 11 Languor of Death (tired = 0) 12 Springs of Life (tired = 255) NAME TABLES (24839) ------------------- All names (except the first five, which are hardcoded) contain three parts, which are fetched more or less randomly (with the map as a seed) by the name generator from three tables. These are: Prefixes (25): Img Dol Lor Ush Mor Tal Car Ulf As Tor Ob F Gl S Th Gan Mal Im Var Hag Zar Anv Ber Kah Ash Midwords (16): ar or ir en orth angr igr ash el in ul atr orm udr is ildr Suffixes (16): orn il iel im uk ium ia eon ay ak arg and ane esh ad un The name generator has a fixed seed at position (0,0) of the map. This position holds the fortress of Imgarorn the Giant. As you can see Img-ar-orn is (0,0,0) in the tables above. Any other position is recursively traced down to (0,0), generating a pseudorandom seed for the three tables. The algorithm takes care of any contiguous squares of the same terrain type having the same name. I find this explanation misleading. The "pseudo-random" number is simply calculated by evaluating N = 444(64y+x) MOD 6151 where (x,y) are the coordinates. Then the first part of the name is taken from bits 8-12 of N, the middle part is taken from bits 4-7 and the last part from bits 0-3. If the location to be named is an area rather than an individual square, the algorithm traces around the border of the area to find its northernmost point (if there are several northernmost points then the most westerly one is chosen) and uses that in the formula. This is the only action that might be described as "recursively tracing" and is the most complicated part of the procedure. As you can see, the coordinates (0,0) give rise to N=0 and hence the name (0,0,0). This does not imply that the top left corner is some sort of "seed" for the algorithm. Note that the map has 6144 positions. 6144=24*16*16, so there is more possible names than squares in the map. So the algorithm also guarantees that there will be no different places with the same name, This is not guaranteed merely by numbers. What if N were 444(64y+x) MOD 6144? Then the only values of N which would result would be the multiples of 12 and these would all be repeated 12 times. As it happens, 6151 is prime and therefore each location gives a different value of N. Note that since 6151 is so close to 6144 there is only one location whose name starts with Ash: the tower of Asharil at 55,42. GENERAL FACTS A special demo of Psytron was given away on side two of the Doomdark tape for the Spectrum. NOTES When you are playing Doomdark on an emulator it helps if you set it to a high speed setting to speed up the drawing of landscapes and especially to make the nights shorter.