Skip to content

Commit

Permalink
MM7Patch v2.2:
Browse files Browse the repository at this point in the history
[+] Accurate sprites coordinates in D3D mode.
[+] Better water animation.
[+] Quick load key now works during the death movie.
[+] Game window is resizeable.
[+] Game can be stretched to get rid of black bars in Borderless Fullscreen mode.
[+] Now in Software rendering mode the view is always scaled linearly, which makes it less flickery.
[+] Mouse look cursor for HD mode, customizable mouse cursors.
[+] Minimaps zoom level is remembered always, not just outdoors as before.
[+] Now you can select inactive characters, but they can't act.
[-] Some small cosmetic interface bugs fixed.
[-] Barrels and other static sprites were shrinked vertically indoors in D3D mode.
[-] Inactive characters couldn't interact with chests.
[+] And smaller changes...
  • Loading branch information
GrayFace committed Mar 17, 2019
1 parent c134038 commit ce9ef60
Show file tree
Hide file tree
Showing 28 changed files with 472 additions and 513 deletions.
36 changes: 34 additions & 2 deletions MMPatches/Install/MM7patch/Files/MM7Patch ReadMe.TXT
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
GrayFace MM7 Patch v2.1
GrayFace MM7 Patch v2.2
By Sergey Rozhenko <mailto:sergroj@mail.ru>
https://grayface.github.io/

Expand All @@ -9,14 +9,46 @@ The patch has no uninstaller to make things simpler.
([+] - feature, [-] - fixed bug, [*] - other)

New in version 2.2:
<< MM6 - MM8 >>
[+] Quick load key now works during the death movie.
[+] Game window is resizeable.
[+] StretchWidth and StretchHeight parameters specify the factors by which the game area gets stretched to reduce black bars on the sides. StretchWidthFull and StretchHeightFull parameters are used only if it makes the game occupy the whole screen.
[+] Now in Software rendering mode the view is always scaled linearly, which makes it less flickery.
[+] Data\MouseLookCursorHD.bmp is used for mouse look in 32-bit color mode if window is bigger than 640x480.
[+] Customizable mouse cursors: Data\MouseCursorArrow.cur and Data\MouseCursorTarget.cur are used if present.
[+] Patch now bypasses dgVoodoo DLLs if SupportTrueColor is not disabled.
[+] Minimaps zoom level is remembered always, not just outdoors as before.
[-] Fixed a crash found in Tatalia in MM7.
[-] Inactive characters couldn't interact with chests.
[-] Animated textures (via TFT) were animated incorrectly: first frame was longer, last frame was shorter.
[-] My bug: ScalingParam2 was read from ScalingParam1 entry.
[-] My bug: Mouse placed in the bottom-right corner was causing a crash sometimes.
[*] Smarter FixInactivePlayersActing: now you can select inactive characters, but they can't act.
<< MM7, MM8 >>
[+] Accurate sprites coordinates in D3D mode.
[+] Pixel-perfect mouse targeting in HD mode.
[+] Set TurnBasedWalkDelay to a value of your choice (e.g. 100) to be able to do individual steps in the walking phase of turn-based combat.
[+] Better water animation.
[+] MipmapsBase section in the INI controls how many mipmip levels matching textures can use. Smaller values lead to more mipmaps.
[+] Separate HDWTRCountHWL, HDWTRDelayHWL options for the NoD3DBitmapHwl=0 case.
[+] Hidden FixMonsterSummon option (1 - enabled by default).
[-] Some small cosmetic bugs fixed by changing pictures from icons.lod.
[-] Combination of IsWater and AnimateTFT facet attributes was causing texture change in D3D.
[-] Fixed a rare crash caused by a facet without a single vertex.
[-] My bug: Sparks effect was displayed incorrectly in the previous version.
<< MM7 >>
[+] Bless etc. icons near player portrait can be transparent now.
[-] Barrels and other static sprites were shrinked vertically indoors in D3D mode.
[-] Fly and Water Walk icons weren't displayed in simple message dialog.
[-] Health bars of first 2 players and danger indicators of all players were misplaced by 1 pixel (controlled by FixInterfaceBugs hidden option).
[-] My bug: Russian (Buka) version contained a broken NPC greetings file.
[-] My bug: Russian description in installer had a wrong encoding.
<< Fixes in maps >>
[-] Hall of the Pit (t04): Teleporters were rotating the party to the right.
[-] Nighon (out10): Right side of tavern door didn't react to clicks.
[-] Nighon (out10): Right side of the tavern door didn't react to clicks.
[-] My bug: Fixes for Avlee (out14), Barrow II (mdk03) and some for Nighon (out10) weren't included.


