Skip to content

Feature/bugs and extra modules#11

Open
ToonDawg wants to merge 8 commits into
SnoopLawg:mainfrom
ToonDawg:feature/bugs-and-extra-modules
Open

Feature/bugs and extra modules#11
ToonDawg wants to merge 8 commits into
SnoopLawg:mainfrom
ToonDawg:feature/bugs-and-extra-modules

Conversation

@ToonDawg

@ToonDawg ToonDawg commented Jan 1, 2025

Copy link
Copy Markdown

Yo! A bit of a bigger PR here that fixed 2 issues I was having. I wasn't able to comment on the PR lines to explain my thoughts, so Ill just do it here.

  1. Opening AutoPy script took about 1min because of the recursive search in APP Settings folder to get the "raid.exe" path. I got way to much junk in my app settings folder. I've changed it to search likely paths first before doing a search in the root app settings folder.
  2. The shop buy wasn't working because of UI updates for Christmas. I've changed the 'theMarket.png' image to just have the market text.
  3. I've added a text box to show logs in the TK UI so I can see whats going on easier.
  4. I've added modules for FW, Doom Tower and Iron Twins
  5. On original load it expects a box to come up before it will load the script. I was having issues when doing dev and the game was already open. I've added a check to see if we are in the bastion by looking for the battle button.
    image

Cheers mate!

Market wasn't searching becuase of the Christmas UI. AutoPY was taking 1min to load because I have millions of files in Local App Data
Comment thread Modules/PyAutoRaid.py
# Log screen resolution
logger.info(f"Detected screen resolution: width={self.width}, height={self.height}, primary={main}")

if main: # Only consider the primary monitor

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have two different sized monitors and this error kept kicking off for me even though my main is set to 1920x1080.
moving the main check up here fixed it for me.

Comment thread Modules/PyAutoRaid.py
logger.info("Starting focused search for Raid.exe...")
appdata_local = os.path.join(os.environ['LOCALAPPDATA'])
raid_feature = "Raid.exe"
for root, dirs, files in os.walk(appdata_local):

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Making this change made my start up time go from 1min to 2s

Comment thread Modules/PyAutoRaid.py
try:
# Attempt to locate the image
if pyautogui.locateOnScreen(exit_add_image, confidence=0.7) is not None:
if pyautogui.locateOnScreen(exit_add_image, confidence=0.7) is not None or pyautogui.locateOnScreen(home_battle_button, confidence=0.7):

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If exit image wasn't on the screen it would loop here without the tk ui popping up. Now I also check for being on the bastion without a pop up by looking for the battle button

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've realised this one might not be the intention you had. Is it supposed to attempt to escape so the exit button comes up and then close to make sure we are in the bastion without popups?

@SnoopLawg

Copy link
Copy Markdown
Owner

@ToonDawg I appreciate the work , and am looking to refactor a lot of this very soon. I will review all of this and love your additions. Thanks for the help!

@ToonDawg

Copy link
Copy Markdown
Author

Hey man! No worries. I haven't looked at this or tried it in a while. It may be risky PR now. Specially with the shop updates and stuff. I'm happy to close it

@SnoopLawg

Copy link
Copy Markdown
Owner

No I pulled this PR and testing. I was wanting to do these things but got busy. Im sure we can get this working and add it to the functionality

SnoopLawg added a commit that referenced this pull request Jun 23, 2026
…ttribution

