# HG changeset patch # User unc0rr # Date 1159039567 0 # Node ID d8870bbf960e1f3449dfbbc7e0b26cbe0ac6bab6 # Parent 207f520b9e8351c649f19bfefb849e0471e4aacb - AmmoMenu - Many small fixes diff -r 207f520b9e83 -r d8870bbf960e QTfrontend/binds.h --- a/QTfrontend/binds.h Fri Sep 22 18:09:26 2006 +0000 +++ b/QTfrontend/binds.h Sat Sep 23 19:26:07 2006 +0000 @@ -37,7 +37,7 @@ #include #include -#define BINDS_NUMBER 24 +#define BINDS_NUMBER 25 struct BindAction { @@ -58,6 +58,7 @@ {"+attack", "space", QT_TRANSLATE_NOOP("binds", "attack"), false}, {"put", "mousel", QT_TRANSLATE_NOOP("binds", "put"), false}, {"switch", "tab", QT_TRANSLATE_NOOP("binds", "switch"), true}, + {"ammomenu", "mouser", QT_TRANSLATE_NOOP("binds", "ammo menu"), false}, {"slot 1", "f1", QT_TRANSLATE_NOOP("binds", "slot 1"), false}, {"slot 2", "f2", QT_TRANSLATE_NOOP("binds", "slot 2"), false}, {"slot 3", "f3", QT_TRANSLATE_NOOP("binds", "slot 3"), false}, diff -r 207f520b9e83 -r d8870bbf960e hedgewars/CCHandlers.inc --- a/hedgewars/CCHandlers.inc Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/CCHandlers.inc Sat Sep 23 19:26:07 2006 +0000 @@ -369,3 +369,16 @@ end end; +procedure chAmmoMenu(var s: shortstring); +begin +if CheckNoTeamOrHH then exit; +with CurrentTeam^ do + with Hedgehogs[CurrHedgehog] do + begin + if bShowAmmoMenu then bShowAmmoMenu:= false + else if ((Gear.State and (gstAttacking or gstAttacked)) <> 0) or (AttacksNum > 0) + or ((Gear.State and gstHHDriven) = 0) then else bShowAmmoMenu:= true + end +end; + + diff -r 207f520b9e83 -r d8870bbf960e hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/GSHandlers.inc Sat Sep 23 19:26:07 2006 +0000 @@ -363,14 +363,14 @@ HHGear: PGear; begin AllInactive:= false; +HHGear:= PHedgehog(Gear.Hedgehog).Gear; dec(Gear.Timer); -if (Gear.Timer = 0)or((Gear.Message and gm_Destroy) <> 0) then +if (Gear.Timer = 0)or((Gear.Message and gm_Destroy) <> 0)or((HHGear.State and gstHHDriven) = 0) then begin DeleteGear(Gear); AfterAttack; exit end; -HHGear:= PHedgehog(Gear.Hedgehog).Gear; if (Gear.Timer and $3F) = 0 then begin i:= round(Gear.X) - Gear.Radius - GetRandom(2); diff -r 207f520b9e83 -r d8870bbf960e hedgewars/hwengine.dpr --- a/hedgewars/hwengine.dpr Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/hwengine.dpr Sat Sep 23 19:26:07 2006 +0000 @@ -95,7 +95,6 @@ GameState:= gsGame end; gsGame : begin - ProcessKbd; DoGameTick(Lag); DrawWorld(Lag, SDLPrimSurface); end; diff -r 207f520b9e83 -r d8870bbf960e hedgewars/uConsole.pas --- a/hedgewars/uConsole.pas Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/uConsole.pas Sat Sep 23 19:26:07 2006 +0000 @@ -288,6 +288,7 @@ RegisterVariable('add' , vtCommand, @chAdd ); RegisterVariable('skip' , vtCommand, @chSkip ); RegisterVariable('say' , vtCommand, @chSay ); +RegisterVariable('ammomenu', vtCommand, @chAmmoMenu ); RegisterVariable('+left' , vtCommand, @chLeft_p ); RegisterVariable('-left' , vtCommand, @chLeft_m ); RegisterVariable('+right' , vtCommand, @chRight_p ); diff -r 207f520b9e83 -r d8870bbf960e hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/uConsts.pas Sat Sep 23 19:26:07 2006 +0000 @@ -41,13 +41,14 @@ TGameType = (gmtLocal, gmtDemo, gmtNet, gmtSave, gmtLandPreview); TPathType = (ptNone, ptData, ptGraphics, ptThemes, ptCurrTheme, ptTeams, ptMaps, ptMapCurrent, ptDemos, ptSounds, ptGraves, ptFonts, ptForts, - ptLocale); + ptLocale, ptAmmoMenu); TSprite = (sprWater, sprCloud, sprBomb, sprBigDigit, sprFrame, sprLag, sprArrow, sprGrenade, sprTargetP, sprUFO, sprSmokeTrace, sprRopeHook, sprExplosion50, sprMineOff, sprMineOn, sprCase, sprFAid, sprDynamite, sprPower, sprClusterBomb, sprClusterParticle, sprFlame, sprHorizont, - sprSky); + sprSky, sprAMBorders, sprAMSlot, sprAMSlotName, sprAMAmmos, + sprAMSlotKeys); TGearType = (gtCloud, gtAmmo_Bomb, gtHedgehog, gtAmmo_Grenade, gtHealthTag, gtGrave, gtUFO, gtShotgunShot, gtPickHammer, gtRope, gtSmokeTrace, gtExplosion, gtMine, gtCase, gtDEagleShot, gtDynamite, @@ -194,7 +195,8 @@ 'Data/Graphics/Graves', // ptGraves 'Data/Fonts', // ptFonts 'Data/Forts', // ptForts - 'Data/Locale' // ptLocale + 'Data/Locale', // ptLocale + 'Data/Graphics/AmmoMenu' // ptAmmoMenu ); StuffLoadData: array[TStuff] of record @@ -249,7 +251,12 @@ (FileName:'ClParticle'; Path: ptGraphics; Width: 16; Height: 16; hasAlpha: false),// sprClusterParticle (FileName: 'Flame'; Path: ptGraphics; Width: 16; Height: 16; hasAlpha: false),// sprFlame (FileName: 'horizont'; Path: ptCurrTheme;Width: 0; Height: 0; hasAlpha: false),// sprHorizont - (FileName: 'Sky'; Path: ptCurrTheme;Width: 0; Height: 0; hasAlpha: false) // sprSky + (FileName: 'Sky'; Path: ptCurrTheme;Width: 0; Height: 0; hasAlpha: false),// sprSky + (FileName: 'BrdrLines'; Path: ptAmmoMenu; Width: 202; Height: 1; hasAlpha: false),// sprAMBorders + (FileName: 'Slot'; Path: ptAmmoMenu; Width: 202; Height: 33; hasAlpha: false),// sprAMSlot + (FileName: 'AmmoName'; Path: ptAmmoMenu; Width: 202; Height: 33; hasAlpha: false),// sprAMSlotName + (FileName: 'Ammos'; Path: ptAmmoMenu; Width: 32; Height: 32; hasAlpha: false),// sprAMAmmos + (FileName: 'SlotKeys'; Path: ptAmmoMenu; Width: 32; Height: 32; hasAlpha: false) // sprAMSlotKeys ); Soundz: array[TSound] of record FileName: String[31]; diff -r 207f520b9e83 -r d8870bbf960e hedgewars/uKeys.pas --- a/hedgewars/uKeys.pas Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/uKeys.pas Sat Sep 23 19:26:07 2006 +0000 @@ -41,6 +41,8 @@ procedure ProcessKbdDemo; procedure InitKbdKeyTable; +var KbdKeyPressed: boolean; + implementation uses SDLh, uTeams, uConsole, uConsts, uMisc; const KeyNumber = 1024; @@ -51,7 +53,7 @@ function KeyNameToCode(name: string): word; begin Result:= cKeyMaxIndex; -while (Result>0)and(KeyNames[Result]<>name) do dec(Result) +while (Result > 0) and (KeyNames[Result] <> name) do dec(Result) end; procedure ProcessKbd; @@ -63,15 +65,18 @@ or (GameState = gsConsole) or (CurrentTeam.ExtDriven) or (CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog].BotLevel <> 0) then exit; + +KbdKeyPressed:= false; pkbd:= SDL_GetKeyState(nil); i:= SDL_GetMouseState(nil, nil); pkbd^[1]:= (i and 1); -pkbd^[2]:= ((i shl 1) and 1); -pkbd^[3]:= ((i shl 2) and 1); +pkbd^[2]:= ((i shr 1) and 1); +pkbd^[3]:= ((i shr 2) and 1); for i:= 1 to cKeyMaxIndex do - if CurrentTeam.Aliases[i][0]<>#0 then - begin - if CurrentTeam.Aliases[i][1]='+' then + if CurrentTeam.Aliases[i][0] <> #0 then + begin + if (i > 3) and (pkbd^[i] <> 0) then KbdKeyPressed:= true; + if CurrentTeam.Aliases[i][1] = '+' then begin if (pkbd^[i] <> 0)and(tkbd[i] = 0) then ParseCommand(CurrentTeam.Aliases[i]) else if (pkbd^[i] = 0)and(tkbd[i] <> 0) then diff -r 207f520b9e83 -r d8870bbf960e hedgewars/uLand.pas --- a/hedgewars/uLand.pas Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/uLand.pas Sat Sep 23 19:26:07 2006 +0000 @@ -470,12 +470,17 @@ end; end; +function SelectTemplate: integer; +begin +Result:= getrandom(Succ(High(EdgeTemplates))) +end; + procedure GenLandSurface; var tmpsurf: PSDL_Surface; begin WriteLnToConsole('Generating land...'); -GenBlank(EdgeTemplates[getrandom(Succ(High(EdgeTemplates)))]); +GenBlank(EdgeTemplates[SelectTemplate]); AddProgress; with PixelFormat^ do @@ -573,7 +578,7 @@ var x, y, xx, yy, t, bit: integer; begin WriteLnToConsole('Generating preview...'); -GenBlank(EdgeTemplates[getrandom(Succ(High(EdgeTemplates)))]); +GenBlank(EdgeTemplates[SelectTemplate]); for y:= 0 to 127 do for x:= 0 to 31 do diff -r 207f520b9e83 -r d8870bbf960e hedgewars/uStore.pas --- a/hedgewars/uStore.pas Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/uStore.pas Sat Sep 23 19:26:07 2006 +0000 @@ -41,7 +41,7 @@ procedure StoreRelease; procedure DrawGear(Stuff : TStuff; X, Y: integer; Surface: PSDL_Surface); procedure DrawSpriteFromRect(r: TSDL_Rect; X, Y, Height, Position: integer; Surface: PSDL_Surface); -procedure DrawSprite (Sprite: TSprite; X, Y, Position: integer; Surface: PSDL_Surface); +procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface); procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface); procedure DrawLand (X, Y: integer; Surface: PSDL_Surface); procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface); @@ -364,12 +364,12 @@ DrawFromRect(X, Y, @r, StoreSurface, Surface) end; -procedure DrawSprite(Sprite: TSprite; X, Y, Position: integer; Surface: PSDL_Surface); +procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface); var r: TSDL_Rect; begin r.x:= 0; r.w:= SpritesData[Sprite].Width; -r.y:= Position * SpritesData[Sprite].Height; +r.y:= Frame * SpritesData[Sprite].Height; r.h:= SpritesData[Sprite].Height; DrawFromRect(X, Y, @r, SpritesData[Sprite].Surface, Surface) end; diff -r 207f520b9e83 -r d8870bbf960e hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Fri Sep 22 18:09:26 2006 +0000 +++ b/hedgewars/uWorld.pas Sat Sep 23 19:26:07 2006 +0000 @@ -48,15 +48,16 @@ {$ENDIF} var FollowGear: PGear = nil; WindBarWidth: integer = 0; + bShowAmmoMenu: boolean = false; implementation -uses uStore, uMisc, uTeams, uIO, uConsole; +uses uStore, uMisc, uTeams, uIO, uConsole, uKeys; const RealTicks: Longword = 0; Frames: Longword = 0; FPS: Longword = 0; CountTicks: Longword = 0; prevPoint: TPoint = (X: 0; Y: 0); - + type TCaptionStr = record Surf: PSDL_Surface; StorePos: Longword; @@ -66,6 +67,7 @@ var cWaterSprCount: integer; Captions: array[0..Pred(cMaxCaptions)] of TCaptionStr; + AMxLeft, AMxCurr: integer; procedure InitWorld; begin @@ -75,7 +77,47 @@ prevPoint.X:= cScreenWidth div 2; prevPoint.Y:= cScreenHeight div 2; WorldDx:= - 1024 + cScreenWidth div 2; -WorldDy:= - 512 + cScreenHeight div 2 +WorldDy:= - 512 + cScreenHeight div 2; +AMxLeft:= cScreenWidth - 210; +AMxCurr:= cScreenWidth +end; + +procedure ShowAmmoMenu(Surface: PSDL_Surface); +const MENUSPEED = 15; +var x, y, i, t: integer; +begin +if (TurnTimeLeft = 0) or KbdKeyPressed then bShowAmmoMenu:= false; +if bShowAmmoMenu and (AMxCurr > AMxLeft) then dec(AMxCurr, MENUSPEED); +if (not bShowAmmoMenu) and (AMxCurr < cScreenWidth) then inc(AMxCurr, MENUSPEED); + +if CurrentTeam = nil then exit; +with CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog] do + begin + if Ammo = nil then exit; + x:= AMxCurr; + y:= cScreenHeight - 40; + dec(y); + DrawSprite(sprAMBorders, x, y, 0, Surface); + dec(y); + DrawSprite(sprAMBorders, x, y, 1, Surface); + dec(y, 33); + DrawSprite(sprAMSlotName, x, y, 0, Surface); + for i:= cMaxSlotIndex downto 0 do + if Ammo[i, 0].Count > 0 then + begin + dec(y, 33); + DrawSprite(sprAMSlot, x, y, 0, Surface); + DrawSprite(sprAMSlotKeys, x + 2, y + 1, i, Surface); + t:= 0; + while (t <= cMaxSlotAmmoIndex) and (Ammo[i, t].Count > 0) do + begin + DrawSprite(sprAMAmmos, x + t * 33 + 35, y + 1, integer(Ammo[i, t].AmmoType), Surface); + inc(t) + end + end; + dec(y, 1); + DrawSprite(sprAMBorders, x, y, 0, Surface) + end end; procedure DrawWorld(Lag: integer; Surface: PSDL_Surface); @@ -285,6 +327,9 @@ DrawSpriteFromRect(r, cScreenWidth - 106 + WindBarWidth, cScreenHeight - 28, 13, 0, Surface); end; +// AmmoMenu +if (AMxCurr < cScreenWidth) or bShowAmmoMenu then ShowAmmoMenu(Surface); + // Cursor if isCursorVisible then DrawSprite(sprArrow, CursorPoint.X, CursorPoint.Y, (RealTicks shr 6) mod 8, Surface); diff -r 207f520b9e83 -r d8870bbf960e share/hedgewars/Data/Graphics/AmmoMenu/AmmoName.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/AmmoName.png has changed diff -r 207f520b9e83 -r d8870bbf960e share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed diff -r 207f520b9e83 -r d8870bbf960e share/hedgewars/Data/Graphics/AmmoMenu/BrdrLines.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/BrdrLines.png has changed diff -r 207f520b9e83 -r d8870bbf960e share/hedgewars/Data/Graphics/AmmoMenu/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Graphics/AmmoMenu/CMakeLists.txt Sat Sep 23 19:26:07 2006 +0000 @@ -0,0 +1,5 @@ +install(FILES + AmmoName.png + BrdrLines.png + Slot.png + DESTINATION ${SHAREPATH}Data/Graphics/AmmoMenu) \ No newline at end of file diff -r 207f520b9e83 -r d8870bbf960e share/hedgewars/Data/Graphics/AmmoMenu/Slot.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Slot.png has changed diff -r 207f520b9e83 -r d8870bbf960e share/hedgewars/Data/Graphics/AmmoMenu/SlotKeys.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/SlotKeys.png has changed diff -r 207f520b9e83 -r d8870bbf960e share/hedgewars/Data/Graphics/CMakeLists.txt --- a/share/hedgewars/Data/Graphics/CMakeLists.txt Fri Sep 22 18:09:26 2006 +0000 +++ b/share/hedgewars/Data/Graphics/CMakeLists.txt Sat Sep 23 19:26:07 2006 +0000 @@ -1,4 +1,5 @@ add_subdirectory(Graves) +add_subdirectory(AmmoMenu) install(FILES Arrow.png BigDigits.png