New in version 2.1:
<< MM6 - MM8 >>
[+] High resolution rendering in Hardware 3D in 32 bit color mode. 32 bit color is supported in windowed and borderless modes. Can be turned off by adding "SupportTrueColor=0" to INI. You can specify RenderMaxWidth and RenderMaxHeight options to limit maximum rendering resolution if you experience problems with FPS. Hidden options ScalingParam1 (3 by default) and ScalingParam2 (0.2 by default) control crispness of UI scaling.
Expand Down
Binary file modified MMPatches/Install/MM7patch/Files/MM7patch.dll
Binary file not shown.
Binary file not shown.
Binary file not shown.
144 changes: 3 additions & 141 deletions MMPatches/Install/MM7patch/mm7patch.iss
Original file line number Diff line number Diff line change
@@ -1,141 +1,3 @@
#define m() "mm7"
#define MM() "MM7"
#define AppDll() AddBackslash(SourcePath) + "Files\" + MM() + "patch.dll"
#define AppVersion() GetFileVersion(AppDll())
#define AppVer() \
ParseVersion(AppDll(), Local[0], Local[1], Local[2], Local[3]), \
Str(Local[0])+"."+Str(Local[1])+((Local[2] || Local[3]) ? "."+Str(Local[2]) : "")+(Local[3] ? "."+Str(Local[3]) : "")
#define DragonMD5() GetMD5OfFile(AddBackslash(SourcePath) + "OptData\01 dragon.games.lod")
#define TunnelsMD5() GetMD5OfFile(AddBackslash(SourcePath) + "OptData\01 tunnels.events.lod")

