hedgewars/hwengine.pas
changeset 3611 ed00aa2b339e
parent 3610 8590424bdfb0
child 3612 b50215a8a43d
equal deleted inserted replaced
3610:8590424bdfb0 3611:ed00aa2b339e
    79 procedure freeEverything(complete:boolean);
    79 procedure freeEverything(complete:boolean);
    80 
    80 
    81 implementation
    81 implementation
    82 {$ELSE}
    82 {$ELSE}
    83 procedure OnDestroy; forward;
    83 procedure OnDestroy; forward;
       
    84 procedure initEverything(complete:boolean); forward;
    84 procedure freeEverything(complete:boolean); forward;
    85 procedure freeEverything(complete:boolean); forward;
    85 {$ENDIF}
    86 {$ENDIF}
    86 
    87 
    87 ////////////////////////////////
    88 ////////////////////////////////
    88 procedure DoTimer(Lag: LongInt);
    89 procedure DoTimer(Lag: LongInt);
   243 {$ELSE}
   244 {$ELSE}
   244 procedure Game;
   245 procedure Game;
   245 {$ENDIF}
   246 {$ENDIF}
   246 var p: TPathType;
   247 var p: TPathType;
   247     s: shortstring;
   248     s: shortstring;
       
   249 {$IFDEF DEBUGFILE}
       
   250     i: LongInt;
       
   251 {$ENDIF}
   248 begin
   252 begin
   249 {$IFDEF HWLIBRARY}
   253 {$IFDEF HWLIBRARY}
   250     initEverything(true);
       
   251 
       
   252     cBits:= 32;
   254     cBits:= 32;
   253     cFullScreen:= false;
   255     cFullScreen:= false;
   254     cVSyncInUse:= true;
   256     cVSyncInUse:= true;
   255     cTimerInterval:= 8;
   257     cTimerInterval:= 8;
   256     PathPrefix:= 'Data';
   258     PathPrefix:= 'Data';
   264     isMusicEnabled:= gameArgs[3] = '1';
   266     isMusicEnabled:= gameArgs[3] = '1';
   265     cLocaleFName:= gameArgs[4];
   267     cLocaleFName:= gameArgs[4];
   266     cAltDamage:= gameArgs[5] = '1';
   268     cAltDamage:= gameArgs[5] = '1';
   267     val(gameArgs[6], cScreenHeight);
   269     val(gameArgs[6], cScreenHeight);
   268     val(gameArgs[7], cScreenWidth);
   270     val(gameArgs[7], cScreenWidth);
   269     cInitHeight:= cScreenHeight;
       
   270     cInitWidth:= cScreenWidth;
       
   271     recordFileName:= gameArgs[8];
   271     recordFileName:= gameArgs[8];
       
   272 {$ENDIF}
       
   273     initEverything(true);
       
   274     WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')');
       
   275 {$IFDEF DEBUGFILE}
       
   276     AddFileLog('Prefix: "' + PathPrefix +'"');
       
   277     for i:= 0 to ParamCount do
       
   278         AddFileLog(inttostr(i) + ': ' + ParamStr(i));
   272 {$ENDIF}
   279 {$ENDIF}
   273 
   280 
   274     for p:= Succ(Low(TPathType)) to High(TPathType) do
   281     for p:= Succ(Low(TPathType)) to High(TPathType) do
   275         if p <> ptMapCurrent then Pathz[p]:= PathPrefix + '/' + Pathz[p];
   282         if p <> ptMapCurrent then Pathz[p]:= PathPrefix + '/' + Pathz[p];
   276         
   283         
   333 
   340 
   334     ParseCommand('rotmask', true);
   341     ParseCommand('rotmask', true);
   335 
   342 
   336     MainLoop();
   343     MainLoop();
   337     OnDestroy();
   344     OnDestroy();
   338 {$IFDEF HWLIBRARY}freeEverything(true);{$ENDIF}
   345     freeEverything(true);
   339     if alsoShutdownFrontend then halt;
   346     if alsoShutdownFrontend then halt;
   340 end;
   347 end;
   341 
   348 
   342 procedure initEverything (complete:boolean);
   349 procedure initEverything (complete:boolean);
   343 begin
   350 begin
   421 
   428 
   422 /////////////////////////
   429 /////////////////////////
   423 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF};
   430 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF};
   424 var Preview: TPreview;
   431 var Preview: TPreview;
   425 begin
   432 begin
       
   433     initEverything(false);
   426 {$IFDEF HWLIBRARY}
   434 {$IFDEF HWLIBRARY}
   427     initEverything(false);
       
   428     WriteLnToConsole('Preview connecting on port ' + inttostr(port));
   435     WriteLnToConsole('Preview connecting on port ' + inttostr(port));
   429     ipcPort:= port;
   436     ipcPort:= port;
   430 {$ENDIF}
   437 {$ENDIF}
   431     InitIPC;
   438     InitIPC;
   432     IPCWaitPongEvent;
   439     IPCWaitPongEvent;
   436     WriteLnToConsole('Sending preview...');
   443     WriteLnToConsole('Sending preview...');
   437     SendIPCRaw(@Preview, sizeof(Preview));
   444     SendIPCRaw(@Preview, sizeof(Preview));
   438     SendIPCRaw(@MaxHedgehogs, sizeof(byte));
   445     SendIPCRaw(@MaxHedgehogs, sizeof(byte));
   439     WriteLnToConsole('Preview sent, disconnect');
   446     WriteLnToConsole('Preview sent, disconnect');
   440     CloseIPC();
   447     CloseIPC();
   441 {$IFDEF HWLIBRARY}
       
   442     freeEverything(false);
   448     freeEverything(false);
   443 {$ENDIF}
       
   444 end;
   449 end;
   445 
   450 
   446 {$IFNDEF HWLIBRARY}
   451 {$IFNDEF HWLIBRARY}
   447 /////////////////////
   452 /////////////////////
   448 procedure DisplayUsage;
   453 procedure DisplayUsage;
   466     WriteLn();
   471     WriteLn();
   467 end;
   472 end;
   468 
   473 
   469 ////////////////////
   474 ////////////////////
   470 procedure GetParams;
   475 procedure GetParams;
   471 {$IFDEF DEBUGFILE}
       
   472 var i: LongInt;
       
   473 {$ENDIF}
       
   474 begin
   476 begin
   475     case ParamCount of
   477     case ParamCount of
   476         18: begin
   478         18: begin
   477             val(ParamStr(2), cScreenWidth);
   479             val(ParamStr(2), cScreenWidth);
   478             val(ParamStr(3), cScreenHeight);
   480             val(ParamStr(3), cScreenHeight);
   479             cInitWidth:= cScreenWidth;
       
   480             cInitHeight:= cScreenHeight;
       
   481             cBitsStr:= ParamStr(4);
   481             cBitsStr:= ParamStr(4);
   482             val(cBitsStr, cBits);
   482             val(cBitsStr, cBits);
   483             val(ParamStr(5), ipcPort);
   483             val(ParamStr(5), ipcPort);
   484             cFullScreen:= ParamStr(6) = '1';
   484             cFullScreen:= ParamStr(6) = '1';
   485             isSoundEnabled:= ParamStr(7) = '1';
   485             isSoundEnabled:= ParamStr(7) = '1';
   515 
   515 
   516             if ParamStr(3) = '--set-video'  then
   516             if ParamStr(3) = '--set-video'  then
   517             begin
   517             begin
   518                 val(ParamStr(4), cScreenWidth);
   518                 val(ParamStr(4), cScreenWidth);
   519                 val(ParamStr(5), cScreenHeight);
   519                 val(ParamStr(5), cScreenHeight);
   520                 cInitWidth:= cScreenWidth;
       
   521                 cInitHeight:= cScreenHeight;
       
   522                 cBitsStr:= ParamStr(6);
   520                 cBitsStr:= ParamStr(6);
   523                 val(cBitsStr, cBits);
   521                 val(cBitsStr, cBits);
   524             end
   522             end
   525             else
   523             else
   526             begin
   524             begin
   548 
   546 
   549             if ParamStr(3) = '--set-multimedia' then
   547             if ParamStr(3) = '--set-multimedia' then
   550             begin
   548             begin
   551                 val(ParamStr(4), cScreenWidth);
   549                 val(ParamStr(4), cScreenWidth);
   552                 val(ParamStr(5), cScreenHeight);
   550                 val(ParamStr(5), cScreenHeight);
   553                 cInitWidth:= cScreenWidth;
       
   554                 cInitHeight:= cScreenHeight;
       
   555                 cBitsStr:= ParamStr(6);
   551                 cBitsStr:= ParamStr(6);
   556                 val(cBitsStr, cBits);
   552                 val(cBitsStr, cBits);
   557                 val(ParamStr(7), cInitVolume);
   553                 val(ParamStr(7), cInitVolume);
   558                 isMusicEnabled:= ParamStr(8) = '1';
   554                 isMusicEnabled:= ParamStr(8) = '1';
   559                 isSoundEnabled:= ParamStr(9) = '1';
   555                 isSoundEnabled:= ParamStr(9) = '1';
   567             recordFileName:= ParamStr(2);
   563             recordFileName:= ParamStr(2);
   568             if ParamStr(3) = '--set-everything' then
   564             if ParamStr(3) = '--set-everything' then
   569             begin
   565             begin
   570                 val(ParamStr(4), cScreenWidth);
   566                 val(ParamStr(4), cScreenWidth);
   571                 val(ParamStr(5), cScreenHeight);
   567                 val(ParamStr(5), cScreenHeight);
   572                 cInitWidth:= cScreenWidth;
       
   573                 cInitHeight:= cScreenHeight;
       
   574                 cBitsStr:= ParamStr(6);
   568                 cBitsStr:= ParamStr(6);
   575                 val(cBitsStr, cBits);
   569                 val(cBitsStr, cBits);
   576                 val(ParamStr(7), cInitVolume);
   570                 val(ParamStr(7), cInitVolume);
   577                 isMusicEnabled:= ParamStr(8) = '1';
   571                 isMusicEnabled:= ParamStr(8) = '1';
   578                 isSoundEnabled:= ParamStr(9) = '1';
   572                 isSoundEnabled:= ParamStr(9) = '1';
   588             end
   582             end
   589             else GameType:= gmtSyntax;
   583             else GameType:= gmtSyntax;
   590         end;
   584         end;
   591         else GameType:= gmtSyntax;
   585         else GameType:= gmtSyntax;
   592     end;
   586     end;
   593 
       
   594 {$IFDEF DEBUGFILE}
       
   595     AddFileLog('Prefix: "' + PathPrefix +'"');
       
   596     for i:= 0 to ParamCount do
       
   597         AddFileLog(inttostr(i) + ': ' + ParamStr(i));
       
   598 {$ENDIF}
       
   599 end;
   587 end;
   600 
   588 
   601 ////////////////////////////////////////////////////////////////////////////////
   589 ////////////////////////////////////////////////////////////////////////////////
   602 /////////////////////////////// m a i n ////////////////////////////////////////
   590 /////////////////////////////// m a i n ////////////////////////////////////////
   603 ////////////////////////////////////////////////////////////////////////////////
   591 ////////////////////////////////////////////////////////////////////////////////
   604 begin
   592 begin
   605     initEverything(true);
       
   606     WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')');
       
   607     
       
   608     GetParams();
   593     GetParams();
   609 
   594 
   610     if GameType = gmtLandPreview then GenLandPreview()
   595     if GameType = gmtLandPreview then GenLandPreview()
   611     else if GameType = gmtSyntax then DisplayUsage()
   596     else if GameType = gmtSyntax then DisplayUsage()
   612     else Game();
   597     else Game();
   613     
   598     
   614     freeEverything(true);
       
   615     if GameType = gmtSyntax then
   599     if GameType = gmtSyntax then
   616         ExitCode:= 1
   600         ExitCode:= 1
   617     else
   601     else
   618         ExitCode:= 0;
   602         ExitCode:= 0;
   619 {$ENDIF}
   603 {$ENDIF}