Jump to content

Monster types planning


Celtic Minstrel

Recommended Posts

There aren't a whole lot of changes to be made to monsters. Certainly nothing as drastic as I'm doing with terrain and planning with items.

 

One thing I thing would be nice is a "special to call when first seen", giving the ID of a scenario special which is called the first time the party sees a monster of this type. (I got this idea from some of the E3 relics in the code. I'm not sure if E3 has this ability, but there is a relic function that checks if a monster has been seen and if not, marks it as seen. I think it uses the Scry Monster list for that, though, so I'd have to divorce it from that.)

 

It'd be nice to have a few more species: Nephil, Slith, and Vahnatai, for starters (so that we can merge the PC races with the monster races, allowing joined PCs of unusual races to retain their race). Also Plant and maybe Other. Other ideas would be welcome. Also I'm not sure if any of the races have special features, but it might be nice (eg Stone immune to Capture Soul). Then again it may be better not to.

 

There are a few abilities I want to get rid of: Invisible, Mindless, and Guard. Oh, and Invulnerable I guess. I'd also like to add some abilities:

  • Death gaze
  • Fiery touch
  • Steals Gold when hits
  • Cursing Touch?
  • Shocking Touch (magic damage)
  • Poison Spit
  • Cold Ray
  • Energy Ray (magic damage)
  • Slowing Ray
  • Cursing Ray
  • Disease Spit
  • Dumbfounding Ray
  • Sleep Ray
  • Throws Knives
  • Reflect Spells? (The target of the spell is redirected either a. to the caster or b. to a point of the monster's choice. Missile would fly to monster, then fly from monster to new target.)
  • Call scenario special node
  • Call local special node
(Most of these are simply for completeness.)

And for radiate abilities, I'd like to add Radiate blade walls (for completeness). Radiate webs might be interesting, too – it would have to incur immunity to webs though. I'd also like to extend the summon abilities to be able to select at random from a specified group of monsters. One way to do this would be to specify a town wandering group (the number of the town and the number of the group, or maybe use the same structure to create some such groups at the scenario level). Another way would be to specify the ID of the first monster and the total number of consecutive monsters to choose from.

 

Adding these abilities would require additional extra fields, of course.

 

I'd like to add one more summon type, to distinguish "No summon, useless" monsters from "No summon, unique/very powerful" monsters.

 

I'd like to change around the monster immunities. For example, why is it possible to be both immune and resistant to something? I'd like to add immunities for mental effects (to replace the Mindless ability, but possibly also protecting from one or two other things such as sleep), acid (either combined with poison or separate from it), melee (which would actually deprecate the Invulnerable ability, maybe?), maybe even spell, missile (ie based on the source rather than the type).

 

I'd also like a set of... mobility?... flags: Walk, Swim, Fly, Guard. The first indicates that the monster can move through terrains with a blockage of 0 or 1. The second indicates it can cross terrains with a "Can boat over" set to true. The third indicates it can cross terrains with "Can fly over" set to true. And the fourth replaces the Guard special ability.

 

And finally, I'd like PC graphics to be usable for monsters – for example, 400 + slot.

Link to comment
Share on other sites

I'm a bit confused about something. Do you intend to go through all the old scenarios and change them? That's the idea I'm getting, and I don't like the idea of changing another person's scenarios without their explicit consent.

 

I saw talk in another thread of changing the way old scenarios look through the changes in the way roads, walkways, and other frills work. I think those should have a compatibility switch as well, in the form of the program functions exactly the way it always did for old-format scenarios, with the sole exception of fixing minor bugs. That's what seems to have been happening at first, but that attitude seems to be shifting lately. Maybe I'm misunderstanding things.

 

Also, are we close to having a stable release with bugs fixed but without new-format changes yet? Are we still keeping the new-format code separate enough that this is possible?

Link to comment
Share on other sites

Originally Posted By: The Almighty Doer of Stuff
Do you intend to go through all the old scenarios and change them?
No, but when an old-format scenario is loaded it will be automatically converted.

Originally Posted By: The Almighty Doer of Stuff
That's what seems to have been happening at first, but that attitude seems to be shifting lately. Maybe I'm misunderstanding things.
I'm making no attempt to include compatibility switches in the actual scenario format. Compatibility is instead being preserved by the conversion process. If the conversion process does something that makes scenarios behave differently or significantly changes the look of scenarios, that counts as a bug. Of course compatibility is important – that's why for every monster ability I have proposed removing, there's an alternate mechanism to achieve the same behaviour. The conversion process will map the ability onto that alternate mechanism, hence preserving behaviour. If it doesn't, again, that counts as a bug.

Originally Posted By: The Almighty Doer of Stuff
Also, are we close to having a stable release with bugs fixed but without new-format changes yet? Are we still keeping the new-format code separate enough that this is possible?
Sorry, no. I got too carried away with the new-format stuff to do that. It would probably be possible to create a branch off before when I disabled saving (or thereabouts), but I'm personally more interested in the new-format stuff. If another programmer wants to do that, they're welcome to. I'd give them repository access and create the branch for them.


I answered the rest of your post in the terrain thread. smile
Link to comment
Share on other sites

Quote:
There are a few abilities I want to get rid of: Invisible, Mindless, and Guard. Oh, and Invulnerable I guess. I'd also like to add some abilities:


Keep invisible. Many scenarios (including my own) make use of this ability. What is the alternative to preserve compatibility? I don't particularly like switching the graphic to some other blank placeholder.

Fix petrification touch again. It's broken and needs to work.

If you are going to change things so radically, I would just restructure the way abilities are done altogether. There are a few major types:

1) Touches
2) Rays
3) Missile
4) Defensive