[Setup]
VersionInfoVersion={#AppVersion}
AppVerName=GrayFace {#MM} Patch v{#AppVer}
OutputBaseFilename={#MM} Patch v{#AppVer}

AppName=GrayFace {#MM} Patch
DefaultDirName={code:GetInstallDir}
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
SetupIconFile={#MM}_ICON.ico
Uninstallable=no
AppCopyright=Sergey Rozhenko
DisableProgramGroupPage=yes
DirExistsWarning=no
EnableDirDoesntExistWarning=yes
InfoBeforeFile="Files\{#MM}Patch ReadMe.TXT"
AppendDefaultDirName=no
WizardImageFile={#MM}Install.bmp
WizardSmallImageFile=none.bmp
WizardImageStretch=no
WindowResizable=yes

[Messages]
InfoBeforeLabel=Below is the content of {#MM}Patch ReadMe.txt file detailing all changes of the patch.

[CustomMessages]
LodGroup=Uncheck these tasks if you are installing the patch over a big mod like BDJ''s Rev4 mod:
LodsTask=Install LOD archives with fixes for particular maps and game progression
TunnelsTask=Fix Thunderfist Mountain entrances mismatch, add videos to exits from it into different dungeons
DragonTask=Make "Mega-Dragon" in The Dragon Caves in Eeofol a real mega-dragon instead of a weakened regular dragon

[Tasks]
Name: lods1; Description: {cm:LodsTask}; GroupDescription: {cm:LodGroup}; Check: LodsTaskCheck(true);
Name: lods2; Description: {cm:LodsTask}; GroupDescription: {cm:LodGroup}; Flags: unchecked; Check: LodsTaskCheck(false);
Name: tun1; Description: {cm:TunnelsTask}; GroupDescription: {cm:LodGroup}; Check: TunnelTaskCheck(true);
Name: tun2; Description: {cm:TunnelsTask}; GroupDescription: {cm:LodGroup}; Flags: unchecked; Check: TunnelTaskCheck(false);
Name: dragon1; Description: {cm:DragonTask}; GroupDescription: {cm:LodGroup}; Check: DragonTaskCheck(true);
Name: dragon2; Description: {cm:DragonTask}; GroupDescription: {cm:LodGroup}; Flags: unchecked; Check: DragonTaskCheck(false);

; Delete SafeDisk files
[InstallDelete]
Type: files; Name: "{app}\00000001.TMP";
Type: files; Name: "{app}\clcd16.dll";
Type: files; Name: "{app}\clcd32.dll";
Type: files; Name: "{app}\clokspl.exe";
Type: files; Name: "{app}\dplayerx.dll";
Type: files; Name: "{app}\drvmgt.dll";
Type: files; Name: "{app}\secdrv.sys";
Type: files; Name: "{app}\{#MM}.ICD";

[Files]
Source: "Files\*.*"; Excludes: "*.bak"; DestDir: "{app}"; Flags: promptifolder ignoreversion; AfterInstall: AfterInst;
Source: "Data\*"; Excludes: "*.bak"; DestDir: "{app}\Data\"; Flags: promptifolder; Tasks: lods1 lods2;
Source: "OptData\01 dragon.games.lod"; DestDir: "{app}\Data\"; Flags: promptifolder; Tasks: dragon1 dragon2;
Source: "OptData\01 tunnels.events.lod"; DestDir: "{app}\Data\"; Flags: promptifolder; Tasks: tun1 tun2;
Source: "OptFiles\*"; Excludes: "*.bak"; DestDir: "{app}"; Flags: onlyifdoesntexist recursesubdirs;

[Run]
Filename: "{app}\{#MM}Patch ReadMe.TXT"; Flags: shellexec skipifdoesntexist postinstall skipifsilent;

[Code]
function GetInstallDir(param: string): string;
begin
if not RegQueryStringValue(HKLM, 'SOFTWARE\New World Computing\Might and Magic VII\1.0', 'AppPath', Result) then
Result:= ExpandConstant('{pf}\Might and Magic VII');
end;
function CheckVer(ver: Cardinal): Boolean;
var
ms, ls: Cardinal;
begin
Result:= GetVersionNumbers(ExpandConstant('{app}\{#m}patch.dll'), ms, ls) and (ms >= ver);
end;
function CheckOptLod(var Task, TaskChecked: Boolean; path, md5: string; checked: Boolean): Boolean;
var
exist: Boolean;
begin
exist:= FileExists(path);
if not exist or (GetMD5OfFile(path) <> md5) then
begin
if not TaskChecked then
Task:= exist or not CheckVer($20001);
TaskChecked:= true;
Result:= (Task = checked);
end else
Result:= false;
end;
var
PatchLods, PatchLodsChecked: Boolean;
function LodsTaskCheck(checked: Boolean): Boolean;
begin
if not PatchLodsChecked then
if CheckVer($20001) then
PatchLods:= FileExists(ExpandConstant('{app}\Data\00 patch.games.lod'))
else
PatchLods:= GetIniBool('Install', 'PatchLods', true, ExpandConstant('{app}\{#m}.ini'));
PatchLodsChecked:= true;
Result:= (PatchLods = checked);
end;
var
DragonTask, DragonTaskChecked: Boolean;
function DragonTaskCheck(checked: Boolean): Boolean;
begin
Result:= CheckOptLod(DragonTask, DragonTaskChecked, ExpandConstant('{app}\Data\01 dragon.games.lod'), '{#DragonMD5}', checked);
end;
var
TunnelTask, TunnelTaskChecked: Boolean;
function TunnelTaskCheck(checked: Boolean): Boolean;
begin
Result:= CheckOptLod(TunnelTask, TunnelTaskChecked, ExpandConstant('{app}\Data\01 tunnels.events.lod'), '{#TunnelsMD5}', checked);
end;
procedure AfterInst;
begin
if GetIniString('Install', 'PatchLods', #13#10, ExpandConstant('{app}\{#m}.ini')) <> #13#10 then
DeleteIniEntry('Install', 'PatchLods', ExpandConstant('{app}\{#m}.ini'))
end;
#define en 1
#define ru 0
#include "mm7patchInc.iss"
Loading

0 comments on commit ce9ef60

Please sign in to comment.