diff --git a/DXRCore/DeusEx/Classes/DXRVersion.uc b/DXRCore/DeusEx/Classes/DXRVersion.uc index 5bfeb5063..4dcdc01bc 100644 --- a/DXRCore/DeusEx/Classes/DXRVersion.uc +++ b/DXRCore/DeusEx/Classes/DXRVersion.uc @@ -4,8 +4,8 @@ simulated static function CurrentVersion(optional out int major, optional out in { major=2; minor=6; - patch=0; - build=6;//build can't be higher than 99 + patch=1; + build=1;//build can't be higher than 99 } simulated static function bool VersionIsStable() diff --git a/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc b/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc index d846aa4a2..ca32cbf80 100644 --- a/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc +++ b/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc @@ -347,7 +347,7 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc) else if (g.name=="Backup Power Keypad") { GlowUp(g.actors[0].a, 255); } - else if (g.name=="Missile Computer" && Loc.name != "Computer Room") { + else if (g.name=="Launch Control Computer" && Loc.name != "Control Room") { foreach AllActors(class'#var(prefix)DataLinkTrigger', dt) { if(dt.name=='DataLinkTrigger1' || dt.name=='DataLinkTrigger6') { dt.Destroy(); @@ -361,7 +361,7 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc) } } - if (g.name=="Missile Computer") { + if (g.name=="Launch Control Computer") { g.actors[1].a.Tag = 'klax'; // trigger the DataLinkTrigger immediately foreach AllActors(class'#var(DeusExPrefix)Mover', door, 'computerdoors') { door.MoverEncroachType = ME_IgnoreWhenEncroach; diff --git a/DXRModules/DeusEx/Classes/DXREvents.uc b/DXRModules/DeusEx/Classes/DXREvents.uc index fb43c1d46..29a6ed995 100644 --- a/DXRModules/DeusEx/Classes/DXREvents.uc +++ b/DXRModules/DeusEx/Classes/DXREvents.uc @@ -2789,6 +2789,8 @@ function ExtendedTests() local string helpText; local int i; + Super.ExtendedTests(); + //Make sure all bingo goals have help text for (i=0;i=7){ @@ -984,20 +985,41 @@ simulated function _CreateBingoBoard(PlayerDataItem data) num_options = 0; for(x=0; x 50, "_CreateBingoBoard more than 50 options for " $ starting_map); + l("----------------------------------"); + return; + } for(x=0; x20; + return start_map > 20; } break; case 3: // Airfield switch(bingo_event) { + case "KnowYourEnemy": + case "SimonsAssassination": + return start_map > 31; + case "CleanerBot_ClassDead": case "AlexCloset": case "CommsPit": case "BathroomFlags": case "ReadJCEmail": case "Shannon_Dead": - case "TrophyHunter": case "SlippingHazard": case "un_PrezMeadPic_peepedtex": case "WaltonConvos": @@ -545,21 +554,26 @@ static function bool BingoGoalImpossible(string bingo_event, int start_map, int case "UNATCOHandbook": case "ManderleyMail": case "LetMeIn": - return start_map > 30 && start_map < 36 && end_mission <= 3;// you can do these m03 unatco goals in m04 unatco, but if you start in helibase it's far - - case "SickMan_Dead": - case "NYEagleStatue_peeped": - return start_map>35 && end_mission <= 3;// no battery park goals once you get to airfield? - - case "KnowYourEnemy": - case "SimonsAssassination": - return start_map>31; + case "ViewPortraits": // next location is 04_NYC_Bar + return start_map > 31 && start_map < 36 && end_mission <= 3;// you can do these m03 unatco goals in m04 unatco, but if you start in helibase it's far } - break; case 4: // Paul and NSFHQ switch(bingo_event) { + case "CommsPit": + case "BathroomFlags": + case "ReadJCEmail": + case "Shannon_Dead": + case "WaltonConvos": + case "un_PrezMeadPic_peepedtex": + case "un_bboard_peepedtex": + case "UNATCOHandbook": + case "ManderleyMail": + case "LetMeIn": + case "AlexCloset": + case "TrophyHunter": + return start_map > 41 && end_mission <= 4; } break; @@ -570,9 +584,19 @@ static function bool BingoGoalImpossible(string bingo_event, int start_map, int break; case 6: // Hong Kong - case 7:// fallthrough to 2nd half of Hong Kong switch(bingo_event) { + // // these two goals can actually be done with the way these starts currently work, but would normally be impossible + // case "ClubEntryPaid": + // case "M06JCHasDate": + // return start_map > 65; + } + case 7: // fallthrough to 2nd half of Hong Kong + switch(bingo_event) + { + case "MaggieCanFly": + case "PoliceVaultBingo": // TODO: remove once a datacube with the vault code is added + return start_map > 70; } break; @@ -589,15 +613,23 @@ static function bool BingoGoalImpossible(string bingo_event, int start_map, int break; case 10: // Paris + switch(bingo_event) + { + } case 11: // fallthrough to the rest of Paris switch(bingo_event) { case "GuntherHermann_Dead": - return start_map>=115; + return start_map >= 115; + case "TrainTracks": + return start_map > 115; } break; case 12: // Vandenberg + switch(bingo_event) + { + } case 14: // fallthrough to the rest of Vandenberg switch(bingo_event) { @@ -627,7 +659,7 @@ static function bool BingoGoalImpossible(string bingo_event, int start_map, int } return start_map>=60; //Have to have told Jaime to meet you in Paris in mission 5 to get Gunther's killphrase case "FordSchick_Dead": - return start_map>=20; + return start_map>=30; case "M07MeetJaime_Played": if (end_mission < 8){ return True; @@ -653,9 +685,9 @@ static function bool BingoGoalImpossible(string bingo_event, int start_map, int case "IcarusCalls_Played": case "roof_elevator": case "MeetRenault_Played": - return start_map>100; //TODO: All these early Paris things - if we were to add a "Streets" starting location, this would need to be split more accurately + return start_map>=110; //early Paris things case "ManWhoWasThursday":// TODO: in 10_Paris_Catacombs, and then 12_Vandenberg_Cmd, but nothing in M11 - return start_map > 100 && end_mission <= 11; + return start_map >= 110 && end_mission <= 11; case "PresentForManderley": //Have to be able to get Juan from mission 3 and bring him to the start of mission 4 if (end_mission < 4){ @@ -724,7 +756,7 @@ static function int _ChooseRandomStartMap(DXRBase m) case 0: return 10; case 1: return 20; case 2: return 30; - case 3: return 40; + case 3: return 41; case 4: return 50; case 5: return 61; case 6: return 81; @@ -757,7 +789,7 @@ static function int _ChooseRandomStartMap(DXRBase m) return 30; // just in case the switch misses case 3:// mission 4 if(m.rngb()) return 45; - return 40; + return 41; case 4:// mission 5 if(m.rngb()) return 55; return 50; diff --git a/DeusEx.u b/DeusEx.u index f9414431c..96c4fc186 100644 Binary files a/DeusEx.u and b/DeusEx.u differ diff --git a/GMDXRandomizer.u b/GMDXRandomizer.u index c0b3a79b0..8b7079baa 100644 Binary files a/GMDXRandomizer.u and b/GMDXRandomizer.u differ diff --git a/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc b/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc index 5976b00aa..6a3ca2217 100644 --- a/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc +++ b/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc @@ -46,11 +46,20 @@ event InitWindow() Hide(); if(class'DXRVersion'.static.VersionOlderThan(version, 2,5,3,7)) { - version = class'DXRVersion'.static.VersionNumber(); x_pos = 0; y_pos = 0; SaveConfig(); } + if(class'DXRVersion'.static.VersionOlderThan(version, 2,6,1,1)) { + colorText.R = 200; + colorText.G = 200; + colorText.B = 200; + colorText.A = 255; + } + if( version < class'DXRVersion'.static.VersionNumber() ) { + version = class'DXRVersion'.static.VersionNumber(); + SaveConfig(); + } } function string ReplaceVariables(string s) @@ -120,8 +129,6 @@ function InitStats(DXRStats newstats) for(i=1; i<=15; i++) { PB_total += PB[i]; - if(Golds[i] == 0) Golds[i] = PB[i]; - if(Golds[i] > PB[i] && PB[i] != 0) Golds[i] = PB[i]; sum_of_bests += Golds[i]; } for(i=1; i<=15; i++) { @@ -223,9 +230,10 @@ function InitSizes(GC gc) function DrawWindow(GC gc) { - local int i, t, prev, prevprev, cur, curTime, next, time, total, prevTotal; + local int i, prev, prevprev, cur, curTime, next, time, total, prevTotal; local float x, y, f, delta; local string msg, s; + local Color cmpColor; if(stats == None) return; @@ -300,17 +308,16 @@ function DrawWindow(GC gc) if(showSeg) { msg = fmtTimeSeg(curTime); s = "/ " $ fmtTimeSeg(balanced_splits[cur]); - t = curTime - balanced_splits[cur]; - DrawTextLine(gc, "SEG:", msg, GetCmpColor(t, t), x, y, s, true); + cmpColor = GetCmpColor(curTime, balanced_splits[cur], prevTotal, balanced_splits_totals[prev], Golds[cur]); + DrawTextLine(gc, "SEG:", msg, cmpColor, x, y, s, true); y += text_height; } // current overall time if(showCur) { - time = prevTotal - balanced_splits_totals[prev]; - t = curTime - balanced_splits[cur]; msg = fmtTime(total); - DrawTextLine(gc, "CUR:", msg, GetCmpColor(time, t), x, y, "", true); + cmpColor = GetCmpColor(prevTotal, balanced_splits_totals[prev], curTime, balanced_splits[cur]); + DrawTextLine(gc, "CUR:", msg, cmpColor, x, y, "", true); y += text_height; } @@ -350,8 +357,9 @@ function DrawWindow(GC gc) function int DrawSplit(GC gc, int mission, int x, int y) { - local int time, total, i, diff, totalDiff; + local int time, total, i, totalDiff; local string sDiff, sTime; + local Color cmpColor; time = stats.missions_times[mission]; time += stats.missions_menu_times[mission]; @@ -368,11 +376,14 @@ function int DrawSplit(GC gc, int mission, int x, int y) total += stats.missions_menu_times[i]; } totalDiff = total - balanced_splits_totals[mission]; - diff = time - balanced_splits[mission]; - sDiff = fmtTimeDiff(totalDiff); + if(balanced_splits_totals[mission] > 0) { + sDiff = fmtTimeDiff(totalDiff); + } sTime = fmtTime(total); - DrawTextLine(gc, MissionName(mission), sDiff, GetCmpColor(totalDiff, diff, time, Golds[mission]), x, y, sTime); + cmpColor = GetCmpColor(total, balanced_splits_totals[mission], time, balanced_splits[mission], 0, Golds[mission]); + + DrawTextLine(gc, MissionName(mission), sDiff, cmpColor, x, y, sTime); } else if(balanced_splits[mission] > 0) { // future split @@ -427,20 +438,34 @@ function DrawTextLine(GC gc, string header, string msg, Color c, int x, int y, o gc.DrawText(x, y, width - x, text_height, " " $ extra); } -function Color GetCmpColor(int overall_diff, int diff, optional int segtime, optional int gold) +function Color GetCmpColor(int primary_time, int primary_comp, int secondary_time, int secondary_comp, optional int primary_best, optional int secondary_best) { - if(overall_diff <= 0) { - if(gold > 0 && segtime < gold) return colorBestAhead; - else if(diff < 0) return colorAheadGainingTime; - else if(diff > 0) return colorAheadLosingTime; - else return colorAhead; - } else { - if(gold > 0 && segtime < gold) return colorBestBehind; - else if(diff < 0) return colorBehindGainingTime; - else if(diff > 0) return colorBehindLosingTime; - else return colorBehind; + local int prim_diff, sec_diff; + local bool bGold; + + bGold = (primary_best!=0 && primary_time < primary_best) || (secondary_best!=0 && secondary_time < secondary_best); + + if(primary_comp == 0) { + if(bGold) return colorBest; + return colorText; } - return colorText; + prim_diff = primary_time - primary_comp; + if(secondary_comp != 0) sec_diff = secondary_time - secondary_comp; + + if(prim_diff <= 0) { + if(bGold) return colorBestAhead; + if(sec_diff <= 0) return colorAheadGainingTime; + if(sec_diff > 0) return colorAheadLosingTime; + return colorAhead; // currently can't happen, but do we want to ever use this color? + } + if(prim_diff > 0) { + if(bGold) return colorBestBehind; + if(sec_diff < 0) return colorBehindGainingTime; + if(sec_diff >= 0) return colorBehindLosingTime; + return colorBehind; // currently can't happen, but do we want to ever use this color? + } + + return colorText; // just in case } function string fmtTimeSeg(int time) @@ -465,6 +490,7 @@ function int BalancedSplit(int m) local float ratio_of_game; if(PB_total == 0) return Golds[m]; + if(sum_of_bests == 0) return PB[m]; ratio_of_game = float(Golds[m]) / float(sum_of_bests); balanced_split_time = ratio_of_game * float(PB_total); @@ -506,7 +532,7 @@ defaultproperties textfont=Font'DeusExUI.FontMenuHeaders_DS'; colorBackground=(R=0,G=0,B=0,A=100) - colorText=(R=255,G=255,B=255,A=255) + colorText=(R=200,G=200,B=200,A=255) colorBehind=(R=204,G=60,B=40,A=255) colorBehindLosingTime=(R=204,G=18,B=0,A=255) @@ -539,5 +565,5 @@ defaultproperties split_names(15)="Area 51" splitNotes(1)="UNATCO start: no Leo at Paul or hut|nHarley start: no Leo at electric bunker|nElectric Bunker start: no Leo at Harley dock|nTop start: no Leo at base of statue|nEdit these notes in DXRSplits.ini" - splitNotes(14)="Howard 6th floor: no Jock at vanilla|nEdit these notes in DXRSplits.ini" + splitNotes(14)="The computer and Howard won't be close to each other.|nHoward and Escape Jock won't be close to each other.|nEdit these notes in DXRSplits.ini" } diff --git a/HXRandomizer.u b/HXRandomizer.u index 81ac31f4e..cdfca0b83 100644 Binary files a/HXRandomizer.u and b/HXRandomizer.u differ diff --git a/RevRandomizer.u b/RevRandomizer.u index ba30c5faf..08ab7ba7d 100644 Binary files a/RevRandomizer.u and b/RevRandomizer.u differ diff --git a/VMDRandomizer.u b/VMDRandomizer.u index b874ea5cc..f6f71d6cc 100644 Binary files a/VMDRandomizer.u and b/VMDRandomizer.u differ diff --git a/installer/build.py b/installer/build.py index 430bfa01a..e773135cf 100644 --- a/installer/build.py +++ b/installer/build.py @@ -73,7 +73,7 @@ # DXVK 32bit if not (basedest/'dxvk.tar.gz').exists(): - DownloadFile('https://github.com/doitsujin/dxvk/releases/download/v2.3/dxvk-2.3.tar.gz', basedest/'dxvk.tar.gz') + DownloadFile('https://github.com/doitsujin/dxvk/releases/download/v2.3.1/dxvk-2.3.1.tar.gz', basedest/'dxvk.tar.gz') tar = tarfile.open(basedest/'dxvk.tar.gz') for f in tar.getmembers(): if '/x32/' in f.path and f.isfile():