Like before, user gets to pick one of these and then specify the type. All status effects and damage types would be possible for touches and rays. For missile, allow a type and then to specify a damage amount in n dice of k sides. For defensive, may just need to do something special (permanent martyr's shield).

Also, the code I worked on calls specials in monster abilities. I think the best place for that one is with the summoning and field abilities. I tested it and it works quite well.

If you are drastically changing resistances, may as well just make it be a number between 0 and 100 percent. It's a tricky change, but should not be impossible.

Also, one thing to consider is allowing us to modify the death noise and stain.

With species, just open up a bunch of blank spaces for custom types. This gives the designer maximum control. Might be nice to structure items in such a way that we can link a protect/damage to any arbitrary type. Custom types would need to lose their ability upon leaving the scenario.
Link to comment
Share on other sites

Originally Posted By: *i
Keep invisible. Many scenarios (including my own) make use of this ability. What is the alternative to preserve compatibility? I don't particularly like switching the graphic to some other blank placeholder.
Heh, the default bladbase makes use of it. I was going to include it in the flags along with Walk, Swim, Fly, Guard, but I forgot to mention that. Oops.

I thought about simply replacing it with a blank graphic, but that has a major disadvantage: you can't see where they are in the editor. So I'm not going to do that.

Originally Posted By: *i
Fix petrification touch again. It's broken and needs to work.
That may have been done already. If not, it's on the list.

Originally Posted By: *i
If you are going to change things so radically, I would just restructure the way abilities are done altogether. There are a few major types:

1) Touches
2) Rays
3) Missile
4) Defensive

