Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mumra/fix macos build #1

Closed
wants to merge 176 commits into from
Closed

Mumra/fix macos build #1

wants to merge 176 commits into from

Conversation

chucksellick
Copy link

No description provided.

pooka109 and others added 30 commits March 29, 2024 00:12
It was renamed Mercury Vapours awhile ago.

Also add a placeholder tile for Mercury Vapours: a palette-shifted
version of the Poisonous Cloud tile instead of a straight copy of it.
The initial numbers for this spell were intended to err on the side of
'too powerful'. And they were! Now that playtesting confirms the spell
is strong, let's pull back on its damage a bit. The goal is for it to
still be strong, just a bit less so.
When an item that has a randomized appearance (potions, staves) on the
floor is rendered, the item's main tile is actually the "brand". The
randomized tile gets added on later by calling add_main_tile which
calls tileidx_known_base_item on the main tile when. This is a hack,
but it lets you see the brands of identified items on the ground.

However with randart staves, the main tile gets put in the special tile
slot instead. Normally this won't cause any issues, but the local tiles
inventory renders items as if they were on the ground. It calls
add_main_tile on the special slot which then renders the randomized
staff appearance on top of the randart staff tile.

Fixed by not doing this for special tile slots.
Initial balancing of this spell was far too conservative. Players were
wary of using it because of the -move after cast and the damage payoff
was generally not good enough to make it enticing. I could adjust those
things, but -move isn't very popular in general, so let's see if the
unique aiming restrictions keep it from being too powerful even without
any cooldown or downside attached.

I have rescaled the damage-by-distance formula so that close range
piledrivers are less effective than before (though max range ones can
be somewhat *more* effective than before, depending on power) and lowered
it to level 3. The hope is that this better addresses some of Warper's
weak earlygame and entices more translocations investment. It may also
benefit from being further away from the more flexible Vhi's.

We'll see how this version fares.
Enemies with the PREFER_RANGED flag have a 10% chance not to shoot on any
given turn where they have line of fire, and if they rolled this chance
while adjacent to their target, were likely to try to melee attack them
instead, which looked very silly (Master Archers don't even generate with
melee weapons, so they'd just try to punch you!)
Technically they already tried to prefer blinking things away, but were so
bad at it that I'm not sure anyone even noticed. (They simply picked TWO
random valid destinations and would move the victim to the further of these
two).

This repurposes some existing blink_ranged code and in the process improves
some jankiness with it to prevent this making the *worst* case for
dispersal darts worse (even as the average case improves). Now the code
will ignore possible destinations that are closer than where the blinker
already is. (Yes, it was very possible for a monster to cast Blink Away
and actually blink towards instead...)

This is effectively a minor buff to monsters with Blink Away (and also
Disjunction), but those spots were always downweighted so I don't think
it's a significant balance change, so much as polishing off odd behaviour.

Mostly, this is intended to buff Warper earlygame a small bit by making
one of their trademark consumables better at its job.
There was virtually no reasonable use-case for doing so (and it even
required stepping through multiple different confirmation prompts!).
Dispersal darts were approximately the only case where this could bring
the player any benefit but:
 a) That's kind of dumb
 b) You were very likely to miss anyway, so it would almost never be
    *actually* good to try to blink this way, anyway.
Blink Away will happily move the monster out of sight of their target
(which is usually the player) while Blink Ranged attempts to create
distance while still being able to see the target.

