I give too little time to this project.

Made my engine compile and work using 3.2.0-rc1, check. Pain in the butt with strings, you *cannot* use the "+" operator to concatenate them, they are guaranteed to be wrecked horribly.

Now bringing Win98 support back. Restored a lot of neglected/commented out code designed to work in 98: it has so many vital WinAPI functions missing! I made a dedicated conditional CGE_PLATFORM_HAS_WINDOWS98 and wrap any relevant code in it. Because that would only work if the mother exe and the module DLL are compiled using fpc 2.6.4 (because lots of WinAPI functions have to be loaded manually, a program built using fpc 3 would crash in Win98 due to unsatisfied dependencies). So I have to support fpc 2.6.4 for all eternity patching all of its bugs by myself (the lack of Unicode support, the inability to catch AVs in a DLL, the incorrectly working functions like BsfDword - I have successfully patched them all in my engine. Took a lot of effort and dedication).

The mother EXE for Win32 will always be compiled using fpc 2.6.4, with optimization set to pentium 3/x87 to keep compatibility with Athlon XP/Pentium III. The module DLL will normally be compiled using fpc 3.2/pentium m/sse2 but there will always be a separate legacy version built using fpc 2.6.4/pentium 3/x87

Scavenged me a Radeon 9800 Pro 128Mb AGP (it has a molex power connector, LOL). Downloaded specific Catalyst for it to work in 98. Now I only have to install it into that machine and actually install Win98 on it.

Examples of dirty tricks Win98 support requires:
Code:
  function TWinApiFramework.GetScreenRect(fullscreen: boolean): TWindowManagerRect;
  var
    rc: TRect;
    Monitor: HMONITOR;
    mi: TMonitorInfo;
  begin
    {$ifdef CGE_PLATFORM_HAS_WINDOWS98}
     if (Mother^.State.OS in [ostWin98, OstWin2k]) 
       and (not Assigned(GetMonitorInfo) or not Assigned(MonitorFromRect))
     then with Result do begin
       //Use legacy method fow windozes older than XP
       left:= 0;
       top := 0;
       width:= GetSystemMetrics(SM_CXSCREEN);
       height:= GetSystemMetrics(SM_CYSCREEN);
       //Assuming that taskbar is at the bottom and is 28 pixels high:
       if not Fullscreen then Height-= 28;
     end
     else 
    {$endif}
    begin
      if windowhandle = 0 then begin
        //Not created yet. Use default monitor.
         with rc do begin
           left:= 0;
           top:= 0;
           right:= 1;
           bottom:= 1;
         end;
         Monitor:= MonitorFromRect(rc, MONITOR_DEFAULTTOPRIMARY);
      end else begin
        //get monitor from window
        GetWindowRect(windowhandle, rc);
        Monitor:= MonitorFromRect(rc, MONITOR_DEFAULTTONEAREST);
      end;
      mi.cbSize:= sizeof(mi);
      GetMonitorInfo(Monitor, @mi);
      if fullscreen
        then rc:= mi.rcMonitor
        else rc:= mi.rcWork;
      Result.left:= rc.left;
      Result.top:= rc.top;
      Result.width:= rc.right - rc.left;
      Result.height:= rc.bottom - rc.top;
    end;
  end;