Same logic but cleaned up version of https://github.com/1dot13/source/pull/602 which Tais contributed with Claude Code's help
Most calls to SOLDIERTYPE::IsDragging() aren't supposed to have a side effect of cancelling a drag, being simple queries.
Changing the default to reflect that is right move.
Assisted-by: Claude:
Hovering mouse over an option long enough that the popup text appears and scrolling to last page with mouse wheel would run into assertion error in gprintfdirty() Assert(pFontString!=NULL); if the option was one of the last ones that didn't have a text box in the last option page.
The LayerProp palette lookup was gated on the *filter* attribute instead
of the *palette* attribute -- the filter checks from the line above were
copy-pasted verbatim. As a result, any LayerProp with an empty filter but
a real palette never resolved its palette table: paletteTable stayed NULL
and the layer fell back to the merc's shade table.
The most visible victim is the heli fast-rope arrival layer
(filter="" palette="hats"): rendered with the merc palette, the rope's
pixel indices (45-81, 166-172) hit the merc's unreplaced orange/red glow
ramp instead of the rope's own tan/green, painting orange specks along the
rope. Testing the palette attribute restores the intended "hats" palette
and the correct rope colours; it also fixes any other empty-filter layers.
Co-Authored-By: Claude Opus 4.7
* Supplement Chinese translation files
TBS members supplement Chinese translation files, fix errors in Chinese.Emails.xml and other untranslated files.
* Revert "Supplement Chinese translation files"
This reverts commit 473b7f89e8c82453db95313fc6f672e2416a5e5d.
* Add Chinese Translations, and repair XML mistakes
Fixes not being able to take all corpses from one tile, if multiple corpses were stacked on top of each other. With the structure not deleted, the GetCorpseAtGridNo would not find an existing corpse anymore.
Added detection of the NEWLINE_CHAR character "±" to enable line breaks not only when text exceeds display width, but also upon encountering NEWLINE_CHAR.
Note: This character has been conventionally adopted in the Chinese community as a line break marker within XML item descriptions. The modification affects Chinese text display only.
I have redrawn the 6 icons (including both unpressed and pressed states) for the 3 buttons — Weather, Tasks, and Disease — that looked out of place with the original style. The colors, embossing effect, shadows and highlights, the changes in icon size and brightness when pressed, and even the noise have all been carefully matched to ensure the art style stays true to the original.
SGP did not seem to make any use of compilationFlags or debugFlags when
translating from msbuild to cmake, but there could be a thrice removed
transitive include I've missed.
there's a small probability this fixes some obscure UB or one-definition rule
violation that's causing the mystery crashes people have reported
* Replaced gCoverViewArea[2000][2000][2] with std::vector that is adjusted to the actual viewport size. Size difference for example in 720p resolution is 8 000 000 vs 3969 elements
* FPS improved in merc view mode 6-8 frames and in enemy view mode 10-20 frames
- These gameclock variables were not updated properly so it created a discrepancy between it and the proper gameclock variables, and it was causing issues with the lua hourly update script
- Function that heals boxers after they finish resting
- The cHour variable was not being properly updated in the code creating a discrepancy between the game clock and it in this script. The guiHour variable already exists and is a direct copy of the guiHour in Game Clock.cpp so use this
- Add HealBoxers function after boxers rest so they don't die as easily after multiple fights
Use lua setters instead of reassigning the global so it actually does something
Reverted the time conditionals so that it only updates on the opening/closing hours instead of every hour in between. Why was this change necessary to begin with? It also makes it so it resets all the boxing variables every hour instead of daily (not that it even worked before the setter change anyway)
In practice, this fixes a few things so they work as originally intended:
Boxers will actually rest for 1 day after every 3 fights as originally intended
After every rest, boxers will get progressively stronger and harder to beat as originally intended
Code used wrong item to calculate recoil and burst APs causing the burst length loop to be stuck until the whole 2000 round mg magazine would be fired in one go.
Fixes displaying of AIM offer when email is opened. An empty string at the end would set fOnLastPageFlag = TRUE in PreProcessEmail() preventing us from changing pages in the BtnNextEmailPageCallback()