This I've fixed. It wasn't that after some time a missile weapon stopped granting its benefit - it was always. Unless you were dual wielding, the game was now disregarding the distance strike ability of any missile weapon. This one's serious enough that I'll have to upload a new version, likely today. I'm running through a game as an Archer, trying to replicate the other bug you mentioned above, though I suspect that's completely unrelated to the most current fix. Still, when this run through's done (and I'll have to play during work, between clients), I'll upload the latest - bug fixes, and some new content, too. Thanks for the heads up on all of this.
Virtua Sinner
Creator of
Recent community posts
I'm not 100% confident in my fix here. I DID find a bug - monsters would have been unable to teleport to a square containing a monster corpse. And I did find a theoretical problem that could happen (and which could lead to the burst of noise you heard). I've definitely fixed the former issue, may or may not have fixed the crash. Time will tell.
WAIT A MINUTE! Just looked through the summonrandomspirit function again and saw this line:
potentialalternateswap(dice2);
Which should have been this line:
montype[loop] = potentialalternateswap(dice2);
Which means the game is not considering the new spirits, and YES, this could crash (or more likely freeze) the game! Thank you!
Confirmed, this is fixed. If the damsel had an unusual hero number (which could happen if nothing was assigned) all bets were off in terms of the experience gain you can get from them. I've fixed it everywhere random damsels can be generated and put in an extra catch to treat them as non-heroes if their hero value is out of the ordinary.
It's about 1500 lines of code - just checked. Not sure how to feed that to you. In general though, if I recall, it picks a side of the map to start on, and an x or y position there. It chooses a different side of the map to target as an end point. It likely uses Bresenham's Algorithm to start wandering in that direction, but with random variables thrown at it to bump it off course every so often. It determines a thickness (randomly) and then retraces the steps to fill in the extra squares for that, offset. It checks randomly to see if we want any forks, and if so, how many. For each fork, pick a random point in the river, then a random map edge and repeat the process between those two points.
I'll look again. Shoot... I'm going over the code again and again and not finding anything. No matter how it comes to the spell (spell, scroll, wand, Mask of Dreams or Astral Key), if successful it creates the portal, according to the code. In fact, at the point in time it puts the vortex on the map, it hasn't even checked to see how you cast the spell yet. When you use Mask of Dreams, it comes to the spell with a variable called "casted" equalling 5. 5 denotes Mask of Dreams for this spell. But every single outcome, from success, to any of the 7 or 8 ways you can fail, includes a text output dedicated to casted equalling 5. So I can't see a way you wouldn't get text, unless you adjusted your text prompts setting to Expert (they default to Basic). At Expert, in this situation, it wouldn't give you any text output, but even then, if the spell was successful, the vortex would appear, and if it failed, the word "Fail" would scroll above your character icon. Is there any chance you adjusted this setting between when you cast the spell, receiving the fail notification and when you cast it later and got no text?
Hmmm... the mask of dreams I don't get. At least in so far as vortexes are concerned. It's beholden to the same restrictions as the Open Dimensional Portal spell now (only even possible on 33% of maps) but it literally casts the spell when used and I can't see any flaw with its reporting. Is it possible it's triggering one of its other effects and reporting nothing there? I'm assuming you're hearing the dimensional portal sound and seeing the magical effect to clue you into which effect is triggering? I'm confounded at the moment.
Blue Mold I can definitely tackle. I'll do that right now, as I continue to try to track down another bug involving the Thorn Sleep Curse. Not sure what do with the Magic Item Merchant, though I can note it. Interestingly, I also encountered a bug with a Magic Item Merchant today - released him from a cage and he was in every way normal, except he sold Weapons instead of Magic Items. Dunno what to do with that, either!
Thank you!
Alright, I looked at this, and found a place to consolidate the code that should address, if it was for sure an issue (and not just incredibly bad luck). Not gonna lie, I got distracted while implementing, and there's a slim chance I screwed something up in this new implementation, but it should be fixed now...
Okay final verdict, because my previous idea on how to address it was needlessly complex. Here's the nerfing of the spell as it will appear in the upcoming patch notes:
The Open Dimensional Portal spell (and all Rods/Scrolls/Magic Items that can cast it) have been nerfed, because it was proven to be the single most abusable spell in the game. Previously it had a 50% chance of creating a Vortex in your square. It retains this probability, but crucially, it will only function on 33% of maps. On 67% of maps, the spell will always fail, and the player casting the spell will never be told if the spell failed because of the 50% chance or because it’s 100% impossible on this map. All of these rules are spelled out explicitly in the query of the Spell or any Object that can cast it.
Alright, for Infernal Strike, or any related type of Event that blocks a spell type from being cast, it sets a flag in a string called spelltypeblocked. My gut says that flag isn't getting removed, and when I checked the logical spot to remove it (a function called startnewlevel()) I was right. However, it WAS allegedly being removed in maze() (the function that designs procedural maps) as well as in the function that loads the maps for any Legendary Lands you enter. I can't think of a way that a new level could start without first either designing a new map in maze() or loading a new legendary land, so it feels to me like the flag resets SHOULD have been happening. I've moved that code now into startnewlevel() which gets called every time you go to a new map, no matter what type of map that is. Logically, having the small code there should fix the flags, but logically they also should have been fixed before... so, we'll have to see if this does it or not.
Regarding the Trainers and Taskmaster, it seems they're not properly initialized as a result of the Legendary Land (as opposed to be placed randomly). I've added in a catch in this land alone that sweeps through and assigns random skills to be trained to the Trainers, and 6 Lessons to any Taskmasters, so hopefully that solves that. Still looking into the Infernal Strike situation.
Alright, right now what I'm leaning towards (not settled on yet) is the following: A) It can only be cast a maximum of 3 times per level. B) Each casting lowers the odds of success - first casting remains 50%, second lowers to 30%, third to 10%. C) We'll add a third option for where it can take you: 2 dungeon levels down. This will make it less of a guaranteed success, and add a little danger... I'll likely keep the Pantosian Miracle (Other Worlds? Is that what it's called?) that does the same thing as Open Dimensional Portal did as is, without increasing its cost, because it's a strong draw to worshipping Pantos, and Faith expenditure isn't as absuable as Spell Points, since they don't regenerate with each new map entered.
