maurezen / AutoTrimps

Automation for the idle incremental game 'Trimps'
0 stars 0 forks source link

U2 automation and stats #54

Closed maurezen closed 4 years ago

maurezen commented 5 years ago

Adapt AT to U2. Add radon stats mirroring helium (radon = 0 in U1 and likewise, he = 0 in U2) and scruffy exp mirroring fluffy (these have to be separate charts due to wildly different scales).

maurezen commented 5 years ago

u1/u2 flag: game.global.universe (1 and 2 respectively)

maurezen commented 5 years ago

probably a good moment to work towards #7 - at the very least, query.js/getEnemyMax* should have universe flag and delegate to global game at least for u2.

maurezen commented 5 years ago

[done] learn how to build smithy and other u2-specific buildings. buildings.js

//Smithy
if (!game.buildings.Smithy.locked) {
    safeBuyBuilding('Smithy');
}
//Microchip
if (!game.buildings.Smithy.locked) {
    safeBuyBuilding('Microchip');
}

learn how to juggle radiating and better heirlooms.

maurezen commented 5 years ago

[done] Hideous patch fo query.js

//this is a hideous copy from game.global.getEnemyMaxAttack
//to fully delegate to game.global.getEnemyMaxAttack we need to hijack getCurrentMapObject() with world
//and also apply diff/corrupt outside
function getEnemyMaxAttack(world, level, name, diff, corrupt) {
    var amt = 0;
    var adjWorld = ((world - 1) * 100) + level;
    var attackBase = (game.global.universe == 2) ? 750 : 50;
    amt += attackBase * Math.sqrt(world) * Math.pow(3.27, world / 2);
    amt -= 10;
    if (world == 1){
        amt *= 0.35;
        amt = (amt * 0.20) + ((amt * 0.75) * (level / 100));
    }
    else if (world == 2){
        amt *= 0.5;
        amt = (amt * 0.32) + ((amt * 0.68) * (level / 100));
    }
    else if (world < 60)
        amt = (amt * 0.375) + ((amt * 0.7) * (level / 100));
    else{
        amt = (amt * 0.4) + ((amt * 0.9) * (level / 100));
        amt *= Math.pow(1.15, world - 59);
    }
    if (world < 60) amt *= 0.85;
    //if (world > 6 && game.global.mapsActive) amt *= 1.1;
    if (diff) {
        amt *= diff;
    }

    if (game.global.universe == 2){
        var part1 = (world > 40) ? 40 : world;
        var part2 = (world > 60) ? 20 : world - 40;
        var part3 = (world - 60);
        if (part2 < 0) part2 = 0;
        if (part3 < 0) part3 = 0;
        amt *= Math.pow(1.5, part1);
        amt *= Math.pow(1.4, part2);
        amt *= Math.pow(1.32, part3);
    }

    if (!corrupt)
        amt *= game.badGuys[name].attack;
    else {
        amt *= getCorruptScale("attack");
    }
    return Math.floor(amt);
}

//this is a hideous copy from game.global.getEnemyMaxHealth
//to fully delegate to game.global.getEnemyMaxHealth we need to hijack getCurrentMapObject() with world
//and also apply corrupt outside
function getEnemyMaxHealth(world, level, corrupt) {
    if (!level)
        level = 30;
    var amt = 0;
    var healthBase = (game.global.universe == 2) ? 10e7 : 130;
    amt += healthBase * Math.sqrt(world) * Math.pow(3.265, world / 2);
    amt -= 110;
    if (world == 1 || world == 2 && level < 10) {
        amt *= 0.6;
        amt = (amt * 0.25) + ((amt * 0.72) * (level / 100));
    }
    else if (world < 60)
        amt = (amt * 0.4) + ((amt * 0.4) * (level / 110));
    else {
        amt = (amt * 0.5) + ((amt * 0.8) * (level / 100));
        amt *= Math.pow(1.1, world - 59);
    }
    if (world < 60) amt *= 0.75;
    //if (world > 5 && game.global.mapsActive) amt *= 1.1;

    if (game.global.universe == 2){
        var part1 = (world > 60) ? 60 : world;
        var part2 = (world - 60);
        if (part2 < 0) part2 = 0;
        amt *= Math.pow(1.4, part1);
        amt *= Math.pow(1.32, part2);
    }

    if (!corrupt)
        amt *= game.badGuys["Grimp"].health;
    else
        amt *= getCorruptScale("health");
    return Math.floor(amt);
}
maurezen commented 5 years ago

[done] While this works in principle, the estimates are way off in u2 due to them being too conservative (world+1, cell50). We need to fix that, I suppose.

maps.js

