hedgewars/uScript.pas
branchqmlfrontend
changeset 11071 3851ce4f2061
parent 11066 f10a4bdfa0f4
child 11168 e104e060911b
child 11176 78f9fd42fa46
equal deleted inserted replaced
11050:9b7c8c5a94e0 11071:3851ce4f2061
     1 (*
     1 (*
     2  * Hedgewars, a free turn based strategy game
     2  * Hedgewars, a free turn based strategy game
     3  * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
     3  * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
     4  *
     4  *
     5  * This program is free software; you can redistribute it and/or modify
     5  * This program is free software; you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation; version 2 of the License
     7  * the Free Software Foundation; version 2 of the License
     8  *
     8  *
    85     uLandGraphics,
    85     uLandGraphics,
    86     SysUtils,
    86     SysUtils,
    87     uIO,
    87     uIO,
    88     uVisualGearsList,
    88     uVisualGearsList,
    89     uGearsHandlersMess,
    89     uGearsHandlersMess,
    90     uPhysFSLayer
    90     uPhysFSLayer,
       
    91     SDLh
    91 {$IFNDEF PAS2C}
    92 {$IFNDEF PAS2C}
    92     , typinfo
    93     , typinfo
    93 {$ENDIF}
    94 {$ENDIF}
    94     ;
    95     ;
    95 
    96 
    99     ScriptAmmoDelay : shortstring;
   100     ScriptAmmoDelay : shortstring;
   100     ScriptAmmoReinforcement : shortstring;
   101     ScriptAmmoReinforcement : shortstring;
   101     ScriptLoaded : boolean;
   102     ScriptLoaded : boolean;
   102     mapDims : boolean;
   103     mapDims : boolean;
   103     PointsBuffer: shortstring;
   104     PointsBuffer: shortstring;
       
   105     prevCursorPoint: TPoint;  // why is tpoint still in sdlh...
   104 
   106 
   105 procedure ScriptPrepareAmmoStore; forward;
   107 procedure ScriptPrepareAmmoStore; forward;
   106 procedure ScriptApplyAmmoStore; forward;
   108 procedure ScriptApplyAmmoStore; forward;
   107 procedure ScriptSetAmmo(ammo : TAmmoType; count, probability, delay, reinforcement: Byte); forward;
   109 procedure ScriptSetAmmo(ammo : TAmmoType; count, probability, delay, reinforcement: Byte); forward;
   108 procedure ScriptSetAmmoDelay(ammo : TAmmoType; delay: Byte); forward;
   110 procedure ScriptSetAmmoDelay(ammo : TAmmoType; delay: Byte); forward;
   434         at:= LuaToAmmoTypeOrd(L, 1, call, params);
   436         at:= LuaToAmmoTypeOrd(L, 1, call, params);
   435         if at >= 0 then
   437         if at >= 0 then
   436             ParseCommand('setweap ' + char(at), true, true);
   438             ParseCommand('setweap ' + char(at), true, true);
   437         end;
   439         end;
   438     lc_setweapon:= 0;
   440     lc_setweapon:= 0;
       
   441 end;
       
   442 
       
   443 // no parameter means reset to default (and 0 means unlimited)
       
   444 function lc_setmaxbuilddistance(L : Plua_State) : LongInt; Cdecl;
       
   445 var np: LongInt;
       
   446 const
       
   447     call = 'SetMaxBuildDistance';
       
   448     params = '[ distInPx ]';
       
   449 begin
       
   450     if CheckAndFetchParamCountRange(L, 0, 1, call, params, np) then
       
   451         begin
       
   452         if np = 0 then
       
   453             begin
       
   454             // no args? reset
       
   455             cBuildMaxDist:= cDefaultBuildMaxDist;
       
   456             end
       
   457         else
       
   458             CBuildMaxDist:= lua_tointeger(L, 1);
       
   459         end;
       
   460     lc_setmaxbuilddistance:= 0;
   439 end;
   461 end;
   440 
   462 
   441 // sets weapon to whatever weapons is next (wraps around, amSkip is skipped)
   463 // sets weapon to whatever weapons is next (wraps around, amSkip is skipped)
   442 function lc_setnextweapon(L : Plua_State) : LongInt; Cdecl;
   464 function lc_setnextweapon(L : Plua_State) : LongInt; Cdecl;
   443 var at          : LongInt;
   465 var at          : LongInt;
  1209         end;
  1231         end;
  1210 
  1232 
  1211     lc_setclancolor:= 0
  1233     lc_setclancolor:= 0
  1212 end;
  1234 end;
  1213 
  1235 
       
  1236 function lc_gethogvoicepack(L : Plua_State) : LongInt; Cdecl;
       
  1237 var gear : PGear;
       
  1238 begin
       
  1239     if CheckLuaParamCount(L, 1, 'GetHogVoicepack', 'gearUid') then
       
  1240         begin
       
  1241         gear:= GearByUID(lua_tointeger(L, 1));
       
  1242         if (gear <> nil) and (gear^.Kind = gtHedgehog) and (gear^.Hedgehog <> nil) then
       
  1243             lua_pushstring(L, str2pchar(gear^.Hedgehog^.Team^.Voicepack^.name))
       
  1244         else
       
  1245             lua_pushnil(L);
       
  1246         end
       
  1247     else
       
  1248         lua_pushnil(L); // return value on stack (nil)
       
  1249     lc_gethogvoicepack:= 1
       
  1250 end;
       
  1251 
       
  1252 function lc_gethoggrave(L : Plua_State) : LongInt; Cdecl;
       
  1253 var gear : PGear;
       
  1254 begin
       
  1255     if CheckLuaParamCount(L, 1, 'GetHogGrave', 'gearUid') then
       
  1256         begin
       
  1257         gear:= GearByUID(lua_tointeger(L, 1));
       
  1258         if (gear <> nil) and ((gear^.Kind = gtHedgehog) or (gear^.Kind = gtGrave)) and (gear^.Hedgehog <> nil) then
       
  1259             lua_pushstring(L, str2pchar(gear^.Hedgehog^.Team^.GraveName))
       
  1260         else
       
  1261             lua_pushnil(L);
       
  1262         end
       
  1263     else
       
  1264         lua_pushnil(L); // return value on stack (nil)
       
  1265     lc_gethoggrave:= 1
       
  1266 end;
       
  1267 
       
  1268 function lc_gethogflag(L : Plua_State) : LongInt; Cdecl;
       
  1269 var gear : PGear;
       
  1270 begin
       
  1271     if CheckLuaParamCount(L, 1, 'GetHogFlag', 'gearUid') then
       
  1272         begin
       
  1273         gear:= GearByUID(lua_tointeger(L, 1));
       
  1274         if (gear <> nil) and (gear^.Kind = gtHedgehog) and (gear^.Hedgehog <> nil) then
       
  1275             lua_pushstring(L, str2pchar(gear^.Hedgehog^.Team^.Flag))
       
  1276         else
       
  1277             lua_pushnil(L);
       
  1278         end
       
  1279     else
       
  1280         lua_pushnil(L); // return value on stack (nil)
       
  1281     lc_gethogflag:= 1
       
  1282 end;
       
  1283 
  1214 function lc_gethogteamname(L : Plua_State) : LongInt; Cdecl;
  1284 function lc_gethogteamname(L : Plua_State) : LongInt; Cdecl;
  1215 var gear : PGear;
  1285 var gear : PGear;
  1216 begin
  1286 begin
  1217     if CheckLuaParamCount(L, 1, 'GetHogTeamName', 'gearUid') then
  1287     if CheckLuaParamCount(L, 1, 'GetHogTeamName', 'gearUid') then
  1218         begin
  1288         begin
  1412             if vgear <> nil then
  1482             if vgear <> nil then
  1413                begin
  1483                begin
  1414                vgear^.Text:= lua_tostring(L, 2);
  1484                vgear^.Text:= lua_tostring(L, 2);
  1415                if Gear^.Kind = gtHedgehog then
  1485                if Gear^.Kind = gtHedgehog then
  1416                    begin
  1486                    begin
  1417                    AddChatString(#1+'[' + gear^.Hedgehog^.Name + '] '+vgear^.text);
  1487                    AddChatString(#9+'[' + gear^.Hedgehog^.Name + '] '+vgear^.text);
  1418                    vgear^.Hedgehog:= gear^.Hedgehog
  1488                    vgear^.Hedgehog:= gear^.Hedgehog
  1419                    end
  1489                    end
  1420                else vgear^.Frame:= gear^.uid;
  1490                else vgear^.Frame:= gear^.uid;
  1421 
  1491 
  1422                vgear^.FrameTicks:= lua_tointeger(L, 3);
  1492                vgear^.FrameTicks:= lua_tointeger(L, 3);
  2224         if not lua_isnoneornil(L, 8) then
  2294         if not lua_isnoneornil(L, 8) then
  2225 	        flipVert := lua_toboolean(L, 8)
  2295 	        flipVert := lua_toboolean(L, 8)
  2226         else flipVert := false;
  2296         else flipVert := false;
  2227         lf:= 0;
  2297         lf:= 0;
  2228 
  2298 
  2229         // accept any amount of landflags, loop is never executed if n>6
  2299         // accept any amount of landflags, loop is never executed if n<9
  2230         for i:= 9 to n do
  2300         for i:= 9 to n do
  2231             lf:= lf or lua_tointeger(L, i);
  2301             lf:= lf or lua_tointeger(L, i);
  2232 
  2302 
  2233         n:= LuaToSpriteOrd(L, 3, call, params);
  2303         n:= LuaToSpriteOrd(L, 3, call, params);
  2234         if n >= 0 then
  2304         if n >= 0 then
  2253     lf    : Word;
  2323     lf    : Word;
  2254     i, n : LongInt;
  2324     i, n : LongInt;
  2255     eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean;
  2325     eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean;
  2256 const
  2326 const
  2257     call = 'EraseSprite';
  2327     call = 'EraseSprite';
  2258     params = 'x, y, sprite, frameIdx, eraseOnLFMatch, flipHoriz, flipVert, [, landFlag, ... ]';
  2328     params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert, [, landFlag, ... ]';
  2259 begin
  2329 begin
  2260     if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then
  2330     if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then
  2261         begin
  2331         begin
  2262         if not lua_isnoneornil(L, 5) then
  2332         if not lua_isnoneornil(L, 5) then
  2263 	        eraseOnLFMatch := lua_toboolean(L, 5)
  2333 	        eraseOnLFMatch := lua_toboolean(L, 5)
  2271         if not lua_isnoneornil(L, 8) then
  2341         if not lua_isnoneornil(L, 8) then
  2272 	        flipVert := lua_toboolean(L, 8)
  2342 	        flipVert := lua_toboolean(L, 8)
  2273         else flipVert := false;
  2343         else flipVert := false;
  2274         lf:= 0;
  2344         lf:= 0;
  2275 
  2345 
  2276         // accept any amount of landflags, loop is never executed if n>6
  2346         // accept any amount of landflags, loop is never executed if n<9
  2277         for i:= 9 to n do
  2347         for i:= 9 to n do
  2278             lf:= lf or lua_tointeger(L, i);
  2348             lf:= lf or lua_tointeger(L, i);
  2279 
  2349 
  2280         n:= LuaToSpriteOrd(L, 3, call, params);
  2350         n:= LuaToSpriteOrd(L, 3, call, params);
  2281         if n >= 0 then
  2351         if n >= 0 then
  2420             end
  2490             end
  2421         end;
  2491         end;
  2422     lc_setwaterline:= 0
  2492     lc_setwaterline:= 0
  2423 end;
  2493 end;
  2424 
  2494 
  2425 function lc_setaihintsongear(L : Plua_State) : LongInt; Cdecl;
  2495 function lc_setgearaihints(L : Plua_State) : LongInt; Cdecl;
  2426 var gear: PGear;
  2496 var gear: PGear;
  2427 begin
  2497 begin
  2428     if CheckLuaParamCount(L, 2, 'SetAIHintOnGear', 'gearUid, aiHints') then
  2498     if CheckLuaParamCount(L, 2, 'SetAIHintOnGear', 'gearUid, aiHints') then
  2429         begin
  2499         begin
  2430         gear:= GearByUID(lua_tointeger(L, 1));
  2500         gear:= GearByUID(lua_tointeger(L, 1));
  2431         if gear <> nil then
  2501         if gear <> nil then
  2432             gear^.aihints:= lua_tointeger(L, 2);
  2502             gear^.aihints:= lua_tointeger(L, 2);
  2433         end;
  2503         end;
  2434     lc_setaihintsongear:= 0
  2504     lc_setgearaihints:= 0
  2435 end;
  2505 end;
  2436 
  2506 
  2437 
  2507 
  2438 function lc_hedgewarsscriptload(L : Plua_State) : LongInt; Cdecl;
  2508 function lc_hedgewarsscriptload(L : Plua_State) : LongInt; Cdecl;
  2439 begin
  2509 begin
  2595 
  2665 
  2596 ScriptSetString('Seed', cSeed);
  2666 ScriptSetString('Seed', cSeed);
  2597 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2667 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2598 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2668 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2599 ScriptSetInteger('MapGen', ord(cMapGen));
  2669 ScriptSetInteger('MapGen', ord(cMapGen));
       
  2670 ScriptSetInteger('MapFeatureSize', cFeatureSize);
  2600 
  2671 
  2601 ScriptCall('onPreviewInit');
  2672 ScriptCall('onPreviewInit');
  2602 
  2673 
  2603 // pop game variables
  2674 // pop game variables
  2604 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2675 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2605 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2676 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2606 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2677 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2607 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
  2678 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
       
  2679 cFeatureSize     := ScriptGetInteger('MapFeatureSize');
  2608 end;
  2680 end;
  2609 
  2681 
  2610 procedure ScriptOnGameInit;
  2682 procedure ScriptOnGameInit;
  2611 var i, j, k: LongInt;
  2683 var i, j, k: LongInt;
  2612 begin
  2684 begin
  2613 // not required if there is no script to run
  2685 // not required if there is no script to run
  2614 if not ScriptLoaded then
  2686 if not ScriptLoaded then
  2615     exit;
  2687     exit;
  2616 
  2688 
  2617 // push game variables so they may be modified by the script
  2689 // push game variables so they may be modified by the script
       
  2690 ScriptSetInteger('CursorX', CursorPoint.X);
       
  2691 ScriptSetInteger('CursorY', CursorPoint.Y);
  2618 ScriptSetInteger('BorderColor', ExplosionBorderColor);
  2692 ScriptSetInteger('BorderColor', ExplosionBorderColor);
  2619 ScriptSetInteger('GameFlags', GameFlags);
  2693 ScriptSetInteger('GameFlags', GameFlags);
  2620 ScriptSetString('Seed', cSeed);
  2694 ScriptSetString('Seed', cSeed);
  2621 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2695 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2622 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2696 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2623 ScriptSetInteger('MapGen', ord(cMapGen));
  2697 ScriptSetInteger('MapGen', ord(cMapGen));
       
  2698 ScriptSetInteger('MapFeatureSize', cFeatureSize);
  2624 ScriptSetInteger('ScreenHeight', cScreenHeight);
  2699 ScriptSetInteger('ScreenHeight', cScreenHeight);
  2625 ScriptSetInteger('ScreenWidth', cScreenWidth);
  2700 ScriptSetInteger('ScreenWidth', cScreenWidth);
  2626 ScriptSetInteger('TurnTime', cHedgehogTurnTime);
  2701 ScriptSetInteger('TurnTime', cHedgehogTurnTime);
  2627 ScriptSetInteger('CaseFreq', cCaseFactor);
  2702 ScriptSetInteger('CaseFreq', cCaseFactor);
  2628 ScriptSetInteger('HealthCaseProb', cHealthCaseProb);
  2703 ScriptSetInteger('HealthCaseProb', cHealthCaseProb);
  2648 // pop game variables
  2723 // pop game variables
  2649 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2724 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2650 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2725 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2651 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2726 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2652 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
  2727 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
       
  2728 cFeatureSize     := ScriptGetInteger('MapFeatureSize');
  2653 GameFlags        := ScriptGetInteger('GameFlags');
  2729 GameFlags        := ScriptGetInteger('GameFlags');
  2654 cHedgehogTurnTime:= ScriptGetInteger('TurnTime');
  2730 cHedgehogTurnTime:= ScriptGetInteger('TurnTime');
  2655 cCaseFactor      := ScriptGetInteger('CaseFreq');
  2731 cCaseFactor      := ScriptGetInteger('CaseFreq');
  2656 cHealthCaseProb  := ScriptGetInteger('HealthCaseProb');
  2732 cHealthCaseProb  := ScriptGetInteger('HealthCaseProb');
  2657 cHealthCaseAmount:= ScriptGetInteger('HealthCaseAmount');
  2733 cHealthCaseAmount:= ScriptGetInteger('HealthCaseAmount');
  2771 begin
  2847 begin
  2772 ScriptSetInteger('TurnTimeLeft', TurnTimeLeft);
  2848 ScriptSetInteger('TurnTimeLeft', TurnTimeLeft);
  2773 ScriptSetInteger('GameTime', GameTicks);
  2849 ScriptSetInteger('GameTime', GameTicks);
  2774 ScriptSetInteger('TotalRounds', TotalRounds);
  2850 ScriptSetInteger('TotalRounds', TotalRounds);
  2775 ScriptSetInteger('WaterLine', cWaterLine);
  2851 ScriptSetInteger('WaterLine', cWaterLine);
       
  2852 if isCursorVisible and (not bShowAmmoMenu) then
       
  2853     begin
       
  2854     if (prevCursorPoint.X <> CursorPoint.X) or 
       
  2855        (prevCursorPoint.Y <> CursorPoint.Y) then
       
  2856         begin
       
  2857         ScriptSetInteger('CursorX', CursorPoint.X - WorldDx);
       
  2858         ScriptSetInteger('CursorY', cScreenHeight - CursorPoint.Y- WorldDy);
       
  2859         prevCursorPoint.X:= CursorPoint.X;
       
  2860         prevCursorPoint.Y:= CursorPoint.Y;
       
  2861         end
       
  2862     end
       
  2863 else
       
  2864     begin
       
  2865     ScriptSetInteger('CursorX', NoPointX);
       
  2866     ScriptSetInteger('CursorY', NoPointX);
       
  2867     prevCursorPoint.X:= NoPointX;
       
  2868     prevCursorPoint.Y:= NoPointX
       
  2869     end;
       
  2870 
  2776 if not mapDims then
  2871 if not mapDims then
  2777     begin
  2872     begin
  2778     mapDims:= true;
  2873     mapDims:= true;
  2779     ScriptSetInteger('LAND_WIDTH', LAND_WIDTH);
  2874     ScriptSetInteger('LAND_WIDTH', LAND_WIDTH);
  2780     ScriptSetInteger('LAND_HEIGHT', LAND_HEIGHT);
  2875     ScriptSetInteger('LAND_HEIGHT', LAND_HEIGHT);
  3083 ScriptSetInteger('gstHHDriven'      , gstHHDriven);
  3178 ScriptSetInteger('gstHHDriven'      , gstHHDriven);
  3084 ScriptSetInteger('gstMoving'        , gstMoving);
  3179 ScriptSetInteger('gstMoving'        , gstMoving);
  3085 ScriptSetInteger('gstAttacked'      , gstAttacked);
  3180 ScriptSetInteger('gstAttacked'      , gstAttacked);
  3086 ScriptSetInteger('gstAttacking'     , gstAttacking);
  3181 ScriptSetInteger('gstAttacking'     , gstAttacking);
  3087 ScriptSetInteger('gstCollision'     , gstCollision);
  3182 ScriptSetInteger('gstCollision'     , gstCollision);
  3088 ScriptSetInteger('gstChooseTarget', gstChooseTarget);
  3183 ScriptSetInteger('gstChooseTarget'  , gstChooseTarget);
  3089 ScriptSetInteger('gstHHJumping'     , gstHHJumping);
  3184 ScriptSetInteger('gstHHJumping'     , gstHHJumping);
  3090 ScriptSetInteger('gsttmpFlag'       , gsttmpFlag);
  3185 ScriptSetInteger('gsttmpFlag'       , gsttmpFlag);
  3091 ScriptSetInteger('gstHHThinking'    , gstHHThinking);
  3186 ScriptSetInteger('gstHHThinking'    , gstHHThinking);
  3092 ScriptSetInteger('gstNoDamage'      , gstNoDamage);
  3187 ScriptSetInteger('gstNoDamage'      , gstNoDamage);
  3093 ScriptSetInteger('gstHHHJump'       , gstHHHJump);
  3188 ScriptSetInteger('gstHHHJump'       , gstHHHJump);
  3097 ScriptSetInteger('gstWait'          , gstWait);
  3192 ScriptSetInteger('gstWait'          , gstWait);
  3098 ScriptSetInteger('gstNotKickable'   , gstNotKickable);
  3193 ScriptSetInteger('gstNotKickable'   , gstNotKickable);
  3099 ScriptSetInteger('gstLoser'         , gstLoser);
  3194 ScriptSetInteger('gstLoser'         , gstLoser);
  3100 ScriptSetInteger('gstHHGone'        , gstHHGone);
  3195 ScriptSetInteger('gstHHGone'        , gstHHGone);
  3101 ScriptSetInteger('gstInvisible'     , gstInvisible);
  3196 ScriptSetInteger('gstInvisible'     , gstInvisible);
       
  3197 ScriptSetInteger('gstSubmersible'   , gstSubmersible);
       
  3198 ScriptSetInteger('gstFrozen'        , gstFrozen);
       
  3199 ScriptSetInteger('gstNoGravity'     , gstNoGravity);
  3102 
  3200 
  3103 // ai hints
  3201 // ai hints
  3104 ScriptSetInteger('aihUsualProcessing', aihUsualProcessing);
  3202 ScriptSetInteger('aihUsualProcessing', aihUsualProcessing);
  3105 ScriptSetInteger('aihDoesntMatter'   , aihDoesntMatter);
  3203 ScriptSetInteger('aihDoesntMatter'   , aihDoesntMatter);
  3106 
  3204 
  3168 lua_register(luaState, _P'SetEffect', @lc_seteffect);
  3266 lua_register(luaState, _P'SetEffect', @lc_seteffect);
  3169 lua_register(luaState, _P'GetEffect', @lc_geteffect);
  3267 lua_register(luaState, _P'GetEffect', @lc_geteffect);
  3170 lua_register(luaState, _P'GetHogClan', @lc_gethogclan);
  3268 lua_register(luaState, _P'GetHogClan', @lc_gethogclan);
  3171 lua_register(luaState, _P'GetClanColor', @lc_getclancolor);
  3269 lua_register(luaState, _P'GetClanColor', @lc_getclancolor);
  3172 lua_register(luaState, _P'SetClanColor', @lc_setclancolor);
  3270 lua_register(luaState, _P'SetClanColor', @lc_setclancolor);
       
  3271 lua_register(luaState, _P'GetHogVoicepack', @lc_gethogvoicepack);
       
  3272 lua_register(luaState, _P'GetHogFlag', @lc_gethogflag);
       
  3273 lua_register(luaState, _P'GetHogGrave', @lc_gethoggrave);
  3173 lua_register(luaState, _P'GetHogTeamName', @lc_gethogteamname);
  3274 lua_register(luaState, _P'GetHogTeamName', @lc_gethogteamname);
  3174 lua_register(luaState, _P'SetHogTeamName', @lc_sethogteamname);
  3275 lua_register(luaState, _P'SetHogTeamName', @lc_sethogteamname);
  3175 lua_register(luaState, _P'GetHogName', @lc_gethogname);
  3276 lua_register(luaState, _P'GetHogName', @lc_gethogname);
  3176 lua_register(luaState, _P'SetHogName', @lc_sethogname);
  3277 lua_register(luaState, _P'SetHogName', @lc_sethogname);
  3177 lua_register(luaState, _P'GetHogLevel', @lc_gethoglevel);
  3278 lua_register(luaState, _P'GetHogLevel', @lc_gethoglevel);
  3222 lua_register(luaState, _P'GetGravity', @lc_getgravity);
  3323 lua_register(luaState, _P'GetGravity', @lc_getgravity);
  3223 lua_register(luaState, _P'SetGravity', @lc_setgravity);
  3324 lua_register(luaState, _P'SetGravity', @lc_setgravity);
  3224 lua_register(luaState, _P'SetWaterLine', @lc_setwaterline);
  3325 lua_register(luaState, _P'SetWaterLine', @lc_setwaterline);
  3225 lua_register(luaState, _P'SetNextWeapon', @lc_setnextweapon);
  3326 lua_register(luaState, _P'SetNextWeapon', @lc_setnextweapon);
  3226 lua_register(luaState, _P'SetWeapon', @lc_setweapon);
  3327 lua_register(luaState, _P'SetWeapon', @lc_setweapon);
       
  3328 lua_register(luaState, _P'SetMaxBuildDistance', @lc_setmaxbuilddistance);
  3227 // drawn map functions
  3329 // drawn map functions
  3228 lua_register(luaState, _P'AddPoint', @lc_addPoint);
  3330 lua_register(luaState, _P'AddPoint', @lc_addPoint);
  3229 lua_register(luaState, _P'FlushPoints', @lc_flushPoints);
  3331 lua_register(luaState, _P'FlushPoints', @lc_flushPoints);
  3230 
  3332 
  3231 lua_register(luaState, _P'SetGearAIHints', @lc_setaihintsongear);
  3333 lua_register(luaState, _P'SetGearAIHints', @lc_setgearaihints);
  3232 lua_register(luaState, _P'HedgewarsScriptLoad', @lc_hedgewarsscriptload);
  3334 lua_register(luaState, _P'HedgewarsScriptLoad', @lc_hedgewarsscriptload);
  3233 lua_register(luaState, _P'DeclareAchievement', @lc_declareachievement);
  3335 lua_register(luaState, _P'DeclareAchievement', @lc_declareachievement);
  3234 
  3336 
  3235 ScriptSetInteger('TEST_SUCCESSFUL'   , HaltTestSuccess);
  3337 ScriptSetInteger('TEST_SUCCESSFUL'   , HaltTestSuccess);
  3236 ScriptSetInteger('TEST_FAILED'       , HaltTestFailed);
  3338 ScriptSetInteger('TEST_FAILED'       , HaltTestFailed);
  3327 
  3429 
  3328 procedure initModule;
  3430 procedure initModule;
  3329 begin
  3431 begin
  3330 mapDims:= false;
  3432 mapDims:= false;
  3331 PointsBuffer:= '';
  3433 PointsBuffer:= '';
       
  3434 prevCursorPoint.X:= NoPointX;
       
  3435 prevCursorPoint.Y:= 0;
  3332 end;
  3436 end;
  3333 
  3437 
  3334 procedure freeModule;
  3438 procedure freeModule;
  3335 begin
  3439 begin
  3336 end;
  3440 end;