--- a/QTfrontend/hwform.cpp Mon Aug 15 21:45:27 2011 +0200
+++ b/QTfrontend/hwform.cpp Mon Aug 15 21:49:09 2011 +0200
@@ -64,13 +64,14 @@
#include "pagedrawmap.h"
#include "pagenettype.h"
#include "pagegamestats.h"
+#include "pageplayrecord.h"
+#include "pagedata.h"
#include "hwconsts.h"
#include "newnetclient.h"
#include "gamecfgwidget.h"
#include "netserverslist.h"
#include "netudpserver.h"
#include "chatwidget.h"
-#include "pageplayrecord.h"
#include "input_ip.h"
#include "ammoSchemeModel.h"
#include "bgwidget.h"
@@ -150,11 +151,13 @@
connect(ui.pageMain->BtnNet, SIGNAL(clicked()), pageSwitchMapper, SLOT(map()));
pageSwitchMapper->setMapping(ui.pageMain->BtnNet, ID_PAGE_NETTYPE);
connect(ui.pageMain->BtnInfo, SIGNAL(clicked()), pageSwitchMapper, SLOT(map()));
- pageSwitchMapper->setMapping(ui.pageMain->BtnInfo, ID_PAGE_INFO);
+ pageSwitchMapper->setMapping(ui.pageMain->BtnInfo, ID_PAGE_DATADOWNLOAD);
connect(ui.pageMain->BtnExit, SIGNAL(pressed()), this, SLOT(btnExitPressed()));
connect(ui.pageMain->BtnExit, SIGNAL(clicked()), this, SLOT(btnExitClicked()));
+ connect(ui.pageDataDownload->BtnBack, SIGNAL(clicked()), this, SLOT(GoBack()));
+
connect(ui.pageEditTeam->BtnTeamSave, SIGNAL(clicked()), this, SLOT(TeamSave()));
connect(ui.pageEditTeam->BtnTeamDiscard, SIGNAL(clicked()), this, SLOT(TeamDiscard()));
--- a/QTfrontend/hwform.h Mon Aug 15 21:45:27 2011 +0200
+++ b/QTfrontend/hwform.h Mon Aug 15 21:49:09 2011 +0200
@@ -147,7 +147,8 @@
ID_PAGE_ADMIN = 17,
ID_PAGE_NETTYPE = 18,
ID_PAGE_CAMPAIGN = 19,
- ID_PAGE_DRAWMAP = 20
+ ID_PAGE_DRAWMAP = 20,
+ ID_PAGE_DATADOWNLOAD = 21
};
HWGame * game;
HWNetServer* pnetserver;
--- a/QTfrontend/pagedata.cpp Mon Aug 15 21:45:27 2011 +0200
+++ b/QTfrontend/pagedata.cpp Mon Aug 15 21:49:09 2011 +0200
@@ -18,6 +18,10 @@
#include <QGridLayout>
#include <QPushButton>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QFileInfo>
+#include <QFileDialog>
#include "pagedata.h"
@@ -31,6 +35,22 @@
BtnBack = addButton(":/res/Exit.png", pageLayout, 1, 0, true);
web = new QWebView(this);
- web->load(QUrl("http://m8y.org/hw/"));
+ connect(this, SIGNAL(linkClicked(const QUrl&)), this, SLOT(install(const QUrl&)));
+ web->load(QUrl("http://m8y.org/hw/downloads/"));
+ web->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
pageLayout->addWidget(web, 0, 0, 1, 3);
}
+
+void PageDataDownload::install(const QUrl &url)
+{
+qWarning("Download Request");
+QString fileName = QFileInfo(url.toString()).fileName();
+
+QNetworkRequest newRequest(url);
+newRequest.setAttribute(QNetworkRequest::User, fileName);
+
+QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+QNetworkReply *reply = manager->get(newRequest);
+//connect( reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadProgress(qint64, qint64)) );
+//connect( reply, SIGNAL(finished()), this, SLOT(downloadIssueFinished()));
+}
--- a/QTfrontend/pagedata.h Mon Aug 15 21:45:27 2011 +0200
+++ b/QTfrontend/pagedata.h Mon Aug 15 21:49:09 2011 +0200
@@ -19,6 +19,7 @@
#ifndef PAGE_DATA_H
#define PAGE_DATA_H
#include <QWebView>
+#include <QUrl>
#include "AbstractPage.h"
class PageDataDownload : public AbstractPage
@@ -30,6 +31,9 @@
QPushButton *BtnBack;
QWebView *web;
+
+private:
+ void install(const QUrl &url);
};
#endif
--- a/QTfrontend/ui_hwform.cpp Mon Aug 15 21:45:27 2011 +0200
+++ b/QTfrontend/ui_hwform.cpp Mon Aug 15 21:49:09 2011 +0200
@@ -44,6 +44,7 @@
#include "pagemain.h"
#include "pagegamestats.h"
#include "pageplayrecord.h"
+#include "pagedata.h"
#include "hwconsts.h"
void Ui_HWForm::setupUi(HWForm *HWForm)
@@ -137,4 +138,7 @@
pageDrawMap = new PageDrawMap();
Pages->addWidget(pageDrawMap);
+
+ pageDataDownload = new PageDataDownload();
+ Pages->addWidget(pageDataDownload);
}
--- a/gameServer/HWProtoLobbyState.hs Mon Aug 15 21:45:27 2011 +0200
+++ b/gameServer/HWProtoLobbyState.hs Mon Aug 15 21:49:09 2011 +0200
@@ -132,9 +132,10 @@
handleCmd_lobby ["FOLLOW", asknick] = do
(_, rnc) <- ask
ci <- clientByNick asknick
+ cl <- thisClient
let ri = clientRoom rnc $ fromJust ci
let clRoom = room rnc ri
- if isNothing ci || ri == lobbyId then
+ if isNothing ci || ri == lobbyId || clientProto cl /= roomProto clRoom then
return []
else
handleCmd_lobby ["JOIN_ROOM", name clRoom]
--- a/hedgewars/GSHandlers.inc Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/GSHandlers.inc Mon Aug 15 21:49:09 2011 +0200
@@ -2955,9 +2955,9 @@
if hogs[i] <> CurrentHedgehog^.Gear then
begin
//d:= Distance(Gear^.X - hogs[i]^.X, Gear^.Y - hogs[i]^.Y);
- hogs[i]^.dX:= _0_25 * (Gear^.X - hogs[i]^.X) / _250;
+ hogs[i]^.dX:= _50 * cGravity * (Gear^.X - hogs[i]^.X) / _25;
//if Gear^.X < hogs[i]^.X then hogs[i]^.dX.isNegative:= true;
- hogs[i]^.dY:= -_0_25;
+ hogs[i]^.dY:= -_450 * cGravity;
hogs[i]^.Active:= true;
end
end;
@@ -2990,18 +2990,34 @@
end;
procedure doStepSeductionWear(Gear: PGear);
+var heart: PVisualGear;
begin
AllInactive := false;
inc(Gear^.Timer);
if Gear^.Timer > 250 then
- begin
+ begin
Gear^.Timer := 0;
inc(Gear^.Pos);
if Gear^.Pos = 5 then
PlaySound(sndYoohoo, Gear^.Hedgehog^.Team^.voicepack)
- end;
-
- if Gear^.Pos = 14 then
+ end;
+
+ if (Gear^.Pos = 14) and (RealTicks and $3 = 0) then
+ begin
+ heart:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot);
+ if heart <> nil then
+ with heart^ do
+ begin
+ dx:= 0.001 * (random(200));
+ dy:= 0.001 * (random(200));
+ if random(2) = 0 then dx := -dx;
+ if random(2) = 0 then dy := -dy;
+ FrameTicks:= random(750) + 1000;
+ heart^.State:= ord(sprSeduction)
+ end;
+ end;
+
+ if Gear^.Pos = 15 then
Gear^.doStep := @doStepSeductionWork
end;
--- a/hedgewars/HHHandlers.inc Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/HHHandlers.inc Mon Aug 15 21:49:09 2011 +0200
@@ -582,7 +582,13 @@
i:= 0;
while i < Gear^.Health do
begin
- AddVisualGear(hwRound(HH^.X), hwRound(HH^.Y), vgtHealth);
+ vga:= AddVisualGear(hwRound(HH^.X), hwRound(HH^.Y), vgtStraightShot);
+ if vga <> nil then
+ with vga^ do
+ begin
+ Tint:= $00FF00FF;
+ State:= ord(sprHealth)
+ end;
inc(i, 5);
end;
end;
--- a/hedgewars/LuaPas.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/LuaPas.pas Mon Aug 15 21:49:09 2011 +0200
@@ -416,7 +416,7 @@
procedure lua_setglobal(L : Plua_State; s : PChar);
procedure lua_getglobal(L : Plua_State; s : PChar);
-function lua_tostring(L : Plua_State; idx : LongInt) : PChar;
+function lua_tostring(L : Plua_State; idx : LongInt) : AnsiString;
(*
@@ -872,9 +872,9 @@
lua_getfield(L, LUA_GLOBALSINDEX, s);
end;
-function lua_tostring(L : Plua_State; idx : LongInt) : PChar;
+function lua_tostring(L : Plua_State; idx : LongInt) : AnsiString;
begin
- lua_tostring := lua_tolstring(L, idx, nil);
+ lua_tostring := SysUtils.StrPas(lua_tolstring(L, idx, nil));
end;
function lua_open : Plua_State;
--- a/hedgewars/SDLh.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/SDLh.pas Mon Aug 15 21:49:09 2011 +0200
@@ -870,8 +870,10 @@
function SDL_JoystickGetButton(joy: PSDL_Joystick; button: LongInt): Byte; cdecl; external SDLLibName;
procedure SDL_JoystickClose(joy: PSDL_Joystick); cdecl; external SDLLibName;
+{$IFDEF WIN32}
function SDL_putenv(const text: PChar): LongInt; cdecl; external SDLLibName;
function SDL_getenv(const text: PChar): PChar; cdecl; external SDLLibName;
+{$ENDIF}
{* Compatibility between SDL-1.2 and SDL-1.3 *}
procedure SDL_WarpMouse(x, y: Word); {$IFNDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
--- a/hedgewars/VGSHandlers.inc Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/VGSHandlers.inc Mon Aug 15 21:49:09 2011 +0200
@@ -250,22 +250,6 @@
end;
////////////////////////////////////////////////////////////////////////////////
-procedure doStepHealth(Gear: PVisualGear; Steps: Longword);
-begin
-Gear^.X:= Gear^.X + Gear^.dX * Steps;
-Gear^.Y:= Gear^.Y - Gear^.dY * Steps;
-
-if Gear^.FrameTicks <= Steps then
- DeleteVisualGear(Gear)
-else
- begin
- dec(Gear^.FrameTicks, Steps);
- if (Gear^.FrameTicks < 501) and (Gear^.FrameTicks mod 5 = 0) then
- Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or (((Gear^.Tint and $000000FF) * Gear^.FrameTicks) div 500)
- end
-end;
-
-////////////////////////////////////////////////////////////////////////////////
procedure doStepSteam(Gear: PVisualGear; Steps: Longword);
begin
Gear^.X:= Gear^.X + (cWindSpeedf * 100 + Gear^.dX) * Steps;
@@ -711,4 +695,19 @@
if WindBarWidth = Gear^.Tag then
DeleteVisualGear(Gear)
end;
+////////////////////////////////////////////////////////////////////////////////
+procedure doStepStraightShot(Gear: PVisualGear; Steps: Longword);
+begin
+Gear^.X:= Gear^.X + Gear^.dX * Steps;
+Gear^.Y:= Gear^.Y - Gear^.dY * Steps;
+if Gear^.FrameTicks <= Steps then
+ DeleteVisualGear(Gear)
+else
+ begin
+ dec(Gear^.FrameTicks, Steps);
+ if (Gear^.FrameTicks < 501) and (Gear^.FrameTicks mod 5 = 0) then
+ Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or (((Gear^.Tint and $000000FF) * Gear^.FrameTicks) div 500)
+ end
+end;
+
--- a/hedgewars/hwengine.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/hwengine.pas Mon Aug 15 21:49:09 2011 +0200
@@ -207,14 +207,6 @@
end;
end;
-/////////////////////////
-procedure ShowMainWindow;
-begin
- if cFullScreen then ParseCommand('fullscr 1', true)
- else ParseCommand('fullscr 0', true);
- SDL_ShowCursor(0)
-end;
-
///////////////
{$IFDEF HWLIBRARY}
procedure Game(gameArgs: PPChar); cdecl; export;
@@ -251,7 +243,6 @@
cStereoMode:= smNone;
{$ENDIF}
- cLogfileBase:= 'game';
initEverything(true);
WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')');
AddFileLog('Prefix: "' + PathPrefix +'"');
@@ -272,19 +263,15 @@
WriteLnToConsole(msgOK);
SDL_EnableUNICODE(1);
+ SDL_ShowCursor(0);
WriteToConsole('Init SDL_ttf... ');
SDLTry(TTF_Init() <> -1, true);
WriteLnToConsole(msgOK);
-{$IFDEF WIN32}
- s:= SDL_getenv('SDL_VIDEO_CENTERED');
- SDL_putenv('SDL_VIDEO_CENTERED=1');
- ShowMainWindow();
- SDL_putenv(str2pchar('SDL_VIDEO_CENTERED=' + s));
-{$ELSE}
- ShowMainWindow();
-{$ENDIF}
+ // show main window
+ if cFullScreen then ParseCommand('fullscr 1', true)
+ else ParseCommand('fullscr 0', true);
ControllerInit(); // has to happen before InitKbdKeyTable to map keys
InitKbdKeyTable();
@@ -346,6 +333,9 @@
begin
Randomize();
+ if complete then cLogfileBase:= 'game'
+ else cLogfileBase:= 'preview';
+
// uConsts does not need initialization as they are all consts
uUtils.initModule;
uMisc.initModule;
@@ -440,7 +430,6 @@
procedure GenLandPreview{$IFDEF HWLIBRARY}(port: LongInt); cdecl; export{$ENDIF};
var Preview: TPreview;
begin
- cLogfileBase:= 'preview';
initEverything(false);
{$IFDEF HWLIBRARY}
WriteLnToConsole('Preview connecting on port ' + inttostr(port));
@@ -511,9 +500,7 @@
else if GameType = gmtSyntax then DisplayUsage()
else Game();
- if GameType = gmtSyntax then
- ExitCode:= 1
- else
- ExitCode:= 0;
+ // return 1 when engine is not called correctly
+ ExitCode:= LongInt(GameType = gmtSyntax);
{$ENDIF}
end.
--- a/hedgewars/uCollisions.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uCollisions.pas Mon Aug 15 21:49:09 2011 +0200
@@ -53,19 +53,20 @@
function calcSlopeTangent(Gear: PGear; collisionX, collisionY: LongInt; var outDeltaX, outDeltaY: LongInt; TestWord: LongWord): Boolean;
implementation
-uses uConsts, uLandGraphics, uVariables, uDebug;
+uses uConsts, uLandGraphics, uVariables, uDebug, uGears;
type TCollisionEntry = record
X, Y, Radius: LongInt;
cGear: PGear;
end;
-const MAXRECTSINDEX = 511;
+const MAXRECTSINDEX = 1023;
var Count: Longword;
cinfos: array[0..MAXRECTSINDEX] of TCollisionEntry;
ga: TGearArray;
procedure AddGearCI(Gear: PGear);
+var t: PGear;
begin
if Gear^.CollisionIndex >= 0 then exit;
TryDo(Count <= MAXRECTSINDEX, 'Collision rects array overflow', true);
@@ -78,7 +79,15 @@
cGear:= Gear
end;
Gear^.CollisionIndex:= Count;
-inc(Count)
+inc(Count);
+// mines are the easiest way to overflow collision
+if (Count > (MAXRECTSINDEX-20)) then
+ begin
+ t:= GearsList;
+ while (t <> nil) and (t^.Kind <> gtMine) do
+ t:= t^.NextGear;
+ if (t <> nil) then DeleteGear(t)
+ end;
end;
procedure DeleteCI(Gear: PGear);
--- a/hedgewars/uCommandHandlers.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uCommandHandlers.pas Mon Aug 15 21:49:09 2011 +0200
@@ -43,16 +43,17 @@
const prevGState: TGameState = gsConfirm;
begin
s:= s; // avoid compiler hint
- if GameState <> gsConfirm then
- begin
+ if (GameState = gsGame) or (GameState = gsChat) then
+ begin
prevGState:= GameState;
GameState:= gsConfirm;
SDL_ShowCursor(1)
- end else
- begin
- GameState:= prevGState;
- SDL_ShowCursor(ord(isPaused))
- end
+ end else
+ if GameState = gsConfirm then
+ begin
+ GameState:= prevGState;
+ SDL_ShowCursor(ord(isPaused))
+ end
end;
procedure chForceQuit(var s: shortstring);
--- a/hedgewars/uCommands.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uCommands.pas Mon Aug 15 21:49:09 2011 +0200
@@ -33,7 +33,7 @@
procedure StopMessages(Message: Longword);
implementation
-uses Types, uConsts, uVariables, uConsole, uUtils, uDebug, uScript;
+uses Types, uConsts, uVariables, uConsole, uUtils, uDebug;
type PVariable = ^TVariable;
TVariable = record
@@ -68,7 +68,7 @@
procedure ParseCommand(CmdStr: shortstring; TrustedSource: boolean);
var ii: LongInt;
- s, i, o: shortstring;
+ s: shortstring;
t: PVariable;
c: char;
begin
@@ -85,8 +85,6 @@
if t^.Name = CmdStr then
begin
if TrustedSource or t^.Trusted then
- begin
- if (c <> '$') or (s[0] <> #0) then s:= ParseCommandOverride(CmdStr, s);
case t^.VType of
vtCommand: if c='/' then
begin
@@ -96,12 +94,8 @@
if s[0]=#0 then
begin
str(PLongInt(t^.Handler)^, s);
- i:= inttostr(PLongInt(t^.Handler)^);
- o:= ParseCommandOverride(CmdStr, i);
- if i <> o then val(o, PLongInt(t^.Handler)^)
- else WriteLnToConsole('$' + CmdStr + ' is "' + s + '"');
- end
- else val(s, PLongInt(t^.Handler)^);
+ WriteLnToConsole('$' + CmdStr + ' is "' + s + '"');
+ end else val(s, PLongInt(t^.Handler)^);
vthwFloat: if c='$' then
if s[0]=#0 then
begin
@@ -112,23 +106,13 @@
if s[0]=#0 then
begin
str(ord(boolean(t^.Handler^)), s);
- if boolean(t^.Handler^) then i:= '1'
- else i:= '0';
- o:= ParseCommandOverride(CmdStr, i);
- if i <> o then
- begin
- val(o, ii);
- boolean(t^.Handler^):= not (ii = 0)
- end
- else WriteLnToConsole('$' + CmdStr + ' is "' + s + '"');
- end
- else
+ WriteLnToConsole('$' + CmdStr + ' is "' + s + '"');
+ end else
begin
val(s, ii);
boolean(t^.Handler^):= not (ii = 0)
end;
end;
- end;
exit
end else t:= t^.Next
end;
--- a/hedgewars/uGears.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uGears.pas Mon Aug 15 21:49:09 2011 +0200
@@ -853,6 +853,12 @@
if cHealthDecrease <> 0 then
begin
SuddenDeathDmg:= true;
+
+ // flash
+ ScreenFade:= sfFromWhite;
+ ScreenFadeValue:= sfMax;
+ ScreenFadeSpeed:= 1;
+
ChangeToSDClouds;
ChangeToSDFlakes;
glClearColor(SDSkyColor.r / 255, SDSkyColor.g / 255, SDSkyColor.b / 255, 0.99);
@@ -1083,8 +1089,13 @@
i:= 0;
while i < vampDmg do
begin
- vg:= AddVisualGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), vgtHealth);
- if vg <> nil then vg^.Tint:= $FF0000FF;
+ vg:= AddVisualGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), vgtStraightShot);
+ if vg <> nil then
+ with vg^ do
+ begin
+ Tint:= $FF0000FF;
+ State:= ord(sprHealth)
+ end;
inc(i, 5);
end;
end
@@ -1511,19 +1522,20 @@
function GearsNear(X, Y: hwFloat; Kind: TGearType; r: LongInt): TPGearArray;
var
t: PGear;
+ l: Longword;
begin
r:= r*r;
GearsNear := nil;
t := GearsList;
- while t <> nil do begin
- if (t^.Kind = Kind) then begin
- if (X - t^.X)*(X - t^.X) + (Y - t^.Y)*(Y-t^.Y) <
- int2hwFloat(r) then
+ while t <> nil do
+ begin
+ if (t^.Kind = Kind)
+ and ((X - t^.X)*(X - t^.X) + (Y - t^.Y)*(Y-t^.Y) < int2hwFloat(r)) then
begin
- SetLength(GearsNear, Length(GearsNear)+1);
- GearsNear[High(GearsNear)] := t;
+ l:= Length(GearsNear);
+ SetLength(GearsNear, l + 1);
+ GearsNear[l] := t;
end;
- end;
t := t^.NextGear;
end;
end;
--- a/hedgewars/uGearsRender.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uGearsRender.pas Mon Aug 15 21:49:09 2011 +0200
@@ -603,6 +603,9 @@
amSeduction: begin
DrawRotated(sprHandSeduction, hx, hy, sign, aangle);
DrawCircle(ox, oy, 248, 4, $FF, $00, $00, $AA);
+ //Tint($FF, $0, $0, $AA);
+ //DrawTexture(ox - 240, oy - 240, SpritesData[sprVampiric].Texture, 10);
+ //Tint($FF, $FF, $FF, $FF);
end;
amVampiric: DrawRotatedF(sprHandVamp, hx, hy, (RealTicks div 125) mod 4, sign, aangle);
amRCPlane: begin
--- a/hedgewars/uRender.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uRender.pas Mon Aug 15 21:49:09 2011 +0200
@@ -50,8 +50,6 @@
implementation
uses uVariables;
-var
- lastTint: Longword;
procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt);
begin
@@ -72,7 +70,7 @@
begin
if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then exit;
-// don't draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
+// do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
if (abs(X) > W) and ((abs(X + W / 2) - W / 2) > cScreenWidth / cScaleFactor) then
exit;
if (abs(Y) > H) and ((abs(Y + H / 2 - (0.5 * cScreenHeight)) - H / 2) > cScreenHeight / cScaleFactor) then
@@ -141,7 +139,7 @@
hw, nx, ny: LongInt;
VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
begin
-// don't draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
+// do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
if (abs(X) > W) and ((abs(X + dir * OffsetX) - W / 2) * cScaleFactor > cScreenWidth) then
exit;
if (abs(Y) > H) and ((abs(Y + OffsetY - (0.5 * cScreenHeight)) - W / 2) * cScaleFactor > cScreenHeight) then
@@ -228,7 +226,7 @@
procedure DrawRotatedTex(Tex: PTexture; hw, hh, X, Y, Dir: LongInt; Angle: real);
var VertexBuffer: array [0..3] of TVertex2f;
begin
-// don't draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
+// do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
if (abs(X) > 2 * hw) and ((abs(X) - hw) > cScreenWidth / cScaleFactor) then
exit;
if (abs(Y) > 2 * hh) and ((abs(Y - 0.5 * cScreenHeight) - hh) > cScreenHeight / cScaleFactor) then
@@ -346,7 +344,7 @@
procedure DrawFillRect(r: TSDL_Rect);
var VertexBuffer: array [0..3] of TVertex2f;
begin
-// don't draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
+// do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
if (abs(r.x) > r.w) and ((abs(r.x + r.w / 2) - r.w / 2) * cScaleFactor > cScreenWidth) then
exit;
if (abs(r.y) > r.h) and ((abs(r.y + r.h / 2 - (0.5 * cScreenHeight)) - r.h / 2) * cScaleFactor > cScreenHeight) then
@@ -382,18 +380,18 @@
procedure DrawCircle(X, Y, Radius, Width: LongInt);
var
i: LongInt;
- CircleVertex: array [0..359] of TVertex2f;
+ CircleVertex: array [0..59] of TVertex2f;
begin
- for i := 0 to 359 do begin
- CircleVertex[i].X := X + Radius*cos(i*pi/180);
- CircleVertex[i].Y := Y + Radius*sin(i*pi/180);
+ for i := 0 to 59 do begin
+ CircleVertex[i].X := X + Radius*cos(i*pi/30);
+ CircleVertex[i].Y := Y + Radius*sin(i*pi/30);
end;
glDisable(GL_TEXTURE_2D);
glEnable(GL_LINE_SMOOTH);
glPushMatrix;
glLineWidth(Width);
glVertexPointer(2, GL_FLOAT, 0, @CircleVertex[0]);
- glDrawArrays(GL_LINE_LOOP, 0, 360);
+ glDrawArrays(GL_LINE_LOOP, 0, 60);
glPopMatrix;
glEnable(GL_TEXTURE_2D);
glDisable(GL_LINE_SMOOTH);
@@ -409,7 +407,7 @@
var l, r, t, b: real;
TextureBuffer: array [0..3] of TVertex2f;
begin
- // don't draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
+ // do not draw anything outside the visible screen space (first check fixes some sprite drawing, e.g. hedgehogs)
if (abs(X) > 32) and ((abs(X) - 16) * cScaleFactor > cScreenWidth) then
exit;
if (abs(Y) > 32) and ((abs(Y - 0.5 * cScreenHeight) - 16) * cScaleFactor > cScreenHeight) then
@@ -453,11 +451,16 @@
procedure Tint(r, g, b, a: Byte); inline;
-var nc, tw: Longword;
+const
+ lastTint: Longword = 0;
+var
+ nc, tw: Longword;
begin
nc:= (a shl 24) or (b shl 16) or (g shl 8) or r;
+
if nc = lastTint then
exit;
+
if cGrayScale then
begin
tw:= round(r * RGB_LUMINANCE_RED + g * RGB_LUMINANCE_GREEN + b * RGB_LUMINANCE_BLUE);
--- a/hedgewars/uScript.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uScript.pas Mon Aug 15 21:49:09 2011 +0200
@@ -30,6 +30,7 @@
* unnoticed and render the parameter useless!)
*)
interface
+
procedure ScriptPrintStack;
procedure ScriptClearStack;
@@ -45,6 +46,7 @@
function ParseCommandOverride(key, value : shortstring) : shortstring;
+
procedure initModule;
procedure freeModule;
--- a/hedgewars/uStore.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uStore.pas Mon Aug 15 21:49:09 2011 +0200
@@ -390,13 +390,13 @@
i, t: LongInt;
begin
for ii:= Low(TSprite) to High(TSprite) do
- begin
+ begin
FreeTexture(SpritesData[ii].Texture);
SpritesData[ii].Texture:= nil;
if SpritesData[ii].Surface <> nil then
SDL_FreeSurface(SpritesData[ii].Surface);
SpritesData[ii].Surface:= nil;
- end;
+ end;
SDL_FreeSurface(MissionIcons);
FreeTexture(ropeIconTex);
FreeTexture(HHTexture);
@@ -405,14 +405,12 @@
FreeTexture(SyncTexture);
// free all ammo name textures
for ai:= Low(TAmmoType) to High(TAmmoType) do
- begin
FreeTexture(Ammoz[ai].NameTex);
- end;
+
// free all count textures
for i:= Low(CountTexz) to High(CountTexz) do
- begin
FreeTexture(CountTexz[i]);
- end;
+
// free all team and hedgehog textures
for t:= 0 to Pred(TeamsCount) do
begin
@@ -465,10 +463,10 @@
tmpsurf:= IMG_Load(Str2PChar(s));
if tmpsurf = nil then
- begin
+ begin
OutError(msgFailed, (imageFlags and ifCritical) <> 0);
exit(nil)
- end;
+ end;
if ((imageFlags and ifIgnoreCaps) = 0) and ((tmpsurf^.w > MaxTextureSize) or (tmpsurf^.h > MaxTextureSize)) then
begin
@@ -943,7 +941,7 @@
SDL_FreeSurface(ico)
end;
- // set window caption
+ // set window title
SDL_WM_SetCaption('Hedgewars', nil);
if SDLPrimSurface <> nil then
@@ -972,8 +970,13 @@
{$ELSE}
if not cOnlyStats then
begin
+{$IFDEF WIN32}
+ s:= SDL_getenv('SDL_VIDEO_CENTERED');
+ SDL_putenv('SDL_VIDEO_CENTERED=1');
+{$ENDIF}
SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, cBits, flags);
SDLTry(SDLPrimSurface <> nil, true);
+{$IFDEF WIN32}SDL_putenv(str2pchar('SDL_VIDEO_CENTERED=' + s));{$ENDIF}
end;
{$ENDIF}
@@ -1006,9 +1009,7 @@
end;
// init all count texture pointers
for i:= Low(CountTexz) to High(CountTexz) do
- begin
CountTexz[i] := nil;
- end;
end;
procedure freeModule;
--- a/hedgewars/uTypes.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uTypes.pas Mon Aug 15 21:49:09 2011 +0200
@@ -102,11 +102,11 @@
// Gears that are _only_ of visual nature (e.g. background stuff, visual effects, speechbubbles, etc.)
TVisualGearType = (vgtFlake, vgtCloud, vgtExplPart, vgtExplPart2, vgtFire,
vgtSmallDamageTag, vgtTeamHealthSorter, vgtSpeechBubble, vgtBubble,
- vgtSteam, vgtAmmo, vgtSmoke, vgtSmokeWhite, vgtHealth, vgtShell,
+ vgtSteam, vgtAmmo, vgtSmoke, vgtSmokeWhite, vgtShell,
vgtDust, vgtSplash, vgtDroplet, vgtSmokeRing, vgtBeeTrace, vgtEgg,
vgtFeather, vgtHealthTag, vgtSmokeTrace, vgtEvilTrace, vgtExplosion,
vgtBigExplosion, vgtChunk, vgtNote, vgtLineTrail, vgtBulletHit, vgtCircle,
- vgtSmoothWindBar);
+ vgtSmoothWindBar, vgtStraightShot);
TGearsType = set of TGearType;
--- a/hedgewars/uVariables.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uVariables.pas Mon Aug 15 21:49:09 2011 +0200
@@ -1389,7 +1389,7 @@
NameTex: nil;
Probability: 100;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or ammoprop_DontHold;
+ Ammo: (Propz: ammoprop_ForwMsgs or ammoprop_DontHold or ammoprop_NoCrosshair;
Count: 1;
NumPerTurn: 0;
Timer: 0;
@@ -2505,11 +2505,11 @@
else
cMaxCaptions:= 4;
- vobSDFrameTicks:= 0;
- vobSDFramesCount:= 0;
+ vobSDFrameTicks:= 99999;
+ vobSDFramesCount:= 4;
vobSDCount:= 30 * cScreenSpace div LAND_WIDTH;
- vobSDVelocity:= 0;
- vobSDFallSpeed:= 0;
+ vobSDVelocity:= 15;
+ vobSDFallSpeed:= 250;
LuaGoals:= '';
end;
--- a/hedgewars/uVisualGears.pas Mon Aug 15 21:45:27 2011 +0200
+++ b/hedgewars/uVisualGears.pas Mon Aug 15 21:49:09 2011 +0200
@@ -47,7 +47,7 @@
procedure AddDamageTag(X, Y, Damage, Color: LongWord);
implementation
-uses uSound, uMobile, uVariables, uTextures, uRender, Math, uRenderUtils;
+uses uSound, uMobile, uVariables, uTextures, uRender, Math, uRenderUtils, uStore;
const cExplFrameTicks = 110;
@@ -90,7 +90,6 @@
@doStepAmmo,
@doStepSmoke,
@doStepSmoke,
- @doStepHealth,
@doStepShell,
@doStepDust,
@doStepSplash,
@@ -109,7 +108,8 @@
@doStepLineTrail,
@doStepBulletHit,
@doStepCircle,
- @doStepSmoothWindBar
+ @doStepSmoothWindBar,
+ @doStepStraightShot
);
function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType; State: LongWord = 0; Critical: Boolean = false): PVisualGear;
@@ -118,12 +118,9 @@
t: Longword;
sp: real;
begin
-if (GameType = gmtSave) or (fastUntilLag and (GameType = gmtNet)) then // we are scrolling now
- if (Kind <> vgtCloud) and not Critical then
- begin
- AddVisualGear:= nil;
- exit
- end;
+AddVisualGear:= nil;
+if ((GameType = gmtSave) or (fastUntilLag and (GameType = gmtNet))) and // we are scrolling now
+ ((Kind <> vgtCloud) and not Critical) then exit;
if ((cReducedQuality and rqAntiBoom) <> 0) and
not Critical and
@@ -136,11 +133,7 @@
vgtSmokeTrace,
vgtEvilTrace,
vgtNote,
- vgtSmoothWindBar]) then
- begin
- AddVisualGear:= nil;
- exit
- end;
+ vgtSmoothWindBar]) then exit;
inc(VGCounter);
New(gear);
@@ -242,14 +235,6 @@
Frame:= 7 - random(2);
FrameTicks:= cExplFrameTicks * 2;
end;
- vgtHealth: begin
- dx:= 0.001 * random(45);
- dy:= 0.001 * (random(20) + 25);
- Tint:= $00FF00FF; // default to green
- if random(2) = 0 then dx := -dx;
- Frame:= 0;
- FrameTicks:= random(750) + 1250;
- end;
vgtDust: begin
dx:= 0.005 * (random(15) + 10);
dy:= 0.001 * (random(40) + 20);
@@ -295,7 +280,8 @@
Frame:= 1
end;
vgtHealthTag: begin
- gear^.Timer:= 1500;
+ Frame:= 0;
+ Timer:= 1500;
//gear^.Z:= 2002;
end;
vgtSmokeTrace,
@@ -331,6 +317,15 @@
Angle := 0;
end;
vgtSmoothWindBar: Tag:= hwRound(cWindSpeed * 72 / cMaxWindSpeed);
+ vgtStraightShot: begin
+ dx:= 0.001 * random(45);
+ dy:= 0.001 * (random(20) + 25);
+ State:= ord(sprHealth);
+ if random(2) = 0 then dx := -dx;
+ Frame:= 0;
+ FrameTicks:= random(750) + 1250;
+ State:= ord(sprSnowDust);
+ end;
end;
if State <> 0 then gear^.State:= State;
@@ -483,8 +478,19 @@
DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex);
end;
vgtSmallDamageTag: DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex);
- vgtHealthTag: if Gear^.Tex <> nil then DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex);
- vgtHealth: DrawSprite(sprHealth, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, 0);
+ vgtHealthTag: if Gear^.Tex <> nil then
+ begin
+ if Gear^.Frame = 0 then
+ DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex)
+ else
+ begin
+ SetScale(cDefaultZoomLevel);
+ DrawTexture(round(Gear^.X), round(Gear^.Y), Gear^.Tex);
+ SetScale(zoom)
+ end
+ end;
+//if Gear^.Tex <> nil then DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex);
+ vgtStraightShot: DrawRotatedF(TSprite(Gear^.State), round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
end;
if (cReducedQuality and rqAntiBoom) = 0 then
case Gear^.Kind of
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Mon Aug 15 21:45:27 2011 +0200
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Mon Aug 15 21:49:09 2011 +0200
@@ -1802,6 +1802,7 @@
buildSettings = {
APPLY_RULES_IN_COPY_FILES = YES;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ CODE_SIGN_ENTITLEMENTS = "Entitlements-Development.plist";
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
FPC_COMMON_OPTIONS = "-dIPHONEOS -Cs2000000 -vwi -B -Sgix";
Binary file share/hedgewars/Data/Graphics/SuddenDeath/SDFlake.png has changed
--- a/share/hedgewars/Data/Scripts/Multiplayer/No_Jumping.lua Mon Aug 15 21:45:27 2011 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/No_Jumping.lua Mon Aug 15 21:49:09 2011 +0200
@@ -4,17 +4,31 @@
loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+local specialGear = nil
+
function onGameInit()
Goals = loc("Jumping is disabled")
end
---function onGameStart()
--- ShowMission(LOC_NOT("NO JUMPING"), LOC_NOT("- Jumping is disabled"), LOC_NOT("Good luck out there!"), 0, 0)
---end
-
function onNewTurn()
SetInputMask(band(0xFFFFFFFF, bnot(gmLJump + gmHJump)))
end
+function onGearAdd(gear)
+
+ if (GetGearType(gear) == gtJetpack) or (GetGearType(gear) == gtRope) or (GetGearType(gear) == gtParachute) then
+ specialGear = gear
+ SetInputMask(band(0xFFFFFFFF, bnot(gmHJump)))
+ end
+end
+function onGearDelete(gear)
+
+ if (GetGearType(gear) == gtJetpack) or (GetGearType(gear) == gtRope) or (GetGearType(gear) == gtParachute) then
+ specialGear = nil
+ SetInputMask(band(0xFFFFFFFF, bnot(gmLJump + gmHJump)))
+ end
+
+end
+