Like before, user gets to pick one of these and then specify the type. All status effects and damage types would be possible for touches and rays. For missile, allow a type and then to specify a damage amount in n dice of k sides. For defensive, may just need to do something special (permanent martyr's shield).
Sure, that sounds like a great idea. smile It's just like the sort of thing I'm in the process of doing for terrain! Well, I'm mostly done, but anyway... it would require complete restructuring of the dialog, so I'll need to get the new engine working. (I'm arranging it so that it should be possible to use the new and the old engine at the same time – making a gradual transition.) I think I'd have Status Ray, Damage Ray, Petrification Ray, and Death Ray and Special Ray, and the same for touches. Also Steals Food/Gold when hits would be an additional pair. "Specials" include Death, Petrification, Spell Point Draining, Experience Draining, and Experience Draining + Damage (though that last could be a separate ability...). Then we'd need Splits when Hit, Permanent Martyr's Shield, and Absorb Spells. Also maybe my proposed Reflect Spells, though that would probably be hard to implement.

The hardest would be the Missiles. I guess we'd need to specify which missile, the sound to play (no, that's be for damage/status ray), the number of dice, the sides per dice, and somehow also the name of the ability. The latter could be a new string field in the monster, though, I suppose. That would allow people to give monsters an Icy Touch ability and claim it's a Death Touch ability, though, which I don't much like. Or we could have one ability for each of the existing names (throws darts, throws knives, throws rocks, shoots arrows, throws spears, throws razordisks, shoots spines, maybe one or two extra) and then let the designer specify damage but not let them specify missile graphic.

Originally Posted By: *i
Also, the code I worked on calls specials in monster abilities. I think the best place for that one is with the summoning and field abilities. I tested it and it works quite well.
Sure, in truth it matters little where it goes. There could also be a special called when the monster is targeted. One thing, though – can the special called by a monster as part of its turn target someone? If so, how would it select? It might be easier to make two call special abilities – one for which the monster must first select a target (which will be passed in the location pointers something like you implemented in your code) and one where it doesn't have to.

Originally Posted By: *i
If you are drastically changing resistances, may as well just make it be a number between 0 and 100 percent. It's a tricky change, but should not be impossible.
Sure, might as well. I'd have to determine what "resistant" maps to in the conversion, though – 50% maybe?

Originally Posted By: *i
Also, one thing to consider is allowing us to modify the death noise and stain.
Ooh, yes, good one. I completely forgot about that, though I think I've thought about it before (obviously not recently).

Originally Posted By: *i
With species, just open up a bunch of blank spaces for custom types. This gives the designer maximum control.
Hmmm.... this would be hard, I think. I'll think about it though. I think it may be good to keep the list of species fairly small, though...
Link to comment
Share on other sites

Originally Posted By: The Almighty Doer of Stuff
I'm a bit confused about something. Do you intend to go through all the old scenarios and change them? That's the idea I'm getting, and I don't like the idea of changing another person's scenarios without their explicit consent.

Celtic Minstrel is rewriting the game inner structures (monsters, terrains, ...) so changes are deepers (and don't requires) than changing legacy scenarios.

Originally Posted By: The Almighty Doer of Stuff
I saw talk in another thread of changing the way old scenarios look through the changes in the way roads, walkways, and other frills work. I think those should have a compatibility switch as well,

I've already implemented a (manual though) compatibility switch in the current version of the Win32 code for surface frills (roads and walkways have been left alone). However, as Celtic Minstrel said, the overall look of the scenario won't change much given how the new functions will work ...

Originally Posted By: The Almighty Doer of Stuff
in the form of the program functions exactly the way it always did for old-format scenarios, with the sole exception of fixing minor bugs. That's what seems to have been happening at first, but that attitude seems to be shifting lately. Maybe I'm misunderstanding things.

Things didn't really changed : Celtic Minstrel have always said he was planning a major revision of the code with a release "when it will be done". Bugfix are also not his priority and he will apply them when (or during the writing of) the new code will work well enough. Such a revision, is, of course, something that needs to be done ...

On the other hand, I'm mainly focused on bug fixing and didn't incorporate much of his changes yet (some switches in the save/load functions, ...). So my version of the code behaves almost exactly like the original BoE, with bugs being fixed and compatibility switches being present when a feature may break legacy compatibility (waterfalls in towns, funky old day reached function, surface trills, resurrection of absent PC via Resurrect Node, ...). So, our work will, in the end, benefit to both of us ...

Originally Posted By: Celtic Minstrel
Also, are we close to having a stable release with bugs fixed but without new-format changes yet? Are we still keeping the new-format code separate enough that this is possible?

(Note that everything that follow apply to the Win32 version of OBoE.)
Absolutely, the only bugs i would really like to fix are those in http://www.ironycentral.com/forum/ubbthreads.php?ubb=showflat&Number=167242#Post167242 .
Actually, only the Empty bug remains, as others are supposely fixed, but, having no example of bad behavior, i can't test them ...
On the other hand, if you see an unfixed bug that is to be fixed before release, don't hesitate...

I don't know on what stage of development is the Scenario Editor given that Ishad Nha is the one working on it, but if he allows us/wants to i can grab a copy of his last code and upload it to the repository (incorporating the custom graphics/animations code i've tested on my side) as it seems pretty functional to me ...

The Character Editor is already up and running (bug fixed, gets custom items from scenario, ...) and can be found in the openexile repository.

Originally Posted By: Celtic Minstrel from the terrain type thread
That leaves the wall-rounding, which is something that I suspect may not have worked in the original BoE

I'm pretty sure the original code is indeed non-functionnal (comparaison with Exile III).

Originally Posted By: *i
Fix petrification touch again. It's broken and needs to work.

It's fixed.

Originally Posted By: *i
Also, one thing to consider is allowing us to modify the death noise and stain.

That would be fairly easy to implement, as the sound played is hardcoded in the first lines of the kill_monst() function (and a pointer is passed to the monster structure, so everything is basically done).
The stain placement is done a few lines later (search make_sfx).

Originally Posted By: *i
Also, the code I worked on calls specials in monster abilities. I think the best place for that one is with the summoning and field abilities.

Yup, plently of unused space here smile

Originally Posted By: *i
If you are drastically changing resistances, may as well just make it be a number between 0 and 100 percent. It's a tricky change, but should not be impossible.

Actually the immunities field in the monster_record_type structure is an unsigned char and is used by comparaison with 2^n work to see if the monster is immuned/resistant to something (hence the possibility to be resistant (e.g xxxxxxx1) and immune (e.g xxxxxx1x)). That's the only significant thing to change; giving a variable resistance would be easily done in damage_monst() then (actually immune negates the damages and resistant divides them by 2).
Oh, and i may add that the res1, res2 and res3 fields are unused in the monster_record_type structure smile

Hope it helps,
Chokboyz
Link to comment
Share on other sites

Originally Posted By: Chokboyz
Celtic Minstrel is rewriting the game inner structures (monsters, terrains, ...) so changes are deepers (and don't requires) than changing legacy scenarios.
Correct. At present I'm only working on changing the format of the in-memory structures. Once that's done I'll work on the file format.

Originally Posted By: Chokboyz
compatibility switches being present when a feature may break legacy compatibility (waterfalls in towns, funky old day reached function, surface trills, resurrection of absent PC via Resurrect Node, ...).
I already have a compatibility switch for Resurrection Balm, but not for any of these. I might add the waterfall in town switch and the surface frills switch, but I think I'm going to make resurrection of absent PCs a legitimate option when I work on special nodes, so the conversion will simply map to that option.

Originally Posted By: Chokboyz
if he allows us/wants to i can grab a copy of his last code and upload it to the repository (incorporating the custom graphics/animations code i've tested on my side) as it seems pretty functional to me ...
That would be great. In fact, since the game is almost ready, it would be great if you'd put that in the repository too.

Originally Posted By: Chokboyz
The Character Editor is already up and running (bug fixed, gets custom items from scenario, ...) and can be found in the openexile repository.
It's also available in the downloads section.

Originally Posted By: Chokboyz
Originally Posted By: *i
Also, one thing to consider is allowing us to modify the death noise and stain.

That would be fairly easy to implement, as the sound played is hardcoded in the first lines of the kill_monst() function (and a pointer is passed to the monster structure, so everything is basically done).
The stain placement is done a few lines later (search make_sfx).
So there could just be a set of LEDs: Blood, Slime, Bones, Rubble, Ash. Does the code ever specifically place medium or large bloodstains, or is that only when placing a bloodstain on a square that already has one? I think that's how it's supposed to work.

Originally Posted By: Chokboyz
Originally Posted By: *i
Also, the code I worked on calls specials in monster abilities. I think the best place for that one is with the summoning and field abilities.

Yup, plently of unused space here smile
Well, we can always add more empty space to the other one. wink

Originally Posted By: Chokboyz
Originally Posted By: *i
If you are drastically changing resistances, may as well just make it be a number between 0 and 100 percent. It's a tricky change, but should not be impossible.

Actually the immunities field in the monster_record_type structure is an unsigned char and is used by comparaison with 2^n work to see if the monster is immuned/resistant to something (hence the possibility to be resistant (e.g xxxxxxx1) and immune (e.g xxxxxx1x)). That's the only significant thing to change; giving a variable resistance would be easily done in damage_monst() then (actually immune negates the damages and resistant divides them by 2).
Yes, we'd have to get rid of that field altogether and replace it with something else. Maybe an array.

Originally Posted By: Chokboyz
Oh, and i may add that the res1, res2 and res3 fields are unused in the monster_record_type structure smile
Yes, I know. I'll probably delete or rename them eventually.
Link to comment
Share on other sites

Originally Posted By: Celtic Minstrel
Does the code ever specifically place medium or large bloodstains, or is that only when placing a bloodstain on a square that already has one? I think that's how it's supposed to work.

The code automatically augment the quantity of blood/slime on a given square, but you can place a larger bloodstain directly (see for example large monster vs small monsters). The function that does that is make_sfx().

Chokboyz
Link to comment
Share on other sites

There should, indeed, be Medium/Large Bloodstain and Large Slime option if the idea is to give the designer the choice of the "bloodstain" to place; the only thing that would change is the third argument when calling make_sfx() (in fact, in the original code large monsters give larger bloodstains, but the make_sfx function is basically ready for a designer-defined bloodstains).

Note that the make_sfx() creates not only blood/slime pools but also bones (skeletons), rocks (golems) and even ashes (fireballs) ...

 

Hope it helps,

Chokboyz

Link to comment
Share on other sites

Originally Posted By: Chokboyz
Note that the make_sfx() creates not only blood/slime pools but also bones (skeletons), rocks (golems) and even ashes (fireballs) ...
Yeah, I know, hence my original proposal:
Originally Posted By: Celtic Minstrel
So there could just be a set of LEDs: Blood, Slime, Bones, Rubble, Ash.
But extending it to add the other three seems fine. In fact, we could actually use the Choose Graphic dialog for that!
Link to comment
Share on other sites

Anyone feel like making/finding attack graphics for old Exile graphics? I need one for the female merchant and the green Robin-Hood-y peddlar guy from Exile 1, the Spider Lord (?) and Demon Lord (?) also from Exile 1, the Lava Bat and Garzahd from Exile 2, the old Gazer from Exile 1, and the giant king (?) and ogre king (?) from Exile 2.

Link to comment
Share on other sites

  • 2 weeks later...

Well, I added code to display one or two strings and/or call a special the first time the party sees a particular type of monster.

 

From Exile 3, I determined that the chance of (for example) a cat "meowing" is likely no more than 10%. Should I make the chance of a "sound to play in sight" a fixed 10%, or should I let the designed choose? It's not like it's a significant thing... anyway, I added the code for that too, with a 10% chance per step of playing.

 

Next, what resistances should be added? Obviously fire, cold, magic, and poison (well, they're already there). I'd certainly also add acid, fear, mental (dumbfounding or sleep or both). Does resistance to magic also confer resistance to curse and slow? What about petrification? And what exactly does the Invulnerable ability do? Does it block even unblockable damage? I'd assume so, which is a little problematic and may mean I need to retain Invulnerable as is instead of mapping it to full resistances. And does Invulnerable also confer resistance to fear?

 

I don't think there are any other negative effects in the game for monsters, other than possible demon and undead damage.

Link to comment
Share on other sites

Originally Posted By: Celtic Minstrel
And what exactly does the Invulnerable ability do? Does it block even unblockable damage? I'd assume so, which is a little problematic and may mean I need to retain Invulnerable as is instead of mapping it to full resistances. And does Invulnerable also confer resistance to fear?


Invulnerable:

* negates all direct damage from spells completely (even unblockable damage, eg. Wound)
* reduces weapon damage, poison damage and (I think) field damage by about 90%. I'm not sure if this is before or after armour is applied.
* has no effect on bonus damage from physical attacks (i.e. Flaming Weapon, Lightning or Assassination abilities)
Link to comment
Share on other sites

Originally Posted By: Thuryl
Invulnerability has a few quirks. If you cast a damaging spell on an invulnerable monster, a damage number will appear in the animation, but the creature's health won't go down at all.

Yup, i've noticed that too and ...

Originally Posted By: Celtic Minstrel
But that "quirk" looks like a bug to me – I'll see if I can fix it so that the number does not appear.

The problem is that for spells the damage_monst() function is called two times : the first time is to calculate damages, add the result to monster_marked_damage[monst_num] and display the animation; the second time (called by handle_marked_damage() ) is to process the damage as usual: nothing is done to the amount of damage since the type is now marked ... except that
Quote:
// Rentar-Ihrno?
if (victim->m_d.spec_skill == 36)
how_much = how_much / 10;

as you can see, the invulnerability check applies to all damage type; the spell damages are so divided by 100. But, since the animation is drawn the first time the function is called, it may display the remains of dam/10 (hence the number appearing); the damage being processed on the second time, the health does goes down despite damages being shown.
How should we fix this ? Do we align the spell damage with the other damage (i.e they're divided by 10, not 100) or do we keep the current behavior, but have the animation display with dam/10 instead of dam ?

I've also noticed, trying to tackle the graphical corruption bug, that the 50 first terrains are always stored in the storage sheet. Is there a reason to keep that ? For information, the current size of the storage sheet is 240 pictures (24 lines, 10 columns) and terrains/monsters pictures are stored on the sheet when entering/leaving places, if needed ...

Chokboyz

Edit : i've found a bug with the current kill_pc() function : in a combat, if a pc is killed by backshots (i.e when running away from monsters), the first pc alive is set active with 0 AP, thus having a free extra action. To avoid this, set the done_something variable to TRUE after pc_combat_move() call (in the handle_action() function) if the pc is dead (a possible way to see if it's the case, is to check if the current_pc variable has changed ...).
Link to comment
Share on other sites

Originally Posted By: Chokboyz
How should we fix this ? Do we align the spell damage with the other damage (i.e they're divided by 10, not 100) or do we keep the current behavior, but have the animation display with dam/10 instead of dam ?


My instinct is to do the latter; given that some scenarios use invulnerable monsters and expect you to kill them while others use them and expect you not to kill them, I think anything we do to change the way invulnerability behaves risks breaking compatibility.
Link to comment
Share on other sites

Originally Posted By: Thuryl
My instinct is to do the latter; given that some scenarios use invulnerable monsters and expect you to kill them while others use them and expect you not to kill them, I think anything we do to change the way invulnerability behaves risks breaking compatibility.

Then, we agree on this one, compatibility being (for the moment ?) one of the key word (but the community opinion is always something to ask wink ).
I've thus make a special case (if monster has invulnerability skill, then add_explosion(...,how_much/10,...) that will display the actual damage done (likely to be at most 1 since doing more than 200 damage is quite hard) if the monster is invulnerable.

Chokboyz
Link to comment
Share on other sites

Originally Posted By: Chokboyz
Originally Posted By: Celtic Minstrel Thuryl
Invulnerability has a few quirks. If you cast a damaging spell on an invulnerable monster, a damage number will appear in the animation, but the creature's health won't go down at all.

Yup, i've noticed that too and ...
Hey, you misattributed that quote!

Originally Posted By: Chokboyz
How should we fix this ? Do we align the spell damage with the other damage (i.e they're divided by 10, not 100) or do we keep the current behavior, but have the animation display with dam/10 instead of dam ?
I think this is what Thuryl already said, but we should change the display rather than the actual mechanism; and if the damage is divided by 100, than that's the value that should be shown.

Originally Posted By: Chokboyz
I've also noticed, trying to tackle the graphical corruption bug, that the 50 first terrains are always stored in the storage sheet. Is there a reason to keep that ? For information, the current size of the storage sheet is 240 pictures (24 lines, 10 columns) and terrains/monsters pictures are stored on the sheet when entering/leaving places, if needed ...
Hmm, I haven't looked into this much. Are you saying that the graphics are actually copied onto the storage sheet rather than being drawn directly from their sheet of origin? If that's the case, I see no reason why the storage sheet is needed at all. I'll most likely do away with it at some point, since it's rather useless (it may have provided a speed boost when the game was originally released, but I don't think there's any advantage to it now).
Link to comment
Share on other sites

I arbitrarily decided to merge the two lists of monster special abilities, so a monster will be able to have (for example) a radiate ability and a summon ability, or a special node ability and a radiate ability, or even two abilities that are the same.

 

This is just in the planning stage, though – I haven't implemented anything towards this yet apart from the enum which isn't currently used:

Code:
enum eMonstAbil {    MONST_NO_ABIL = 0,    // Missile abilities    MONST_THROWS_DARTS = 10,    MONST_SHOOTS_ARROWS,    MONST_THROWS_SPEARS,    MONST_THROWS_ROCKS,    MONST_THROWS_RAZORDISKS,    MONST_GOOD_ARCHER,    MONST_SHOOTS_SPINES,    MONST_THROWS_KNIVES,    // Ray abilities    MONST_DAMAGE_RAY = 20,    MONST_STATUS_RAY,    MONST_PETRIFY_RAY,    MONST_DRAIN_SP_RAY,    MONST_DRAIN_XP_RAY,    MONST_DRAIN_XP_DAMAGE_RAY,    MONST_KILL_RAY,    MONST_STEAL_FOOD_RAY,    MONST_STEAL_GOLD_RAY,    // Touch abilities    MONST_DAMAGE_TOUCH = 30,    MONST_STATUS_TOUCH,    MONST_PETRIFY_TOUCH,    MONST_DRAIN_SP_TOUCH,    MONST_DRAIN_XP_TOUCH,    MONST_DRAIN_XP_DAMAGE_TOUCH,    MONST_KILL_TOUCH,    MONST_STEAL_FOOD_TOUCH,    MONST_STEAL_GOLD_TOUCH,    // Summon abilities    MONST_SUMMON_ONE = 40,    MONST_SUMMON_TYPE,    MONST_SUMMON_SPECIES,    MONST_SUMMON_RANDOM,    MONST_MASS_SUMMON,    // Misc abilities    MONST_SPLITS = 50,    MONST_FIELD_MISSILE,    MONST_MARTYRS_SHIELD,    MONST_ABSORB_SPELLS,    MONST_INVULNERABLE,    MONST_RADIATE,    MONST_CALL_LOCAL_SPECIAL,    MONST_CALL_GLOBAL_SPECIAL,};

 

It would require changing anywhere that checks either of the monster abilities to instead check both of them, though I could probably wrap that in a member function to simplify things a little.

Link to comment
Share on other sites

Originally Posted By: Celtic Minstrel
Hey, you misattributed that quote!

Damn copy/paste buffer ! wink

Originally Posted By: Celtic Minstrel
I think this is what Thuryl already said, but we should change the display rather than the actual mechanism; and if the damage is divided by 100, than that's the value that should be shown.

That's what i've done : if the monster has the invulnerability skill, then display the boom with damage divided by 100 as how_much (that is with argument how_much/10 since it has already been divided earlier). The other cases are left untouched.

Originally Posted By: Celtic Minstrel
Hmm, I haven't looked into this much. Are you saying that the graphics are actually copied onto the storage sheet rather than being drawn directly from their sheet of origin? If that's the case, I see no reason why the storage sheet is needed at all. I'll most likely do away with it at some point, since it's rather useless (it may have provided a speed boost when the game was originally released, but I don't think there's any advantage to it now).

Yes, the graphics are stored in a temporary (deleted on shutdown) 240 graphics bitmap. I agree with you : we should draw graphics directly on the screen (i've already changed that with the boom animation, while fixing the "red dots appearing on map" (windows only) bug). When i will have better understanding of the whole graphic process (and found the issue 17 bug), i'll probabily change this ...
Doing so would also remove the actual limitation concerning the maximum number of differents terrains/monsters graphics in a game area (ever been attacked by a dreaded cave floor ? Quite spooky ... smile ).

Chokboyz
Link to comment
Share on other sites

  • 3 weeks later...
  • 4 weeks later...

I think I'll change the name of the Invulnerable ability, since it doesn't really do what it says it does. I think "Highly Protected" could work – isn't that what Rentar-Ihrno's ability in Exile 3 was listed as?

 

Then true invulnerability could be granted by giving 100% resistance to all damage types.

Link to comment
Share on other sites

  • 1 month later...
Originally Posted By: Miramor
Idea for a new monster ability... Mindduel. If a party contains spellcasters, the monster has a chance of selecting one within twelve spaces and invoking Mindduel (as with the spell, but no Smoky Crystals needed). For this Mindduel would have to be working correctly, of course...


Cool idea.

On the subject of monsters, is there a list of exactly which spells monsters of different levels can cast?

It would be quite cool to be able to choose which spells a monster could cast, but I'm not sure that would be easy to implement.
Link to comment
Share on other sites

Here's the relevant data from the source..

 

Code:
char *m_mage_sp[] = {"Spark","Minor Haste","Strength","Flame Cloud","Flame",    "Minor Poison","Slow","Dumbfound","Stinking Cloud","Summon Beast",    "Conflagration","Fireball","Weak Summoning","Web","Poison",    "Ice Bolt","Slow Group","Major Haste","Firestorm","Summoning",    "Shockstorm","Major Poison","Kill","Daemon","Major Blessing",    "Major Summoning","Shockwave"};char *m_priest_sp[] = {"Minor Bless","Light Heal","Wrack","Stumble","Bless",    "Curse","Wound","Summon Spirit","Disease","Heal",    "Holy Scourge","Smite","Curse All","Sticks to Snakes","Martyr's Shield",    "Bless All","Major Heal","Flamestrike","Summon Host","Heal All",    "Unholy Ravaging","Summon Guardian","Pestilence","Revive All","Avatar",    "Divine Thud"};short monst_mage_cost[27] = {1,1,1,1,2, 2,2,2,2,4, 2,4,4,3,4, 4,4,5,5,5, 5,6,6,6,7, 7,7};short monst_mage_area_effect[27] = {0,0,0,0,0, 0,0,0,1,0, 1,1,0,1,0, 0,0,0,1,0, 1,0,0,0,0, 0,0};short monst_priest_cost[26] = {1,1,1,1,2, 2,2,4,2,3, 3,3,4,4,4, 5,5,5,10,6, 6,10,8,8,8, 8};short monst_priest_area_effect[26] = {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 1};
There's also variables monst_mage_spell and monst_cleric_spell, but they appear to be unused so I've omitted them.

 

With help from the code, my interpretation is as follows:

Code:
Mage SpellsSpell            SP Cost  Area Effect?Spark            1Minor Haste      1Strength         1Flame Cloud      1Flame            2Minor Poison     2Slow             2Dumbfound        2Stinking Cloud   2        XSummon Beast     4Conflagration    2        XFireball         4        XWeak Summoning   4Web              3        XPoison           4Ice Bolt         4Slow Group       4Major Haste      5Firestorm        5        XSummoning        5Shockstorm       5        XMajor Poison     6Kill             6Daemon           6Major Blessing   7Major Summoning  7Shockwave        7Priest SpellsSpell            SP Cost      Area Effect?Minor Bless      1Light Heal       1Wrack            1Stumble          1Bless            2Curse            2Wound            2Summon Spirit    4Disease          2Heal             3Holy Scourge     3Smite            3Curse All        4Sticks to Snakes 4Martyr's Shield  4Bless All        5Major Heal       5Flamestrike      5        XSummon Host      10Heal All         6Unholy Ravaging  6Summon Guardian  10Pestilence       8Revive All       8Avatar           8Divine Thud      8        X

 

There are at least two spells that are unavailable to PCs.

 

I'm not sure what level is required to cast each spell, but I would assume that they require the same level as a PC would.

Link to comment
Share on other sites

Sorry, I have no idea why they are unavailable. I always thought it odd too.

 

It would certainly be possible to set available spells in the editor as you suggest. It would require creating a new dialog or modifying the existing spell selection dialog (used in the character editor, I believe).

Link to comment
Share on other sites

  • 1 month later...

The invulnerable ability shouldn't get removed, just fixed. (see my report in another thread)

 

Mindless has some uses now and then (undead, fearless soldiers, etc.) and probably should stay here. But it would be of more use if monsters could use fear as a magic spell and possibly even as a gaze ability.

 

I guess invisible could be removed and replaced with simply transparent monster pictures, but then again the character could find the enemy by simply "looking" at it, unless that is disabled when using a certain pre-set transparent monster picture.

Link to comment
Share on other sites

Originally Posted By: Thuryl
Some scenarios (such as At the Gallows, I believe) have "invulnerable" enemies that you're expected to kill, so "fixing" the ability is definitely not the way to go.


Wouldn't it be possible to keep the current behaviour, and call it something different, then add a "fixed" version.
Link to comment
Share on other sites

Originally Posted By: Crynsos
Hm, yeah I guess that would be the better version... maybe call the old invulnerable something like "Highely Protected" (as seen in the Exile Trilogy, Rentar-Ihrno) and call the new Invulnerable version just what is is supposed to do?


As discussed above, I think "highly protected" makes the most sense.
Link to comment
Share on other sites

Originally Posted By: Crynsos
I guess invisible could be removed and replaced with simply transparent monster pictures, but then again the character could find the enemy by simply "looking" at it, unless that is disabled when using a certain pre-set transparent monster picture.
I'll probably remove Invisible as an ability, but add it as a separate option. So, you can have an invisible monster that also has two abilities.

Originally Posted By: Cryolemon
Wouldn't it be possible to keep the current behaviour, and call it something different, then add a "fixed" version.
This is pretty much the plan, I believe. Rename Invulnerable to Highly Protected, then add a new way (not necessarily an ability) to confer true invulnerability.
Link to comment
Share on other sites

Originally Posted By: Celtic Minstrel
This is pretty much the plan, I believe. Rename Invulnerable to Highly Protected, then add a new way (not necessarily an ability) to confer true invulnerability.


I think the most generally useful way to do this would be to extend the resistance system to include all damage types, including physical and "unblockable" damage.
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...