Jump to content

Celtic Minstrel

Global Moderator
  • Posts

    4,168
  • Joined

  • Last visited

Everything posted by Celtic Minstrel

  1. The previous Windows build had a crippling bug - preset monsters didn't appear. Thus, here's another pair of builds that fixes that (which was a Windows-only bug) as well as several other bugs that my sister and I discovered. Windows | Mac
  2. I just realized that the windows build linked above omits the required C++ runtime libraries; I'll include them in the next release, but in the meantime they can be obtained from here.
  3. In Blades of Exile, Hyperactivity appears to give the party negative levels of sleep, making them seem resistant to sleep spells, but that's all it does... nothing about resistance to magic. I think that feature of Dispel Fields exists in BoE. I remember that evil priest and thought it odd he attacked me in a friendly town. You could ask Ishad Nha if there's any other hostile-by-default NPCs that have dialogue when charmed; he probably has the means to find out, at least.
  4. The issue was simply that the game won't know where to find the item's graphic once you've left the scenario. The fix needs to be done in the game's code itself; you can't fix it in the scenario (unless you want to lose the custom icon). The plan is to copy these graphics into a place that's stored with the saved game, so that the item can be preserved with the same icon even after you leave the scenario.
  5. Looking at the code, this appears to be fixed now in the OBoE version. Good Constitution does give disease resistance, judging from the code, though perhaps it's not quite in the way you expected. It doesn't reduce the level of disease you receive, but disease wears off faster if you have Good Constitution. Uh, have you completely missed this thread?
  6. Here's the relevant calculation: party_total_level() > (out_enc_lev_tot(i) * 5) / 3 && out_enc_lev_tot(i) < 200 The party_total_level() and out_enc_lev_tot() functions do pretty much what they look like - add up the levels of each PC/monster in the party/encounter.
  7. When disease takes its toll, it causes one of several random effects, of which poison is just one. I think there's something like six possible effects from disease. So, while it's certainly possible to die from the chronic disease, it's not guaranteed and may not even be likely.
  8. It's a technical limitation I intend to lift, eventually.
  9. Okay, I have a mostly working build for people to putter around with. I think the game is more or less playable, though there could still be some crashes I haven't found (the Mac version has been tested more than the Windows version, but Windows is more likely to crash on things like invalid memory accesses). The scenario editor is almost fully-functional; it still can't save scenarios, though. Windows | Mac
  10. What used to be the Mac code base now compiles and runs in Windows. It's not playable yet, though - there are three or four major issues to resolve still. If there's anyone more familiar with WinAPI than me, perhaps they could help out with some of them. Open File dialogs don't work, though Save File dialogs do, for some reason. The code path for the two is nearly identical, so I'm not really sure why it's not working. (By "working" I mean "the dialog is displayed".) Tiled patterns are drawn in the wrong place; this issue probably has little to do with WinAPI, though it does go away if I don't put a menubar in the window. Cursors aren't showing. I assume it has something to do with how I'm trying to create a cursor from a GIF file, using SFML to load the image, transfer it to an HBITMAP, and then transform it into a cursor. When I step into Sweetgrove the scenario ends. I had this issue on Mac already and fixed it, so hopefully I can fix it again. On a brighter note, the menubar works perfectly insofar as I can ascertain without the ability to load files, and preferences seem to be working perfectly as well (they're saved in "%APPDATA%\Blades of Exile\bladesprefs.ini"). I'm not sure if they're technically an INI file format, but each line is of the form "key = value" where value is true, false, an integer, or a space-separated list of integers enclosed in square brackets. Also, someone might want to set stuff up so that Sylae's automated build system picks up this version rather than (or possibly in addition to) the older Win32 version. I've imported a lot of stuff from the latter version into this version, but there are still some things that haven't been brought in, like "Concise Town Report" and several more "text dump" options in the scenario editor. There are actually quite a few dead menuitems that haven't yet been implemented. Anyway, I'll decide whether to import or delete these options later, once all the basic functionality is working properly.
  11. I went over that a little while back, and I did include allowance for the monster's level; I think that's the only bit I took from your version, though. I also added it to petrification gaze, actually. Gaze and touch now use the same calculations, basically.
  12. The OBoE scenario editor ignores the passwords, for what it's worth. (I think the Windows-only CBoE one does too.) I'm fairly confident I'll have something vaguely releasable before the end of the year, both for Mac and for Windows, though the scenario editor probably still won't be able to save scenarios (thus functioning as a viewer only). It does depend on how busy I am during the Christmas season though, so it could slip a little.
  13. Scenarios like New Market City can be used for cheating. They can also be used for creating a party of level higher than 1, for the purpose of playing a high-level scenario. That said, I don't know how New Market City works specifically; it might not be optimal for that sort of thing.
  14. So, I went ahead and did some stuff. All haste spells delegate to slow_monst/slow_pc. All bless spells delegate to curse_monst/curse_pc. This ensures the cap is handled properly. (All monster spells except I think major haste or blessing previously did not handle the cap.) Note: The names of those functions are a little misleading, as they apply the opposite status effect when receiving a negative input (internally, slow/haste and bless/curse are two unified effects rather than the four they appear as in-game; scenario designers probably already knew this though). Both versions of Spark now deal magic damage. Both versions of Wound now deal unblockable damage. Flame spell for monsters is now capped at 15 dice of damage. Since it works in d4's (as opposed to the PC version's d6's), this gives it the same max damage. Not quite sure on this one, but I changed the monster version of Minor Poison so that it deals a base 2 damage plus a random extra from 0 to half the monster's level (instead of 2 plus rand(0,1)). For level 1 monsters that means it'll always deal 2 damage; for level 2 or 3 monsters it'll be unchanged, and for higher-level monsters it'll do more. I applied a similar change to the monster version of Poison, which previously dealt 4 plus a random extra value from 0 to 3 but now uses half the caster's level as the upper bound for the random number. Monsters need to be at least leve 4 to cast Poison, so such monsters will have a slightly smaller damage range than before (4-6 instead of 4-7). When changing the monster spellcasting code to use the same spell enum constants as the PC spells, I had them ignore the range and use the level as the cost, with a handful of hard-coded exceptions. So, for now, there's no changes to spell costs for monsters.
  15. Oh, silly me, you're right. Somehow I missed that Major Haste is a mass spell. This is the case for monsters too. Ah, whoops, that is a typo. Poison by PCs does 4+INT/2 levels. Spark is actually not a fire spell. It's an electricity spell. The spell description in-game is "Fires a weak bolt of electricity at an enemy." And as I recall, electricity is usually represented as magic damage (for example, monsters that breathe electricity deal magic damage). Hm, okay. I may take some bits from *i's still, thouhgh. Alright. You're right that it's silly to have the check in every spell, though. It's make a lot more sense to just use the slow_pc function with negative input, which handles the capping for you. It does have RNG - the formula in the previous post is the number of dice of damage, so it could range from 1d4 (if level 1 with no intelligence, which might be impossible though) to 10d4. Huh? Merging? How do you mean? They don't look especially mergeable... or do you mean making the PC version depend on level as well? Keep in mind that monsters don't have an intelligence level. Hm, I'm not sure. I'm sort of in favour of keeping most of the basic game logic the same as it used to be except for bug fixes, but I might consider larger changes... I do want the game to play more or less the same though, and we should probably try to avoid changes that have a major effect on the game balance. Regarding spell cost, it turns out most of the monster spells have a cost equal to the spell level, which might actually be a relic of the original Exile. The only exceptions are Fireball, Summon Beast, and Weak Summoning, which all cost 4 spell points despite being level 2 or 3. There are more exceptions for priest spells; in particular, all three of the level 7 monster priest spells cost 8 spell points, and Summon Host/Guardian costs 10. Besides that, the only other differences are Pestilence (a leve 6 spell that costs 8sp) and Summon Spirit (a level 2 spell that costs 4sp). That actually makes me wonder if Pestilence used to be level 7... I'd particularly like to hear thoughts on the spells that differ the most - Major Blessing, plus the priest spells I listed in the previous post. Basically, should I apply parts of their working from monsters to PCs or vice versa? EDIT: A few more things. Apparently, all monster spells have a fixed range of 10 - this is checked before even deciding to attempt casting a spell. The other odd thing I noticed is that if they don't have enough spell points to cast whatever spell they randomly chose, they automatically regain one spell point in that turn. Admittedly, this is actually the only way they regain spell points, but... it strikes me as a very odd way to do it. And finally, something not specifically related to spells - an attempt at spellcasting drains action points even when it was determined that nothing could be cast (eg due to a lack of spell points, being in an antimagic field, trying to target in an antimagic field, not having a target). The spellcasting function returns true if something happened, but the return value is ignored. This also occurs for breath weapons and missile attacks. Should this be changed?
  16. Would be nice to see a little more activity here... Anyway, here's my list of differences between monster spells and PC spells. I'll only include those spells that can be cast by both. I'll use "lvl" to refer to the monster's or player's experience level, and INT to refer to their intelligence score (their level of intelligence skill plus any modifiers from items). Spark does fire damage when cast by monsters, but magic damage when cast by PCs. Both deal 2d4 damage though. When monsters cast minor haste, it's not capped at 8 as it is when players cast it. Either way it applies no more than 2 levels. Strength is identical when cast by monsters and PCs, applying 3 levels of blessing without capping at 8. Flame cloud is identical when cast by monsters and PCs, creating a single space of fire wall. Flame deals damage by d4's. When cast by monsters, it deals lvl dice of damage; when cast by PCs, it deals 1+⅓lvl+INT, with a max of 10. Note that the number of dice is not capped when cast by monsters. Minor Poison cast by monsters deals 2-3 damage. Minor Poison cast by PCs deals 2+½INT damage. Slow cast by monsters applies 2+½lvl levels of slowing. Slow cast by PCs applies 2+INT or 3+INT levels. Dumbfound cast by monsters applies a flat 2 level of dumbfounding. Dumbfound cast by PCs applies 1+⅓INT levels. Stinking cloud appears to behave identically for monsters and PCs (except that there's no missile animation when cast by PCs). Summon Beast lasts for 3d4+INT turns when cast by PCs. When cast by monsters, it lasts 3d4 turns if the monster is friendly and 3d4+100 turns if the monster is hostile. (Or possibly the other way around; the +100 applies if their attitude is an odd number.) Conflagration is the same when cast by monsters and PCs. Fireball deals damage in d6's. When cast by monsters, it deals 1+¾lvl dice of damage, with a max of 29 dice. When cast by PCs, it comes out to 2+⅔lvl+INT with a maximum of 10 dice. (And for some obscure reason, if it gets more than 10, it multiplies by 8 and divides by 10; I think this would never be reached. For the curious, the exact calculation is: min(9,1 + (lvl * 2) / 3 + INT) + 1) Weak Summoning is quite different between the two versions. When cast by monsters, it summons up to 2d3+1 monsters, stopping immediately if a summon fails (eg due to lack of space). Each monster lasts for a base duration of 4d4 turns; the same roll applies to every monster summoned, so the monsters will all disappear at the same time. There is a +100 to the duration in the same circumstance as Summon Beast. When cast by PCs, it summons up to ¼lvl+½INT monsters, clipped to the range [1,7], and doesn't give up after a failed summon (so you could get multiple failures). Each monster stays for 4d4+INT turns, and this is rerolled for each monster, so they won't all disappear at the same time. Web works the same for monsters and PCs. Poison when cast by monsters deals d4+3 levels of poison. When cast by PCs, it deals 4+INT/2 levels... no randomness. Ice Bolt when cast by monsters deals 5+lvl/5 dice of cold damage, in d8's. When cast by PCs, it deals lvl+INT dice of damage, with a maximum of 20 dice, but in d4's. Slow Group when cast by monsters deals 2+lvl/4 levels of slowing. When cast by PCs, it deals 5+INT levels. Major Haste when cast by monsters applies a flat 3 levels of hasting. When cast by PCs, it applies 1+lvl/8+INT levels (capping it to 8). Monsters don't have a simple Haste spell, which for PCs applies lvl/2+INT levels of hasting (with a minumum of 2)... which, come to think of it, is actually better than Major Haste. That doesn't sound right, does it? Is this an existing bug, or did I mess up my spell enumification? Major Haste and Major Blessing share some of their implementation, so it's possible I accidentally swapped bits of them. Firestorm deals damage in d6's. When cast by monsters, it deals 4+¾lvl dice of damage. When cast by PCs, it deals 3+⅔lvl+INT dice with a maximum of 14. There's also a seemingly extraneous check for getting a number of dice greater than 20, in which case it multiplies by 8 and divides by 10. Summoning works the same as Weak Summoning, see that entry for details. The only difference is that when cast by PCs, it summons lvl/8+INT/2 monsters (clipped to the range [1,6]) for 5d4+INT turns, while when cast by monsters it summons 2d2+1 monsters for 4d4 turns (with a possible +100). Shockstorm works the same for monsters and PCs. Major Poison when cast by monsters deals d2+6 levels of poison. When cast by PCs it deals 8+INT/2 levels. Kill when cast by monsters deals 3d10+35 damage. When cast by PCs, it deals 3d11+lvl*2-1. (Yes, that's a d11; to be precise, it's get_ran(3,0,10), which also accounts for the -1 in the preceding formula.) Daemon when cast by monster lasts for 3d4 turns, plus a possible +100 as described for Summon Beast. When cast by PCs, it lasts for 5d4+INT turns. Major Blessing when cast by monsters heals 2d10 damage without capping to max health, applies 3d4 levels of blessing (capped at 8), completely cures webs and slowing, and boosts morale by 3d10 points. When cast by PCs, it applies 3+INT levels of haste, 2 levels of weapon poison, and a flat 4 levels of blessing. So, uh... this spell is completely different, which makes it unique amongst the mage spells castable by monsters (all the others at least only differ in the numbers). Major Summoning works the same as Weak Summoning, see that entry for details. The only difference is that when cast by PCs, it summons lvl/8+INT/2 monsters (clipped to the range [1,5]) for 7d4+INT turns, while when cast by monsters it summons 2 or 3 monsters for 4d4 turns (with a possible +100). Shockwave delegates to an external function, so it works identically for monsters and PCs. So, this throws a minor spanner in the works of my idea to unify the monster and PC spellcasting system; while a lot of these differences could be put down to the fact that monsters and PCs simply don't have the same stats, and some are fairly minor mechcanical differences, a few are quite drastic differences. I think I also uncovered a couple of things that might be bugs from looking through this. Two things, in fact. I suspect the haste amounts for Major Haste and Major Blessing got mixed up. It doesn't look like this is my fault, fortunately; is there a known bug on this? As mentioned above, Major Haste currently deals 1+lvl/8+INT levels of haste, capped at 8, while Haste deals lvl/2+INT levels (still capped at 8), and Major Blessing deals 3+INT levels. Supposing you're level 10 with an intelligence modifier of 4, this would mean Haste deals 9 levels (before capping to 8) and Major Haste deals 6 levels. Meanwhile, Major Blessing gives you 7 levels. If you're level 4 with an intelligence modifier of 4, then Haste deals 6 levels and Major Haste deals 5 levels. Hm, on second thoughts, maybe this is a bit more complicated than I though... still, it seems like Major Haste is categorically worse than Haste, which makes no sense whatsoever. The three generic summoning spells for monsters all have the same duration. This doesn't seem likely to be intentional, since the PC ones increase in duration with the higher-level spells. Any thoughts on all this? I only did the mage spells for now since it took awhile and I decided I needed a break from it. Maybe I'll do the priest spells later, if people show any interest. Also, I'm considering maybe renaming the monster version of the Major Blessing spell to something else. Suggestions would be welcome. EDIT: Sorta changed my mind, because I noticed there are a lot more drastic differences with the priest spells. This is a less detailed list, though. Monsters have two priest spells not accessible to PCS: Wrack (a weak Wound) and Unholy Ravaging (slows and poisons). The monster Stumble spell is nothing like the PC Stumble spell. In fact, it's basically identical to the PC Goo spell, so I'm probably going to just rename it to Goo. Wound deals magic damage when cast by monsters. (Wrack deals unblockable damage, though.) Holy Scourge slows in addition to cursing when cast by monsters. Might this be a bug? Should it slow when cast by PCs? Heal All only affects the caster when cast by monsters (healing a flat 50 HP). I doubt this was intentional. Revive all doesn't cure poison when cast by monsters (just heals). Avatar doesn't grant invulnerability or magic resistance when cast by monsters. EDIT 2: And it turns out that most of the monster spells have up to half spell point cost relative to the PC versions. A few have the same cost, but most cost less. This is really a mess...
  17. Over the last day or two or three, I've been going through the spell system, replacing all the magic numbers with nice readable spell names, and I've noticed there seems to be a lot of space for inserting new spells into the engine. (This refers mainly to spells castable by items or similar; altering the player's spell list is a different matter.) Skip to the "-----" if you're not interested in my summary about how the spell system actually works. The system is currently a little convoluted, with different spells being handled by different functions, but the vast majority of spells sort of work like this (combat mode; town and outdoors is a bit simpler): First, the game calls combat_cast_mage_spell or combat_cast_priest_spell. These functions are very similar in general layout (the main difference I can see is whether encumbrance is checked). This function checks the spell's "refer" setting, which can be "yes", "target", " If the spell requires targets, it calls the appropriate function (start_spell_targeting or start_fancy_spell_targeting) to set up targeting mode. (Fancy targeting is when you choose multiple targets.) I think the setting is called "refer" because one of the values causes the game to continue by casting the spell just as if you were not in combat. Otherwise, it simply continues with an implementation of the spell right there in the function. When setting up targeting mode, it selects the spell effect shape and, if fancy targeting, the number of targets. There are eight effect shapes (single space, plus shape, small 2x2 square, 3x3 square, open 3x3 square, radius 2 circle, radius 3 circle, and the rotatable wall shape). The open square is not used by any spell, and defining new effect shapes is pretty trivial. The protective circle spell also use a custom effect shape. Generally a shape is simply a two-dimensional 9x9 bit field, but the protective circle leverages its extended capability, which is to specify exactly which effect goes on which space. The effects aren't limited to field effects, either; they also include dispelling and direct damage. If casting outside of combat, or if the spell's "refer" setting is set to "yes", the game then calls do_priest_spell or do_mage_spell. These functions are pretty much identical in general layout, so it doesn't really matter which of them is actually called. (The only real difference I can see is the sound they play. An interesting detail to note is that do_mage_spell does not check for encumbrance, implying that you can cast mage spells while encumbered if you leave combat mode; I haven't tested this though.) For some spells (those that require targets), these functions call start_town_targeting (which I renamed from set_town_spell) to initiate targeting mode (this should only be done in town; the only check for this is the via spell's "when cast" setting). Town targeting mode is far simpler than combat targeting, only allowing a single target (but does support area patterns). It might be possible to expand that to any spell effect shape; I haven't looked closely. Otherwise, once you've finished with target selection, the game calls do_combat_cast, which contains all the code for the remaining spells. Some spells (mainly summoning spells) are both in do_{mage,priest}_spell and do_combat_cast, meaning that they function differently when cast in combat than when cast outside of combat. Item spells hook into this same system, by calling one of the three "start targeting mode" spells. They also set a special flag to prevent the whole system from deducting spell points. Monster spellcasting is a completely different beast and (currently) doesn't even use the same magic numbers for its spells. I haven't gone through it yet; I intend to compare the monster spells with the corresponding PC spells to see if their effects are identical. (Apart from the two that don't have an equivalent, of course.) If they are, I'll probably work on merging the two spell repertoires. The monster repertoire is actually extremely limited compared to the PC repertoire, though granted there are several that just don't make sense for monsters to cast, but I'd like to look at creating options for customizing the spells a monster knows to some extent. ------ So basically, what I was thinking was that there could be some way to use special nodes to hook into this system. I'm not entirely sure what form that would take, but here's one possibility: Add a special node to apply an area spell effect, allowing you to select the shape and the type of effect. This could get pretty complicated; in particular, allowing custom shapes would be impossible with just a single node (I dunno if there's a good way to do that). Also, this would work best only for "binary" effects - so maybe not the protective circle effect. (Though it's not entirely out of the question.) It would be possible to add to the repertoire of possible effects, which is currently all fields (not barriers), direct damage (was originally limited to magic/cold/fire, but I recently added poison/undead/demon), and dispels. Perhaps one new effect could be "call scenario node X", passing the target location as the special location; for multi-target effects, the special would be called once for each target. Actually, there could be two nodes, one which triggers targeting mode and one which just applies the spell pattern immediately. Such a special node would only work in combat, of course. It could also be possible to have a simpler targeting node which asks for a single target and then calls a node on that space; this would work both in town and in combat. As for spells that don't require targets... I'm pretty sure those are already possible in the node system. (Keep in mind that none of this involves altering the list of spells the player can cast - it would be for spells cast by items or special items, or perhaps spells cast by monsters as their special ability.) On a side note, there are a few unused spells in the code (like Ravage Enemies, Summon Rat, or Large Sleep Cloud); I intend to eventually generalize item abilities to make it possible to create items that cast these spells, and also the monster-only spells (Wrack and Unholy Ravaging). I would be tentatively open to suggestions for adding additional specific spells that can be cast by items, with a preference towards any that can't be implemented by special nodes. (Which just suddenly made me realize... can special nodes affect monsters in an area? Other than the "explosion" node? I don't think they can.)
  18. Apparently the Awaken spell has a range of 8. I'm pretty sure this is not supposed to be the case, since the range is no longer used; it was probably a relic from when that spell number was some kind of dispel field spell. I'm just going to set the range to 0.
  19. If capturing a dragon was possible in any of the games, it would've been Exile II. Exile 3 and Blades forbid capturing large monsters (anything that takes up more than one space). (Note, I can't speak for the Avernums since I haven't played them as much; but this is the Exile forum, so I didn't think they'd be relevant anyway.)
  20. And now for some magic transcript magic! This differs a little from what was done in the Windows code, which collapsed Blocked messages and completely eliminated Moved messages. This change affects all messages - anytime the same message is printed twice in a row for any reason, it will be collapsed as seen in this screenshot. (This does include messages printed by special nodes.) I might add an option to force a duplicate message; not sure if there'd be a use for that (either in normal game messages or for scenarios).
  21. The Windows code is littered with something like eight compatibility options, some of them quite complicated. Legacy Day Reached behaviour - as far as I can tell, all that this does is add 20 to the day you need to reach for no reason at all, so I'm not going to adopt this. I did however add a line to add 10 to the day you need to reach if easy mode is enabled. Basically this means that if a scenario wants to check that you've reached a given day, it will be told "yes" 10 days later than it expects. Legacy Kill Node - I haven't quite worked out what this one does, but it looks like it's not necessary even considering changes to the kill node. Working Town Waterfall - I don't think I need to check for this, but not sure — are there any scenarios that rely on waterfalls not working in town? Full Trims - I have no idea what this was supposed to do since it seems to be no longer used... unless I missed something somewhere... Specials Interrupt Rest - Apparently the Windows version has changed stuff so that timed special nodes to interrupt your rest. I'm not sure I like this behaviour, and am inclined to leaving it at the default, though I wouldn't be against adding something like an "Interrupt Rest" node. Check Timers While Resting - Ambivalent on this, will likely implement it, but I was thinking of a very different implementation. The Windows code runs through repeatedly, jumping something like 100 days at a time and checking in each iteration if something should happen; I thought about simply jumping all the way forward, like the original code did, but then checking afterwards whether an important time was skipped over. There's a significant difference between the two — in my version, you can only have a single event of each type during rest, whereas with the version in the Windows code it looks like it would be possible for the same timer to trigger multiple times while resting. Trigger Specials On Boat - I'll likely keep this compatibility flag. I'd rather not, but the effort of converting legacy scenarios to insert a new node at the beginning of any chain placed on boatable terrain seems like it's not really worth it. Compatibility options in preferences - Currently I'm leaning towards not having these, and instead just automatically applying the options to any scenarios that are loaded from the legacy format. (This means that, simply by loading and resaving your scenario, its behaviour could change.) Generally I'd set it up so that designers can still get the legacy behaviour by tweaking something, and whenever possible I'll automatically convert the scenario data so that the legacy behaviour is retained. I think I'd also try to give a warning when I'm able to detect something but not fix it (like the boats thing). Next: In the code for the Bless/Revive All spells, the game calculates but does not use a random number. A comment in the Windows code speculated that it was intended to be used for Revive All. Does anyone have any idea? For reference, spell 16 is Bless All and 24 is Revive All (pretty sure of that). play_sound(24); // TODO: What's r2 for here? Should it be used for Revive All? r1 = get_ran(2,1,4); r2 = get_ran(3,1,6); for (i = 0; i < univ.town->max_monst(); i++) if ((monst_near(i,caster->cur_loc,8,0)) && (caster->attitude == univ.town.monst[i].attitude)) { affected = &univ.town.monst[i]; if (spell == 16) affected->status[eStatus::BLESS_CURSE] = min(8,affected->status[eStatus::BLESS_CURSE] + r1); if (spell == 24) affected->health += r1; } play_sound(4); There's one other question I have. I've made it possible to include level 1-3 spells in shops (which could be useful if you have previously removed them using a special node), but I need to assign costs to each of them, and I have no idea what sort of costs they should have. Here's the existing costs (the 5's are just a stand-in until I get proper costs for the low-level spells): // Mage spells; one line per level, same order as the spellcasting dialog 5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5, 150,200,150,1000,1200,400,300,200, 200,250,500,1500,300, 250,125,150, 400,450, 800,600,700,600,7500, 500, 5000,3000,3500,4000,4000,4500,7000,5000 // Priest spells; ditto 5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5, 100,150,75,400,200, 100,80,250, 400,400,1200,600,300, 600,350,250, 500,500,600,800, 1000,900,400,600, 2500,2000,4500,4500,3000,3000,2000,2000 Okay, but what about *i's implementation? Even not accounting for special things like bless, the calculation is completely different and seems incompatible.
  22. Thinking over this again, I think logical AND and OR are completely unnecessary - can't you get the same effect by simply chaining nodes together in the right way? The arithmetic ones I'm currently in the process of adding. They'll probably work like this: SDF1, SDF2 - Output SDF (for division, the quotient) Ex1a, Ex1b - Input SDF (left operand) - if ex1b is negative, takes ex1a as a literal value Ex2a, Ex2b - Input SDF (right operand) - if ex2b is negative, takes ex2a as a literal value Ex1c, Ex2c - For division only, output SDF to store the remainder. EDIT: Note - due to the implementation of pointers, the only guaranteed way for ex1a or ex2b to be negative would for it to have been set to -1; other values might get replaced by pointed-to values.
  23. I resurrect this thread to show off a thing!
  24. I'm doing all this on the Mac, so if you want a Windows release, you'll have to wait a bit longer. (I don't know which you have.) And even for the Mac, I'm honestly not sure how long it will take to get something that more or less works.
×
×
  • Create New...