if (AutoStance<=1) {
        enemyDamage = getEnemyMaxAttack(game.global.world, 90, 'Snimp', 1.2);
        enemyDamage = calcDailyAttackMod(enemyDamage); //daily mods: badStrength,badMapStrength,bloodthirst
    } else {
        enemyDamage = calcBadGuyDmg(null,getEnemyMaxAttack(game.global.world, 90, 'Snimp', 1.0),true,true); //(enemy,attack,daily,maxormin,[disableFlucts])
    }
    enemyHealth = getEnemyMaxHealth(game.global.world, 90);
maurezen commented 5 years ago

[done] We also need to fix the issue with siphonology being applied in u2.

//Dynamic Siphonology section (when necessary)
var siphlvl = shouldFarmLowerZone ? game.global.world - 10 : (game.global.universe == 1 ? game.global.world - game.portal.Siphonology.level : game.global.world);
maurezen commented 5 years ago

Somehow now suicide happens all the time. shouldFarmLowerZone somehow happens to be true and siphlvl is not 14 but 9 (grew up from 4 I suppose). turning off LowerFarmingZone doesn't really help.

maurezen commented 5 years ago

Oh, that was auto force abandon. Should fix that for u2! (breedtimer.js)

maurezen commented 5 years ago

also need to take a look at autoportal/autoperk (and corresponding settings being broken af in u2). u2 uses the same game.portal stuff, with additional radLevel, radLocked and radSpent fields.

maurezen commented 5 years ago

also found that classy is temporarily capped at 75. probably should use that.

maurezen commented 5 years ago

also need add new unique maps to automaps. [done] 'Big Wall', 'Dimension of Rage' , 'Prismatic Palace' others

            if ((theMap.name == 'The Wall' || theMap.name == 'Big Wall') && game.upgrades.Bounty.allowed == 0 && !game.talents.bounty.purchased) {
                var theMapDifficulty = Math.ceil(theMap.difficulty / 2);
                if(game.global.world < 15 + theMapDifficulty) continue;
                selectedMap = theMap.id;
                break;
              }
              if ((theMap.name == 'Dimension of Anger' || theMap.name == 'Dimension of Rage') && document.getElementById("portalBtn").style.display == "none" && !game.talents.portal.purchased) {
                  var theMapDifficulty = Math.ceil(theMap.difficulty / 2);
                  if(game.global.world < 20 + theMapDifficulty) continue;
                  selectedMap = theMap.id;
                  break;
              }
maurezen commented 5 years ago

[done] add u2 upgrades: add 'Prismatic', 'Rage', 'Prismalicious' to upgrade list in upgrade.js

maurezen commented 5 years ago

portal at setting is broken and disappeared at the moment. this makes at toggle setting css break as well. those are gated behind balance challenge being unlocked, what a weird way to spell Z40. change that to actually use max world in corresponding u, or check for balance and unbalanced. [done] unlocked portal at right away

maurezen commented 5 years ago

worker ratio presets have to be tweaked as well

maurezen commented 5 years ago

learn how to adapt block-dependant calculations to energy shield [done] void maps [] h/d calculations

maurezen commented 5 years ago

autoperk mostly updated. known issues: [done] need to update ratios with new perks (prismal) [done] need to cope with u1 perks being tinkered with at u2 [done] need to stop motivation being grossly overrated [done] update he/hr portal for u2 [done] update portal at for u2 [ ] u1/u2 switch should switch the autoperk stuff

maurezen commented 5 years ago

[done] graphs don't see portals in u2 atm, gotta take care of that

maurezen commented 5 years ago

[done] gotta add meteorologists as well

maurezen commented 5 years ago

All optimal shields have Trimp Attack and Crit Damage. The other 4 mods vary Starter Buble shield - Crit Chance/Gamma Burst/Trimp Health/VMDC Later Buble/Melt shield - Crit Chance/Trimp Health/Prismatic Shield/VMDC Duel shield - Gamma Burst/Trimp Health/Prismatic Shield/Plaguebringer Shielded achieves shield - Crit Chance/Gamma Burst/Trimp Health/Prismatic Shield Push Shield - Crit Chance/Trimp Health/Plaguebringer/Prismatic Shield U1 trapper/Trappapalooza - Crit Chance/Gamma Burst/Trimp Health/Plaguebringer U1 c2/Daily Shield - Crit Chance/Gamma Burst/Plaguebringer/VMDC

maurezen commented 5 years ago

the enemy speed calculations should be aware of Equality

maurezen commented 5 years ago

gotta finally address enoughHealth calculations (take into account prismatic getting reset each fight, speed of killing, that sort of thing)

maurezen commented 5 years ago

freezes in map creation at lategame (last push stopped at 81 because of this)

maurezen commented 4 years ago

Alright, it's been quite a while and most of the quirks are gone by now. Closing this and opening separate issues for everything that comes up further.