# HG changeset patch # User unc0rr # Date 1352280198 -14400 # Node ID 66e8ac9c22742753963a5927de8ef7d327568dff # Parent 706218709157bdad0fb377ee8b77b698aa05035d Try to beat AI in Mutant! diff -r 706218709157 -r 66e8ac9c2274 hedgewars/uAIMisc.pas --- a/hedgewars/uAIMisc.pas Wed Nov 07 05:18:06 2012 +0100 +++ b/hedgewars/uAIMisc.pas Wed Nov 07 13:23:18 2012 +0400 @@ -110,7 +110,7 @@ begin for i:= 0 to cMaxHHIndex do if (Hedgehogs[i].Gear <> nil) - and (Hedgehogs[i].Gear <> ThinkingHH) + and (Hedgehogs[i].Gear <> ThinkingHH) and (Hedgehogs[i].Gear^.Health > Hedgehogs[i].Gear^.Damage) then begin @@ -119,15 +119,17 @@ skip:= false; Point.X:= hwRound(Gear^.X); Point.Y:= hwRound(Gear^.Y); - if Clan <> CurrentTeam^.Clan then - begin - Score:= Gear^.Health - Gear^.Damage; - inc(e) - end else - begin - Score:= Gear^.Damage - Gear^.Health; - inc(f) - end + if (Hedgehogs[i].Gear^.AIHints and aihDoesntMatter) <> 0 then + Score:= 0 + else if Clan <> CurrentTeam^.Clan then + begin + Score:= Gear^.Health - Gear^.Damage; + inc(e) + end else + begin + Score:= Gear^.Damage - Gear^.Health; + inc(f) + end end; inc(Targets.Count) end; diff -r 706218709157 -r 66e8ac9c2274 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Wed Nov 07 05:18:06 2012 +0100 +++ b/hedgewars/uConsts.pas Wed Nov 07 13:23:18 2012 +0400 @@ -164,6 +164,7 @@ cSendEmptyPacketTime = 1000; trigTurns = $80000001; + // game flags gfAny = $FFFFFFFF; gfOneClanMode = $00000001; // used in trainings gfMultiWeapon = $00000002; // used in trainings @@ -196,6 +197,7 @@ // if a "game start notice" would be useful. If so, // add one in uWorld.pas - look for "AddGoal". + // gear states gstDrowning = $00000001; gstHHDriven = $00000002; gstMoving = $00000004; @@ -217,6 +219,7 @@ gstHHGone = $00100000; gstInvisible = $00200000; + // gear messages gmLeft = $00000001; gmRight = $00000002; gmUp = $00000004; @@ -239,7 +242,12 @@ cMaxSlotIndex = 9; cMaxSlotAmmoIndex = 5; - + + // ai hints + aihUsualProcessing = $00000000; + aihDoesntMatter = $00000001; + + // ammo properties ammoprop_Timerable = $00000001; ammoprop_Power = $00000002; ammoprop_NeedTarget = $00000004; @@ -262,6 +270,7 @@ AMMO_INFINITE = 100; + // explosion flags //EXPLAllDamageInRadius = $00000001; Completely unused for ages EXPLAutoSound = $00000002; EXPLNoDamage = $00000004; diff -r 706218709157 -r 66e8ac9c2274 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Wed Nov 07 05:18:06 2012 +0100 +++ b/hedgewars/uScript.pas Wed Nov 07 13:23:18 2012 +0400 @@ -1783,6 +1783,22 @@ end; lc_testrectforobstacle:= 1 end; + + +function lc_setaihintsongear(L : Plua_State) : LongInt; Cdecl; +var gear: PGear; +begin + if lua_gettop(L) <> 2 then + LuaError('Lua: Wrong number of parameters passed to SetAIHintOnGear!') + else + begin + gear:= GearByUID(lua_tointeger(L, 1)); + if gear <> nil then + gear^.aihints:= lua_tointeger(L, 2); + end; + lc_setaihintsongear:= 0 +end; + /////////////////// procedure ScriptPrintStack; @@ -2287,6 +2303,9 @@ ScriptSetInteger('gstHHGone' ,$00100000); ScriptSetInteger('gstInvisible' ,$00200000); +ScriptSetInteger('aihUsualProcessing' ,$00000000); +ScriptSetInteger('aihDoesntMatter' ,$00000001); + // register functions lua_register(luaState, _P'HideHog', @lc_hidehog); lua_register(luaState, _P'RestoreHog', @lc_restorehog); @@ -2380,6 +2399,8 @@ lua_register(luaState, _P'GetCurAmmoType', @lc_getcurammotype); lua_register(luaState, _P'TestRectForObstacle', @lc_testrectforobstacle); +lua_register(luaState, _P'SetGearAIHints', @lc_setaihintsongear); + ScriptClearStack; // just to be sure stack is empty ScriptLoaded:= false; diff -r 706218709157 -r 66e8ac9c2274 hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Wed Nov 07 05:18:06 2012 +0100 +++ b/hedgewars/uTypes.pas Wed Nov 07 13:23:18 2012 +0400 @@ -258,6 +258,7 @@ nImpactSounds: Word; // count of ImpactSounds SoundChannel: LongInt; PortalCounter: LongWord; // Hopefully temporary, but avoids infinite portal loops in a guaranteed fashion. + AIHints: LongWord; // hints for ai. haha ^^^^^^ temporary, sure LastDamage: PHedgehog; end; TPGearArray = array of PGear; diff -r 706218709157 -r 66e8ac9c2274 share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Wed Nov 07 05:18:06 2012 +0100 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Wed Nov 07 13:23:18 2012 +0400 @@ -209,6 +209,7 @@ checkScore() giveWeapons(CurrentHedgehog) drawCircles() + setAIHints() kill_reward= numhhs*10 if CurrentHedgehog == mutant then @@ -399,6 +400,16 @@ mutant=nil end +function setAIHints() + for i = 0, #hhs do + if mutant == nil or hhs[i] == mutant or CurrentHedgehog == mutant then + SetGearAIHints(hhs[i], aihUsual) + else + SetGearAIHints(hhs[i], aihDoesntMatter) + end + end +end + function removeFeeder(gear) if gear~=nil then