40 procedure Game(gameArgs: PPChar); cdecl; export; |
40 procedure Game(gameArgs: PPChar); cdecl; export; |
41 procedure GenLandPreview(port: Longint); cdecl; export; |
41 procedure GenLandPreview(port: Longint); cdecl; export; |
42 |
42 |
43 implementation |
43 implementation |
44 {$ELSE} |
44 {$ELSE} |
45 procedure OnDestroy; forward; |
|
46 procedure initEverything(complete:boolean); forward; |
45 procedure initEverything(complete:boolean); forward; |
47 procedure freeEverything(complete:boolean); forward; |
46 procedure freeEverything(complete:boolean); forward; |
48 {$ENDIF} |
47 {$ENDIF} |
49 |
48 |
50 //////////////////////////////// |
49 //////////////////////////////// |
381 end |
362 end |
382 else |
363 else |
383 LoadRecordFromFile(recordFileName); |
364 LoadRecordFromFile(recordFileName); |
384 |
365 |
385 ScriptOnGameInit; |
366 ScriptOnGameInit; |
386 |
|
387 s:= 'eproto ' + inttostr(cNetProtoVersion); |
367 s:= 'eproto ' + inttostr(cNetProtoVersion); |
388 SendIPCRaw(@s[0], Length(s) + 1); // send proto version |
368 SendIPCRaw(@s[0], Length(s) + 1); // send proto version |
389 |
369 |
390 InitTeams(); |
370 InitTeams(); |
391 AssignStores(); |
371 AssignStores(); |
392 InitSound(); |
372 InitSound(); |
393 |
373 |
394 isDeveloperMode:= false; |
374 isDeveloperMode:= false; |
395 TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); |
375 TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); |
396 ParseCommand('rotmask', true); |
376 ParseCommand('rotmask', true); |
397 |
|
398 MainLoop(); |
377 MainLoop(); |
399 |
378 |
400 // clean up SDL and GL context |
379 // clean up all the memory allocated |
401 OnDestroy(); |
|
402 // clean up all the other memory allocated |
|
403 freeEverything(true); |
380 freeEverything(true); |
404 if alsoShutdownFrontend then |
381 if alsoShutdownFrontend then |
405 halt; |
382 halt; |
406 end; |
383 end; |
407 |
384 |
412 if complete then |
389 if complete then |
413 cLogfileBase:= 'game' |
390 cLogfileBase:= 'game' |
414 else |
391 else |
415 cLogfileBase:= 'preview'; |
392 cLogfileBase:= 'preview'; |
416 |
393 |
417 // uConsts does not need initialization as they are all consts |
394 uUtils.initModule; // this opens the debug file, must be the first |
418 uUtils.initModule; |
|
419 uMisc.initModule; |
395 uMisc.initModule; |
420 uVariables.initModule; |
396 uVariables.initModule; |
421 uConsole.initModule; // MUST happen after uMisc |
397 uConsole.initModule; |
422 uCommands.initModule; |
398 uCommands.initModule; |
423 uCommandHandlers.initModule; |
399 uCommandHandlers.initModule; |
424 |
400 |
425 uLand.initModule; |
401 uLand.initModule; |
426 uLandPainted.initModule; |
402 uLandPainted.initModule; |
427 |
|
428 uIO.initModule; |
403 uIO.initModule; |
429 |
404 |
430 if complete then |
405 if complete then |
431 begin |
406 begin |
432 {$IFDEF ANDROID}GLUnit.init;{$ENDIF} |
407 {$IFDEF ANDROID}GLUnit.init;{$ENDIF} |
433 {$IFDEF SDL13}uTouch.initModule;{$ENDIF} |
408 {$IFDEF SDL13}uTouch.initModule;{$ENDIF} |
434 uAI.initModule; |
409 uAI.initModule; |
435 //uAIActions does not need initialization |
410 //uAIActions does not need initialization |
436 //uAIAmmoTests does not need initialization |
411 //uAIAmmoTests does not need initialization |
454 uStore.initModule; |
429 uStore.initModule; |
455 uTeams.initModule; |
430 uTeams.initModule; |
456 uVisualGears.initModule; |
431 uVisualGears.initModule; |
457 uWorld.initModule; |
432 uWorld.initModule; |
458 uCaptions.initModule; |
433 uCaptions.initModule; |
459 end; |
434 end; |
460 end; |
435 end; |
461 |
436 |
462 procedure freeEverything (complete:boolean); |
437 procedure freeEverything (complete:boolean); |
463 begin |
438 begin |
464 if complete then |
439 if complete then |
465 begin |
440 begin |
|
441 WriteLnToConsole('Freeing resources...'); |
|
442 uAI.freeModule; |
|
443 uAIMisc.freeModule; //stub |
466 uCaptions.freeModule; |
444 uCaptions.freeModule; |
467 uWorld.freeModule; |
445 uWorld.freeModule; |
468 uVisualGears.freeModule; |
446 uVisualGears.freeModule; |
469 uTeams.freeModule; |
447 uTeams.freeModule; |
470 uStore.freeModule; //stub |
448 uInputHandler.freeModule; |
471 uStats.freeModule; //stub |
449 uStats.freeModule; //stub |
472 uSound.freeModule; |
450 uSound.freeModule; |
473 uScript.freeModule; |
451 uScript.freeModule; |
474 uRandom.freeModule; //stub |
452 uRandom.freeModule; //stub |
475 //uLocale does not need to be freed |
453 //uLocale does not need to be freed |
476 //uLandTemplates does not need to be freed |
454 //uLandTemplates does not need to be freed |
477 uLandTexture.freeModule; |
455 uLandTexture.freeModule; |
478 //uLandObjects does not need to be freed |
456 //uLandObjects does not need to be freed |
479 //uLandGraphics does not need to be freed |
457 //uLandGraphics does not need to be freed |
480 uInputHandler.freeModule; //stub |
|
481 uGears.freeModule; |
458 uGears.freeModule; |
482 //uGame does not need to be freed |
459 //uGame does not need to be freed |
483 //uFloat does not need to be freed |
460 //uFloat does not need to be freed |
484 uCollisions.freeModule; //stub |
461 uCollisions.freeModule; //stub |
485 uChat.freeModule; |
462 uChat.freeModule; |
486 uAmmos.freeModule; |
463 uAmmos.freeModule; |
487 uAIMisc.freeModule; //stub |
|
488 //uAIAmmoTests does not need to be freed |
464 //uAIAmmoTests does not need to be freed |
489 //uAIActions does not need to be freed |
465 //uAIActions does not need to be freed |
490 uAI.freeModule; //stub |
466 uStore.freeModule; |
491 end; |
467 end; |
492 |
468 |
493 uIO.freeModule; //stub |
469 uIO.freeModule; |
494 uLand.freeModule; |
470 uLand.freeModule; |
495 uLandPainted.freeModule; |
471 uLandPainted.freeModule; |
496 |
472 |
497 uCommandHandlers.freeModule; |
473 uCommandHandlers.freeModule; |
498 uCommands.freeModule; |
474 uCommands.freeModule; |
502 uMisc.freeModule; // uMisc closes the debug log. |
478 uMisc.freeModule; // uMisc closes the debug log. |
503 end; |
479 end; |
504 |
480 |
505 ///////////////////////// |
481 ///////////////////////// |
506 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF}; |
482 procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF}; |
507 var |
483 var Preview: TPreview; |
508 Preview: TPreview; |
|
509 begin |
484 begin |
510 initEverything(false); |
485 initEverything(false); |
511 {$IFDEF HWLIBRARY} |
486 {$IFDEF HWLIBRARY} |
512 WriteLnToConsole('Preview connecting on port ' + inttostr(port)); |
487 WriteLnToConsole('Preview connecting on port ' + inttostr(port)); |
513 ipcPort:= port; |
488 ipcPort:= port; |
520 Preview:= GenPreview(); |
495 Preview:= GenPreview(); |
521 WriteLnToConsole('Sending preview...'); |
496 WriteLnToConsole('Sending preview...'); |
522 SendIPCRaw(@Preview, sizeof(Preview)); |
497 SendIPCRaw(@Preview, sizeof(Preview)); |
523 SendIPCRaw(@MaxHedgehogs, sizeof(byte)); |
498 SendIPCRaw(@MaxHedgehogs, sizeof(byte)); |
524 WriteLnToConsole('Preview sent, disconnect'); |
499 WriteLnToConsole('Preview sent, disconnect'); |
525 CloseIPC(); |
|
526 freeEverything(false); |
500 freeEverything(false); |
527 end; |
501 end; |
528 |
502 |
529 {$IFNDEF HWLIBRARY} |
503 {$IFNDEF HWLIBRARY} |
530 ///////////////////// |
504 ///////////////////// |