Articulate Vlish cst1992 Posted January 6 Share Posted January 6 (edited) The monsters that you capture with a Soul Crystal are stored in the save file at specific locations (hex addresses 7920, 7922, 7924 and 7926) as single byte values. There are "cheat codes" on the Internet that will tell you the codes for Erika for example, so that you could summon her in a fight if you wanted to. But the issue there is that those codes were only about 10 or so, for the most exclusive and powerful monsters. But the thing is, there are 256 values in a single byte. What would you get if you tried them all? Well, I did, and this is the list I got. Every single monster that you can summon, right from a chicken to Rentar-Ihrno! Use responsibly! I've grouped in categories as much as possible, but not all related monsters are stored next to each other, unfortunately. Also, categories are in increasing number of hex values. If you are looking for a specific hex value, the best place to look is the first one in each, 'cause it's a good chance that's the lowest value for a monster in that category. The number in the brackets is the cost required to summon that monster (Is it always the same as the monster's level?) Also, it's given below in Miscellaneous, but you can set the value to 5C to reset the slot to Empty. Category 1: Vahnatai 00 - Vahnatai Warrior (8) 01 - Vahnatai Shaper (7) 02 - Vahnatai Shaper (7) 03 - Vahnatai Keeper (18) 05 - Vahnatai (3) 06 - Vahnatai Child (1) 07 - Vahnatai Warrior (9) 37 - Crystal Soul (28) 3C - Vahnatai Keeper (18) 3D - Vahnatai Blademaster (25) 3E - Vahnatai Lord (35) F8 - Power Crystal (10) F9 - Mind Crystal (30) Category 2: Demons 04 - Hordling (5) 08 - Imp (7) 09 - Demon (20) 0A - Mung Demon (30) 0B - Haakai (35) Category 3a: Hostile Animals and Bugs 0C - Mung Rat (3) 0E - Bat (2) 12 - Cave Rat (2) 13 - Vapor Rat (4) 28 - Worg (7) 29 - Bear (8) 2A - Giant Spider (4) 2B - Talking Spider (8) 2F - Wolf (3) 38 - Asp (5) 3F - Serpent (3) D8 - Null Bug (12) DE - Chitrach (12) DF - Chitrach Larva (6) F0 - Ursag (12) F2 - Unicorn (3) Category 3b: Docile Animals 2C - Cow (1) 2D - Chicken (1) 2E - Sheep (1) 30 - Lizard (1) 31 - Cat (1) 32 - Dog (1) 33 - Cave Cow (1) Category 4: Monsters (more literally speaking) 0D - Shambler (18) 20 - Poison Fungi (7) D9 - Giant Slug (16) DA - Spore Beast (7) F7 - Spiny Worm (15) Category 5: Lizards 0F - Drake (18) 14 - Giant Lizard (4) 15 - Fire Lizard (8) 16 - Ice Lizard (8) 23 - Salamander (18) 34 - Ur-Basilisk (25) 3B - Basilisk (10) DC - Ice Drake (22) F6 - Drake Lord (30) Category 6: Slimes 10 - Ice Slime (7) 11 - Viscous Goo (3) 17 - Cave Slime (3) D0 - Emerald Slime (3) D1 - Mauve Slime (4) D2 - Alien Slime (14) D6 - Amber Slime (3) D7 - Ochre Slime (3) DD - Ice Pudding (10) EC - Mung Slime (7) Category 7: High-level Foes 18 - Vampire (18) 19 - Lich (35) 27 - Doomguard (4) (Funny how it only requires 4 SP to summon, but capturing it in the first place is the real challenge; perhaps impossible). 39 - Gazer (24) 3A - Eyebeast (18) D4 - Naga (28) D5 - Efreet (25) DB - Rakshasa (25) F4 - Dark Wyrm (30) Category 8: Undead (all, including Vahnatai undead) 1A - Hraithe (14) 1B - Vahnavoi (10) 1C - Quickghast (12) 1D - Spirit (11) 1E - Wight (10) 1F - Spectre (14) 21 - Shade (5) 22 - Deva (8) 25 - Black Shade (12) 60 - Zombie (4) 61 - Ghost (3) 62 - Ghoul (6) 63 - Ghast (8) 66 - Skeleton (3) 67 - Ruby Skeleton (10) F3 - Slime Zombie (5) Category 9: Humanoids, Goblins, and Ogres 24 - Gremlin (3) 71 - Ogre (7) 72 - Ogre Mage (18) 7A - Goblin (2) 7B - Goblin Fighter (5) F1 - Gorgon (18) F5 - Dryad (7) Category 10a: Human Magic Users 40 - Mage (10) 41 - Wizard (25) 42 - Order Mage (35) 43 - Witch (8) 44 - Evil Acolyte (4) 45 - Evil Priest (8) 46 - Evil High Priest (20) 47 - Apprentice Mage (8) 49 - Acolyte (3) 4A - Priest (8) 4B - High Priest (20) 7C - Witch (6) Category 10b: Human Warriors 48 - Empire Archer (28) 4C - Bladesman (20) 4D - Empire Dervish (25) 4E - Brigand (3) 4F - Archer (5) 50 - Guard (30) (This guy is more powerful than a Dervish!) 51 - Soldier (4) 52 - Captain (8) 53 - Champion (12) 78 - Monk (6) 79 - Mad Monk (12) 7F - Assassin (7) Category 10c: Other Humans 54 - Townsperson (1) 55 - Child (1) 56 - Child (1) 57 - Beggar (1) 58 - Townsperson (1) 59 - Townsperson (1) 5A - Townsperson (1) 5B - Townsperson (1) 5D - Townsperson (1) 5E - Townsperson (1) 5F - Townsperson (1) 7D - Official (2) 7E - Official (2) Category 11: Giants 64 - Giant Chief (28) 65 - Mutant Giant (26) 6A - Cave Giant (18) 6B - Giant Shaman (22) C0 - Hill Giant Fighter (12) C1 - Hill Giant Shaman (14) C2 - Hill Giant Chief (24) C7 - Hill Giant (10) Category 12: Sliths 68 - Slith Archmage (12) 69 - Slith Chief (15) 6C - Slith Warrior (10) 6D - Slith Priest (8) 6E - Slith Mage (8) 6F - Slith High Priest (12) 73 - Slith (7) Category 13: Nephilim 70 - Nephil Chief (8) 74 - Nephil (4) 75 - Nephil Warrior (6) 76 - Nephil Archer (5) 77 - Nephil Shaman (6) Category 14: Golems C3 - Golem of Blades (13) FC - Fire Golem (18) FD - Ice Golem (18) FE - Jeweled Golem (22) FF - Demon Golem (22) Category 15: Troglos C4 - Troglodyte Khazi (10) C5 - Troglodyte Defender (12) C6 - Troglodyte Lord (14) C9 - Troglodyte (5) CA - Troglodyte Warrior (8) CB - Troglodyte Shaman (7) Category 16: Roaches C8 - Big Roach (4) CC - Large Roach (6) CD - Giant Roach (8) CE - Mung Roach (8) CF - Guardian Roach (10) D3 - Cockroach (2) Category 17: Exclusive NPCs E0 - Elhioc (30) E1 - Siobahn (0) E2 - Eurydice (0) E5 - Gunston (3) E6 - Carol (3) E7 - Jordan (10) E8 - Erika (39) E9 - Chevyn (2) EA - Solberg (39) EB - Prazak(c?) (4) (Just a typo, I guess) ED - Rentar-Ihrno (38) Category 18: Dragons E4 - Khoth (39) EE - Athron (39) EF - Sulfras (39) Category 19: Alien Beasts FA - Alien Beast (20) FB - Pack Leader (27) Category 20: Miscellaneous 26 - Guardian (18) 35 - Statue (7) 36 - Living Statue (2) 5C - Default empty slot Category 21: Bad codes. Either these spawn some unknown weird monster that does nothing or crash the game entirely. 80 - (Blank) (3) 81 - (Blank) (0) 82 - (Blank) (3) 83 - (Blank) (0) 84 - (Blank) (6) 85 - (Blank) (0) 86 - (Blank) (6) 87 - (Blank) (0) 88 - (Blank) (6) 89 - (Blank) (0) 8A - (Blank) (6) 8B - (Blank) (0) 8C - (Blank) (6) 8D - (Blank) (0) 8E - (Blank) (6) 8F - (Blank) (0) 90 - (Blank) (6) 91 - (Blank) (0) 92 - (Blank) (6) 93 - (Blank) (0) 94 - (Blank) (0) 95 - (Blank) (0) 96 - (Blank) (6) 97 - (Blank) (0) 98 - (Blank) (0) 99 - (Blank) (0) 9A - (Blank) (0) 9B - (Blank) (0) 9C - (Blank) (0) 9D - (Blank) (0) 9E - (Blank) (0) 9F - (Blank) (0) A0 - B6 - (Crash) B8 - (Blank) (40) B9 - (Blank) (0) BA - (Blank) (75) BB - (Blank) (0) BC - (Blank) (140) (Yes, you need 140 SP to spawn this blank monster) BD - (Blank) (0) BE - (Blank) (20) BF - (Blank) (0) E3 - (Blank) (0) Edited January 6 by cst1992 Ircher 1 Quote Link to comment Share on other sites More sharing options...
Understated Ur-Drakon Celtic Minstrel Posted January 6 Share Posted January 6 37 minutes ago, cst1992 said: 27 - Doomguard (4) (Funny how it only requires 4 SP to summon, but capturing it in the first place is the real challenge; perhaps impossible). I believe monsters with the "splits when hit" ability are defined to be immune to Simulacrum, meaning it is in fact impossible to capture them. The same goes for monsters of type "important", which includes Erika and Rentar-Ihrno. There may be some other classes of monsters that are also immune. Quote Link to comment Share on other sites More sharing options...
Articulate Vlish cst1992 Posted January 7 Author Share Posted January 7 (edited) Erika, the town guards and some other monsters always say "x resists" when cast Capture Soul on, but I thought this was because of their resistance/immunity to magic. Interesting bit about immunity to Simulacrum there. Is there a way to tell which of them are immune and which aren't? Edited January 7 by cst1992 Quote Link to comment Share on other sites More sharing options...
Understated Ur-Drakon Celtic Minstrel Posted January 7 Share Posted January 7 I don't know of a definite way to determine which monsters are immune in Exile 3. The best I can offer is the Blades of Exile source code, which is probably the same as in Exile 3. void record_monst(cCreature* which_m, bool forced) { short r1; r1 = get_ran(1,1,100); r1 = (r1 * 7) / 10; if(forced) r1 = 0; if((which_m->x_width > 1) || (which_m->y_width > 1)) { ASB("Capture Soul: Monster is too big."); } else if(r1 > cCreature::charm_odds[which_m->level / 2] || which_m->abil[eMonstAbil::SPLITS].active || which_m->m_type == eRace::IMPORTANT) { which_m->spell_note(10); play_sound(68); } else { which_m->spell_note(24); r1 = get_ran(1,0,univ.party.imprisoned_monst.size() - 1); if(univ.party.imprisoned_monst[r1] == 0) univ.party.imprisoned_monst[r1] = which_m->number; else { r1 = get_ran(1,0,3); univ.party.imprisoned_monst[r1] = which_m->number; } ASB("Capture Soul: Success!"); add_string_to_buf(" Caught in slot " + std::to_string(r1 + 1) + "."); play_sound(53); } } You can see that monsters larger than a single space, monsters with the "splits" ability, and monsters with the "important" race are immune. It looks like those are the only conditions for immunity (in case you were wondering, the "charm_odds" is the chance of succeeding when you attempt to capture a monster that's not immune). It's worth noting that resistance or immunity to magic does not appear to be factored in at all. I think the town guards actually are capturable. They're just quite hard to capture because they're high level. Quote Link to comment Share on other sites More sharing options...
Articulate Vlish cst1992 Posted January 7 Author Share Posted January 7 (edited) What this also tells me is that the chance to capture a monster is directly correlated to the odds of charming it. If it's hard to charm, it's hard to capture, although only half the level is considered, meaning you could technically capture a higher level of monster, by a factor of 2, than one you could charm. Another thing we could learn from this code is that the RNG runs twice: once to locate a random empty slot to store, and again if that slot is taken. Personally I don't agree with this logic as it assumes either all slots are empty or all are full, meaning there's a 6% chance an existing monster could get overwritten even if the other three slots are empty. Edited January 7 by cst1992 Quote Link to comment Share on other sites More sharing options...
Hatchling Cockatrice Mea Tulpa Posted January 7 Share Posted January 7 And voila, here's charm_odds as CM kindly provided in a previous thread: const short cCreature::charm_odds[21] = {90,90,85,80,78, 75,73,60,40,30, 20,10,4,1,0, 0,0,0,0,0, 0}; For Capture Soul, looks like it's auto-success through monster level 13, then it starts dropping, and becomes quite harsh above level 23. Looks like level 27 is the absolute limit. Quote Link to comment Share on other sites More sharing options...
Hatchling Cockatrice Mea Tulpa Posted January 7 Share Posted January 7 Actually... wait a minute. r1 is a short. c++ rounds down by default. and that's a > not a >= in the charm_odds compare. so this means that anything above level 27 and not immune should have an exactly 1% chance to get captured, right? Quote Link to comment Share on other sites More sharing options...
Articulate Vlish cst1992 Posted January 7 Author Share Posted January 7 (edited) That r1 = (r1 * 7) / 10 is bothering me. If we're generating a percentage from 1 to 100 and then use that, we get a max value of 70 percent. If I want to capture a Champion then the level is 12, meaning the value from charm_odds I am looking for is 73. If r1 has to be greater than this value, then I shouldn't be able to capture the Champion at all, and stronger monsters should actually be easier to capture (e.g. Guard with a level of 30 and charm_odds value of 0). The code has to be different for E3 as this is not what is observed at all. Another thing to note is that the get_ran function is not a library function, but something defined by the programmer. We are assuming it's an accurate RNG between a to b, but who knows exactly how it works? Edited January 7 by cst1992 Quote Link to comment Share on other sites More sharing options...
Hatchling Cockatrice Mea Tulpa Posted January 7 Share Posted January 7 You have it backwards. if r1 is greater, it fails. That set of conditionals is what causes it to fail. Quote Link to comment Share on other sites More sharing options...
Understated Ur-Drakon Celtic Minstrel Posted January 7 Share Posted January 7 Since the minimum value is 1, a 0 in the charm odds would mean a monster of that level can never be captured. So that would imply the level 30 guard really can't be captured? …except for that calculation done on the generated value. If the generated value is 1, multiplying it by 7 and dividing by 100 would give 0, so there is a very small chance to capture a Guard? As for the implementation of get_ran, it does use standard random functions inside it, though the implementation varies between the Mac version, the Windows version, and the open-source version. In the Mac version it looks like this: short get_ran (short times,short min,short max) { long int store; short i, to_ret = 0; for (i = 1; i < times + 1; i++) { store = Random(); to_ret = to_ret + min + (((store + 32767) * (max - min + 1)) / 65536); } return to_ret; } The Random() function is part of the Macintosh Toolkit, and I don't know exactly what it does off the top of my head. However, it looks like it gives 4 bytes of precision and he's collapsing the result into 2 bytes. In the Windows version, it looks like this: short get_ran (short times,short min,short max) { short store; short i, to_ret = 0; if ((max - min + 1) == 0) return 0; for (i = 1; i < times + 1; i++) { store = rand() % (max - min + 1); to_ret = to_ret + min + store; } return to_ret; } That rand() is the standard C function. The open-source version is pretty much the same as the Windows version, but for some reason is missing the divide-by-zero check. Quote Link to comment Share on other sites More sharing options...
Hatchling Cockatrice Mea Tulpa Posted January 7 Share Posted January 7 pascal int Random() Random returns an integer between -32768 and 32767. The integer is from a uniform pseudo-random distribution. The seed for this function is the global variable randSeed. RandSeed is initialized to 1 by InitGraf. Celtic Minstrel 1 Quote Link to comment Share on other sites More sharing options...
Articulate Vlish cst1992 Posted January 7 Author Share Posted January 7 (edited) I see, it's my mistake. Okay, so levels 24 and 25 have only a 4% chance, 26 and 27 have 1% and then nothing. It's impossible to capture the guard then? About the 1% thing you mentioned, I'm thinking the exact same thing - in the case r1 comes out to 1, the 70% logic will turn it to 0, 0 > 0 will fail and the flow will go to the else block. I think I'll just spam Capture Soul on the guard and see if it leads to anything. I'm not hopeful, but it might work. Edited January 7 by cst1992 Quote Link to comment Share on other sites More sharing options...
Hatchling Cockatrice Mea Tulpa Posted January 7 Share Posted January 7 6 minutes ago, cst1992 said: Okay, so levels 24 and 25 have only a 4% chance, 26 and 27 have 1% Except it's not actually a percent due to the 7/10 multiplication. r1 needs to be <= 4 to succeed vs a level 24-25 monster, which will happen 7% of the time -- as even 49/10 rounds down to 4. And then level 26-27 should be 2%, since a roll of 2 also rounds down to 1. After that, as you note later, it's 1%. Quote Link to comment Share on other sites More sharing options...
Articulate Vlish cst1992 Posted January 8 Author Share Posted January 8 (edited) Oh yes, you're right. Let's say we have a monster that neither splits nor is among the important monsters. We could invert the if condition to be r1 <= cCreature::charm_odds[which_m->level / 2] For that, we could make a list of 100 values of r1 and corresponding levels, like so: r1 = 1; (r1 * 7) / 10 = 0; level >= 28 r1 = 2; (r1 * 7) / 10 = 1; 27 >= level >= 26 r1 = 3; (r1 * 7) / 10 = 2; 25 >= level >= 24 r1 = 4; (r1 * 7) / 10 = 2; --------"-------- r1 = 5; (r1 * 7) / 10 = 3; --------"-------- r1 = 6; (r1 * 7) / 10 = 4; --------"-------- r1 = 7; (r1 * 7) / 10 = 4; --------"-------- r1 = 8; (r1 * 7) / 10 = 5; 23 >= level >= 22 r1 = 9; (r1 * 7) / 10 = 6; --------"-------- r1 = 10; (r1 * 7) / 10 = 7; --------"-------- r1 = 11; (r1 * 7) / 10 = 7; --------"-------- r1 = 12; (r1 * 7) / 10 = 8; --------"-------- r1 = 13; (r1 * 7) / 10 = 9; --------"-------- r1 = 14; (r1 * 7) / 10 = 9; --------"-------- r1 = 15; (r1 * 7) / 10 = 10; --------"-------- r1 = 16; (r1 * 7) / 10 = 11; --------"-------- r1 = 17; (r1 * 7) / 10 = 11; --------"-------- r1 = 18; (r1 * 7) / 10 = 13; --------"-------- r1 = 19; (r1 * 7) / 10 = 13; --------"-------- r1 = 20; (r1 * 7) / 10 = 14; --------"-------- r1 = 21; (r1 * 7) / 10 = 14; --------"-------- r1 = 22; (r1 * 7) / 10 = 15; --------"-------- r1 = 23; (r1 * 7) / 10 = 16; --------"-------- r1 = 24; (r1 * 7) / 10 = 16; --------"-------- r1 = 25; (r1 * 7) / 10 = 17; --------"-------- r1 = 26; (r1 * 7) / 10 = 18; --------"-------- r1 = 27; (r1 * 7) / 10 = 18; --------"-------- r1 = 28; (r1 * 7) / 10 = 19; --------"-------- r1 = 29; (r1 * 7) / 10 = 20; 21 >= level >= 20 r1 = 30; (r1 * 7) / 10 = 21; --------"-------- r1 = 31; (r1 * 7) / 10 = 21; --------"-------- r1 = 32; (r1 * 7) / 10 = 22; --------"-------- r1 = 33; (r1 * 7) / 10 = 23; --------"-------- r1 = 34; (r1 * 7) / 10 = 23; --------"-------- r1 = 35; (r1 * 7) / 10 = 24; --------"-------- r1 = 36; (r1 * 7) / 10 = 25; --------"-------- r1 = 37; (r1 * 7) / 10 = 25; --------"-------- r1 = 38; (r1 * 7) / 10 = 26; --------"-------- r1 = 39; (r1 * 7) / 10 = 27; --------"-------- r1 = 40; (r1 * 7) / 10 = 28; --------"-------- r1 = 41; (r1 * 7) / 10 = 28; --------"-------- r1 = 42; (r1 * 7) / 10 = 29; --------"-------- r1 = 43; (r1 * 7) / 10 = 30; 19 >= level >= 18 r1 = 44; (r1 * 7) / 10 = 30; --------"-------- r1 = 45; (r1 * 7) / 10 = 31; --------"-------- r1 = 46; (r1 * 7) / 10 = 32; --------"-------- r1 = 47; (r1 * 7) / 10 = 32; --------"-------- r1 = 48; (r1 * 7) / 10 = 33; --------"-------- r1 = 49; (r1 * 7) / 10 = 34; --------"-------- r1 = 50; (r1 * 7) / 10 = 35; --------"-------- r1 = 51; (r1 * 7) / 10 = 35; --------"-------- r1 = 52; (r1 * 7) / 10 = 36; --------"-------- r1 = 53; (r1 * 7) / 10 = 37; --------"-------- r1 = 54; (r1 * 7) / 10 = 37; --------"-------- r1 = 55; (r1 * 7) / 10 = 38; --------"-------- r1 = 56; (r1 * 7) / 10 = 39; --------"-------- r1 = 57; (r1 * 7) / 10 = 39; --------"-------- r1 = 58; (r1 * 7) / 10 = 40; 17 >= level >= 16 r1 = 59; (r1 * 7) / 10 = 41; --------"-------- r1 = 60; (r1 * 7) / 10 = 42; --------"-------- r1 = 61; (r1 * 7) / 10 = 42; --------"-------- r1 = 62; (r1 * 7) / 10 = 43; --------"-------- r1 = 63; (r1 * 7) / 10 = 44; --------"-------- r1 = 64; (r1 * 7) / 10 = 44; --------"-------- r1 = 65; (r1 * 7) / 10 = 45; --------"-------- r1 = 66; (r1 * 7) / 10 = 46; --------"-------- r1 = 67; (r1 * 7) / 10 = 46; --------"-------- r1 = 68; (r1 * 7) / 10 = 47; --------"-------- r1 = 69; (r1 * 7) / 10 = 48; --------"-------- r1 = 70; (r1 * 7) / 10 = 49; --------"-------- r1 = 71; (r1 * 7) / 10 = 49; --------"-------- r1 = 72; (r1 * 7) / 10 = 50; --------"-------- r1 = 73; (r1 * 7) / 10 = 51; --------"-------- r1 = 74; (r1 * 7) / 10 = 51; --------"-------- r1 = 75; (r1 * 7) / 10 = 52; --------"-------- r1 = 76; (r1 * 7) / 10 = 53; --------"-------- r1 = 77; (r1 * 7) / 10 = 53; --------"-------- r1 = 78; (r1 * 7) / 10 = 54; --------"-------- r1 = 79; (r1 * 7) / 10 = 55; --------"-------- r1 = 80; (r1 * 7) / 10 = 56; --------"-------- r1 = 81; (r1 * 7) / 10 = 56; --------"-------- r1 = 82; (r1 * 7) / 10 = 57; --------"-------- r1 = 83; (r1 * 7) / 10 = 58; --------"-------- r1 = 84; (r1 * 7) / 10 = 58; --------"-------- r1 = 85; (r1 * 7) / 10 = 59; --------"-------- r1 = 86; (r1 * 7) / 10 = 60; 15 >= level >= 14 r1 = 87; (r1 * 7) / 10 = 60; --------"-------- r1 = 88; (r1 * 7) / 10 = 61; --------"-------- r1 = 89; (r1 * 7) / 10 = 62; --------"-------- r1 = 90; (r1 * 7) / 10 = 63; --------"-------- r1 = 91; (r1 * 7) / 10 = 63; --------"-------- r1 = 92; (r1 * 7) / 10 = 64; --------"-------- r1 = 93; (r1 * 7) / 10 = 64; --------"-------- r1 = 94; (r1 * 7) / 10 = 65; --------"-------- r1 = 95; (r1 * 7) / 10 = 66; --------"-------- r1 = 96; (r1 * 7) / 10 = 67; --------"-------- r1 = 97; (r1 * 7) / 10 = 67; --------"-------- r1 = 98; (r1 * 7) / 10 = 68; --------"-------- r1 = 99; (r1 * 7) / 10 = 69; --------"-------- r1 =100; (r1 * 7) / 10 = 70; --------"-------- So the level to percentage correlation is so: >= 28 1% 26, 27 2% 24, 25 7% 22, 23 28% 20, 21 42% 18, 19 57% 16, 17 85% 14, 15 100% lower than 14 100% Edited January 8 by cst1992 minor correction Celtic Minstrel 1 Quote Link to comment Share on other sites More sharing options...
Hatchling Cockatrice Mea Tulpa Posted January 8 Share Posted January 8 also, worth noting, although this is the same odds table that Charm and a few other effects use, they don't necessarily use the same formula with it. I know Charm takes the caster's level into consideration, for example. So it's not actually that charming is twice as hard or anything, it just scales very differently. Quote Link to comment Share on other sites More sharing options...
Articulate Vlish cst1992 Posted January 8 Author Share Posted January 8 Charming and capturing should have the same odds. Given that some monsters have very high level e.g. a dragon with level 39, you have to be able to use that value in a formula to get the odds. Given that the charm_odds array is only 21 values meaning a max level of 41 can be taken by using half the level value in the function. Quote Link to comment Share on other sites More sharing options...
Hatchling Cockatrice Mea Tulpa Posted January 8 Share Posted January 8 They don't have the same odds. They use the same lookup table in their functions (charm_odds), but there are steps taken both before (in this case, dividing the monster's level by 2) and after looking up that value (in this case, using a 0-to-70 RNG), and those steps are different for charming and for capturing, which results in different resulting odds. cst1992 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.