It seems better behaviour in the majority of cases if enemies don't leave
the range at which they can threaten the player altogether. I left Blink
Away alone for summoners (who often benefit actively from leaving their
summons to hit you, even if they can't see you themselves) and boulder
beetles (because they can be so dangerous early on and them sometimes
disappearing is a more of a mercy to the player than a nuissance)
In partial compensation for it being less likely to move them closer now
instead. They're already quite dangerous, and being inside of their
effective range is important counterplay.
I don't expect this raises the spell's power overly much, but avoids the
unfortunate scenario of spending all your MP to overcome a monster's will
only to have it land 2 spaces to your left and not improve your situation
at all. Now it is at least guaranteed to land out of LoS (though nothing is
stopping it from being immediately around the corner and walking back in,
of course)
These are taken from the colour list used for the scrolls of random
effects before they were removed in 00efbec, but with the rainbow
colours removed; black, white, and grey removed; and alizarin crimson,
saffron, and vermilion added.
Given that it's intrinsically music-based, possible this feels a little
better than it being marked as 'quiet' if you examine it?

(The exact amount of noise here is basically arbitrary)
You already couldn't use a friendly as the main target, but it was possible
to slam an enemy *into* a friendly without warning. Now the player is
warned properly.
The constriction interaction was even more weirdly buggy, as they could
remain constricted on the other side of the stairs, even if the constrictor
themselves was left behind on the previous floor.

(Note: things the player is physically constricting will still follow you,
as the very act of taking the stairs first releases them)
This commit attempts to make the macos CI workaround robust for all
scenarios I have seen, and clearly document how it works.
DracoOmega and others added 29 commits April 26, 2024 02:58
This may have always been bizarrely high, but was a lot less visible before
the recent-ish constriction changes that are more explicit about the damage
it does - which is evidently a whopping 25-50 unavoidable damage
*per turn*.

Mutant beasts (which this is) use the same number as damage for all of
their aux attacks, but the scale of damage done by a constriction attack
really isn't on the same scale, so let's divide it a bit. (10-20 is still
a decent bit)
regret-index plans to use them on Cerebov's level and it would be deeply
silly to replace Cerebov's trademark sword with something else. But even
in general, unrandarts are noteworthy enough not to overwrite with this
effect.
As much as a swarm of angry fish ghosts savaging a lone plant is hilarious
to imagine, it's a little much to subject the player to in many
circumstances.
Also remove unneeded blank lines.
 * Abominations earlier than post-Lair have been tweaked down slightly, due
   to large abominations being capable of rolling demonic crawler levels of
   regeneration and small abominations being harder to escape from.
   Aside from a few vaults, this noticeably reduces the highest rolls of
   small abominations in gauntlets and slightly lowers large abominations
   in Gauntlets overall, while reducing their count a bit in the Abyssal
   Lair end. A few other uses of abominations are mildly tweaked otherwise.

 * Undying armouries get another few uses in extended. One or two now place
   in most of Cerebov's vaults, finally emphasizing the steel part of their
   Fire and Steel title beyond iron shots and red devil tridents by using
   the armoury weapon granting gimmick on balrugs. (Since Cerebov's already
   plenty scary, these sparing placements are decently far away from
   Cerebov themself when possible.) They also get a use in earth zigs
   (which helps them further differentiate from Dis floors by arming
   gargoyles and giants), plus a grated ziggurat pillar.

 * Spider rune vaults at the outliers of kill rates have been slightly
   tweaked up or down accordingly, and the _arachne_lair vault previously
   at an acceptable middle-of-the-pack position has been nudged upwards
   in jorogumo count to the moving out Arachne from Spider.

 * Ossuary killrate top and bottom ends have been also nudged correspondingly
   towards the center, and two of the current weakest ones (silent_tomb
   and city_of_the_dead) both get the fresh new marrowcuda option.
Only player ghosts can do this presently, I believe?
When an enemy is killed in a way that causes their corpse to explode (eg:
mindburst or iood) while worshipping Gozag, multiple piles of gold are
scattered around the general area. The amount of gold in each pile is
determined by randomly rounding 'total gold' / 'number of piles'. For
medium-sized creatures specifically, if the player rolled the lowest
possible amount of gold and the highest possible amount of chunks, it was
possible for this to round down to 0 gold in a pile.

Which was already specifically guarded against! Piles of 0 gold will not be
placed by _explode_corpse. ...but _explode_corpse operates using a
reference to the 'original' corpse and while place_monster_corpse attempts
to destroy the corpse item after an explosion, destroy_item() specifically
doesn't do anything to an item with a quantity of 0, so the original corpse
(now gold) would remain with a quantity of 0.

Mostly this was invisible, but upon leaving the current floor, attempting
to save the present floor would trigger an assert for the 0-gold pile being
invalid, causing this crash.

Now just make sure that none of the piles ever has less than 0 gold in it.
To help integrate Nemelex vault-wise as a chaotic god, since there are
Zin/Xom vaults and Zin/Makhleb vaults.

This has (cosmetic) pink crystal walls, a talking Zin angel, and a
talking goblin sharper worshipping Nemelex (only dialogue, no
abilities). Note that the latter's dialogue provides minor spoilers as
to what some cards do.
So that its messages consistently show up.
Monsters behind glass in vaults tagged as transparent need "opaque" KMASKs
to tell the builder those spaces aren't actually breaking connectivity
(since the monsters can't be freed without freeing up connectivity).
(Impassible is not the same as impassable, but the former is still a
word in its own right.)
Orbs of destruction don't always blow up their targets.
The goblins sharper has enough dialogue now that it won't come up often
anyway.
Also, make them more likely to show up than the other misplaced cards.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.