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); |