Investigated per-hero damage attribution divergence (task #10/#11) on
Spirit BT50 fixture. Found three real game-truth bugs that each
correctly improve their own area but un-stack a balancing wrong:

1. Demytha A2 `shrink_debuffs` (line 2576-2588): per skill description
   shrinks ALLY debuffs (debuffs ON heroes), but cb_sim shrinks BOSS
   debuffs. Game-truth: should be no-op. Removing it pushed Venom
   poison from 2.5M to 5.5M (over real 3.45M).

2. DebuffBar.tick `< 0` (line 314): gives N+1 ticks of activity for an
   N-turn debuff. Real game gives N. Tightening to `<= 0` halves Venom
   poison ticks (104 sim → ~50, real 69). Fits Spirit/Magic, breaks
   Force.

3. Venom A3 Count=2 placement: per static `ApplyDebuff Count=2 +
   TargetType=AllEnemies` the loader expands to 2 poison placements
   per cast. Real seems to place ~1.4× per cast not 2× — possibly
   game's Count semantics differ with single-target enemies.

Each fix alone is game-correct. Together they over-correct Magic+Spirit
and break Force calibration. Need coordinated multi-fix session with
Force-specific source telemetry to identify the underlying Force-only
over-prediction these are compensating for.

For now: only Mane A3 phantom WM/PT fix kept (shipped previous commit,
self-contained, no Force regression beyond -6.1% on one BT24 fixture).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
SnoopLawg added a commit that referenced this pull request Jun 23, 2026
After dumping IL2CPP dump.cs + static effect_manifest.json + skills_all.json
for the debuff lifetime mechanics, applied two coordinated game-truth fixes
that the previous compensating-wrong scaffolding had been masking.

1. Demytha A2 scope (cb_sim.py line ~2575): static skill 65102 effect[0]
   is `kind=ReduceDebuffLifetime tgt=AllAllies cnt=1`. AllAllies = HEROES
   not BOSS, so the previous behavior of shrinking boss debuffs every
   Demy A2 cast was unambiguously wrong. Now no-op against boss
   debuffs (cb_sim doesn't model per-hero debuff state).

2. DebuffBar.tick expire condition (cb_sim.py line ~314): tightened
   `s.remaining < 0` to `<= 0`. Real Spirit BT50 tick log shows 69
   poison events vs sim's old 104 at `< 0` (N+1 ticks). With the Demy
   scope fix shipping together, both align with the AppliedEffect
   Lifetime/TurnLeft semantics in `dump.cs` line 383767.

Result on Spirit BT50 fixture 20260623_123712:
  Mane     +12.3% (was +31.7% pre-Mane-A3-fix this session)
  Demy     -15.5%
  Ninja    +2.7%
  Geomancer -26.4% (Stoneguard fire count still under — task #10)
  Venomage -10.9%
  TOTAL    -3.2% (within ±5%)

Fixture pass rate ±5% on user's MEN tune:
  Spirit BT49 full   -1.9% ✓
  Magic BT49 ×3      -1.1% / +1.2% / -3.3% ✓ ✓ ✓
  Force BT24         -7.2% ❌ (exposes separate Force-day under-modeling)
  Force BT19         -6.0% ❌

The Force regression is REAL game-truth gap that the previous wrong
code was compensating for. Force has an unfound damage source that
needs fresh fixture telemetry to identify. Task #10/#11 remains open
for that work.

See `project_debuff_lifetime_il2cpp_findings` memory for IL2CPP
verification details + capstone targets for the next iteration.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
SnoopLawg added a commit that referenced this pull request Jun 23, 2026
tools/cb_attribution_diff.py — aggregates real per-hero/per-source damage from
the tick log (key `ticks`; producer 0-4 -> boss target 5, split by kind_id)
and diffs vs each SimChampion's DamageTracker. Spirit-day MEN is the
calibrated-total baseline, so per-hero divergence isolates attribution bugs.

Spirit fixture 20260623_162050 (real 36.85M full T50) diagnosis:
- Geomancer UNDER -24.5%: Stoneguard deflect (kind_id 4017 PassiveReflectDamage)
  real 21 procs / 1.17M (capped 75K/proc) vs sim passive 0.21M. Task #10's
  "Geo over +17.5%" was STALE — the shipped debuff fixes flipped it to under.
- Venomage UNDER -9.4%: poison 74 real ticks x 50K vs sim 50 ticks; the
  debuff <=0 expiry fix over-cut ~24 ticks.
- Ninja Brimstone (kind 3021) real 19x250K vs sim 16x250K (minor).

CB damage caps confirmed game-truth: poison 50K/tick, deflect 75K/proc,
Brimstone/Smite 250K/proc. Tasks #10/#11 updated with root causes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SnoopLawg added a commit that referenced this pull request Jun 23, 2026
Investigated the Venom poison under-attribution (#11) against Spirit fixture
20260623_162050. Cadence is perfect (sim casts == real exactly), so the gap
is poison tick production: real 74 ticks vs sim 50.

Pinned the mechanic: 72 poison placements (Maneater A1 x40 + Venom A3 x2x16)
-> 74 real ticks ~= 1 tick/placement. Real poisons are detonation-consumed by
Venom A1 (tick once, then removed), NOT lasting 2 full turns.

Tested reordering the DoT damage loops before debuff_bar.tick() (deal on the
expiry turn): total -5.6% -> -1.2% but Venom flipped to +16.2% OVER (50 -> 94
ticks). That's a compensating-wrong swap (double-ticks long poisons), so
REVERTED. Left an explanatory comment at the tick site. The clean fix is
modeling poison detonation-consumption, validated against this fixture's
74-tick / 37.87M target — fixed together with the Geo deflect (downstream of
burns), not in isolation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

2 participants