hedgewars/uScript.pas
branchios-revival
changeset 11160 f1f044e88039
parent 11066 f10a4bdfa0f4
child 11172 78f9fd42fa46
equal deleted inserted replaced
11158:797bc8d70e75 11160:f1f044e88039
     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  *
   436         at:= LuaToAmmoTypeOrd(L, 1, call, params);
   436         at:= LuaToAmmoTypeOrd(L, 1, call, params);
   437         if at >= 0 then
   437         if at >= 0 then
   438             ParseCommand('setweap ' + char(at), true, true);
   438             ParseCommand('setweap ' + char(at), true, true);
   439         end;
   439         end;
   440     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;
   441 end;
   461 end;
   442 
   462 
   443 // 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)
   444 function lc_setnextweapon(L : Plua_State) : LongInt; Cdecl;
   464 function lc_setnextweapon(L : Plua_State) : LongInt; Cdecl;
   445 var at          : LongInt;
   465 var at          : LongInt;
  2274         if not lua_isnoneornil(L, 8) then
  2294         if not lua_isnoneornil(L, 8) then
  2275 	        flipVert := lua_toboolean(L, 8)
  2295 	        flipVert := lua_toboolean(L, 8)
  2276         else flipVert := false;
  2296         else flipVert := false;
  2277         lf:= 0;
  2297         lf:= 0;
  2278 
  2298 
  2279         // 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
  2280         for i:= 9 to n do
  2300         for i:= 9 to n do
  2281             lf:= lf or lua_tointeger(L, i);
  2301             lf:= lf or lua_tointeger(L, i);
  2282 
  2302 
  2283         n:= LuaToSpriteOrd(L, 3, call, params);
  2303         n:= LuaToSpriteOrd(L, 3, call, params);
  2284         if n >= 0 then
  2304         if n >= 0 then
  2303     lf    : Word;
  2323     lf    : Word;
  2304     i, n : LongInt;
  2324     i, n : LongInt;
  2305     eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean;
  2325     eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean;
  2306 const
  2326 const
  2307     call = 'EraseSprite';
  2327     call = 'EraseSprite';
  2308     params = 'x, y, sprite, frameIdx, eraseOnLFMatch, flipHoriz, flipVert, [, landFlag, ... ]';
  2328     params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert, [, landFlag, ... ]';
  2309 begin
  2329 begin
  2310     if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then
  2330     if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then
  2311         begin
  2331         begin
  2312         if not lua_isnoneornil(L, 5) then
  2332         if not lua_isnoneornil(L, 5) then
  2313 	        eraseOnLFMatch := lua_toboolean(L, 5)
  2333 	        eraseOnLFMatch := lua_toboolean(L, 5)
  2321         if not lua_isnoneornil(L, 8) then
  2341         if not lua_isnoneornil(L, 8) then
  2322 	        flipVert := lua_toboolean(L, 8)
  2342 	        flipVert := lua_toboolean(L, 8)
  2323         else flipVert := false;
  2343         else flipVert := false;
  2324         lf:= 0;
  2344         lf:= 0;
  2325 
  2345 
  2326         // 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
  2327         for i:= 9 to n do
  2347         for i:= 9 to n do
  2328             lf:= lf or lua_tointeger(L, i);
  2348             lf:= lf or lua_tointeger(L, i);
  2329 
  2349 
  2330         n:= LuaToSpriteOrd(L, 3, call, params);
  2350         n:= LuaToSpriteOrd(L, 3, call, params);
  2331         if n >= 0 then
  2351         if n >= 0 then
  2470             end
  2490             end
  2471         end;
  2491         end;
  2472     lc_setwaterline:= 0
  2492     lc_setwaterline:= 0
  2473 end;
  2493 end;
  2474 
  2494 
  2475 function lc_setaihintsongear(L : Plua_State) : LongInt; Cdecl;
  2495 function lc_setgearaihints(L : Plua_State) : LongInt; Cdecl;
  2476 var gear: PGear;
  2496 var gear: PGear;
  2477 begin
  2497 begin
  2478     if CheckLuaParamCount(L, 2, 'SetAIHintOnGear', 'gearUid, aiHints') then
  2498     if CheckLuaParamCount(L, 2, 'SetAIHintOnGear', 'gearUid, aiHints') then
  2479         begin
  2499         begin
  2480         gear:= GearByUID(lua_tointeger(L, 1));
  2500         gear:= GearByUID(lua_tointeger(L, 1));
  2481         if gear <> nil then
  2501         if gear <> nil then
  2482             gear^.aihints:= lua_tointeger(L, 2);
  2502             gear^.aihints:= lua_tointeger(L, 2);
  2483         end;
  2503         end;
  2484     lc_setaihintsongear:= 0
  2504     lc_setgearaihints:= 0
  2485 end;
  2505 end;
  2486 
  2506 
  2487 
  2507 
  2488 function lc_hedgewarsscriptload(L : Plua_State) : LongInt; Cdecl;
  2508 function lc_hedgewarsscriptload(L : Plua_State) : LongInt; Cdecl;
  2489 begin
  2509 begin
  2645 
  2665 
  2646 ScriptSetString('Seed', cSeed);
  2666 ScriptSetString('Seed', cSeed);
  2647 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2667 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2648 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2668 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2649 ScriptSetInteger('MapGen', ord(cMapGen));
  2669 ScriptSetInteger('MapGen', ord(cMapGen));
       
  2670 ScriptSetInteger('MapFeatureSize', cFeatureSize);
  2650 
  2671 
  2651 ScriptCall('onPreviewInit');
  2672 ScriptCall('onPreviewInit');
  2652 
  2673 
  2653 // pop game variables
  2674 // pop game variables
  2654 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2675 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2655 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2676 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2656 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2677 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2657 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
  2678 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
       
  2679 cFeatureSize     := ScriptGetInteger('MapFeatureSize');
  2658 end;
  2680 end;
  2659 
  2681 
  2660 procedure ScriptOnGameInit;
  2682 procedure ScriptOnGameInit;
  2661 var i, j, k: LongInt;
  2683 var i, j, k: LongInt;
  2662 begin
  2684 begin
  2671 ScriptSetInteger('GameFlags', GameFlags);
  2693 ScriptSetInteger('GameFlags', GameFlags);
  2672 ScriptSetString('Seed', cSeed);
  2694 ScriptSetString('Seed', cSeed);
  2673 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2695 ScriptSetInteger('TemplateFilter', cTemplateFilter);
  2674 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2696 ScriptSetInteger('TemplateNumber', LuaTemplateNumber);
  2675 ScriptSetInteger('MapGen', ord(cMapGen));
  2697 ScriptSetInteger('MapGen', ord(cMapGen));
       
  2698 ScriptSetInteger('MapFeatureSize', cFeatureSize);
  2676 ScriptSetInteger('ScreenHeight', cScreenHeight);
  2699 ScriptSetInteger('ScreenHeight', cScreenHeight);
  2677 ScriptSetInteger('ScreenWidth', cScreenWidth);
  2700 ScriptSetInteger('ScreenWidth', cScreenWidth);
  2678 ScriptSetInteger('TurnTime', cHedgehogTurnTime);
  2701 ScriptSetInteger('TurnTime', cHedgehogTurnTime);
  2679 ScriptSetInteger('CaseFreq', cCaseFactor);
  2702 ScriptSetInteger('CaseFreq', cCaseFactor);
  2680 ScriptSetInteger('HealthCaseProb', cHealthCaseProb);
  2703 ScriptSetInteger('HealthCaseProb', cHealthCaseProb);
  2700 // pop game variables
  2723 // pop game variables
  2701 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2724 ParseCommand('seed ' + ScriptGetString('Seed'), true, true);
  2702 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2725 cTemplateFilter  := ScriptGetInteger('TemplateFilter');
  2703 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2726 LuaTemplateNumber:= ScriptGetInteger('TemplateNumber');
  2704 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
  2727 cMapGen          := TMapGen(ScriptGetInteger('MapGen'));
       
  2728 cFeatureSize     := ScriptGetInteger('MapFeatureSize');
  2705 GameFlags        := ScriptGetInteger('GameFlags');
  2729 GameFlags        := ScriptGetInteger('GameFlags');
  2706 cHedgehogTurnTime:= ScriptGetInteger('TurnTime');
  2730 cHedgehogTurnTime:= ScriptGetInteger('TurnTime');
  2707 cCaseFactor      := ScriptGetInteger('CaseFreq');
  2731 cCaseFactor      := ScriptGetInteger('CaseFreq');
  2708 cHealthCaseProb  := ScriptGetInteger('HealthCaseProb');
  2732 cHealthCaseProb  := ScriptGetInteger('HealthCaseProb');
  2709 cHealthCaseAmount:= ScriptGetInteger('HealthCaseAmount');
  2733 cHealthCaseAmount:= ScriptGetInteger('HealthCaseAmount');
  3154 ScriptSetInteger('gstHHDriven'      , gstHHDriven);
  3178 ScriptSetInteger('gstHHDriven'      , gstHHDriven);
  3155 ScriptSetInteger('gstMoving'        , gstMoving);
  3179 ScriptSetInteger('gstMoving'        , gstMoving);
  3156 ScriptSetInteger('gstAttacked'      , gstAttacked);
  3180 ScriptSetInteger('gstAttacked'      , gstAttacked);
  3157 ScriptSetInteger('gstAttacking'     , gstAttacking);
  3181 ScriptSetInteger('gstAttacking'     , gstAttacking);
  3158 ScriptSetInteger('gstCollision'     , gstCollision);
  3182 ScriptSetInteger('gstCollision'     , gstCollision);
  3159 ScriptSetInteger('gstChooseTarget', gstChooseTarget);
  3183 ScriptSetInteger('gstChooseTarget'  , gstChooseTarget);
  3160 ScriptSetInteger('gstHHJumping'     , gstHHJumping);
  3184 ScriptSetInteger('gstHHJumping'     , gstHHJumping);
  3161 ScriptSetInteger('gsttmpFlag'       , gsttmpFlag);
  3185 ScriptSetInteger('gsttmpFlag'       , gsttmpFlag);
  3162 ScriptSetInteger('gstHHThinking'    , gstHHThinking);
  3186 ScriptSetInteger('gstHHThinking'    , gstHHThinking);
  3163 ScriptSetInteger('gstNoDamage'      , gstNoDamage);
  3187 ScriptSetInteger('gstNoDamage'      , gstNoDamage);
  3164 ScriptSetInteger('gstHHHJump'       , gstHHHJump);
  3188 ScriptSetInteger('gstHHHJump'       , gstHHHJump);
  3168 ScriptSetInteger('gstWait'          , gstWait);
  3192 ScriptSetInteger('gstWait'          , gstWait);
  3169 ScriptSetInteger('gstNotKickable'   , gstNotKickable);
  3193 ScriptSetInteger('gstNotKickable'   , gstNotKickable);
  3170 ScriptSetInteger('gstLoser'         , gstLoser);
  3194 ScriptSetInteger('gstLoser'         , gstLoser);
  3171 ScriptSetInteger('gstHHGone'        , gstHHGone);
  3195 ScriptSetInteger('gstHHGone'        , gstHHGone);
  3172 ScriptSetInteger('gstInvisible'     , gstInvisible);
  3196 ScriptSetInteger('gstInvisible'     , gstInvisible);
       
  3197 ScriptSetInteger('gstSubmersible'   , gstSubmersible);
       
  3198 ScriptSetInteger('gstFrozen'        , gstFrozen);
       
  3199 ScriptSetInteger('gstNoGravity'     , gstNoGravity);
  3173 
  3200 
  3174 // ai hints
  3201 // ai hints
  3175 ScriptSetInteger('aihUsualProcessing', aihUsualProcessing);
  3202 ScriptSetInteger('aihUsualProcessing', aihUsualProcessing);
  3176 ScriptSetInteger('aihDoesntMatter'   , aihDoesntMatter);
  3203 ScriptSetInteger('aihDoesntMatter'   , aihDoesntMatter);
  3177 
  3204 
  3296 lua_register(luaState, _P'GetGravity', @lc_getgravity);
  3323 lua_register(luaState, _P'GetGravity', @lc_getgravity);
  3297 lua_register(luaState, _P'SetGravity', @lc_setgravity);
  3324 lua_register(luaState, _P'SetGravity', @lc_setgravity);
  3298 lua_register(luaState, _P'SetWaterLine', @lc_setwaterline);
  3325 lua_register(luaState, _P'SetWaterLine', @lc_setwaterline);
  3299 lua_register(luaState, _P'SetNextWeapon', @lc_setnextweapon);
  3326 lua_register(luaState, _P'SetNextWeapon', @lc_setnextweapon);
  3300 lua_register(luaState, _P'SetWeapon', @lc_setweapon);
  3327 lua_register(luaState, _P'SetWeapon', @lc_setweapon);
       
  3328 lua_register(luaState, _P'SetMaxBuildDistance', @lc_setmaxbuilddistance);
  3301 // drawn map functions
  3329 // drawn map functions
  3302 lua_register(luaState, _P'AddPoint', @lc_addPoint);
  3330 lua_register(luaState, _P'AddPoint', @lc_addPoint);
  3303 lua_register(luaState, _P'FlushPoints', @lc_flushPoints);
  3331 lua_register(luaState, _P'FlushPoints', @lc_flushPoints);
  3304 
  3332 
  3305 lua_register(luaState, _P'SetGearAIHints', @lc_setaihintsongear);
  3333 lua_register(luaState, _P'SetGearAIHints', @lc_setgearaihints);
  3306 lua_register(luaState, _P'HedgewarsScriptLoad', @lc_hedgewarsscriptload);
  3334 lua_register(luaState, _P'HedgewarsScriptLoad', @lc_hedgewarsscriptload);
  3307 lua_register(luaState, _P'DeclareAchievement', @lc_declareachievement);
  3335 lua_register(luaState, _P'DeclareAchievement', @lc_declareachievement);
  3308 
  3336 
  3309 ScriptSetInteger('TEST_SUCCESSFUL'   , HaltTestSuccess);
  3337 ScriptSetInteger('TEST_SUCCESSFUL'   , HaltTestSuccess);
  3310 ScriptSetInteger('TEST_FAILED'       , HaltTestFailed);
  3338 ScriptSetInteger('TEST_FAILED'       , HaltTestFailed);