"
diff -r 5a27ed7f17b7 -r c64c0b413ff7 cmake_modules/FindSparkle.cmake
--- a/cmake_modules/FindSparkle.cmake Sun Nov 04 23:56:27 2012 +0400
+++ b/cmake_modules/FindSparkle.cmake Mon Nov 05 00:32:41 2012 +0400
@@ -24,14 +24,14 @@
endif ()
if (SPARKLE_FOUND)
- if (NOT Sparkle_FIND_QUIETLY)
+ if (NOT SPARKLE_FIND_QUIETLY)
message(STATUS "Found Sparkle: ${SPARKLE_LIBRARY}")
endif ()
else ()
- if (Sparkle_FIND_REQUIRED)
+ if (SPARKLE_FIND_REQUIRED)
message(FATAL_ERROR "Could NOT find Sparkle framework")
else ()
- if (NOT Sparkle_FIND_QUIETLY)
+ if (NOT SPARKLE_FIND_QUIETLY)
message(STATUS "Could NOT find Sparkle framework, autoupdate feature will be disabled")
endif()
endif ()
diff -r 5a27ed7f17b7 -r c64c0b413ff7 gameServer/Actions.hs
--- a/gameServer/Actions.hs Sun Nov 04 23:56:27 2012 +0400
+++ b/gameServer/Actions.hs Mon Nov 05 00:32:41 2012 +0400
@@ -299,7 +299,7 @@
chans <- liftM (map sendChan) $! sameProtoClientsS proto
mapM_ processAction [
- AnswerClients chans ("ROOM" : "ADD" : roomInfo n rm)
+ AnswerClients chans ("ROOM" : "ADD" : roomInfo n rm{playersIn = 1})
]
@@ -395,6 +395,7 @@
teams = Prelude.filter (\t -> teamName /= teamname t) $ teams r
, gameInfo = liftM (\g -> g{leftTeams = teamName : leftTeams g}) $ gameInfo r
})
+ : SendUpdateOnThisRoom
: AnswerClients chans ["REMOVE_TEAM", teamName]
: [SendTeamRemovalMessage teamName | inGame]
diff -r 5a27ed7f17b7 -r c64c0b413ff7 gameServer/HWProtoInRoomState.hs
--- a/gameServer/HWProtoInRoomState.hs Sun Nov 04 23:56:27 2012 +0400
+++ b/gameServer/HWProtoInRoomState.hs Mon Nov 05 00:32:41 2012 +0400
@@ -107,7 +107,6 @@
[ProtocolError "Not team owner!"]
else
[RemoveTeam tName,
- SendUpdateOnThisRoom,
ModifyClient
(\c -> c{
teamsInGame = teamsInGame c - 1,
diff -r 5a27ed7f17b7 -r c64c0b413ff7 hedgewars/hwLibrary.pas
--- a/hedgewars/hwLibrary.pas Sun Nov 04 23:56:27 2012 +0400
+++ b/hedgewars/hwLibrary.pas Mon Nov 05 00:32:41 2012 +0400
@@ -99,14 +99,18 @@
JNI_HW_versionInfoVersion := envderef^.NewStringUTF(env, PChar(cVersionString));
end;
+procedure JNI_HW_GenLandPreview(env: PJNIEnv; c: JClass; port: JInt); cdecl;
+begin
+ GenLandPreview(port);
+end;
+
exports
JNI_HW_versionInfoNet name Java_Prefix+'HWversionInfoNetProto',
JNI_HW_versionInfoVersion name Java_Prefix+'HWversionInfoVersion',
- GenLandPreview name Java_Prefix + 'GenLandPreview',
+ JNI_HW_GenLandPreview name Java_Prefix + 'HWGenLandPreview',
HW_getNumberOfweapons name Java_Prefix + 'HWgetNumberOfWeapons',
HW_getMaxNumberOfHogs name Java_Prefix + 'HWgetMaxNumberOfHogs',
HW_getMaxNumberOfTeams name Java_Prefix + 'HWgetMaxNumberOfTeams',
- HW_terminate name Java_Prefix + 'HWterminate',
Game;
{$ELSE}
exports
diff -r 5a27ed7f17b7 -r c64c0b413ff7 hedgewars/hwengine.pas
--- a/hedgewars/hwengine.pas Sun Nov 04 23:56:27 2012 +0400
+++ b/hedgewars/hwengine.pas Mon Nov 05 00:32:41 2012 +0400
@@ -271,7 +271,7 @@
CurrTime:= SDL_GetTicks();
if PrevTime + longword(cTimerInterval) <= CurrTime then
begin
- isTerminated:= DoTimer(CurrTime - PrevTime);
+ isTerminated := isTerminated or DoTimer(CurrTime - PrevTime);
PrevTime:= CurrTime
end
else SDL_Delay(1);
diff -r 5a27ed7f17b7 -r c64c0b413ff7 hedgewars/uLand.pas
--- a/hedgewars/uLand.pas Sun Nov 04 23:56:27 2012 +0400
+++ b/hedgewars/uLand.pas Mon Nov 05 00:32:41 2012 +0400
@@ -124,7 +124,7 @@
SDL_FreeSurface(tmpsurf);
end;
-procedure SetPoints(var Template: TEdgeTemplate; var pa: TPixAr);
+procedure SetPoints(var Template: TEdgeTemplate; var pa: TPixAr; fps: PPointArray);
var i: LongInt;
begin
with Template do
@@ -145,7 +145,7 @@
if pa.ar[i].x <> NTPX then
pa.ar[i].x:= LAND_WIDTH - 1 - pa.ar[i].x;
for i:= 0 to pred(FillPointsCount) do
- FillPoints^[i].x:= LAND_WIDTH - 1 - FillPoints^[i].x;
+ fps^[i].x:= LAND_WIDTH - 1 - fps^[i].x;
end;
(* Experiment in making this option more useful
@@ -178,9 +178,9 @@
end;
for i:= 0 to pred(FillPointsCount) do
begin
- dec(FillPoints^[i].y, 100);
- if FillPoints^[i].y < 0 then
- FillPoints^[i].y:= 0;
+ dec(fps^[i].y, 100);
+ if fps^[i].y < 0 then
+ fps^[i].y:= 0;
end;
end;
@@ -189,7 +189,7 @@
for i:= 0 to pred(BasePointsCount) do
pa.ar[i].y:= LAND_HEIGHT - 1 - pa.ar[i].y;
for i:= 0 to pred(FillPointsCount) do
- FillPoints^[i].y:= LAND_HEIGHT - 1 - FillPoints^[i].y;
+ fps^[i].y:= LAND_HEIGHT - 1 - fps^[i].y;
end;
end
end;
@@ -199,13 +199,15 @@
var pa: TPixAr;
i: Longword;
y, x: Longword;
+ fps: TPointArray;
begin
+ fps:=Template.FillPoints^;
ResizeLand(Template.TemplateWidth, Template.TemplateHeight);
for y:= 0 to LAND_HEIGHT - 1 do
for x:= 0 to LAND_WIDTH - 1 do
Land[y, x]:= lfBasic;
{$HINTS OFF}
- SetPoints(Template, pa);
+ SetPoints(Template, pa, @fps);
{$HINTS ON}
for i:= 1 to Template.BezierizeCount do
begin
@@ -222,7 +224,7 @@
with Template do
for i:= 0 to pred(FillPointsCount) do
- with FillPoints^[i] do
+ with fps[i] do
FillLand(x, y);
DrawEdge(pa, lfBasic);
@@ -405,6 +407,7 @@
procedure MakeFortsMap;
var tmpsurf: PSDL_Surface;
begin
+ResizeLand(4096,2048);
MaxHedgehogs:= 32;
// For now, defining a fort is playable area as 3072x1200 - there are no tall forts. The extra height is to avoid triggering border with current code, also if user turns on a border, it will give a bit more maneuvering room.
playHeight:= 1200;
diff -r 5a27ed7f17b7 -r c64c0b413ff7 hedgewars/uLandTemplates.pas
--- a/hedgewars/uLandTemplates.pas Sun Nov 04 23:56:27 2012 +0400
+++ b/hedgewars/uLandTemplates.pas Mon Nov 05 00:32:41 2012 +0400
@@ -24,10 +24,12 @@
const NTPX = Low(SmallInt);
-type TPointArray = array[0..64] of TSDL_Rect;
+type TRectArray = array[0..64] of TSDL_Rect;
+ PRectArray = ^TRectArray;
+ TPointArray = array[0..64] of TPoint;
PPointArray = ^TPointArray;
TEdgeTemplate = record
- BasePoints: PPointArray;
+ BasePoints: PRectArray;
BasePointsCount: Longword;
FillPoints: PPointArray;
FillPointsCount: Longword;
diff -r 5a27ed7f17b7 -r c64c0b413ff7 hedgewars/uStats.pas
--- a/hedgewars/uStats.pas Sun Nov 04 23:56:27 2012 +0400
+++ b/hedgewars/uStats.pas Mon Nov 05 00:32:41 2012 +0400
@@ -36,7 +36,7 @@
procedure hedgehogFlight(Gear: PGear; time: Longword);
implementation
-uses uSound, uLocale, uVariables, uUtils, uIO, uCaptions, uDebug, uMisc;
+uses uSound, uLocale, uVariables, uUtils, uIO, uCaptions, uDebug, uMisc, uConsole;
var DamageClan : Longword = 0;
DamageTotal : Longword = 0;
@@ -185,10 +185,10 @@
begin
if time > 4000 then
begin
- writeln(stdout, 'FLIGHT');
- writeln(stdout, Gear^.Hedgehog^.Team^.TeamName);
- writeln(stdout, inttostr(time));
- writeln(stdout, '');
+ WriteLnToConsole('FLIGHT');
+ WriteLnToConsole(Gear^.Hedgehog^.Team^.TeamName);
+ WriteLnToConsole(inttostr(time));
+ WriteLnToConsole( '');
end
end;
@@ -293,14 +293,14 @@
// now to console
if winnersClan <> nil then
begin
- writeln(stdout, 'WINNERS');
+ WriteLnToConsole('WINNERS');
for t:= 0 to winnersClan^.TeamsNumber - 1 do
- writeln(stdout, winnersClan^.Teams[t]^.TeamName);
+ WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
end
else
- writeln(stdout, 'DRAW');
+ WriteLnToConsole('DRAW');
-writeln(stdout, '');
+WriteLnToConsole('');
end;
procedure initModule;
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/Version_script.in
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/Version_script.in Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,49 @@
+#
+# Export file for libvorbisidec
+#
+# Only the symbols listed in the global section will be callable from
+# applications linking to libvorbisidec.
+#
+
+@PACKAGE@.so.1
+{
+ global:
+ ov_clear;
+ ov_open;
+ ov_open_callbacks;
+ ov_test;
+ ov_test_callbacks;
+ ov_test_open;
+ ov_bitrate;
+ ov_bitrate_instant;
+ ov_streams;
+ ov_seekable;
+ ov_serialnumber;
+ ov_raw_total;
+ ov_pcm_total;
+ ov_time_total;
+ ov_raw_seek;
+ ov_pcm_seek;
+ ov_pcm_seek_page;
+ ov_time_seek;
+ ov_time_seek_page;
+ ov_raw_tell;
+ ov_pcm_tell;
+ ov_time_tell;
+ ov_info;
+ ov_comment;
+ ov_read;
+
+ vorbis_info_init;
+ vorbis_info_clear;
+ vorbis_info_blocksize;
+ vorbis_comment_init;
+ vorbis_comment_add;
+ vorbis_comment_add_tag;
+ vorbis_comment_query;
+ vorbis_comment_query_count;
+ vorbis_comment_clear;
+
+ local:
+ *;
+};
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/backends.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/backends.h Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,130 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * *
+ ********************************************************************
+
+ function: backend and mapping structures
+
+ ********************************************************************/
+
+/* this is exposed up here because we need it for static modes.
+ Lookups for each backend aren't exposed because there's no reason
+ to do so */
+
+#ifndef _vorbis_backend_h_
+#define _vorbis_backend_h_
+
+#include "codec_internal.h"
+
+/* this would all be simpler/shorter with templates, but.... */
+/* Transform backend generic *************************************/
+
+/* only mdct right now. Flesh it out more if we ever transcend mdct
+ in the transform domain */
+
+/* Floor backend generic *****************************************/
+typedef struct{
+ vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *);
+ vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_mode *,
+ vorbis_info_floor *);
+ void (*free_info) (vorbis_info_floor *);
+ void (*free_look) (vorbis_look_floor *);
+ void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *);
+ int (*inverse2) (struct vorbis_block *,vorbis_look_floor *,
+ void *buffer,ogg_int32_t *);
+} vorbis_func_floor;
+
+typedef struct{
+ int order;
+ long rate;
+ long barkmap;
+
+ int ampbits;
+ int ampdB;
+
+ int numbooks; /* <= 16 */
+ int books[16];
+
+} vorbis_info_floor0;
+
+#define VIF_POSIT 63
+#define VIF_CLASS 16
+#define VIF_PARTS 31
+typedef struct{
+ int partitions; /* 0 to 31 */
+ int partitionclass[VIF_PARTS]; /* 0 to 15 */
+
+ int class_dim[VIF_CLASS]; /* 1 to 8 */
+ int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<
+#include
+#include
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+
+#include "window.h"
+#include "registry.h"
+#include "misc.h"
+
+static int ilog(unsigned int v){
+ int ret=0;
+ if(v)--v;
+ while(v){
+ ret++;
+ v>>=1;
+ }
+ return(ret);
+}
+
+/* pcm accumulator examples (not exhaustive):
+
+ <-------------- lW ---------------->
+ <--------------- W ---------------->
+: .....|..... _______________ |
+: .''' | '''_--- | |\ |
+:.....''' |_____--- '''......| | \_______|
+:.................|__________________|_______|__|______|
+ |<------ Sl ------>| > Sr < |endW
+ |beginSl |endSl | |endSr
+ |beginW |endlW |beginSr
+
+
+ |< lW >|
+ <--------------- W ---------------->
+ | | .. ______________ |
+ | | ' `/ | ---_ |
+ |___.'___/`. | ---_____|
+ |_______|__|_______|_________________|
+ | >|Sl|< |<------ Sr ----->|endW
+ | | |endSl |beginSr |endSr
+ |beginW | |endlW
+ mult[0] |beginSl mult[n]
+
+ <-------------- lW ----------------->
+ |<--W-->|
+: .............. ___ | |
+: .''' |`/ \ | |
+:.....''' |/`....\|...|
+:.........................|___|___|___|
+ |Sl |Sr |endW
+ | | |endSr
+ | |beginSr
+ | |endSl
+ |beginSl
+ |beginW
+*/
+
+/* block abstraction setup *********************************************/
+
+#ifndef WORD_ALIGN
+#define WORD_ALIGN 8
+#endif
+
+int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){
+ memset(vb,0,sizeof(*vb));
+ vb->vd=v;
+ vb->localalloc=0;
+ vb->localstore=NULL;
+
+ return(0);
+}
+
+void *_vorbis_block_alloc(vorbis_block *vb,long bytes){
+ bytes=(bytes+(WORD_ALIGN-1)) & ~(WORD_ALIGN-1);
+ if(bytes+vb->localtop>vb->localalloc){
+ /* can't just _ogg_realloc... there are outstanding pointers */
+ if(vb->localstore){
+ struct alloc_chain *link=(struct alloc_chain *)_ogg_malloc(sizeof(*link));
+ vb->totaluse+=vb->localtop;
+ link->next=vb->reap;
+ link->ptr=vb->localstore;
+ vb->reap=link;
+ }
+ /* highly conservative */
+ vb->localalloc=bytes;
+ vb->localstore=_ogg_malloc(vb->localalloc);
+ vb->localtop=0;
+ }
+ {
+ void *ret=(void *)(((char *)vb->localstore)+vb->localtop);
+ vb->localtop+=bytes;
+ return ret;
+ }
+}
+
+/* reap the chain, pull the ripcord */
+void _vorbis_block_ripcord(vorbis_block *vb){
+ /* reap the chain */
+ struct alloc_chain *reap=vb->reap;
+ while(reap){
+ struct alloc_chain *next=reap->next;
+ _ogg_free(reap->ptr);
+ memset(reap,0,sizeof(*reap));
+ _ogg_free(reap);
+ reap=next;
+ }
+ /* consolidate storage */
+ if(vb->totaluse){
+ vb->localstore=_ogg_realloc(vb->localstore,vb->totaluse+vb->localalloc);
+ vb->localalloc+=vb->totaluse;
+ vb->totaluse=0;
+ }
+
+ /* pull the ripcord */
+ vb->localtop=0;
+ vb->reap=NULL;
+}
+
+int vorbis_block_clear(vorbis_block *vb){
+ _vorbis_block_ripcord(vb);
+ if(vb->localstore)_ogg_free(vb->localstore);
+
+ memset(vb,0,sizeof(*vb));
+ return(0);
+}
+
+static int _vds_init(vorbis_dsp_state *v,vorbis_info *vi){
+ int i;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ private_state *b=NULL;
+
+ memset(v,0,sizeof(*v));
+ b=(private_state *)(v->backend_state=_ogg_calloc(1,sizeof(*b)));
+
+ v->vi=vi;
+ b->modebits=ilog(ci->modes);
+
+ /* Vorbis I uses only window type 0 */
+ b->window[0]=_vorbis_window(0,ci->blocksizes[0]/2);
+ b->window[1]=_vorbis_window(0,ci->blocksizes[1]/2);
+
+ /* finish the codebooks */
+ if(!ci->fullbooks){
+ ci->fullbooks=(codebook *)_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
+ for(i=0;ibooks;i++){
+ vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]);
+ /* decode codebooks are now standalone after init */
+ vorbis_staticbook_destroy(ci->book_param[i]);
+ ci->book_param[i]=NULL;
+ }
+ }
+
+ v->pcm_storage=ci->blocksizes[1];
+ v->pcm=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcm));
+ v->pcmret=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcmret));
+ for(i=0;ichannels;i++)
+ v->pcm[i]=(ogg_int32_t *)_ogg_calloc(v->pcm_storage,sizeof(*v->pcm[i]));
+
+ /* all 1 (large block) or 0 (small block) */
+ /* explicitly set for the sake of clarity */
+ v->lW=0; /* previous window size */
+ v->W=0; /* current window size */
+
+ /* initialize all the mapping/backend lookups */
+ b->mode=(vorbis_look_mapping **)_ogg_calloc(ci->modes,sizeof(*b->mode));
+ for(i=0;imodes;i++){
+ int mapnum=ci->mode_param[i]->mapping;
+ int maptype=ci->map_type[mapnum];
+ b->mode[i]=_mapping_P[maptype]->look(v,ci->mode_param[i],
+ ci->map_param[mapnum]);
+ }
+ return(0);
+}
+
+int vorbis_synthesis_restart(vorbis_dsp_state *v){
+ vorbis_info *vi=v->vi;
+ codec_setup_info *ci;
+
+ if(!v->backend_state)return -1;
+ if(!vi)return -1;
+ ci=vi->codec_setup;
+ if(!ci)return -1;
+
+ v->centerW=ci->blocksizes[1]/2;
+ v->pcm_current=v->centerW;
+
+ v->pcm_returned=-1;
+ v->granulepos=-1;
+ v->sequence=-1;
+ ((private_state *)(v->backend_state))->sample_count=-1;
+
+ return(0);
+}
+
+int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){
+ _vds_init(v,vi);
+ vorbis_synthesis_restart(v);
+
+ return(0);
+}
+
+void vorbis_dsp_clear(vorbis_dsp_state *v){
+ int i;
+ if(v){
+ vorbis_info *vi=v->vi;
+ codec_setup_info *ci=(codec_setup_info *)(vi?vi->codec_setup:NULL);
+ private_state *b=(private_state *)v->backend_state;
+
+ if(v->pcm){
+ for(i=0;ichannels;i++)
+ if(v->pcm[i])_ogg_free(v->pcm[i]);
+ _ogg_free(v->pcm);
+ if(v->pcmret)_ogg_free(v->pcmret);
+ }
+
+ /* free mode lookups; these are actually vorbis_look_mapping structs */
+ if(ci){
+ for(i=0;imodes;i++){
+ int mapnum=ci->mode_param[i]->mapping;
+ int maptype=ci->map_type[mapnum];
+ if(b && b->mode)_mapping_P[maptype]->free_look(b->mode[i]);
+ }
+ }
+
+ if(b){
+ if(b->mode)_ogg_free(b->mode);
+ _ogg_free(b);
+ }
+
+ memset(v,0,sizeof(*v));
+ }
+}
+
+/* Unlike in analysis, the window is only partially applied for each
+ block. The time domain envelope is not yet handled at the point of
+ calling (as it relies on the previous block). */
+
+int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
+ vorbis_info *vi=v->vi;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ private_state *b=v->backend_state;
+ int i,j;
+
+ if(v->pcm_current>v->pcm_returned && v->pcm_returned!=-1)return(OV_EINVAL);
+
+ v->lW=v->W;
+ v->W=vb->W;
+ v->nW=-1;
+
+ if((v->sequence==-1)||
+ (v->sequence+1 != vb->sequence)){
+ v->granulepos=-1; /* out of sequence; lose count */
+ b->sample_count=-1;
+ }
+
+ v->sequence=vb->sequence;
+
+ if(vb->pcm){ /* no pcm to process if vorbis_synthesis_trackonly
+ was called on block */
+ int n=ci->blocksizes[v->W]/2;
+ int n0=ci->blocksizes[0]/2;
+ int n1=ci->blocksizes[1]/2;
+
+ int thisCenter;
+ int prevCenter;
+
+ if(v->centerW){
+ thisCenter=n1;
+ prevCenter=0;
+ }else{
+ thisCenter=0;
+ prevCenter=n1;
+ }
+
+ /* v->pcm is now used like a two-stage double buffer. We don't want
+ to have to constantly shift *or* adjust memory usage. Don't
+ accept a new block until the old is shifted out */
+
+ /* overlap/add PCM */
+
+ for(j=0;jchannels;j++){
+ /* the overlap/add section */
+ if(v->lW){
+ if(v->W){
+ /* large/large */
+ ogg_int32_t *pcm=v->pcm[j]+prevCenter;
+ ogg_int32_t *p=vb->pcm[j];
+ for(i=0;ipcm[j]+prevCenter+n1/2-n0/2;
+ ogg_int32_t *p=vb->pcm[j];
+ for(i=0;iW){
+ /* small/large */
+ ogg_int32_t *pcm=v->pcm[j]+prevCenter;
+ ogg_int32_t *p=vb->pcm[j]+n1/2-n0/2;
+ for(i=0;ipcm[j]+prevCenter;
+ ogg_int32_t *p=vb->pcm[j];
+ for(i=0;ipcm[j]+thisCenter;
+ ogg_int32_t *p=vb->pcm[j]+n;
+ for(i=0;icenterW)
+ v->centerW=0;
+ else
+ v->centerW=n1;
+
+ /* deal with initial packet state; we do this using the explicit
+ pcm_returned==-1 flag otherwise we're sensitive to first block
+ being short or long */
+
+ if(v->pcm_returned==-1){
+ v->pcm_returned=thisCenter;
+ v->pcm_current=thisCenter;
+ }else{
+ v->pcm_returned=prevCenter;
+ v->pcm_current=prevCenter+
+ ci->blocksizes[v->lW]/4+
+ ci->blocksizes[v->W]/4;
+ }
+
+ }
+
+ /* track the frame number... This is for convenience, but also
+ making sure our last packet doesn't end with added padding. If
+ the last packet is partial, the number of samples we'll have to
+ return will be past the vb->granulepos.
+
+ This is not foolproof! It will be confused if we begin
+ decoding at the last page after a seek or hole. In that case,
+ we don't have a starting point to judge where the last frame
+ is. For this reason, vorbisfile will always try to make sure
+ it reads the last two marked pages in proper sequence */
+
+ if(b->sample_count==-1){
+ b->sample_count=0;
+ }else{
+ b->sample_count+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
+ }
+
+ if(v->granulepos==-1){
+ if(vb->granulepos!=-1){ /* only set if we have a position to set to */
+
+ v->granulepos=vb->granulepos;
+
+ /* is this a short page? */
+ if(b->sample_count>v->granulepos){
+ /* corner case; if this is both the first and last audio page,
+ then spec says the end is cut, not beginning */
+ if(vb->eofflag){
+ /* trim the end */
+ /* no preceeding granulepos; assume we started at zero (we'd
+ have to in a short single-page stream) */
+ /* granulepos could be -1 due to a seek, but that would result
+ in a long coun`t, not short count */
+
+ v->pcm_current-=(b->sample_count-v->granulepos);
+ }else{
+ /* trim the beginning */
+ v->pcm_returned+=(b->sample_count-v->granulepos);
+ if(v->pcm_returned>v->pcm_current)
+ v->pcm_returned=v->pcm_current;
+ }
+
+ }
+
+ }
+ }else{
+ v->granulepos+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
+ if(vb->granulepos!=-1 && v->granulepos!=vb->granulepos){
+
+ if(v->granulepos>vb->granulepos){
+ long extra=v->granulepos-vb->granulepos;
+
+ if(extra)
+ if(vb->eofflag){
+ /* partial last frame. Strip the extra samples off */
+ v->pcm_current-=extra;
+ } /* else {Shouldn't happen *unless* the bitstream is out of
+ spec. Either way, believe the bitstream } */
+ } /* else {Shouldn't happen *unless* the bitstream is out of
+ spec. Either way, believe the bitstream } */
+ v->granulepos=vb->granulepos;
+ }
+ }
+
+ /* Update, cleanup */
+
+ if(vb->eofflag)v->eofflag=1;
+ return(0);
+}
+
+/* pcm==NULL indicates we just want the pending samples, no more */
+int vorbis_synthesis_pcmout(vorbis_dsp_state *v,ogg_int32_t ***pcm){
+ vorbis_info *vi=v->vi;
+ if(v->pcm_returned>-1 && v->pcm_returnedpcm_current){
+ if(pcm){
+ int i;
+ for(i=0;ichannels;i++)
+ v->pcmret[i]=v->pcm[i]+v->pcm_returned;
+ *pcm=v->pcmret;
+ }
+ return(v->pcm_current-v->pcm_returned);
+ }
+ return(0);
+}
+
+int vorbis_synthesis_read(vorbis_dsp_state *v,int bytes){
+ if(bytes && v->pcm_returned+bytes>v->pcm_current)return(OV_EINVAL);
+ v->pcm_returned+=bytes;
+ return(0);
+}
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/block.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/block.h Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,26 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2008 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * *
+ ********************************************************************
+
+ function: shared block functions
+
+ ********************************************************************/
+
+#ifndef _V_BLOCK_
+#define _V_BLOCK_
+
+#include "ivorbiscodec.h"
+
+extern void _vorbis_block_ripcord(vorbis_block *vb);
+extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
+
+#endif
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/registry.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/registry.c Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,50 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * *
+ ********************************************************************
+
+ function: registry for floor, res backends and channel mappings
+
+ ********************************************************************/
+
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "registry.h"
+#include "misc.h"
+
+
+/* seems like major overkill now; the backend numbers will grow into
+ the infrastructure soon enough */
+
+extern vorbis_func_floor floor0_exportbundle;
+extern vorbis_func_floor floor1_exportbundle;
+extern vorbis_func_residue residue0_exportbundle;
+extern vorbis_func_residue residue1_exportbundle;
+extern vorbis_func_residue residue2_exportbundle;
+extern vorbis_func_mapping mapping0_exportbundle;
+
+vorbis_func_floor *_floor_P[]={
+ &floor0_exportbundle,
+ &floor1_exportbundle,
+};
+
+vorbis_func_residue *_residue_P[]={
+ &residue0_exportbundle,
+ &residue1_exportbundle,
+ &residue2_exportbundle,
+};
+
+vorbis_func_mapping *_mapping_P[]={
+ &mapping0_exportbundle,
+};
+
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/registry.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/registry.h Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,40 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * *
+ ********************************************************************
+
+ function: registry for time, floor, res backends and channel mappings
+
+ ********************************************************************/
+
+#ifndef _V_REG_H_
+#define _V_REG_H_
+
+#define VI_TRANSFORMB 1
+#define VI_WINDOWB 1
+#define VI_TIMEB 1
+#define VI_FLOORB 2
+#define VI_RESB 3
+#define VI_MAPB 1
+
+#include "backends.h"
+
+#if defined(_WIN32) && defined(VORBISDLL_IMPORT)
+# define EXTERN __declspec(dllimport) extern
+#else
+# define EXTERN extern
+#endif
+
+EXTERN vorbis_func_floor *_floor_P[];
+EXTERN vorbis_func_residue *_residue_P[];
+EXTERN vorbis_func_mapping *_mapping_P[];
+
+#endif
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/sharedbook.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/sharedbook.c Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,439 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * *
+ ********************************************************************
+
+ function: basic shared codebook operations
+
+ ********************************************************************/
+
+#include
+#include
+#include
+#include "ogg.h"
+#include "misc.h"
+#include "ivorbiscodec.h"
+#include "codebook.h"
+
+/**** pack/unpack helpers ******************************************/
+int _ilog(unsigned int v){
+ int ret=0;
+ while(v){
+ ret++;
+ v>>=1;
+ }
+ return(ret);
+}
+
+/* 32 bit float (not IEEE; nonnormalized mantissa +
+ biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm
+ Why not IEEE? It's just not that important here. */
+
+#define VQ_FEXP 10
+#define VQ_FMAN 21
+#define VQ_FEXP_BIAS 768 /* bias toward values smaller than 1. */
+
+static ogg_int32_t _float32_unpack(long val,int *point){
+ long mant=val&0x1fffff;
+ int sign=val&0x80000000;
+ long exp =(val&0x7fe00000L)>>VQ_FMAN;
+
+ exp-=(VQ_FMAN-1)+VQ_FEXP_BIAS;
+
+ if(mant){
+ while(!(mant&0x40000000)){
+ mant<<=1;
+ exp-=1;
+ }
+
+ if(sign)mant= -mant;
+ }else{
+ sign=0;
+ exp=-9999;
+ }
+
+ *point=exp;
+ return mant;
+}
+
+/* given a list of word lengths, generate a list of codewords. Works
+ for length ordered or unordered, always assigns the lowest valued
+ codewords first. Extended to handle unused entries (length 0) */
+ogg_uint32_t *_make_words(long *l,long n,long sparsecount){
+ long i,j,count=0;
+ ogg_uint32_t marker[33];
+ ogg_uint32_t *r=(ogg_uint32_t *)_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r));
+ memset(marker,0,sizeof(marker));
+
+ for(i=0;i0){
+ ogg_uint32_t entry=marker[length];
+
+ /* when we claim a node for an entry, we also claim the nodes
+ below it (pruning off the imagined tree that may have dangled
+ from it) as well as blocking the use of any nodes directly
+ above for leaves */
+
+ /* update ourself */
+ if(length<32 && (entry>>length)){
+ /* error condition; the lengths must specify an overpopulated tree */
+ _ogg_free(r);
+ return(NULL);
+ }
+ r[count++]=entry;
+
+ /* Look to see if the next shorter marker points to the node
+ above. if so, update it and repeat. */
+ {
+ for(j=length;j>0;j--){
+
+ if(marker[j]&1){
+ /* have to jump branches */
+ if(j==1)
+ marker[1]++;
+ else
+ marker[j]=marker[j-1]<<1;
+ break; /* invariant says next upper marker would already
+ have been moved if it was on the same path */
+ }
+ marker[j]++;
+ }
+ }
+
+ /* prune the tree; the implicit invariant says all the longer
+ markers were dangling from our just-taken node. Dangle them
+ from our *new* node. */
+ for(j=length+1;j<33;j++)
+ if((marker[j]>>1) == entry){
+ entry=marker[j];
+ marker[j]=marker[j-1]<<1;
+ }else
+ break;
+ }else
+ if(sparsecount==0)count++;
+ }
+
+ /* bitreverse the words because our bitwise packer/unpacker is LSb
+ endian */
+ for(i=0,count=0;i>j)&1;
+ }
+
+ if(sparsecount){
+ if(l[i])
+ r[count++]=temp;
+ }else
+ r[count++]=temp;
+ }
+
+ return(r);
+}
+
+/* there might be a straightforward one-line way to do the below
+ that's portable and totally safe against roundoff, but I haven't
+ thought of it. Therefore, we opt on the side of caution */
+long _book_maptype1_quantvals(const static_codebook *b){
+ /* get us a starting hint, we'll polish it below */
+ int bits=_ilog(b->entries);
+ int vals=b->entries>>((bits-1)*(b->dim-1)/b->dim);
+
+ while(1){
+ long acc=1;
+ long acc1=1;
+ int i;
+ for(i=0;idim;i++){
+ acc*=vals;
+ acc1*=vals+1;
+ }
+ if(acc<=b->entries && acc1>b->entries){
+ return(vals);
+ }else{
+ if(acc>b->entries){
+ vals--;
+ }else{
+ vals++;
+ }
+ }
+ }
+}
+
+/* different than what _book_unquantize does for mainline:
+ we repack the book in a fixed point format that shares the same
+ binary point. Upon first use, we can shift point if needed */
+
+/* we need to deal with two map types: in map type 1, the values are
+ generated algorithmically (each column of the vector counts through
+ the values in the quant vector). in map type 2, all the values came
+ in in an explicit list. Both value lists must be unpacked */
+
+ogg_int32_t *_book_unquantize(const static_codebook *b,int n,int *sparsemap,
+ int *maxpoint){
+ long j,k,count=0;
+ if(b->maptype==1 || b->maptype==2){
+ int quantvals;
+ int minpoint,delpoint;
+ ogg_int32_t mindel=_float32_unpack(b->q_min,&minpoint);
+ ogg_int32_t delta=_float32_unpack(b->q_delta,&delpoint);
+ ogg_int32_t *r=(ogg_int32_t *)_ogg_calloc(n*b->dim,sizeof(*r));
+ int *rp=(int *)_ogg_calloc(n*b->dim,sizeof(*rp));
+
+ *maxpoint=minpoint;
+
+ /* maptype 1 and 2 both use a quantized value vector, but
+ different sizes */
+ switch(b->maptype){
+ case 1:
+ /* most of the time, entries%dimensions == 0, but we need to be
+ well defined. We define that the possible vales at each
+ scalar is values == entries/dim. If entries%dim != 0, we'll
+ have 'too few' values (values*dimentries;j++){
+ if((sparsemap && b->lengthlist[j]) || !sparsemap){
+ ogg_int32_t last=0;
+ int lastpoint=0;
+ int indexdiv=1;
+ for(k=0;kdim;k++){
+ int index= (j/indexdiv)%quantvals;
+ int point=0;
+ int val=VFLOAT_MULTI(delta,delpoint,
+ abs(b->quantlist[index]),&point);
+
+ val=VFLOAT_ADD(mindel,minpoint,val,point,&point);
+ val=VFLOAT_ADD(last,lastpoint,val,point,&point);
+
+ if(b->q_sequencep){
+ last=val;
+ lastpoint=point;
+ }
+
+ if(sparsemap){
+ r[sparsemap[count]*b->dim+k]=val;
+ rp[sparsemap[count]*b->dim+k]=point;
+ }else{
+ r[count*b->dim+k]=val;
+ rp[count*b->dim+k]=point;
+ }
+ if(*maxpointentries;j++){
+ if((sparsemap && b->lengthlist[j]) || !sparsemap){
+ ogg_int32_t last=0;
+ int lastpoint=0;
+
+ for(k=0;kdim;k++){
+ int point=0;
+ int val=VFLOAT_MULTI(delta,delpoint,
+ abs(b->quantlist[j*b->dim+k]),&point);
+
+ val=VFLOAT_ADD(mindel,minpoint,val,point,&point);
+ val=VFLOAT_ADD(last,lastpoint,val,point,&point);
+
+ if(b->q_sequencep){
+ last=val;
+ lastpoint=point;
+ }
+
+ if(sparsemap){
+ r[sparsemap[count]*b->dim+k]=val;
+ rp[sparsemap[count]*b->dim+k]=point;
+ }else{
+ r[count*b->dim+k]=val;
+ rp[count*b->dim+k]=point;
+ }
+ if(*maxpointdim;j++)
+ if(rp[j]<*maxpoint)
+ r[j]>>=*maxpoint-rp[j];
+
+ _ogg_free(rp);
+ return(r);
+ }
+ return(NULL);
+}
+
+void vorbis_staticbook_clear(static_codebook *b){
+ if(b->quantlist)_ogg_free(b->quantlist);
+ if(b->lengthlist)_ogg_free(b->lengthlist);
+ memset(b,0,sizeof(*b));
+
+}
+
+void vorbis_staticbook_destroy(static_codebook *b){
+ vorbis_staticbook_clear(b);
+ _ogg_free(b);
+}
+
+void vorbis_book_clear(codebook *b){
+ /* static book is not cleared; we're likely called on the lookup and
+ the static codebook belongs to the info struct */
+ if(b->valuelist)_ogg_free(b->valuelist);
+ if(b->codelist)_ogg_free(b->codelist);
+
+ if(b->dec_index)_ogg_free(b->dec_index);
+ if(b->dec_codelengths)_ogg_free(b->dec_codelengths);
+ if(b->dec_firsttable)_ogg_free(b->dec_firsttable);
+
+ memset(b,0,sizeof(*b));
+}
+
+static ogg_uint32_t bitreverse(ogg_uint32_t x){
+ x= ((x>>16)&0x0000ffffUL) | ((x<<16)&0xffff0000UL);
+ x= ((x>> 8)&0x00ff00ffUL) | ((x<< 8)&0xff00ff00UL);
+ x= ((x>> 4)&0x0f0f0f0fUL) | ((x<< 4)&0xf0f0f0f0UL);
+ x= ((x>> 2)&0x33333333UL) | ((x<< 2)&0xccccccccUL);
+ return((x>> 1)&0x55555555UL) | ((x<< 1)&0xaaaaaaaaUL);
+}
+
+static int sort32a(const void *a,const void *b){
+ return (**(ogg_uint32_t **)a>**(ogg_uint32_t **)b)-
+ (**(ogg_uint32_t **)a<**(ogg_uint32_t **)b);
+}
+
+/* decode codebook arrangement is more heavily optimized than encode */
+int vorbis_book_init_decode(codebook *c,const static_codebook *s){
+ int i,j,n=0,tabn;
+ int *sortindex;
+ memset(c,0,sizeof(*c));
+
+ /* count actually used entries */
+ for(i=0;ientries;i++)
+ if(s->lengthlist[i]>0)
+ n++;
+
+ c->entries=s->entries;
+ c->used_entries=n;
+ c->dim=s->dim;
+
+ if(n>0){
+ /* two different remappings go on here.
+
+ First, we collapse the likely sparse codebook down only to
+ actually represented values/words. This collapsing needs to be
+ indexed as map-valueless books are used to encode original entry
+ positions as integers.
+
+ Second, we reorder all vectors, including the entry index above,
+ by sorted bitreversed codeword to allow treeless decode. */
+
+ /* perform sort */
+ ogg_uint32_t *codes=_make_words(s->lengthlist,s->entries,c->used_entries);
+ ogg_uint32_t **codep=(ogg_uint32_t **)alloca(sizeof(*codep)*n);
+
+ if(codes==NULL)goto err_out;
+
+ for(i=0;icodelist=(ogg_uint32_t *)_ogg_malloc(n*sizeof(*c->codelist));
+ /* the index is a reverse index */
+ for(i=0;icodelist[sortindex[i]]=codes[i];
+ _ogg_free(codes);
+
+
+
+ c->valuelist=_book_unquantize(s,n,sortindex,&c->binarypoint);
+ c->dec_index=(int *)_ogg_malloc(n*sizeof(*c->dec_index));
+
+ for(n=0,i=0;ientries;i++)
+ if(s->lengthlist[i]>0)
+ c->dec_index[sortindex[n++]]=i;
+
+ c->dec_codelengths=(char *)_ogg_malloc(n*sizeof(*c->dec_codelengths));
+ for(n=0,i=0;ientries;i++)
+ if(s->lengthlist[i]>0)
+ c->dec_codelengths[sortindex[n++]]=s->lengthlist[i];
+
+ c->dec_firsttablen=_ilog(c->used_entries)-4; /* this is magic */
+ if(c->dec_firsttablen<5)c->dec_firsttablen=5;
+ if(c->dec_firsttablen>8)c->dec_firsttablen=8;
+
+ tabn=1<dec_firsttablen;
+ c->dec_firsttable=(ogg_uint32_t *)_ogg_calloc(tabn,sizeof(*c->dec_firsttable));
+ c->dec_maxlength=0;
+
+ for(i=0;idec_maxlengthdec_codelengths[i])
+ c->dec_maxlength=c->dec_codelengths[i];
+ if(c->dec_codelengths[i]<=c->dec_firsttablen){
+ ogg_uint32_t orig=bitreverse(c->codelist[i]);
+ for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++)
+ c->dec_firsttable[orig|(j<dec_codelengths[i])]=i+1;
+ }
+ }
+
+ /* now fill in 'unused' entries in the firsttable with hi/lo search
+ hints for the non-direct-hits */
+ {
+ ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen);
+ long lo=0,hi=0;
+
+ for(i=0;idec_firsttablen);
+ if(c->dec_firsttable[bitreverse(word)]==0){
+ while((lo+1)codelist[lo+1]<=word)lo++;
+ while( hi=(c->codelist[hi]&mask))hi++;
+
+ /* we only actually have 15 bits per hint to play with here.
+ In order to overflow gracefully (nothing breaks, efficiency
+ just drops), encode as the difference from the extremes. */
+ {
+ unsigned long loval=lo;
+ unsigned long hival=n-hi;
+
+ if(loval>0x7fff)loval=0x7fff;
+ if(hival>0x7fff)hival=0x7fff;
+ c->dec_firsttable[bitreverse(word)]=
+ 0x80000000UL | (loval<<15) | hival;
+ }
+ }
+ }
+ }
+ }
+
+ return(0);
+ err_out:
+ vorbis_book_clear(c);
+ return(-1);
+}
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/synthesis.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/synthesis.c Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,113 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * *
+ ********************************************************************
+
+ function: single-block PCM synthesis
+ last mod: $Id: synthesis.c,v 1.4 2003/03/29 03:07:21 xiphmont Exp $
+
+ ********************************************************************/
+
+#include
+#include "ogg.h"
+#include "ivorbiscodec.h"
+#include "codec_internal.h"
+#include "registry.h"
+#include "misc.h"
+#include "block.h"
+
+int vorbis_synthesis(vorbis_block *vb,ogg_packet *op,int decodep){
+ vorbis_dsp_state *vd=vb->vd;
+ private_state *b=(private_state *)vd->backend_state;
+ vorbis_info *vi=vd->vi;
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ oggpack_buffer *opb=&vb->opb;
+ int type,mode,i;
+
+ /* first things first. Make sure decode is ready */
+ _vorbis_block_ripcord(vb);
+ oggpack_readinit(opb,op->packet);
+
+ /* Check the packet type */
+ if(oggpack_read(opb,1)!=0){
+ /* Oops. This is not an audio data packet */
+ return(OV_ENOTAUDIO);
+ }
+
+ /* read our mode and pre/post windowsize */
+ mode=oggpack_read(opb,b->modebits);
+ if(mode==-1)return(OV_EBADPACKET);
+
+ vb->mode=mode;
+ vb->W=ci->mode_param[mode]->blockflag;
+ if(vb->W){
+ vb->lW=oggpack_read(opb,1);
+ vb->nW=oggpack_read(opb,1);
+ if(vb->nW==-1) return(OV_EBADPACKET);
+ }else{
+ vb->lW=0;
+ vb->nW=0;
+ }
+
+ /* more setup */
+ vb->granulepos=op->granulepos;
+ vb->sequence=op->packetno-3; /* first block is third packet */
+ vb->eofflag=op->e_o_s;
+
+ if(decodep){
+ /* alloc pcm passback storage */
+ vb->pcmend=ci->blocksizes[vb->W];
+ vb->pcm=(ogg_int32_t **)_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
+ for(i=0;ichannels;i++)
+ vb->pcm[i]=(ogg_int32_t *)_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
+
+ /* unpack_header enforces range checking */
+ type=ci->map_type[ci->mode_param[mode]->mapping];
+
+ return(_mapping_P[type]->inverse(vb,b->mode[mode]));
+ }else{
+ /* no pcm */
+ vb->pcmend=0;
+ vb->pcm=NULL;
+
+ return(0);
+ }
+}
+
+long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
+ codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
+ oggpack_buffer opb;
+ int mode;
+
+ oggpack_readinit(&opb,op->packet);
+
+ /* Check the packet type */
+ if(oggpack_read(&opb,1)!=0){
+ /* Oops. This is not an audio data packet */
+ return(OV_ENOTAUDIO);
+ }
+
+ {
+ int modebits=0;
+ int v=ci->modes;
+ while(v>1){
+ modebits++;
+ v>>=1;
+ }
+
+ /* read our mode and pre/post windowsize */
+ mode=oggpack_read(&opb,modebits);
+ }
+ if(mode==-1)return(OV_EBADPACKET);
+ return(ci->blocksizes[ci->mode_param[mode]->blockflag]);
+}
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/vorbisfile.c
--- a/misc/libtremor/tremor/vorbisfile.c Sun Nov 04 23:56:27 2012 +0400
+++ b/misc/libtremor/tremor/vorbisfile.c Mon Nov 05 00:32:41 2012 +0400
@@ -740,7 +740,7 @@
ogg_sync_destroy(vf->oy);
if(vf->datasource && vf->callbacks.close_func)
- (vf->callbacks.close_func)(vf->datasource);
+ (vf->callbacks.close_func)(vf->datasource);
memset(vf,0,sizeof(*vf));
}
#ifdef DEBUG_LEAKS
diff -r 5a27ed7f17b7 -r c64c0b413ff7 misc/libtremor/tremor/window.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/libtremor/tremor/window.c Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,83 @@
+/********************************************************************
+ * *
+ * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
+ * *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * *
+ * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
+ * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
+ * *
+ ********************************************************************
+
+ function: window functions
+
+ ********************************************************************/
+
+#include
+#include
+#include "misc.h"
+#include "window.h"
+#include "window_lookup.h"
+
+const void *_vorbis_window(int type, int left){
+
+ switch(type){
+ case 0:
+
+ switch(left){
+ case 32:
+ return vwin64;
+ case 64:
+ return vwin128;
+ case 128:
+ return vwin256;
+ case 256:
+ return vwin512;
+ case 512:
+ return vwin1024;
+ case 1024:
+ return vwin2048;
+ case 2048:
+ return vwin4096;
+ case 4096:
+ return vwin8192;
+ default:
+ return(0);
+ }
+ break;
+ default:
+ return(0);
+ }
+}
+
+void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2],
+ long *blocksizes,
+ int lW,int W,int nW){
+
+ LOOKUP_T *window[2]={window_p[0],window_p[1]};
+ long n=blocksizes[W];
+ long ln=blocksizes[lW];
+ long rn=blocksizes[nW];
+
+ long leftbegin=n/4-ln/4;
+ long leftend=leftbegin+ln/2;
+
+ long rightbegin=n/2+n/4-rn/4;
+ long rightend=rightbegin+rn/2;
+
+ int i,p;
+
+ for(i=0;i loc.txt
+grep -F 'loc("' */*/*.lua | sed 's/")/")\n/g' | sed 's/.*loc("/loc("/;s/").*/")/' | grep loc | sort | uniq > loc.txt
# Update locale files - run in Locale
for i in *.lua;do cat ../loc.txt | while read f;do STR=$(echo "$f" | sed 's/loc("//;s/")\s*$//;s/"/\\"/g');MAPS=$(grep -F -l -- "loc(\"${STR}\")" ../*/*/*.lua ../*/*/*/*.lua | sed 's/.*\/\([^\/]*\)\/map.lua/\1/;s/.*Campaign\/\([^\/]*\)\//\1:/;s/.*\///;s/.lua//;s/ /_/g' | xargs | sed 's/ /, /g');C=$(echo $MAPS | sed 's/,/\n/' | wc -l);grep -Fq -- "[\"${STR}\"]" $i;if(($?));then if((C>0));then echo "-- [\"${STR}\"] = \"\", -- $MAPS" >> $i;else echo "-- [\"${STR}\"] = \"\"," >> $i;fi;fi;done;done
# sort - run in Locale
-for i in *.lua;do rm temphead temptail templua;cat $i | grep -Ev "}|{" | grep -Ev "^[[:space:]]*$" | sort > templua;echo "locale = {" > temphead;echo " }" > temptail;cat temphead templua temptail > $i;done
+for i in *.lua;do rm temphead temptail templua;cat $i | grep -Ev "}|{" | grep -Ev "^[[:space:]]*$" | sort | uniq > templua;echo "locale = {" > temphead;echo " }" > temptail;cat temphead templua temptail > $i;done
# drop unused - run in Locale
-cat stub.lua | grep '"] =' | while read f;do PHRASE=$(echo "$f" | sed 's/[^[]*\["//;s/"] =.*//;s/"/\\"/g');CNT=$(grep -Frc "loc(\"$PHRASE\")" ../*/*/*.lua ../*/*/*/*.lua | grep -v ":0" | wc -l);if(($CNT==0));then echo "|$PHRASE|";sed -i "s/.*\[\"$PHRASE\"].*//" *.lua;fi;done
+cat stub.lua | grep '"] =' | while read f;do PHRASE=$(echo "$f" | sed 's/[^[]*\["//;s/"] =.*//;s/"/\\"/g');CNT=$(grep -Frc "loc(\"$PHRASE\")" ../*/*/*.lua ../*/*/*/*.lua | grep -v ":0" | wc -l);if(($CNT==0));then echo "|$PHRASE|";PHRASE=$(echo "$PHRASE" | sed 's/\\/\\\\/g;s/\[/\\[/g;s/\]/\\]/g;s/\//\\\//g');sed -i "s/.*\[\"$PHRASE\"\].*//" *.lua;fi;done
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/CMakeLists.txt
--- a/project_files/Android-build/CMakeLists.txt Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/CMakeLists.txt Mon Nov 05 00:32:41 2012 +0400
@@ -32,7 +32,7 @@
endif()
if(NOT ANDROID_NDK_TOOLCHAINDIR)
- set(toolchainbase "${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt")
+ set(toolchainbase "${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.6/prebuilt")
find_path(ANDROID_NDK_TOOLCHAINDIR arm-linux-androideabi
"${toolchainbase}/linux-x86"
"${toolchainbase}/windows")
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/Licenses/Android Support library/NOTICE.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/Licenses/Android Support library/NOTICE.txt Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,195 @@
+Notice for all the files in this folder.
+------------------------------------------------------------
+
+
+
+ Copyright (c) 2005-2008, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/Licenses/ini4j/LICENSE.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/Licenses/ini4j/LICENSE.txt Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/Licenses/ini4j/NOTICE.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/Licenses/ini4j/NOTICE.txt Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,13 @@
+Copyright 2005,2009 Ivan SZKIBA
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/AndroidManifest.xml
--- a/project_files/Android-build/SDL-android-project/AndroidManifest.xml Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/AndroidManifest.xml Mon Nov 05 00:32:41 2012 +0400
@@ -1,54 +1,105 @@
-
-
-
-
-
+ package="org.hedgewars.hedgeroid"
+ android:installLocation="preferExternal"
+ android:versionCode="8"
+ android:versionName="0.2" >
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
-
+
+
+
-
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Airplane.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Airplane.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/AmmoMenu/Ammos.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/AmmoMenu/Ammos.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/AmmoMenu/Ammos_bw.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/AmmoMenu/Ammos_bw.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_42.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_42.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_anarchy.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_anarchy.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_balrog.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_balrog.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_bars.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_bars.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_birdy.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_birdy.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_bloodyblade.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_bloodyblade.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_brittany.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_brittany.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_bustamove.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_bustamove.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_cog.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_cog.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_crossedswords.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_crossedswords.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_dragonrb.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_dragonrb.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_earth.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_earth.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_earth2.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_earth2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_eyeofhorus.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_eyeofhorus.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_face.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_face.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_fcw.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_fcw.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_female.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_female.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_galaxy.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_galaxy.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_hax0r.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_hax0r.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_hurrah.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_hurrah.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_iluvu.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_iluvu.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_lips.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_lips.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_magicskull.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_magicskull.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_male.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_male.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_mog.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_mog.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_music.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_music.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pacman.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pacman.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pacman2.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pacman2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pentagram.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pentagram.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pirate.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pirate.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pokemon.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_pokemon.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_scout.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_scout.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_shoppa.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_shoppa.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_sonic.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_sonic.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_spider.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_spider.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_star.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_star.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_swordshield.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_swordshield.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_swordshield2.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_swordshield2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_vampire.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_vampire.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_yinyang.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Flags/cm_yinyang.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Badger.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Badger.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Cherry.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Cherry.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Duck2.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Duck2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Earth.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Earth.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Egg.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Egg.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Flower.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Flower.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Ghost.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Ghost.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Grave.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Grave.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Plinko.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Plinko.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Rip.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Rip.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Rubberduck.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Rubberduck.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Simple.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Simple.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Statue.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/Statue.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/bp2.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/bp2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/bubble.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/bubble.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/chest.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/chest.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/coffin.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/coffin.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/deadhog.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/deadhog.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/eyecross.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/eyecross.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/heart.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/heart.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/money.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/money.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/mouton1.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/mouton1.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/octopus.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/octopus.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/plant2.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/plant2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/plant3.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/plant3.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/pokeball.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/pokeball.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/pyramid.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/pyramid.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/ring.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/ring.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/skull.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/skull.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/star.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Graves/star.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Hats/android.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Hats/android.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Hedgehog/amKamikaze.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Hedgehog/amKamikaze.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Hedgehog/amSineGun.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Hedgehog/amSineGun.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/LandIce.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/LandIce.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Molotov.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Molotov.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Progress.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Progress.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/RCPlane.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/RCPlane.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Snow.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Snow.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/SuddenDeath/SDFlake.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/SuddenDeath/SDFlake.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/botlevels.png
Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/botlevels.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Locale/en.txt
--- a/project_files/Android-build/SDL-android-project/assets/Data/Locale/en.txt Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Locale/en.txt Mon Nov 05 00:32:41 2012 +0400
@@ -79,6 +79,7 @@
01:18=High
01:19=Extreme
01:20=%1 Bounce
+01:21=Audio Muted
; Event messages
; Hog (%1) died
@@ -491,7 +492,7 @@
04:36=Well, sometimes you're just too bad in aiming. Get|some assistance using modern day technology.|Attack: Activate
04:37=Don't fear the daylight. It will just last one turn|but will enable you to absorb the damage you do to|other hogs.|Attack: Activate
04:38=The sniper rifle can be the most devastating weapon|in your whole arsenal, however it's very ineffective|at close quarters. The damage dealt increases with|the distance to its target.|Attack: Shoot (twice)
-04:39=Fly to other parts of the map using the flying|saucer. This hard to master utility is able to|take you to almost any position on the battlefield.|Attack: Activate|Up/Left/Right: Apply force in one direction|Long Jump: Drop grenades or similar weapons
+04:39=Fly to other parts of the map using the flying|saucer. This hard to master utility can|take you to almost any position on the battlefield.|Attack: Activate|Up/Left/Right: Apply force in one direction|Long Jump: Drop grenades or similar weapons
04:40=Set some ground on fire using this bottle filled|with (soon to be) burning liquid.|Attack: Hold to shoot with more power
04:41=The evidence nature might even top the flying|saucer. Birdy can carry your hog around and|drop eggs on your enemies!|Be quick, as using Birdy eats into your turn|time!|Attack: Activate and drop eggs|Up/Left/Right: Flap in one direction
04:42=This portable portal device is capable|of instantly transporting you, your enemies,|or your weaponry between two points on the|terrain.|Use it wisely and your campaign will be a...|HUGE SUCCESS!|Attack: Shoot a portal|Switch: Cycle portal colours
@@ -505,7 +506,7 @@
04:50=Is someone hiding underground?|Dig them out with a drill strike!|Timer controls how far it will dig.
04:51=Get in a free shot by hurling a ball of mud.|Stings a bit, and knocks hogs back.
04:52=UNUSED
-04:53=Go on an adventure through time and space,|while leaving your comrades to fight on alone.|Be prepared to return at any time,|or for Sudden Death or if they are all defeated.|Disclaimer. Does not function in Sudden Death,|if you are alone, or if you are a King.
+04:53=Take a trip through time and space,|while leaving your comrades to fight on alone.|Be prepared to return at any time,|or for Sudden Death or if they are all defeated.|Disclaimer. Does not function in Sudden Death,|if you are alone, or if you are a King.
04:54=INCOMPLETE
04:55=Spray a stream of sticky flakes.|Build bridges, bury enemies, seal off tunnels.|Be careful you don't get any on you!
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Locale/hedgewars_en.qm
Binary file project_files/Android-build/SDL-android-project/assets/Data/Locale/hedgewars_en.qm has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Locale.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Locale.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,18 @@
+-- Library for localizing strings in lua scripts
+
+local lang = loadfile(GetUserDataPath() .. "Locale/" .. tostring(L) .. ".lua")
+
+if lang ~= nil then
+ lang()
+else
+ lang = loadfile(GetDataPath() .. "Locale/" .. tostring(L) .. ".lua")
+ if lang ~= nil then
+ lang()
+ end
+end
+
+function loc(text)
+ if lang ~= nil and locale ~= nil and locale[text] ~= nil then return locale[text]
+ else return text
+ end
+end
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Balanced_Random_Weapon.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Balanced_Random_Weapon.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+locked
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,148 @@
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+
+local weapons = { amGrenade, amClusterBomb, amBazooka, amBee, amShotgun, amMine, amDEagle, amDynamite, amFirePunch, amWhip, amPickHammer, amBaseballBat, amMortar, amCake, amSeduction, amWatermelon, amHellishBomb, amDrill, amBallgun, amRCPlane, amSniperRifle, amMolotov, amBirdy, amBlowTorch, amGasBomb, amFlamethrower, amSMine, amKamikaze }
+
+-- G,C,B,B,S,M,D,D,F,W,P,B,M,C,S,W,H,D,B,R,S,M,B,B,G,F,S,K
+local weapons_values = {1,1,1,2,1,1,1,2,1,1,1,2,1,3,1,3,3,2,3,3,1,1,2,1,1,2,2,1}
+
+local airweapons = { amAirAttack, amMineStrike, amNapalm, amDrillStrike }
+
+-- A,M,N,D
+local airweapons_values = {2,2,2,2}
+
+local utilities = { amTeleport, amGirder, amSwitch, amLowGravity, amResurrector, amRope, amParachute, amJetpack, amPortalGun, amSnowball }
+
+-- T,G,S,L,R,R,P,J,P,S
+local utilities_values = {1,2,2,1,2,2,1,2,2,2}
+
+function randomAmmo()
+ local n = 3 --"points" to be allocated on weapons
+
+ --pick random weapon and subtract cost
+ local r = GetRandom(table.maxn(weapons_values)) + 1
+ local picked_items = {}
+ table.insert(picked_items, weapons[r])
+ n = n - weapons_values[r]
+
+
+ --choose any weapons or utilities to use up remaining n
+
+ while n > 0 do
+ local items = {}
+ local items_values = {}
+
+ for i, w in pairs(weapons_values) do
+ local used = false
+ if w <= n then
+ --check that this weapon hasn't been given already
+ for j, k in pairs(picked_items) do
+ if weapons[i] == k then
+ used = true
+ end
+ end
+ if not used then
+ table.insert(items_values, w)
+ table.insert(items, weapons[i])
+ end
+ end
+ end
+
+ for i, w in pairs(utilities_values) do
+ local used = false
+ if w <= n then
+ --check that this weapon hasn't been given already
+ for j, k in pairs(picked_items) do
+ if utilities[i] == k then
+ used = true
+ end
+ end
+ if not used then
+ table.insert(items_values, w)
+ table.insert(items, utilities[i])
+ end
+ end
+ end
+
+ local r = GetRandom(table.maxn(items_values)) + 1
+ table.insert(picked_items, items[r])
+ n = n - items_values[r]
+ end
+
+ return picked_items
+end
+
+function assignAmmo(hog)
+ local name = GetHogTeamName(hog)
+ local processed = getTeamValue(name, "processed")
+ if processed == nil or not processed then
+ local ammo = getTeamValue(name, "ammo")
+ if ammo == nil then
+ ammo = randomAmmo()
+ setTeamValue(name, "ammo", ammo)
+ end
+ for i, w in pairs(ammo) do
+ AddAmmo(hog, w)
+ end
+ setTeamValue(name, "processed", true)
+ end
+end
+
+function reset(hog)
+ setTeamValue(GetHogTeamName(hog), "processed", false)
+end
+
+function onGameInit()
+ GameFlags = band(bor(GameFlags, gfResetWeps), bnot(gfPerHogAmmo))
+ Goals = loc("Each turn you get 1-3 random weapons")
+end
+
+function onGameStart()
+ trackTeams()
+ if MapHasBorder() == false then
+ for i, w in pairs(airweapons) do
+ table.insert(weapons, w)
+ end
+ for i, w in pairs(airweapons_values) do
+ table.insert(weapons_values, w)
+ end
+ end
+end
+
+function onAmmoStoreInit()
+ SetAmmo(amSkip, 9, 0, 0, 0)
+
+ SetAmmo(amExtraDamage, 0, 1, 0, 1)
+ SetAmmo(amInvulnerable, 0, 1, 0, 1)
+ SetAmmo(amExtraTime, 0, 1, 0, 1)
+ SetAmmo(amLaserSight, 0, 1, 0, 1)
+ SetAmmo(amVampiric, 0, 1, 0, 1)
+
+ for i, w in pairs(utilities) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+
+ for i, w in pairs(weapons) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+
+ for i, w in pairs(airweapons) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+end
+
+function onNewTurn()
+ runOnGears(assignAmmo)
+ runOnGears(reset)
+ setTeamValue(GetHogTeamName(CurrentHedgehog), "ammo", nil)
+end
+
+function onGearAdd(gear)
+ if GetGearType(gear) == gtHedgehog then
+ trackGear(gear)
+ end
+end
+
+function onGearDelete(gear)
+ trackDeletion(gear)
+end
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Capture_the_Flag.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Capture_the_Flag.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+Default
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Capture_the_Flag.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Capture_the_Flag.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,630 @@
+---------------------------------------
+-- CAPTURE_THE_FLAG GAMEPLAY MODE 0.5
+-- by mikade
+---------------------------------------
+
+-- Version History
+---------
+-- 0.1
+---------
+
+-- [conversion from map-dependant CTF_Blizzard to map independant Capture the Flag]
+-- added an intial starting stage where flagspawn is decided by the players (weapon set will require a jetpack unless I set)
+-- changed the flag from a crate to a visual gear, and all associated methods and checks relating to flags (five hours later, lol)
+-- changed starting/respawning positioning to accommodate different map sizes
+-- added another circle to mark flag spawn
+-- added gameFlag filter
+-- changed scoring feedback
+-- cleaned up some code
+
+-- removing own flag from spawning point no longer possible
+-- destroying flags no longer possible.
+-- added basic glowing circle effect to spawn area
+-- added expanding circle to fgear itself
+
+-- removed teleporters
+-- removed random crate drops (this should be decided by scheme)
+-- removed set map criteria like minesNum, turnTime, explosives etc. except for sudden death
+-- removed weapon defintions
+-- removed placement and respawning methods, hopefully divideTeams will have this covered
+
+---------
+-- 0.2
+---------
+
+-- [now with user friendliness]
+-- flag is now placed wherever you end up at the end of your first turn, this ensures that it is always placed by turn 3
+-- removed a bunch of backup code and no-longer needed variables / methods from CTF_Blizzard days
+-- removed an aura that was still mistakenly hanging about
+-- added an in-game note about placements
+-- added an in-game note about the rules of the game
+-- added translation support and loc()'ed everything
+-- changed things so the seed is no longer always the same...
+
+-- In this version:
+---------
+-- 0.3
+---------
+-- [fufufufu kamikaze fix]
+-- added nill checks to make sure the player doesn't generate errors by producing a nil value in hhs[] when he uses kamikaze
+-- added a check to make sure the player doesn't kamikaze straight down and make the flag's starting point underwater
+-- added a check to make sure the player drops the flag if he has it and he uses kamikaze
+
+--------
+-- 0.4
+--------
+
+-- remove user-branding and version numbers
+-- removed some stuff that wasn't needed
+-- fix piano strike exploit
+-- changed delay to allow for better portals
+-- changed starting feedback a little
+-- increased the radius around the circle indicating the flag thief so that it doesn't obscure his health
+
+--------
+-- 0.5
+--------
+
+-- add support for more players
+-- allow limited sudden death
+-- stop TimeBox ruining my life
+-- profit???
+
+-----------------
+--SCRIPT BEGINS
+-----------------
+
+-- enable awesome translaction support so we can use loc() wherever we want
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+
+---------------------------------------------------------------
+----------lots of bad variables and things
+----------because someone is too lazy
+----------to read about tables properly
+------------------ "Oh well, they probably have the memory"
+
+local gameStarted = false
+local gameTurns = 0
+
+--------------------------
+-- hog and team tracking variales
+--------------------------
+
+local numhhs = 0 -- store number of hedgehogs
+local hhs = {} -- store hedgehog gears
+
+local numTeams -- store the number of teams in the game
+local teamNameArr = {} -- store the list of teams
+local teamSize = {} -- store how many hogs per team
+local teamIndex = {} -- at what point in the hhs{} does each team begin
+
+-------------------
+-- flag variables
+-------------------
+
+local fPlaced = {} -- has the flag been placed TRUE/FALSE
+
+local fGear = {} -- pointer to the visual gears that represent the flag
+local fGearX = {}
+local fGearY = {}
+
+local fThief = {} -- pointer to the hogs who stole the flags
+local fIsMissing = {} -- have the flags been destroyed or captured
+local fNeedsRespawn = {} -- do the flags need to be respawned
+local fCaptures = {} -- the team "scores" how many captures
+local fSpawnX = {} -- spawn X for flags
+local fSpawnY = {} -- spawn Y for flags
+
+local fThiefX = {}
+local fThiefY = {}
+local FTTC = 0 -- flag thief tracker counter
+
+local fSpawnC = {} -- spawn circle marker
+local fCirc = {} -- flag/carrier marker circles
+local fCol = {} -- colour of the clans
+
+local fGearRad = 0
+local fGearRadMin = 5
+local fGearRadMax = 33
+local fGearTimer = 0
+
+------------------------
+--flag methods
+------------------------
+
+function CheckScore(teamID)
+
+ if teamID == 0 then
+ alt = 1
+ elseif teamID == 1 then
+ alt = 0
+ end
+
+ if fCaptures[teamID] == 3 then
+ for i = 0, (numhhs-1) do
+ if hhs[i] ~= nil then
+ if GetHogClan(hhs[i]) == alt then
+ SetEffect(hhs[i], heResurrectable, false)
+ SetHealth(hhs[i],0)
+ end
+ end
+ end
+ if CurrentHedgehog ~= nil then
+ ShowMission(loc("GAME OVER!"), loc("Victory for the ") .. GetHogTeamName(CurrentHedgehog), loc("Hooray!"), 0, 0)
+ end
+ end
+
+end
+
+function DoFlagStuff(gear)
+
+ if (gear == fGear[0]) then
+ wtf = 0
+ bbq = 1
+ elseif (gear == fGear[1]) then
+ wtf = 1
+ bbq = 0
+ end
+
+ -- player has successfully captured the enemy flag
+ if (GetHogClan(CurrentHedgehog) == wtf) and (CurrentHedgehog == fThief[bbq]) and (fIsMissing[wtf] == false) then
+
+ DeleteVisualGear(fGear[wtf])
+ fGear[wtf] = nil -- the flag has now disappeared
+
+ fIsMissing[wtf] = false
+ fNeedsRespawn[wtf] = true
+ fIsMissing[bbq] = false
+ fNeedsRespawn[bbq] = true
+ fCaptures[wtf] = fCaptures[wtf] +1
+ ShowMission(loc("You have SCORED!!"), GetHogTeamName(CurrentHedgehog) .. ": " .. fCaptures[wtf], loc("Opposing Team: ") .. fCaptures[bbq], 0, 0)
+ PlaySound(sndVictory)
+ fThief[bbq] = nil -- player no longer has the enemy flag
+ CheckScore(wtf)
+
+ --if the player is returning the flag
+ elseif (GetHogClan(CurrentHedgehog) == wtf) and (fIsMissing[wtf] == true) then
+
+ DeleteVisualGear(fGear[wtf])
+ fGear[wtf] = nil -- the flag has now disappeared
+
+ fNeedsRespawn[wtf] = true
+ HandleRespawns() -- this will set fIsMissing[wtf] to false :)
+ AddCaption(loc("Flag returned!"))
+
+ --if the player is taking the enemy flag
+ elseif GetHogClan(CurrentHedgehog) == bbq then
+
+ DeleteVisualGear(fGear[wtf])
+ fGear[wtf] = nil -- the flag has now disappeared
+
+ fIsMissing[wtf] = true
+ for i = 0,numhhs-1 do
+ if CurrentHedgehog ~= nil then
+ if CurrentHedgehog == hhs[i] then
+ fThief[wtf] = hhs[i]
+ end
+ end
+ end
+ AddCaption(loc("Flag captured!"))
+
+ end
+
+end
+
+function CheckFlagProximity()
+
+ for i = 0, 1 do
+ if fGear[i] ~= nil then
+
+ g1X = fGearX[i]
+ g1Y = fGearY[i]
+
+ g2X, g2Y = GetGearPosition(CurrentHedgehog)
+
+ q = g1X - g2X
+ w = g1Y - g2Y
+ dist = (q*q) + (w*w)
+
+ if dist < 500 then --1600
+ DoFlagStuff(fGear[i])
+ end
+ end
+ end
+
+end
+
+
+function HandleRespawns()
+
+ for i = 0, 1 do
+
+ if fNeedsRespawn[i] == true then
+ fGear[i] = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true)
+ fGearX[i] = fSpawnX[i]
+ fGearY[i] = fSpawnY[i]
+
+ fNeedsRespawn[i] = false
+ fIsMissing[i] = false -- new, this should solve problems of a respawned flag being "returned" when a player tries to score
+ AddCaption(loc("Flag respawned!"))
+ end
+
+ end
+
+end
+
+
+function FlagThiefDead(gear)
+
+ if (gear == fThief[0]) then
+ wtf = 0
+ bbq = 1
+ elseif (gear == fThief[1]) then
+ wtf = 1
+ bbq = 0
+ end
+
+ if fThief[wtf] ~= nil then
+ -- falls into water
+ --ShowMission(LAND_HEIGHT, fThiefY[wtf], (LAND_HEIGHT - fThiefY[wtf]), 0, 0)
+ if (LAND_HEIGHT - fThiefY[wtf]) < 15 then
+ fIsMissing[wtf] = true
+ fNeedsRespawn[wtf] = true
+ HandleRespawns()
+ else --normally
+ fGearX[wtf] = fThiefX[wtf]
+ fGearY[wtf] = fThiefY[wtf]
+ fGear[wtf] = AddVisualGear(fGearX[wtf],fGearY[wtf],vgtCircle,0,true)
+ end
+
+ AddVisualGear(fThiefX[wtf], fThiefY[wtf], vgtBigExplosion, 0, false)
+ fThief[wtf] = nil
+ end
+
+end
+
+function HandleCircles()
+
+ fGearTimer = fGearTimer + 1
+ if fGearTimer == 50 then
+ fGearTimer = 0
+ fGearRad = fGearRad + 1
+ if fGearRad > fGearRadMax then
+ fGearRad = fGearRadMin
+ end
+ end
+
+ for i = 0, 1 do
+
+ --SetVisualGearValues(fSpawnC[i], fSpawnX[i],fSpawnY[i], 20, 200, 0, 0, 100, 50, 3, fCol[i]) -- draw a circ for spawning area
+
+ if fIsMissing[i] == false then -- draw a flag marker at the flag's spawning place
+ SetVisualGearValues(fCirc[i], fSpawnX[i],fSpawnY[i], 20, 20, 0, 10, 0, 33, 3, fCol[i])
+ if fGear[i] ~= nil then -- draw the flag gear itself
+ SetVisualGearValues(fGear[i], fSpawnX[i],fSpawnY[i], 20, 200, 0, 0, 100, fGearRad, 2, fCol[i])
+ end
+ elseif (fIsMissing[i] == true) and (fNeedsRespawn[i] == false) then
+ if fThief[i] ~= nil then -- draw circle round flag carrier -- 33
+ SetVisualGearValues(fCirc[i], fThiefX[i], fThiefY[i], 20, 200, 0, 0, 100, 50, 3, fCol[i])
+ --AddCaption("circle marking carrier")
+ elseif fThief[i] == nil then -- draw cirle round dropped flag
+ --g1X,g1Y,g4,g5,g6,g7,g8,g9,g10,g11 = GetVisualGearValues(fGear[i])
+ --SetVisualGearValues(fCirc[i], g1X, g1Y, 20, 200, 0, 0, 100, 33, 2, fCol[i])
+ SetVisualGearValues(fCirc[i], fGearX[i], fGearY[i], 20, 200, 0, 0, 100, 33, 3, fCol[i])
+ --AddCaption('dropped circle marker')
+ if fGear[i] ~= nil then -- flag gear itself
+ --SetVisualGearValues(fGear[i], g1X, g1Y, 20, 200, 0, 0, 100, 10, 4, fCol[i])
+ SetVisualGearValues(fGear[i], fGearX[i], fGearY[i], 20, 200, 0, 0, 100, fGearRad, 2, fCol[i])
+ --AddCaption('dropped flag itself')
+ end
+ end
+ end
+
+ if fNeedsRespawn[i] == true then -- if the flag has been destroyed, no need for a circle
+ SetVisualGearValues(fCirc[i], fSpawnX[i],fSpawnY[i], 20, 200, 0, 0, 100, 0, 0, fCol[i])
+ --AddCaption("needs respawn = true. flag 'destroyed'?")
+ end
+ end
+
+end
+
+------------------------
+-- general methods
+------------------------
+
+function CheckDistance(gear1, gear2)
+
+ g1X, g1Y = GetGearPosition(gear1)
+ g2X, g2Y = GetGearPosition(gear2)
+
+ g1X = g1X - g2X
+ g1Y = g1Y - g2Y
+ z = (g1X*g1X) + (g1Y*g1Y)
+
+ dist = z
+
+ return dist
+
+end
+
+function RebuildTeamInfo()
+
+
+ -- make a list of individual team names
+ for i = 0, (TeamsCount-1) do
+ teamNameArr[i] = i
+ teamSize[i] = 0
+ teamIndex[i] = 0
+ end
+ numTeams = 0
+
+ for i = 0, (numhhs-1) do
+
+ z = 0
+ unfinished = true
+ while(unfinished == true) do
+
+ newTeam = true
+ tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
+
+ if tempHogTeamName == teamNameArr[z] then
+ newTeam = false
+ unfinished = false
+ end
+
+ z = z + 1
+
+ if z == TeamsCount then
+ unfinished = false
+ if newTeam == true then
+ teamNameArr[numTeams] = tempHogTeamName
+ numTeams = numTeams + 1
+ end
+ end
+
+ end
+
+ end
+
+ -- find out how many hogs per team, and the index of the first hog in hhs
+ for i = 0, numTeams-1 do
+
+ for z = 0, numhhs-1 do
+ if GetHogTeamName(hhs[z]) == teamNameArr[i] then
+ if teamSize[i] == 0 then
+ teamIndex[i] = z -- should give starting index
+ end
+ teamSize[i] = teamSize[i] + 1
+ --add a pointer so this hog appears at i in hhs
+ end
+ end
+
+ end
+
+end
+
+function StartTheGame()
+
+ gameStarted = true
+ AddCaption(loc("Game Started!"))
+
+ for i = 0, 1 do
+
+ -- if someone uses kamikaze downwards, this can happen as the hog won't respawn
+ if (LAND_HEIGHT - fSpawnY[i]) < 0 then
+ tempG = AddGear(0, 0, gtTarget, 0, 0, 0, 0)
+ FindPlace(tempG, true, 0, LAND_WIDTH, true)
+ fSpawnX[i], fSpawnY[i] = GetGearPosition(tempG)
+ DeleteGear(tempG)
+ end
+
+ fGear[i] = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true)
+ fCirc[i] = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true)
+ fSpawnC[i] = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true)
+
+ fGearX[i] = fSpawnX[i]
+ fGearY[i] = fSpawnY[i]
+
+ fCol[i] = GetClanColor(i)
+ fIsMissing[i] = false
+ fNeedsRespawn[i] = false
+ fCaptures[i] = 0
+
+ --SetVisualGearValues(zxc, 1000,1000, 20, 100, 0, 10, 1, 100, 5, GetClanColor(0))
+
+ SetVisualGearValues(fSpawnC[i], fSpawnX[i],fSpawnY[i], 20, 100, 0, 10, 0, 75, 5, fCol[i])
+
+ end
+
+end
+
+------------------------
+-- game methods
+------------------------
+
+function onGameInit()
+
+ GameFlags = band(bor(GameFlags, gfDivideTeams), bnot(gfKing + gfForts))
+ --SuddenDeathTurns = 999 -- suddendeath is off, effectively
+ WaterRise = 0
+ Delay = 10
+
+end
+
+
+function onGameStart()
+
+ --ShowMission(loc(caption), loc(subcaption), loc(goal), 0, 0)
+ ShowMission(loc("CAPTURE THE FLAG"), loc("Flags, and their home base will be placed where each team ends their first turn."), "", 0, 0)
+
+ RebuildTeamInfo()
+
+ -- should gfDivideTeams do this automatically?
+ --[[for i = 0, (TeamsCount-1) do
+ for g = teamIndex[i], (teamIndex[i]+teamSize[i]-1) do
+ if GetHogClan(hhs[g]) == 0 then
+ FindPlace(hhs[g], false, 0, LAND_WIDTH/2)
+ elseif GetHogClan(hhs[g]) == 1 then
+ FindPlace(hhs[g], false, LAND_WIDTH/2, LAND_WIDTH)
+ end
+ end
+ end]]
+
+ fPlaced[0] = false
+ fPlaced[1] = false
+
+ --zxc = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true)
+
+
+ --SetVisualGearValues(zxc, 1000,1000, 20, 255, 1, 10, 0, 200, 1, GetClanColor(0))
+ --minO,max0 -glowyornot --pulsate timer -- fuckall -- radius -- width -- colour
+end
+
+
+function onNewTurn()
+
+ gameTurns = gameTurns + 1
+
+ if lastTeam ~= GetHogTeamName(CurrentHedgehog) then
+ lastTeam = GetHogTeamName(CurrentHedgehog)
+ end
+
+ --AddCaption("Handling respawns")
+ if gameStarted == true then
+ HandleRespawns()
+ --new method of placing starting flags
+ elseif gameTurns == 1 then
+ ShowMission(loc("CAPTURE THE FLAG"), loc("Flags, and their home base will be placed where each team ends their first turn."), "", 0, 0)
+ elseif gameTurns == 2 then
+ fPlaced[0] = true
+ ShowMission(loc("CAPTURE THE FLAG"), loc("RULES OF THE GAME [Press ESC to view]"), loc(" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"), 0, 0)
+ elseif gameTurns == 3 then
+ fPlaced[1] = true
+ StartTheGame()
+ end
+
+end
+
+function onGameTick()
+
+ -- onRessurect calls AFTER you have resurrected,
+ -- so keeping track of x,y a few milliseconds before
+ -- is useful
+ --FTTC = FTTC + 1
+ --if FTTC == 100 then
+ -- FTTC = 0
+ for i = 0,1 do
+ if fThief[i] ~= nil then
+ fThiefX[i] = GetX(fThief[i])
+ fThiefY[i] = GetY(fThief[i])
+ end
+ end
+ --end
+
+ -- things we wanna check often
+ if (CurrentHedgehog ~= nil) then
+ --AddCaption(LAND_HEIGHT - GetY(CurrentHedgehog))
+ --AddCaption(GetX(CurrentHedgehog) .. "; " .. GetY(CurrentHedgehog))
+ --CheckTeleporters()
+
+ end
+
+ if gameStarted == true then
+ HandleCircles()
+ if CurrentHedgehog ~= nil then
+ CheckFlagProximity()
+ end
+ elseif CurrentHedgehog ~= nil then -- if the game hasn't started yet, keep track of where we are gonna put the flags on turn end
+
+ if GetHogClan(CurrentHedgehog) == 0 then
+ i = 0
+ elseif GetHogClan(CurrentHedgehog) == 1 then
+ i = 1
+ end
+
+ fSpawnX[i] = GetX(CurrentHedgehog)
+ fSpawnY[i] = GetY(CurrentHedgehog)
+
+ end
+
+end
+
+function onGearResurrect(gear)
+
+ --AddCaption("A gear has been resurrected!")
+
+ -- mark the flag thief as dead if he needed a respawn
+ for i = 0,1 do
+ if gear == fThief[i] then
+ FlagThiefDead(gear)
+ end
+ end
+
+ -- should be covered by gfDivideTeams, actually
+ -- place hogs belonging to each clan either left or right side of map
+ --if GetHogClan(gear) == 0 then
+ -- FindPlace(gear, false, 0, LAND_WIDTH/2)
+ --elseif GetHogClan(gear) == 1 then
+ -- FindPlace(gear, false, LAND_WIDTH/2, LAND_WIDTH)
+ --end
+
+ AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+
+end
+
+function InABetterPlaceNow(gear)
+ for i = 0, (numhhs-1) do
+ if gear == hhs[i] then
+
+ for i = 0,1 do
+ if gear == fThief[i] then
+ FlagThiefDead(gear)
+ end
+ end
+ hhs[i] = nil
+ end
+ end
+end
+
+function onHogHide(gear)
+ InABetterPlaceNow(gear)
+end
+
+function onHogRestore(gear)
+ match = false
+ for i = 0, (numhhs-1) do
+ if (hhs[i] == nil) and (match == false) then
+ hhs[i] = gear
+ --AddCaption(GetHogName(gear) .. " has reappeared it seems!")
+ match = true
+ end
+ end
+end
+
+
+function onGearAdd(gear)
+
+ if GetGearType(gear) == gtHedgehog then
+ hhs[numhhs] = gear
+ numhhs = numhhs + 1
+ SetEffect(gear, heResurrectable, true)
+
+ elseif GetGearType(gear) == gtPiano then
+
+ for i = 0, 1 do
+ if CurrentHedgehog == fThief[i] then
+ FlagThiefDead(gear)
+ end
+ end
+
+ end
+
+end
+
+function onGearDelete(gear)
+
+ if GetGearType(gear) == gtHedgehog then
+ InABetterPlaceNow(gear)
+ end
+
+end
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Highlander.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Highlander.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+Default
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Highlander.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Highlander.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,233 @@
+--------------------------------
+-- HIGHLANDER / HOGS OF WAR
+-- version 0.3c
+-- by mikade
+--------------------------------
+
+-----------
+--0.1
+-----------
+
+-- concept test
+
+-----------
+--0.2
+-----------
+
+-- remove tardis till Henek fixes his tracker
+-- change wep crates to health crates
+-- reset arb turntimevalue
+-- include randomOrder
+-- Until fixed .17 methods come out, remove switches and resurrector
+-- on request, removed kamikaze and piano weapons
+-- provisional fixing of bugs that can't actually be fixed yet
+
+-----------
+--0.3
+-----------
+
+-- meh, update incorrect display
+-- may change this in the future to have switches
+-- but for now people are used to it without, so~
+
+-- mudball is now counted as a utility
+
+-----------
+--0.3b
+-----------
+
+-- cleaned up code and got rid of unneccessary vars
+-- mudball is a weapon again
+-- landgun is now a utility
+-- extra time, vampirism utility removed
+-- hammer wep removed
+-- all hogs have kamikaze
+
+-----------
+--0.3c
+-----------
+
+-- restructured some code
+-- added napalm (whoops) to list of possible weapons you can get
+-- hogs no longer recieve airstrike-related weps on border maps
+
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+
+local airWeapons = {amAirAttack, amMineStrike, amNapalm, amDrillStrike --[[,amPiano]]}
+
+local atkArray = {
+ amBazooka, amBee, amMortar, amDrill, --[[amSnowball,]]
+ amGrenade, amClusterBomb, amMolotov, amWatermelon, amHellishBomb, amGasBomb,
+ amShotgun, amDEagle, amFlamethrower, amSniperRifle, amSineGun,
+ amFirePunch, amWhip, amBaseballBat, --[[amKamikaze,]] amSeduction, --[[amHammer,]]
+ amMine, amDynamite, amCake, amBallgun, amRCPlane, amSMine,
+ amRCPlane, amSMine,
+ amBirdy
+ }
+
+local utilArray = {
+ amBlowTorch, amPickHammer, amGirder, amPortalGun,
+ amRope, amParachute, amTeleport, amJetpack,
+ amInvulnerable, amLaserSight, --[[amVampiric,]]
+ amLowGravity, amExtraDamage, --[[amExtraTime,]]
+ amLandGun
+ --[[,amTardis, amResurrector, amSwitch]]
+ }
+
+local wepArray = {}
+
+local currName
+local lastName
+local started = false
+local switchStage = 0
+
+function StartingSetUp(gear)
+
+ for i = 1, #wepArray do
+ setGearValue(gear,wepArray[i],0)
+ end
+
+ setGearValue(gear,amKamikaze,1)
+
+ i = 1 + GetRandom(#atkArray)
+ setGearValue(gear,atkArray[i],1)
+
+ i = 1 + GetRandom(#utilArray)
+ setGearValue(gear,utilArray[i],1)
+
+ SetHealth(gear, 100)
+
+end
+
+--[[function SaveWeapons(gear)
+
+ -
+ for i = 1, (#wepArray) do
+ setGearValue(gear, wepArray[i], GetAmmoCount(gear, wepArray[i]) )
+ --AddAmmo(gear, wepArray[i], getGearValue(gear,wepArray[i]) )
+ end
+
+end]]
+
+function ConvertValues(gear)
+
+ for i = 1, #wepArray do
+ AddAmmo(gear, wepArray[i], getGearValue(gear,wepArray[i]) )
+ end
+
+
+end
+
+
+function TransferWeps(gear)
+
+ if CurrentHedgehog ~= nil then
+
+ for i = 1, #wepArray do
+ val = getGearValue(gear,wepArray[i])
+ if val ~= 0 then
+ setGearValue(CurrentHedgehog, wepArray[i], val)
+ AddAmmo(CurrentHedgehog, wepArray[i], val)
+ end
+ end
+
+ end
+
+end
+
+function onGameInit()
+ GameFlags = gfInfAttack + gfRandomOrder
+ HealthCaseProb = 100
+end
+
+function onGameStart()
+
+
+ ShowMission (
+ loc("HIGHLANDER"),
+ loc("Not all hogs are born equal."),
+
+ "- " .. loc("Eliminate enemy hogs and take their weapons.") .. "|" ..
+ "- " .. loc("Per-Hog Ammo") .. "|" ..
+ "- " .. loc("Weapons reset.") .. "|" ..
+ "- " .. loc("Unlimited Attacks") .. "|" ..
+ "", 4, 4000
+ )
+
+ if MapHasBorder() == false then
+ for i, w in pairs(airWeapons) do
+ table.insert(atkArray, w)
+ end
+ end
+
+ for i, w in pairs(atkArray) do
+ table.insert(wepArray, w)
+ end
+
+ for i, w in pairs(utilArray) do
+ table.insert(wepArray, w)
+ end
+
+ runOnGears(StartingSetUp)
+ runOnGears(ConvertValues)
+
+
+end
+
+function onNewTurn()
+--
+end
+
+
+function onGameTick20()
+
+ if (CurrentHedgehog ~= nil) then
+
+ currName = GetHogName(CurrentHedgehog)
+
+ if (currName ~= lastName) then
+ AddCaption(loc("Switched to ") .. currName .. "!")
+ ConvertValues(CurrentHedgehog)
+ end
+
+ lastName = currName
+ end
+
+end
+
+--[[function onHogHide(gear)
+ -- waiting for Henek
+end
+
+function onHogRestore(gear)
+ -- waiting for Henek
+end]]
+
+function onGearAdd(gear)
+
+ --if GetGearType(gear) == gtSwitcher then
+ -- SaveWeapons(CurrentHedgehog)
+ --end
+
+ if (GetGearType(gear) == gtHedgehog) then
+ trackGear(gear)
+ end
+
+end
+
+function onGearDelete(gear)
+
+ if (GetGearType(gear) == gtHedgehog) then --or (GetGearType(gear) == gtResurrector) then
+ TransferWeps(gear)
+ trackDeletion(gear)
+ end
+
+end
+
+function onAmmoStoreInit()
+ SetAmmo(amSkip, 9, 0, 0, 0)
+ SetAmmo(amKamikaze, 9, 0, 0, 0)
+ --SetAmmo(amSwitch, 9, 0, 0, 0) -------1
+end
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/No_Jumping.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/No_Jumping.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+Default
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/No_Jumping.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/No_Jumping.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,34 @@
+--------------------------------
+-- NO JUMPING
+--------------------------------
+
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+
+local specialGear = nil
+
+function onGameInit()
+ Goals = loc("Jumping is disabled")
+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
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Racer.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Racer.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Shoppa
+Shoppa
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Racer.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Racer.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,700 @@
+
+------------------------------------------
+-- RACER 0.5
+-- map-independant racing script
+-- by mikade
+-----------------------------------------
+
+-----------------------------------
+--0.1: took all the code from crazy racer and scrapped most of it
+-----------------------------------
+
+-- Removed tumbler system
+-- Removed extra adds like boosters etc
+-- Added experimental waypoint placement system
+-- More user feedback
+-- Reduced race complexity limit to 5 waypoints
+-- stop placement at complexity limit reached and end turn
+-- guys dont keep racing after dying
+-- invulnerable feasibility
+-- reverted time keeping method
+-- reduced feedback display time
+-- colour-coded addcaptions
+-- cleaned up code
+-- support for more players properly added
+-- tardis fix
+-- remove airstrikes
+
+-- i think the remainder 0 .456 sec of the tracktime isnt getting reset on newturn
+
+-- update feedback
+
+-------
+-- 0.2
+-------
+
+-- allow gameflags
+-- extend time to 90s
+-- remove other air-attack based weps
+-- turn off water rise for sd
+
+-------
+-- 0.3
+-------
+
+-- prevent WP being placed in land
+-- prevent waypoints being placed outside border
+
+-------
+-- 0.4
+-------
+
+-- update user feedback
+-- add more sounds
+
+-------
+-- 0.5
+-------
+
+-- fix ghost disappearing if hog falls in water or somehow dies
+-- lengthen ghost tracking interval to improve performance on slower machines
+-- increase waypoint limit to 8
+-- allow for persistent showmission information
+
+-----------------------------
+-- SCRIPT BEGINS
+-----------------------------
+
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+
+------------------
+-- Got Variables?
+------------------
+
+local fMod = 1000000 -- 1
+local roundLimit = 3
+local roundNumber = 0
+local firstClan = 10
+
+local fastX = {}
+local fastY = {}
+local fastCount = 0
+local fastIndex = 0
+local fastColour
+
+local currX = {}
+local currY = {}
+local currCount = 0
+
+--------------------------
+-- hog and team tracking variales
+--------------------------
+
+local numhhs = 0 -- store number of hedgehogs
+local hhs = {} -- store hedgehog gears
+
+local numTeams -- store the number of teams in the game
+local teamNameArr = {} -- store the list of teams
+local teamClan = {}
+local teamSize = {} -- store how many hogs per team
+local teamIndex = {} -- at what point in the hhs{} does each team begin
+
+local teamComment = {}
+local teamScore = {}
+
+-------
+-- racer vars
+--------
+
+local cGear = nil
+
+local bestClan = nil
+local bestTime = nil
+
+local gameBegun = false
+local gameOver = false
+local racerActive = false
+local trackTime = 0
+
+local wpCirc = {}
+local wpX = {}
+local wpY = {}
+local wpCol = {}
+local wpActive = {}
+local wpRad = 450 --75
+local wpCount = 0
+local wpLimit = 8
+
+local roundN
+local lastRound
+local RoundHasChanged
+
+-------------------
+-- general methods
+-------------------
+
+function RebuildTeamInfo()
+
+
+ -- make a list of individual team names
+ for i = 0, (TeamsCount-1) do
+ teamNameArr[i] = " " -- = i
+ teamSize[i] = 0
+ teamIndex[i] = 0
+ teamScore[i] = 100000
+ end
+ numTeams = 0
+
+ for i = 0, (numhhs-1) do
+
+ z = 0
+ unfinished = true
+ while(unfinished == true) do
+
+ newTeam = true
+ tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
+
+ if tempHogTeamName == teamNameArr[z] then
+ newTeam = false
+ unfinished = false
+ end
+
+ z = z + 1
+
+ if z == TeamsCount then
+ unfinished = false
+ if newTeam == true then
+ teamNameArr[numTeams] = tempHogTeamName
+ numTeams = numTeams + 1
+ end
+ end
+
+ end
+
+ end
+
+ -- find out how many hogs per team, and the index of the first hog in hhs
+ for i = 0, (numTeams-1) do
+ for z = 0, (numhhs-1) do
+ if GetHogTeamName(hhs[z]) == teamNameArr[i] then
+ teamClan[i] = GetHogClan(hhs[z])
+ if teamSize[i] == 0 then
+ teamIndex[i] = z -- should give starting index
+ end
+ teamSize[i] = teamSize[i] + 1
+ --add a pointer so this hog appears at i in hhs
+ end
+ end
+
+ end
+
+end
+
+
+-----------------
+-- RACER METHODS
+-----------------
+
+function CheckWaypoints()
+
+ trackFinished = true
+
+ for i = 0, (wpCount-1) do
+
+ g1X, g1Y = GetGearPosition(CurrentHedgehog)
+ g2X, g2Y = wpX[i], wpY[i]
+
+ g1X = g1X - g2X
+ g1Y = g1Y - g2Y
+ dist = (g1X*g1X) + (g1Y*g1Y)
+
+ --if i == 0 then
+ -- AddCaption(dist .. "/" .. (wpRad*wpRad) )
+ --end
+
+ NR = (48/100*wpRad)/2
+
+ if dist < (NR*NR) then
+ --if dist < (wpRad*wpRad) then
+ --AddCaption("howdy")
+ wpActive[i] = true
+ wpCol[i] = GetClanColor(GetHogClan(CurrentHedgehog)) -- new --GetClanColor(1)
+ SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
+
+ wpRem = 0
+ for k = 0, (wpCount-1) do
+ if wpActive[k] == false then
+ wpRem = wpRem + 1
+ end
+ end
+
+ AddCaption(loc("Way-Points Remaining") .. ": " .. wpRem,0xffba00ff,capgrpAmmoinfo)
+
+ end
+
+ if wpActive[i] == false then
+ trackFinished = false
+ end
+
+ end
+
+ return(trackFinished)
+
+end
+
+function AdjustScores()
+
+ if bestTime == nil then
+ bestTime = 100000
+ bestClan = 10
+ bestTimeComment = "N/A"
+ end
+
+ newScore = false
+
+ -- update this clan's time if the new track is better
+ for i = 0, (numTeams-1) do
+ if teamClan[i] == GetHogClan(CurrentHedgehog) then
+ if trackTime < teamScore[i] then
+ teamScore[i] = trackTime
+ newScore = true
+ else
+ newScore = false
+ end
+ end
+ end
+
+ --bestTime = 100000
+ --bestClan = 10
+
+ -- find the best time out of those so far
+ for i = 0, (numTeams-1) do
+ if teamScore[i] < bestTime then
+ bestTime = teamScore[i]
+ bestClan = teamClan[i]
+ end
+ end
+
+ if bestTime ~= 100000 then
+ bestTimeComment = (bestTime/1000) ..loc("s")
+ end
+
+ if newScore == true then
+ if trackTime == bestTime then -- best time of the race
+ ShowMission(loc("RACER"),
+ loc("TRACK COMPLETED"),
+ loc("NEW RACE RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+ loc("WINNING TIME: ") .. bestTimeComment, 0, 4000)
+ PlaySound(sndHomerun)
+ else -- best time for the clan
+ ShowMission(loc("RACER"),
+ loc("TRACK COMPLETED"),
+ loc("NEW CLAN RECORD: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+ loc("WINNING TIME: ") .. bestTimeComment, 4, 4000)
+ end
+ else -- not any kind of new score
+ ShowMission(loc("RACER"),
+ loc("TRACK COMPLETED"),
+ loc("TIME: ") .. (trackTime/1000) ..loc("s") .. "|" ..
+ loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
+ PlaySound(sndHellish)
+ end
+
+
+ --------
+ --new
+ --------
+
+ if bestTime == trackTime then
+ --AddCaption("wooooooooooooooooooooooooooooo")
+
+ fastColour = GetClanColor(GetHogClan(CurrentHedgehog))
+
+ for i = 0, (currCount-1) do
+ fastX[i] = currX[i]
+ fastY[i] = currY[i]
+ end
+
+ fastCount = currCount
+ fastIndex = 0
+
+ --currCount = 0 -- is this needed?
+
+ else
+ currCount = 0
+ fastIndex = 0
+ end
+
+
+end
+
+function onNewRound()
+
+ roundNumber = roundNumber + 1
+
+ totalComment = ""
+ for i = 0, (TeamsCount-1) do
+ if teamNameArr[i] ~= " " then -- teamScore[teamClan[i]]
+ teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
+ totalComment = totalComment .. teamComment[i]
+ elseif teamNameArr[i] == " " then
+ teamComment[i] = "|"
+ end
+ end
+
+ ShowMission( loc("RACER"),
+ loc("STATUS UPDATE"),
+ loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
+ loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
+
+ -- end game if its at round limit
+ if roundNumber == roundLimit then
+ for i = 0, (numhhs-1) do
+ if GetHogClan(hhs[i]) ~= bestClan then
+ SetEffect(hhs[i], heResurrectable, false)
+ SetHealth(hhs[i],0)
+ end
+ end
+ gameOver = true
+ TurnTimeLeft = 1
+ end
+
+end
+
+function CheckForNewRound()
+
+ -------------
+ ------ new
+ -------------
+
+ --[[turnN = turnN + 1
+ if gameBegun == false then
+ if turnN == 2 then
+ for i = 0, (numhhs-1) do
+ if hhs[i] ~= nil then
+ SetEffect(hhs[i], heResurrectable, false)
+ SetHealth(hhs[i],0)
+ end
+ end
+ gameOver = true
+ TurnTimeLeft = 1
+ end
+ else
+
+
+ end]]
+
+ --[[if roundBegun == true then
+
+ if RoundHasChanged == true then
+ roundN = roundN + 1
+ RoundHasChanged = false
+ onNewRound()
+ end
+
+ if lastRound ~= TotalRounds then -- new round, but not really
+
+ if RoundHasChanged == false then
+ RoundHasChanged = true
+ end
+
+ end
+
+ AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+
+ lastRound = TotalRounds
+
+ end]]
+
+ ------------
+ ----- old
+ ------------
+
+ if GetHogClan(CurrentHedgehog) == firstClan then
+ onNewRound()
+ end
+
+end
+
+function DisableTumbler()
+ currCount = 0
+ fastIndex = 0
+ TurnTimeLeft = 0
+ racerActive = false -- newadd
+end
+
+function HandleGhost()
+
+ -- get the current xy of the racer at this point
+ currX[currCount] = GetX(CurrentHedgehog)
+ currY[currCount] = GetY(CurrentHedgehog)
+ currCount = currCount + 1
+
+ -- draw a ping of smoke where the fastest player was at this point
+ if (fastCount ~= 0) and (fastIndex < fastCount) then
+
+ fastIndex = fastIndex + 1
+
+ tempE = AddVisualGear(fastX[fastIndex], fastY[fastIndex], vgtSmoke, 0, false)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+ SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, fastColour )
+
+ --AddCaption("fC: " .. fastIndex .. " / " .. fastCount)
+
+ else
+
+ --AddCaption("excep fC: " .. fastIndex .. " / " .. fastCount)
+
+ end
+
+
+
+end
+
+----------------------------------
+-- GAME METHODS / EVENT HANDLERS
+----------------------------------
+
+function onGameInit()
+ GameFlags = GameFlags + gfInfAttack + gfInvulnerable
+ CaseFreq = 0
+ TurnTime = 90000
+ WaterRise = 0
+end
+
+
+function onGameStart()
+
+ roundN = 0
+ lastRound = TotalRounds
+ RoundHasChanged = false -- true
+
+ RebuildTeamInfo()
+
+ ShowMission (
+ loc("RACER"),
+ loc("a Hedgewars mini-game"),
+
+ loc("Build a track and race.") .. "|" ..
+ loc("Round Limit:") .. " " .. roundLimit .. "|" ..
+
+ "", 4, 4000
+ )
+end
+
+function PlaceWayPoint(x,y)
+
+ if (wpCount < wpLimit) then -- seems to not work with a hedgehog nil chek
+
+ wpX[wpCount] = x
+ wpY[wpCount] = y
+ wpCol[wpCount] = 0xffffffff
+ wpCirc[wpCount] = AddVisualGear(wpX[wpCount],wpY[wpCount],vgtCircle,0,true)
+ --100
+ SetVisualGearValues(wpCirc[wpCount], wpX[wpCount], wpY[wpCount], 20, 100, 1, 10, 0, wpRad, 5, wpCol[wpCount])
+
+ wpCount = wpCount + 1
+
+ AddCaption(loc("Waypoint placed.") .. " " .. loc("Available points remaining: ") .. (wpLimit-wpCount))
+
+ end
+
+end
+
+function onNewTurn()
+
+ CheckForNewRound()
+
+ racerActive = false
+
+ trackTime = 0
+
+ currCount = 0 -- hopefully this solves problem
+ AddAmmo(CurrentHedgehog, amAirAttack, 0)
+ gTimer = 0
+
+ -- Set the waypoints to unactive on new round
+ for i = 0,(wpCount-1) do
+ wpActive[i] = false
+ wpCol[i] = 0xffffffff
+ SetVisualGearValues(wpCirc[i], wpX[i], wpY[i], 20, 100, 1, 10, 0, wpRad, 5, wpCol[i])
+ end
+
+ -- Handle Starting Stage of Game
+ if (gameOver == false) and (gameBegun == false) then
+ if wpCount >= 3 then
+ gameBegun = true
+ roundNumber = 0
+ firstClan = GetHogClan(CurrentHedgehog)
+ ShowMission(loc("RACER"),
+ loc("GAME BEGUN!!!"),
+ loc("Complete the track as fast as you can!"), 2, 4000)
+ else
+ ShowMission(loc("RACER"),
+ loc("NOT ENOUGH WAYPOINTS"),
+ loc("Place more waypoints using the 'Air Attack' weapon."), 2, 4000)
+ AddAmmo(CurrentHedgehog, amAirAttack, 4000)
+ ParseCommand("setweap " .. string.char(amAirAttack))
+ end
+ end
+
+ if gameOver == true then
+ gameBegun = false
+ racerActive = false -- newadd
+ end
+
+ AddAmmo(CurrentHedgehog, amTardis, 0)
+ AddAmmo(CurrentHedgehog, amDrillStrike, 0)
+ AddAmmo(CurrentHedgehog, amMineStrike, 0)
+ AddAmmo(CurrentHedgehog, amNapalm, 0)
+ AddAmmo(CurrentHedgehog, amPiano, 0)
+
+end
+
+function onGameTick20()
+
+ -- airstrike detected, convert this into a potential waypoint spot
+ if cGear ~= nil then
+ x,y = GetGearPosition(cGear)
+ if x > -9000 then
+ x,y = GetGearTarget(cGear)
+
+
+ if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
+ AddCaption(loc("Please place the way-point in the open, within the map boundaries."))
+ PlaySound(sndDenied)
+ elseif (y > WaterLine-50) then
+ AddCaption(loc("Please place the way-point further from the waterline."))
+ PlaySound(sndDenied)
+ else
+ PlaceWayPoint(x, y)
+ if wpCount == wpLimit then
+ AddCaption(loc("Race complexity limit reached."))
+ DisableTumbler()
+ end
+ end
+ else
+ DeleteGear(cGear)
+ end
+ SetGearPosition(cGear, -10000, 0)
+ end
+
+
+ -- start the player tumbling with a boom once their turn has actually begun
+ if racerActive == false then
+
+ if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
+
+ -- if the gamehas started put the player in the middle of the first
+ --waypoint that was placed
+ if gameBegun == true then
+ AddCaption(loc("Good to go!"))
+ racerActive = true
+ trackTime = 0
+
+ SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
+ AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
+ FollowGear(CurrentHedgehog)
+
+ HideMission()
+
+ else
+ -- still in placement mode
+ end
+
+ end
+ end
+
+
+
+ -- has the player started his tumbling spree?
+ if (CurrentHedgehog ~= nil) then
+
+ --airstrike conversion used to be here
+
+ -- if the RACE has started, show tracktimes and keep tabs on waypoints
+ if (racerActive == true) and (gameBegun == true) then
+
+ --ghost
+ if GameTime%40 == 0 then
+ HandleGhost()
+ end
+
+ trackTime = trackTime + 20
+
+ if GameTime%100 == 0 then
+
+ if trackTime%1000 == 0 then
+ AddCaption((trackTime/1000)..'.0',GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+ else
+ AddCaption(trackTime/1000,GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+ end
+
+ if (CheckWaypoints() == true) then
+ AdjustScores()
+ racerActive = false
+ DisableTumbler()
+ end
+
+ end
+
+ end
+
+
+
+ -- if the player has expended his tunbling time, stop him tumbling
+ if TurnTimeLeft <= 20 then
+ DisableTumbler()
+ end
+
+ end
+
+end
+
+function onGearResurrect(gear)
+
+ AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+
+ if gear == CurrentHedgehog then
+ DisableTumbler()
+ end
+
+ -- if the player stops and "dies" or flies into water, stop him racing
+ --[[if gear == CurrentHedgehog then
+ DisableTumbler()
+ ShowMission(loc("RACER"),
+ loc("TRACK FAILED!"),
+ loc("WINNING TIME: ") .. bestTimeComment, -amSkip, 4000)
+ end]]
+
+end
+
+function onGearAdd(gear)
+
+ if GetGearType(gear) == gtHedgehog then
+ hhs[numhhs] = gear
+ numhhs = numhhs + 1
+ SetEffect(gear, heResurrectable, true)
+ end
+
+ if GetGearType(gear) == gtAirAttack then
+ cGear = gear
+ end
+
+end
+
+function onGearDelete(gear)
+
+ if GetGearType(gear) == gtAirAttack then
+ cGear = nil
+ end
+
+end
+
+--[[function onAmmoStoreInit()
+ SetAmmo(amRope, 9, 0, 0, 0)
+ SetAmmo(amJetpack, 9, 0, 0, 0)
+ SetAmmo(amSkip, 9, 0, 0, 0)
+end]]
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Random_Weapon.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Random_Weapon.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+locked
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Random_Weapon.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Random_Weapon.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,113 @@
+-- Random Weapons, example for gameplay scripts
+
+-- Load the library for localisation ("loc" function)
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+
+-- Load the gear tracker
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+
+-- List of available weapons
+local weapons = { amGrenade, amClusterBomb, amBazooka, amBee, amShotgun,
+ amMine, amDEagle, amDynamite, amFirePunch, amWhip, amPickHammer,
+ amBaseballBat, amTeleport, amMortar, amCake, amSeduction,
+ amWatermelon, amHellishBomb, amDrill, amBallgun, amRCPlane,
+ amSniperRifle, amMolotov, amBirdy, amBlowTorch, amGasBomb,
+ amFlamethrower, amSMine, amHammer }
+
+-- List of weapons that attack from the air
+local airweapons = { amAirAttack, amMineStrike, amNapalm, amDrillStrike }
+
+-- Function that assigns the team their weapon
+function assignAmmo(hog)
+ -- Get name of the current team
+ local name = GetHogTeamName(hog)
+ -- Get whither the team has been processed
+ local processed = getTeamValue(name, "processed")
+ -- If it has not, process it
+ if processed == nil or not processed then
+ -- Get the ammo for this hog's team
+ local ammo = getTeamValue(name, "ammo")
+ -- If there is no ammo, get a random one from the list and store it
+ if ammo == nil then
+ ammo = weapons[GetRandom(table.maxn(weapons)) + 1]
+ setTeamValue(name, "ammo", ammo)
+ end
+ -- Add the ammo for the hog
+ AddAmmo(hog, ammo)
+ -- Mark as processed
+ setTeamValue(name, "processed", true)
+ end
+end
+
+-- Mark team as not processed
+function reset(hog)
+ setTeamValue(GetHogTeamName(hog), "processed", false)
+end
+
+function onGameInit()
+ -- Limit flags that can be set, but allow game schemes to be used
+ GameFlags = band(bor(GameFlags, gfResetWeps), bnot(gfInfAttack))
+ -- Set a custom game goal that will show together with the scheme ones
+ Goals = loc("Each turn you get one random weapon")
+end
+
+function onGameStart()
+ -- Initialize the tracking of hogs and teams
+ trackTeams()
+ -- Add air weapons to the game if the border is not active
+ if MapHasBorder() == false then
+ for i, w in pairs(airweapons) do
+ table.insert(weapons, w)
+ end
+ end
+end
+
+function onAmmoStoreInit()
+ -- Allow skip at all times
+ SetAmmo(amSkip, 9, 0, 0, 0)
+
+ -- Let utilities be available through crates
+ SetAmmo(amParachute, 0, 1, 0, 1)
+ SetAmmo(amGirder, 0, 1, 0, 2)
+ SetAmmo(amSwitch, 0, 1, 0, 1)
+ SetAmmo(amLowGravity, 0, 1, 0, 1)
+ SetAmmo(amExtraDamage, 0, 1, 0, 1)
+ SetAmmo(amInvulnerable, 0, 1, 0, 1)
+ SetAmmo(amExtraTime, 0, 1, 0, 1)
+ SetAmmo(amLaserSight, 0, 1, 0, 1)
+ SetAmmo(amVampiric, 0, 1, 0, 1)
+ SetAmmo(amJetpack, 0, 1, 0, 1)
+ SetAmmo(amPortalGun, 0, 1, 0, 1)
+ SetAmmo(amResurrector, 0, 1, 0, 1)
+
+ -- Allow weapons to be used
+ for i, w in pairs(weapons) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+
+ -- Allow air weapons to be used
+ for i, w in pairs(airweapons) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+end
+
+function onNewTurn()
+ -- Give every team their weapons, so one can plan during anothers turn
+ runOnGears(assignAmmo)
+ -- Mark all teams as not processed
+ runOnGears(reset)
+ -- Set the current teams weapons to nil so they will get new after the turn has ended
+ setTeamValue(GetHogTeamName(CurrentHedgehog), "ammo", nil)
+end
+
+function onGearAdd(gear)
+ -- Catch hedgehogs for the tracker
+ if GetGearType(gear) == gtHedgehog then
+ trackGear(gear)
+ end
+end
+
+function onGearDelete(gear)
+ -- Remove hogs that are gone
+ trackDeletion(gear)
+end
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Space_Invasion.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Space_Invasion.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+Default
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Space_Invasion.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2435 @@
+
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+
+---------------------------------------------------
+---------------------------------------------------
+---------------------------------------------------
+--- Space Invasion Code Follows (1.1)
+---------------------------------------------------
+---------------------------------------------------
+-- VERSION HISTORY
+----------------
+-- version 0.1
+----------------
+-- conversion of tumbler into space invasion
+-- a million and one changes
+-- bells and whistles
+
+----------------
+-- version 0.2
+----------------
+-- code slowly getting cleaner, it still looks like a spaghetti monster tho
+-- lots of console tracking :/
+-- all visual gears are now compulsary (will probably revert this)
+-- implemented fMod to try combat desyncs and bring this in line with dev
+
+----------------
+-- version 0.3
+----------------
+-- values of scoring changed to 3:10, and now based on vCircScore
+-- time gained from killing a red circ increased from 3 to 4
+-- circles now spawn at a distance of at least 800 or until sanity limit
+-- roundsLimit now based off MinesTime (kinda, its an experiment)
+
+-----------------
+--0.4
+-----------------
+-- commented out a lot of WriteLnToConsoles (dont need them at this point)
+-- added some different WriteLnToConsoles
+-- changed some of the collision detect for explosives in checkvarious()
+
+-----------------
+--0.5
+-----------------
+-- added implementation for a projectile shield
+-- added a "bonus" orange invader that partially recharges player shield
+-- added a tough "blueboss" blue invader
+-- expanded user feedback
+-- circles now have health and are capable of being merely "damaged"
+-- redid a lot of the collision code and added CircleDamaged
+-- added more sounds to events
+-- added more visual gears
+
+-----------------
+--0.6
+-----------------
+-- removed a few WriteLns
+-- added randomized grunts on circ damage
+-- added (mostly) graceful fading out of circles :D:
+-- changed odds for circles
+-- changed user feedback
+-- fixed the location of the explosion where player bashes into circ
+
+-----------------
+--0.7
+-----------------
+-- added PlaySound(sndSuddenDeath) when ammo gets depleted
+-- added an extra "Ammo Depleted" note if user presses fire while empty
+-- specified how much shield power is gained on shield powerup collection
+-- changed odds for circles AGAIN, ammo is now sliiightly more common
+-- switched most of the explosions/smoke effects back to non-critical vgears (with a few exceptions)
+-- tumbletime is now based off turntime and is variable
+-- delete explosives in DeleteFarFlungBarrel rather than explode them on map boundaries to save on performance
+-- utilized the improved AddCaption to tint / prevent overrides
+-- temporarily disabled bugged sort that displays teams according to their score
+-- reluctantly changed the colour of the bonus circ to purple
+-- standarized point notation
+-- added some missing locs
+-- commented out remaining WriteLnToConsoles for the meanwhile with the prefix "nw"
+
+-- ACHIEIVEMENTS added
+-- (during one turn) aka repeatable
+-- Ammo Manic (Destroy 3 green circles for + 5 points)
+-- Drone Hunter (Destroy 5 red circles for + 10 points)
+-- Shield Seeker (Destroy 3 purple circles for +10 points)
+-- Boss Slayer (Destroy 2 blue circles for +25 points)
+
+-- Shield Master (disolve 5 shells for +10 points)
+-- Shield Miser (don't use your shield at all (3.5*roundkills)+2 points)
+
+-- Depleted Kamikaze! (kamikaze into a blue/red circ when you are out of ammo) 5pts
+-- Timed Kamikaze! (kamikaze into a blue/red circ when you only have 5s left) 10pts
+-- Kamikaze Expert (combination of the above two) 15pts
+
+-- Multi-shot (destroy more than 1 invader with a single bullet) 15pts
+-- X-Hit Combo (destroy another invader in less than 3 seconds) chainLength*2 points
+
+-- Accuracy Bonus (80% accuracy at the end of your turn with more than 5 shots fired) 15pts
+
+--(during the length of the game) aka non-repeatable
+-- 10/25/50 kills (+25/+50/+100 points)
+
+-----------------
+--0.8
+-----------------
+-- added a HUD for turntimeleft, ammo, shield
+-- shieldhealth hits 0 properly
+
+------------------------
+-- version 0.8.1
+------------------------
+
+-- stop hiding non-existant 4th Tag
+-- redraw HUD on screen resolution change
+
+------------------------
+-- version 0.9
+------------------------
+-- time for more 'EXPERIMENTS' mwahahahahahaha D:
+-- (hopefully) balanced Shield Miser
+-- bosses are no longer a redunkulous 50 points, but toned down to 30
+-- experimental radar (it's INTERACTIVE and math-heavy :D) (visual gears are safe... right? D:)
+-- bugfix and balance for multishot
+
+------------------------
+-- version 1.0
+------------------------
+-- if only version numbers actually worked like this, wouldn't that be awful :D
+-- added surfer achievement
+-- increased value of shield miser by 1 point per kill (OP?)
+
+------------------------
+-- version 1.1
+------------------------
+-- fixed radar so that blips dont go past circs when you get very close
+-- added a missing loc for shield depletion
+-- increased delay to 1000 to try stop noobies missing their turn
+-- added sniper achievement for hits from over a 1000000 away
+-- added achievement for 3 "sniper" shots in a round
+-- added achievement for 3 "point blank" shots in a round
+-- added "fierce Competition" achievement for shooting an enemy hog (once per round)
+-- some support for more weapons later
+
+--------------------------
+--notes for later
+--------------------------
+-- maybe add a check for a tie, IMPOSSIBRU THERE ARE NO TIES
+-- more achievements? (3 kamikazes in a row, supreme shield expert/miser etc?)
+
+-- if more weps are added, replace primshotsfired all over the place
+
+-- look for derp and let invaders shoot again
+
+-- more weps? flamer/machineballgun,
+-- some kind of bomb that just drops straight down
+-- "fire and forget" missile
+-- shockwave
+
+-- some kind of ability-meter that lets you do something awesome when you are
+-- doing really well in a given round.
+-- probably new kind of shield that pops any invaders who come near
+
+-- fix game never ending bug
+-- fix radar
+-- new invader: golden snitch, doesn't show up on your radar
+
+-- maybe replace (48/100*vCircRadius[i])/2 with something better
+
+
+--[[CAPTION CATEGORIES
+-----------------
+capgrpGameState
+-----------------
+AddCaption(LOC_NOT("Sniper!") .. " +10 " .. LOC_NOT("points") .. "!",0xffba00ff,capgrpAmmostate)
+--they call me bullsye
+--point blank combo
+--fierce Competition
+-----------------
+capgrpAmmostate
+-----------------
+AddCaption( chainLength .. LOC_NOT("-chain! +") .. chainLength*2 .. LOC_NOT(" points!"),0xffba00ff,capgrpAmmostate)
+AddCaption(LOC_NOT("Multi-shot! +15 points!"),0xffba00ff,capgrpAmmostate)
+
+-----------------
+capgrpAmmoinfo
+-----------------
+AddCaption(LOC_NOT("Shield Miser! +20 points!"),0xffba00ff,capgrpAmmoinfo)
+AddCaption(LOC_NOT("Shield Master! +10 points!"),0xffba00ff,capgrpAmmoinfo)
+
+-----------------
+capgrpVolume
+-----------------
+AddCaption(LOC_NOT("Boom! +25 points!"),0xffba00ff,capgrpVolume)
+AddCaption(LOC_NOT("BOOM! +50 points!"),0xffba00ff,capgrpVolume)
+AddCaption(LOC_NOT("BOOM! BOOM! BOOM! +100 points!"),0xffba00ff,capgrpVolume)
+AddCaption(LOC_NOT("Accuracy Bonus! +15 points!"),0xffba00ff,capgrpVolume)
+AddCaption(LOC_NOT("Surfer! +15 points!"),0xffba00ff,capgrpVolume)
+
+-----------------
+capgrpMessage
+-----------------
+AddCaption(LOC_NOT("Ammo Depleted!"),0xff0000ff,capgrpMessage)
+AddCaption(LOC_NOT("Ammo: ") .. primShotsLeft)
+AddCaption(LOC_NOT("Shield Depleted"),0xff0000ff,capgrpMessage)
+AddCaption( LOC_NOT("Shield ON:") .. " " .. shieldHealth - 80 .. " " .. LOC_NOT("Power Remaining") )
+AddCaption(LOC_NOT("Shield OFF:") .. " " .. shieldHealth - 80 .. " " .. LOC_NOT("Power Remaining") )
+
+AddCaption(LOC_NOT("Time Extended!") .. "+" .. 4 .. LOC_NOT("s"), 0xff0000ff,capgrpMessage )
+AddCaption("+" .. 3 .. " " .. LOC_NOT("Ammo"), 0x00ff00ff,capgrpMessage)
+AddCaption(LOC_NOT("Shield boosted! +30 power"), 0xff00ffff,capgrpMessage)
+AddCaption(LOC_NOT("Shield is fully recharged!"), 0xffae00ff,capgrpMessage)
+AddCaption(LOC_NOT("Boss defeated! +50 points!"), 0x0050ffff,capgrpMessage)
+
+AddCaption(LOC_NOT("GOTCHA!"))
+AddCaption(LOC_NOT("Kamikaze Expert! +15 points!"),0xffba00ff,capgrpMessage)
+AddCaption(LOC_NOT("Depleted Kamikaze! +5 points!"),0xffba00ff,capgrpMessage)
+AddCaption(LOC_NOT("Timed Kamikaze! +10 points!"),0xffba00ff,capgrpMessage)
+
+-----------------
+capgrpMessage2
+-----------------
+AddCaption(LOC_NOT("Drone Hunter! +10 points!"),0xffba00ff,capgrpMessage2)
+AddCaption(LOC_NOT("Ammo Maniac! +5 points!"),0xffba00ff,capgrpMessage2)
+AddCaption(LOC_NOT("Shield Seeker! +10 points!"),0xffba00ff,capgrpMessage2)
+AddCaption(LOC_NOT("Boss Slayer! +25 points!"),0xffba00ff,capgrpMessage2)
+]]
+
+----------------------------------
+-- so I herd u liek wariables
+----------------------------------
+
+--local fMod = 1 -- for use in .15 single player only, otherwise desync
+local fMod = 1000000 -- use this for dev and .16+ games
+
+-- some console stuff
+local shellID = 0
+local explosivesID = 0
+
+-- gaudyRacer
+local boosterOn = false
+local roundLimit = 3 -- no longer set here (see version history)
+local roundNumber = 0
+local firstClan = 10
+local gameOver = false
+local gameBegun = false
+
+local bestClan = 10
+local bestScore = 0
+local sdScore = {}
+local sdName = {}
+local sdKills = {}
+
+local roundN = 0
+local lastRound
+local RoundHasChanged = true
+
+--------------------------
+-- hog and team tracking variales
+--------------------------
+
+local numhhs = 0
+local hhs = {}
+
+local numTeams
+local teamNameArr = {}
+local teamClan = {}
+local teamSize = {}
+local teamIndex = {}
+
+local teamComment = {}
+local teamScore = {}
+local teamCircsKilled = {}
+local teamSurfer = {}
+
+-- stats variables
+--local teamRed = {}
+--local teamBlue = {}
+--local teamOrange = {}
+--local teamGreen = {}
+local roundKills = 0
+local RK = 0
+local GK = 0
+local BK = 0
+local OK = 0
+local SK = 0
+local shieldMiser = true
+local fierceComp = false
+local chainCounter = 0
+local chainLength = 0
+local shotsFired = 0
+local shotsHit = 0
+local SurfTime = 0
+local sniperHits = 0
+local pointBlankHits = 0
+---------------------
+-- tumbler goods
+---------------------
+
+local leftOn = false
+local rightOn = false
+local upOn = false
+local downOn = false
+
+----------------
+-- TUMBLER
+local wep = {}
+local wepAmmo = {}
+local wepCol = {}
+local wepIndex = 0
+local wepCount = 0
+local fireTimer = 0
+----------------
+
+
+
+local primShotsMax = 5
+local primShotsLeft = 0
+
+local TimeLeft = 0
+local stopMovement = false
+local tumbleStarted = false
+
+local beam = false
+local pShield
+local shieldHealth
+
+local shockwave
+local shockwaveHealth = 0
+local shockwaveRad = 300
+
+local vTag = {}
+
+-----------------------------------------------
+-- CIRCLY GOODIES
+-----------------------------------------------
+
+local CirclesAreGo = false
+local playerIsFine = true
+local targetHit = false
+
+local FadeAlpha = 0 -- used to fade the circles out gracefully when player dies
+local pTimer = 0 -- tracking projectiles following player
+
+--local m2Count = 0 -- handle speed of circs
+
+local vCirc = {}
+local vCCount = 0
+
+local rCirc = {}
+local rCircX = {}
+local rCircY = {}
+local rAlpha = 255
+local radShotsLeft = 0
+
+local vCircActive = {}
+local vCircHealth = {}
+local vType = {}
+local vCounter = {} -- how often this circ gets to "fire" etc
+local vCounterLim = {} -- when vCounter == vCounterLim circle performs its special
+local vCircScore = {} -- how many points killing this invader gives
+
+local vCircRadMax = {}
+local vCircRadMin = {}
+local vCircRadDir = {}
+local vCircRadCounter = {}
+
+local vCircDX = {}
+local vCircDY = {}
+
+local vCircX = {}
+local vCircY = {}
+local vCircMinA = {}
+local vCircMaxA = {}
+local vCircType = {}
+local vCircPulse = {}
+local vCircFuckAll = {}
+local vCircRadius = {}
+local vCircWidth = {}
+local vCircCol = {}
+
+-------------------------------------------
+-- some lazy copypasta/modified methods
+-------------------------------------------
+
+
+
+function HideTags()
+
+ for i = 0, 2 do
+ SetVisualGearValues(vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xffffff00)
+ end
+
+end
+
+function DrawTag(i)
+
+ zoomL = 1.3
+
+ xOffset = 40
+
+ if i == 0 then
+ yOffset = 40
+ tCol = 0xffba00ff
+ tValue = TimeLeft
+ elseif i == 1 then
+ zoomL = 1.1
+ yOffset = 70
+ tCol = 0x00ff00ff
+ tValue = wepAmmo[wepIndex] --primShotsLeft
+ elseif i == 2 then
+ zoomL = 1.1
+ xOffset = 40 + 35
+ yOffset = 70
+ tCol = 0xa800ffff
+ tValue = shieldHealth - 80
+ end
+
+ DeleteVisualGear(vTag[i])
+ vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vTag[i])
+ SetVisualGearValues (
+ vTag[i], --id
+ -(ScreenWidth/2) + xOffset, --xoffset
+ ScreenHeight - yOffset, --yoffset
+ 0, --dx
+ 0, --dy
+ zoomL, --zoom
+ 1, --~= 0 means align to screen
+ g7, --frameticks
+ tValue, --value
+ 240000, --timer
+ tCol --GetClanColor( GetHogClan(CurrentHedgehog) )
+ )
+
+end
+
+function RebuildTeamInfo()
+
+ -- make a list of individual team names
+ for i = 0, (TeamsCount-1) do
+ teamNameArr[i] = " " -- = i
+ teamSize[i] = 0
+ teamIndex[i] = 0
+ teamScore[i] = 0
+ teamCircsKilled[i] = 0
+ teamSurfer[i] = false
+ end
+ numTeams = 0
+
+ for i = 0, (numhhs-1) do
+
+ z = 0
+ unfinished = true
+ while(unfinished == true) do
+
+ newTeam = true
+ tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name
+
+ if tempHogTeamName == teamNameArr[z] then
+ newTeam = false
+ unfinished = false
+ end
+
+ z = z + 1
+
+ if z == (TeamsCount-1) then
+ unfinished = false
+ if newTeam == true then
+ teamNameArr[numTeams] = tempHogTeamName
+ numTeams = numTeams + 1
+ end
+ end
+
+ end
+
+ end
+
+ -- find out how many hogs per team, and the index of the first hog in hhs
+ for i = 0, (TeamsCount-1) do
+
+ for z = 0, (numhhs-1) do
+ if GetHogTeamName(hhs[z]) == teamNameArr[i] then
+ teamClan[i] = GetHogClan(hhs[z])
+ if teamSize[i] == 0 then
+ teamIndex[i] = z -- should give starting index
+ end
+ teamSize[i] = teamSize[i] + 1
+ --add a pointer so this hog appears at i in hhs
+ end
+ end
+
+ end
+
+end
+
+-- control
+function AwardPoints(p)
+
+ for i = 0,(TeamsCount-1) do
+ if teamClan[i] == GetHogClan(CurrentHedgehog) then
+ teamScore[i] = teamScore[i] + p
+ end
+ end
+
+end
+
+function AwardKills(t)
+
+ roundKills = roundKills + 1
+
+ for i = 0,(TeamsCount-1) do
+ if teamClan[i] == GetHogClan(CurrentHedgehog) then
+ teamCircsKilled[i] = teamCircsKilled[i] + 1
+
+ if teamCircsKilled[i] == 10 then
+ AddCaption(loc("Boom!") .. " +25 " .. loc("points").."!",0xffba00ff,capgrpVolume)
+ AwardPoints(25)
+ elseif teamCircsKilled[i] == 25 then
+ AddCaption(loc("BOOM!") .. " +50 " .. loc("points") .. "!",0xffba00ff,capgrpVolume)
+ AwardPoints(50)
+ elseif teamCircsKilled[i] == 50 then
+ AddCaption(loc("BOOM!") .. loc("BOOM!") .. loc("BOOM!") .. " +100 " .. loc("points") .. "!",0xffba00ff,capgrpVolume)
+ AwardPoints(100)
+ end
+
+ --[[
+ if t == "R" then
+ redCircsKilled[i] = redCircsKilled[i] + 1
+ end
+ --etc
+ --etc
+ ]]
+ end
+ end
+
+end
+
+-----------------
+
+function bubbleSort(table)
+
+ for i = 1, #table do
+ for j = 2, #table do
+ if table[j] < table[j-1] then
+
+ temp = table[j-1]
+ t2 = sdName[j-1]
+ t3 = sdKills[j-1]
+
+ table[j-1] = table[j]
+ sdName[j-1] = sdName[j]
+ sdKills[j-1] = sdKills[j]
+
+ table[j] = temp
+ sdName[j] = t2
+ sdKills[j] = t3
+
+ end
+ end
+ end
+
+ return
+
+end
+
+-----------------
+
+function CommentOnScore()
+
+ for i = 0,(TeamsCount-1) do
+ sdScore[i] = teamScore[i]
+ sdKills[i] = teamCircsKilled[i]
+ sdName[i] = teamNameArr[i]
+ end
+
+ --bubbleSort(sdScore)
+
+ for i = 0,(TeamsCount-1) do
+ if sdName[i] ~= " " then
+ teamComment[i] = sdName[i] .. " |" ..
+ loc("SCORE") .. ": " .. sdScore[i] .. " " .. loc("points") .. "|" ..
+ loc("KILLS") .. ": " .. sdKills[i] .. " " .. loc("invaders destroyed") .. "|" ..
+ " " .. "|"
+ elseif sdName[i] == " " then
+ teamComment[i] = "|"
+ end
+ end
+
+ entireC = ""
+ for i = (TeamsCount-1),0,-1 do
+ entireC = entireC .. teamComment[i]
+ end
+
+ ShowMission("SPACE INVASION", loc("STATUS UPDATE"), loc("Rounds Complete") .. ": " .. roundNumber .. "/" .. roundLimit .. "| " .. "|" .. loc("Team Scores") .. ": |" ..entireC, 4, 1)
+
+end
+
+function onNewRound()
+ roundNumber = roundNumber + 1
+
+ CommentOnScore()
+
+ -- end game if its at round limit
+ if roundNumber == roundLimit then
+
+ for i = 0, (TeamsCount-1) do
+ if teamScore[i] > bestScore then
+ bestScore = teamScore[i]
+ bestClan = teamClan[i]
+ end
+ end
+
+ for i = 0, (numhhs-1) do
+ if GetHogClan(hhs[i]) ~= bestClan then
+ SetEffect(hhs[i], heResurrectable, false)
+ SetHealth(hhs[i],0)
+ end
+ end
+ gameOver = true
+ TurnTimeLeft = 0 --1
+ TimeLeft = 0
+ end
+end
+
+-- gaudy racer
+function CheckForNewRound()
+
+ ----------
+ -- new
+ ----------
+
+ --[[if gameBegun == true then
+
+ if RoundHasChanged == true then
+ roundN = roundN + 1
+ RoundHasChanged = false
+ onNewRound()
+ end
+
+ if lastRound ~= TotalRounds then -- new round, but not really
+
+ if RoundHasChanged == false then
+ RoundHasChanged = true
+ end
+
+ end
+
+ --AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+ lastRound = TotalRounds
+
+ end]]
+
+ ----------
+ -- old
+ ----------
+ if GetHogClan(CurrentHedgehog) == firstClan then
+ onNewRound()
+ end
+
+end
+
+
+----------------------------------------
+-- some tumbler/space invaders methods
+----------------------------------------
+
+function isATrackedGear(gear)
+ if (GetGearType(gear) == gtExplosives) or
+ (GetGearType(gear) == gtShell) or
+ (GetGearType(gear) == gtFlame) or-- new -- gtBall
+ (GetGearType(gear) == gtBall)
+ then
+ return(true)
+ else
+ return(false)
+ end
+end
+
+function setNewGearValues(gear)
+
+ if GetGearType(gear) == gtShell then
+ lfs = 50 -- roughly 5 seconds
+ shellID = shellID + 1
+ setGearValue(gear,"ID",shellID)
+ --nw WriteLnToConsole("Just assigned ID " .. getGearValue(gear,"ID") .. " to this shell")
+ elseif GetGearType(gear) == gtBall then
+ lfs = 5 --70 -- 7s
+ elseif GetGearType(gear) == gtExplosives then
+ lfs = 15 -- 1.5s
+ explosivesID = explosivesID + 1
+ setGearValue(gear,"ID",explosivesID)
+ setGearValue(gear,"XP", GetX(gear))
+ setGearValue(gear,"YP", GetY(gear))
+ --nw WriteLnToConsole("Just assigned ID " .. getGearValue(gear,"ID") .. " to this explosives")
+ elseif GetGearType(gear) == gtFlame then
+ lfs = 5 -- 0.5s
+ else
+ lfs = 100
+ end
+
+ setGearValue(gear,"lifespan",lfs)
+ --WriteLnToConsole("I also set its lifespan to " .. lfs)
+
+
+end
+
+function HandleLifeSpan(gear)
+
+ decreaseGearValue(gear,"lifespan")
+
+ --WriteLnToConsole("Just decreased the lifespan of a gear to " .. getGearValue(gear,"lifespan"))
+ --WriteLnToConsole("The above event occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+
+
+ if getGearValue(gear,"lifespan") == 0 then
+
+ if GetGearType(gear) == gtShell then
+ AddVisualGear(GetX(gear), GetY(gear), vgtExplosion, 0, false)
+ WriteLnToConsole("about to delete a shell due to lifespan == 0")
+ --elseif GetGearType(gear) == gtBall then
+ -- AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, true)
+ elseif GetGearType(gear) == gtExplosives then
+ AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+ --nw WriteLnToConsole("about to delete a explosive due to lifespan == 0")
+ elseif GetGearType(gear) == gtFlame then
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
+ --WriteLnToConsole("about to delete flame due to lifespan == 0")
+ end
+
+ DeleteGear(gear)
+
+ end
+
+end
+
+-- this prevents ugly barrel clipping sounds when a barrel flies off map limits
+function DeleteFarFlungBarrel(gear)
+
+ if GetGearType(gear) == gtExplosives then
+ if (GetX(gear) < -1900) or
+ (GetX(gear) > 6200) or
+ (GetY(gear) < -3400)
+ then
+ AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+ DeleteGear(gear)
+ --SetHealth(gear, 0)
+ --WriteLnToConsole("I'm setting barrel ID " .. getGearValue(gear,"ID") .. " to 0 health because it's been flung too close to the map edges. at Game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+ end
+
+ end
+
+end
+
+-----------------------
+--EVENT HANDLERS
+-- action keys
+-----------------------
+
+function HandleFlameThrower()
+
+ --
+ --flamer
+
+ fireTimer = fireTimer + 1
+ if fireTimer == 6 then -- 6
+ fireTimer = 0
+
+ if (wep[wepIndex] == loc("Flamer") ) and (preciseOn == true) and (wepAmmo[wepIndex] > 0) and (stopMovement == false) and (tumbleStarted == true) then
+
+ wepAmmo[wepIndex] = wepAmmo[wepIndex] - 1
+ AddCaption(
+ loc("Flamer") .. ": " ..
+ (wepAmmo[wepIndex]/800*100) - (wepAmmo[wepIndex]/800*100)%2 .. "%",
+ wepCol[2],
+ capgrpMessage2
+ )
+ DrawTag(3)
+
+ dx, dy = GetGearVelocity(CurrentHedgehog) --gtFlame -- gtSnowball -- gtAirBomb
+ shell = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtFlame, 0, 0, 0, 0)
+
+ xdev = 1 + GetRandom(35) --25
+ xdev = xdev / 100
+
+ r = GetRandom(2)
+ if r == 1 then
+ xdev = xdev*-1
+ end
+
+ ydev = 1 + GetRandom(35) --25
+ ydev = ydev / 100
+
+ r = GetRandom(2)
+ if r == 1 then
+ ydev = ydev*-1
+ end
+
+ --4.5 or 2.5 nonflames --4.5
+ SetGearVelocity(shell, (dx*4.5)+(xdev*fMod), (dy*4.5)+(ydev*fMod)) --10
+
+ end
+
+ end
+
+
+end
+
+function ChangeWeapon()
+
+ wepIndex = wepIndex + 1
+ if wepIndex == wepCount then
+ wepIndex = 0
+ end
+
+ AddCaption(wep[wepIndex] .. " " .. loc("selected!"), wepCol[wepIndex],capgrpAmmoinfo )
+ AddCaption(wepAmmo[wepIndex] .. " " .. loc("shots remaining."), wepCol[wepIndex],capgrpMessage2)
+
+end
+
+--function onTimer()
+
+ -- experimental wep
+ --[[SetVisualGearValues(shockwave, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 40, 255, 1, 10, 0, 300, 1, 0xff33ffff)
+ AddCaption("boom")
+ PlaySound(sndWarp)
+ shockwaveHealth = 100
+ shockwaveRad = 100]]
+
+
+ --change wep
+ --ChangeWeapon()
+
+ -- booster
+ --[[if boosterOn == false then
+ boosterOn = true
+ else
+ boosterOn = false
+ end]]
+
+--end
+
+-- o rite dis wan iz liek synched n stuff hope full lee
+-- old method
+--[[function onPrecise()
+
+
+ -- Fire Barrel
+ if (primShotsLeft > 0) and (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then
+
+ shotsFired = shotsFired +1
+
+ morte = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtExplosives, 0, 0, 0, 1)
+
+ primShotsLeft = primShotsLeft - 1
+
+ if primShotsLeft == 0 then
+ PlaySound(sndSuddenDeath)
+ AddCaption(loc("Ammo Depleted!"),0xff0000ff,capgrpMessage)
+ else
+ AddCaption(loc("Ammo") .. ": " .. primShotsLeft)
+ end
+ DrawTag(1)
+
+ CopyPV(CurrentHedgehog, morte) -- new addition
+ x,y = GetGearVelocity(morte)
+
+ x = x*2
+ y = y*2
+ SetGearVelocity(morte, x, y)
+
+
+ elseif (primShotsLeft == 0) and (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then
+ AddCaption(loc("Ammo Depleted!"),0xff0000ff,capgrpMessage)
+ end
+
+
+end]]
+
+-- derp tumbler
+function onPrecise()
+
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and (wepAmmo[wepIndex] > 0) then
+
+ wepAmmo[wepIndex] = wepAmmo[wepIndex] - 1
+ --AddCaption(wepAmmo[wepIndex] .. " " .. loc("shots remaining."), wepCol[wepIndex],capgrpMessage2)
+
+ if wep[wepIndex] == loc("Barrel Launcher") then
+ shotsFired = shotsFired +1
+
+ morte = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtExplosives, 0, 0, 0, 1)
+ CopyPV(CurrentHedgehog, morte) -- new addition
+ x,y = GetGearVelocity(morte)
+ x = x*2
+ y = y*2
+ SetGearVelocity(morte, x, y)
+
+ if wepAmmo[wepIndex] == 0 then
+ PlaySound(sndSuddenDeath)
+ AddCaption(loc("Ammo Depleted!"),0xff0000ff,capgrpMessage)
+ else
+ --AddCaption(loc("Ammo") .. ": " .. wepAmmo[wepIndex])
+ end
+ DrawTag(1)
+
+ elseif wep[wepIndex] == loc("Mine Deployer") then
+ morte = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtAirBomb, 0, 0, 0, 0)
+ SetTimer(morte, 1000)
+ DrawTag(1)
+ end
+
+ elseif (wepAmmo[wepIndex] == 0) and (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then
+ AddCaption(loc("Ammo Depleted!"),0xff0000ff,capgrpMessage)
+ end
+
+ preciseOn = true
+
+end
+
+function onPreciseUp()
+ preciseOn = false
+end
+
+function onLJump()
+
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then
+ shieldMiser = false
+ if shieldHealth == 80 then
+ AddCaption(loc("Shield Depleted"),0xff0000ff,capgrpMessage)
+ PlaySound(sndMineTick)
+ PlaySound(sndSwitchHog)
+ elseif (beam == false) and (shieldHealth > 80) then
+ beam = true
+ SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 40, 255, 1, 10, 0, 300, 1, 0xa800ffff)
+ AddCaption( loc("Shield ON:") .. " " .. shieldHealth - 80 .. " " .. loc("Power Remaining") )
+ PlaySound(sndWarp)
+ else
+ beam = false
+ SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 0, 0, 1, 10, 0, 0, 0, 0xa800ffff)
+ AddCaption(loc("Shield OFF:") .. " " .. shieldHealth - 80 .. " " .. loc("Power Remaining") )
+ end
+ end
+end
+
+function onHJump()
+
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and
+ (rAlpha == 255) and (radShotsLeft > 0) then
+ rPingTimer = 0
+ rAlpha = 0
+ radShotsLeft = radShotsLeft -1
+ AddCaption(loc("Pings left:") .. " " .. radShotsLeft,GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage)
+ end
+
+end
+
+-----------------
+-- movement keys
+-----------------
+
+function onLeft()
+ leftOn = true
+end
+
+function onRight()
+ rightOn = true
+end
+
+function onUp()
+ upOn = true
+end
+
+function onDown()
+ downOn = true
+end
+
+function onDownUp()
+ downOn = false
+end
+
+function onUpUp()
+ upOn = false
+end
+
+function onLeftUp()
+ leftOn = false
+end
+
+function onRightUp()
+ rightOn = false
+end
+
+--------------------------
+-- other event handlers
+--------------------------
+
+function onGameInit()
+ GameFlags = 0 + gfRandomOrder
+ Theme = "EarthRise"
+ CaseFreq = 0
+ HealthCaseProb = 0
+ MinesNum = 0
+ Explosives = 0
+ Delay = 1000
+
+ for i = 0, 3 do
+ vTag[0] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
+ end
+
+ HideTags()
+
+ wep[0] = loc("Barrel Launcher")
+ wep[1] = loc("Mine Deployer")
+ wep[2] = loc("Flamer")
+
+ wepCol[0] = 0x78818eff
+ wepCol[1] = 0xa12a77ff
+ wepCol[2] = 0xf49318ff
+
+ wepCount = 3
+
+end
+
+function onGameStart()
+
+ if (MinesTime == -1000) or (MinesTime == 0) then
+ roundLimit = 3
+ else
+ roundLimit = (MinesTime / 1000)
+ end
+
+ ShowMission (
+ "SPACE INVASION",
+ loc("a Hedgewars mini-game"),
+
+ loc("Destroy invaders to score points.") .. "|" ..
+ " " .. "|" ..
+
+ loc("Round Limit") .. ": " .. roundLimit .. "|" ..
+ loc("Turn Time") .. ": " .. (TurnTime/1000) .. loc("sec") .. "|" ..
+ " " .. "|" ..
+
+ loc("Movement: [Up], [Down], [Left], [Right]") .. "|" ..
+ loc("Fire") .. ": " .. loc("[Left Shift]") .. "|" ..
+ loc("Toggle Shield") .. ": " .. loc("[Enter]") .. "|" ..
+ loc("Radar Ping") .. ": " .. loc("[Backspace]") .. "|" ..
+
+ --" " .. "|" ..
+ --LOC_NOT("Invaders List: ") .. "|" ..
+ --LOC_NOT("Blue Jabberwock: (50 points)") .. "|" ..
+ --LOC_NOT("Red Warbler: (10 points)") .. "|" ..
+ --LOC_NOT("Orange Gob: (5 points)") .. "|" ..
+ --LOC_NOT("Green Wrangler: (3 points)") .. "|" ..
+
+
+ "", 4, 4000
+ )
+
+ CreateMeSomeCircles()
+ RebuildTeamInfo() -- control
+ lastRound = TotalRounds
+
+end
+
+function onScreenResize()
+
+ -- redraw Tags so that their screen locations are updated
+ if (CurrentHedgehog ~= nil) and (tumbleStarted == true) then
+ DrawTag(0)
+ DrawTag(1)
+ DrawTag(2)
+ end
+
+end
+
+function onNewTurn()
+
+ --primShotsLeft = primShotsMax
+ radShotsLeft = 2
+ stopMovement = false
+ tumbleStarted = false
+ boosterOn = false
+ beam = false
+ shieldHealth = 30 + 80 -- 50 = 5 secs, roughly
+ shockwaveHealth = 0
+
+ RK = 0
+ GK = 0
+ BK = 0
+ OK = 0
+ SK = 0
+ roundKills = 0
+ shieldMiser = true
+ fierceComp = false
+ shotsFired = 0
+ shotsHit = 0
+ sniperHits = 0
+ pointBlankHits = 0
+ chainLength = 0
+ chainCounter = 0
+ SurfTime = 12
+
+ -------------------------
+ -- gaudy racer
+ -------------------------
+ CheckForNewRound()
+
+ -- Handle Starting Stage of Game
+ if (gameOver == false) and (gameBegun == false) then
+ gameBegun = true
+ roundNumber = 0 -- 0
+ firstClan = GetHogClan(CurrentHedgehog)
+ end
+
+ if gameOver == true then
+ gameBegun = false
+ stopMovement = true
+ tumbleStarted = false
+ SetMyCircles(false)
+ end
+
+
+ -------
+ -- tumbler
+ ----
+
+ wepAmmo[0] = 5
+ wepAmmo[1] = 2
+ wepAmmo[2] = 5000
+ wepIndex = 2
+ ChangeWeapon()
+
+
+ HideTags()
+
+ ---------------
+ ---------------
+ --AddCaption("num g: " .. numGears() )
+ --WriteLnToConsole("onNewTurn, I just set a bunch of variables to their necessary states. This was done at:")
+ --WriteLnToConsole("The above occured at Game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+
+end
+
+function ThingsToBeRunOnGears(gear)
+
+ HandleLifeSpan(gear)
+ DeleteFarFlungBarrel(gear)
+
+ if CirclesAreGo == true then
+ CheckVarious(gear)
+ ProjectileTrack(gear)
+ end
+
+end
+
+
+function onGameTick20()
+
+
+ --WriteLnToConsole("Start of GameTick")
+
+ HandleCircles()
+
+ -- derp
+ --if shockwaveHealth > 0 then
+ -- shockwaveHealth = shockwaveHealth - 1
+ -- shockwaveRad = shockwaveRad + 5
+ --end
+
+
+ if GameTime%100 == 0 then
+
+ if beam == true then
+ shieldHealth = shieldHealth - 1
+ if shieldHealth < 80 then -- <= 80
+ shieldHealth = 80
+ beam = false
+ AddCaption(loc("Shield Depleted"),0xff0000ff,capgrpMessage)
+ PlaySound(sndMineTick)
+ PlaySound(sndSwitchHog)
+ end
+ end
+
+
+
+ --nw WriteLnToConsole("Starting ThingsToBeRunOnGears()")
+
+ runOnGears(ThingsToBeRunOnGears)
+
+ --nw WriteLnToConsole("Finished ThingsToBeRunOnGears()")
+
+ --runOnGears(HandleLifeSpan)
+ --runOnGears(DeleteFarFlungBarrel)
+
+ if CirclesAreGo == true and CurrentHedgehog ~= nil then
+ CheckDistances()
+ --runOnGears(CheckVarious) -- used to be in handletracking for some bizarre reason
+ --runOnGears(ProjectileTrack)
+ end
+
+ -- white smoke trail as player falls from the sky
+ if (TimeLeft <= 0) and (stopMovement == true) and (CurrentHedgehog ~= nil) then
+ j,k = GetGearVelocity(CurrentHedgehog)
+ if (j ~= 0) and (k ~= 0) then
+ AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmoke, 0, true)
+ end
+ end
+
+ --nw WriteLnToConsole("Finished 100Timer")
+
+ end
+
+
+ -- start the player tumbling with a boom once their turn has actually begun
+ if (tumbleStarted == false) and (gameOver == false) then
+ if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
+ --AddCaption(LOC_NOT("Good to go!"))
+ tumbleStarted = true
+ TimeLeft = div(TurnTime, 1000) --45
+ FadeAlpha = 0
+ rAlpha = 255
+ AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
+ DrawTag(0)
+ DrawTag(1)
+ DrawTag(2)
+ SetMyCircles(true)
+ end
+ end
+
+ --WriteLnToConsole("Finished initial check")
+
+ if (CurrentHedgehog ~= nil) and (tumbleStarted == true) then
+
+ --AddCaption(GetX(CurrentHedgehog) .. ";" .. GetY(CurrentHedgehog) )
+
+ -- Calculate and display turn time
+ if GameTime%1000 == 0 then
+ TimeLeft = TimeLeft - 1
+
+ if TimeLeft >= 0 then
+ --AddCaption(LOC_NOT("Time Left: ") .. TimeLeft)
+ DrawTag(0)
+ end
+
+ end
+
+ --WriteLnToConsole("Finished timeleft calculations")
+
+ -------------------------------
+ -- Player has run out of luck (out of time or hit by gtShell)
+ -------------------------------
+ -- checks in FloatyThings
+ if PlayerIsFine() == false then
+ TimeLeft = 0
+ end
+
+ --WriteLnToConsole("successfully checked playerIsFine")
+
+ if (TimeLeft == 0) then
+ if (stopMovement == false) then --time to stop the player
+ stopMovement = true
+ boosterOn = false
+ beam = false
+ upOn = false
+ down = false
+ leftOn = false
+ rightOn = false
+ SetMyCircles(false)
+ HideTags()
+ rAlpha = 255
+ --nw WriteLnToConsole("Player is out of luck")
+
+ if shieldMiser == true then
+
+ p = (roundKills*3.5) - ((roundKills*3.5)%1) + 2
+
+ AddCaption(loc("Shield Miser!") .." +" .. p .." ".. loc("points") .. "!",0xffba00ff,capgrpAmmoinfo)
+ AwardPoints(p)
+ end
+
+ if ((shotsHit / shotsFired * 100) >= 80) and (shotsFired > 4) then
+ AddCaption(loc("Accuracy Bonus!") .. " +15 " .. loc("points") .. "!",0xffba00ff,capgrpVolume)
+ AwardPoints(15)
+ end
+
+ end
+ else -- remove this if you want tumbler to fall slowly on death
+ -------------------------------
+ -- Player is still in luck
+ -------------------------------
+
+
+ --WriteLnToConsole("about to do chainCounter checks")
+ if chainCounter > 0 then
+ chainCounter = chainCounter -1
+ if chainCounter == 0 then
+ chainLength = 0
+ end
+ end
+
+ -- handle movement based on IO
+ if GameTime%100 == 0 then -- 100
+ --nw WriteLnToConsole("Start of Player MoveTimer")
+
+ ---------------
+ -- new trail code
+ ---------------
+ -- the trail lets you know you have 5s left to pilot, akin to birdy feathers
+ if (TimeLeft <= 5) and (TimeLeft > 0) then --vgtSmoke
+ tempE = AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmoke, 0, true)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+ SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(GetHogClan(CurrentHedgehog)) )
+ end
+ --------------
+ --------------
+
+ ------------------------
+ -- surfer achievement
+ ------------------------
+
+ if (WaterLine - GetY(CurrentHedgehog)) < 15 then
+ SurfTime = SurfTime -1
+ end
+
+ if SurfTime ~= 12 then
+
+ SurfTime = SurfTime - 1
+ if SurfTime <= 0 then
+ for i = 0,(TeamsCount-1) do
+ if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then
+ teamSurfer[i] = true
+ SurfTime = 12
+ AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume)
+ AwardPoints(15)
+ end
+ end
+ end
+ end
+
+
+ dx, dy = GetGearVelocity(CurrentHedgehog)
+
+ --WriteLnToConsole("I just got the velocity of currenthedgehog. It is dx: " .. dx .. "; dy: " .. dy)
+ --WriteLnToConsole("The above event occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+
+ if boosterOn == true then
+ tempE = AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtDust, 0, false)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+ SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, 1, g9, GetClanColor(GetHogClan(CurrentHedgehog)) )
+ dxlimit = 0.8*fMod
+ dylimit = 0.8*fMod
+ else
+ dxlimit = 0.4*fMod
+ dylimit = 0.4*fMod
+ end
+
+ if dx > dxlimit then
+ dx = dxlimit
+ end
+ if dy > dylimit then
+ dy = dylimit
+ end
+ if dx < -dxlimit then
+ dx = -dxlimit
+ end
+ if dy < -dylimit then
+ dy = -dylimit
+ end
+
+
+ if leftOn == true then
+ dx = dx - 0.1*fMod
+ end
+ if rightOn == true then
+ dx = dx + 0.1*fMod
+ end
+
+ if upOn == true then
+ dy = dy - 0.1*fMod
+ end
+ if downOn == true then
+ dy = dy + 0.1*fMod
+ end
+
+ SetGearVelocity(CurrentHedgehog, dx, dy)
+
+ --WriteLnToConsole("I just SET the velocity of currenthedgehog. It is now dx: " .. dx .. "; dy: " .. dy)
+ --WriteLnToConsole("The above event occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+ --nw WriteLnToConsole("End of Player MoveTimer")
+
+ end
+
+
+ HandleFlameThrower()
+
+
+ end -- new end I put here to check if he's still alive or not
+
+ end
+
+ --WriteLnToConsole("End of GameTick")
+
+end
+
+function onGearDamage(gear, damage)
+ if GetGearType(gear) == gtHedgehog then
+ if (fierceComp == false) and (damage >= 60) and (GetHogClan(gear) ~= GetHogClan(CurrentHedgehog)) then
+ fierceComp = true
+ AddCaption(loc("Fierce Competition!") .. " +8 " .. loc("points") .. "!",0xffba00ff,capgrpGameState)
+ AwardPoints(8)
+ end
+ end
+end
+
+function onGearResurrect(gear)
+
+ -- did I fall into the water? well, that was a stupid thing to do
+ if gear == CurrentHedgehog then
+ TimeLeft = 0
+ --WriteLnToConsole("Current hedgehog just drowned himself")
+ --WriteLnToConsole("The above event occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+ end
+
+end
+
+function onGearAdd(gear)
+
+ if isATrackedGear(gear) then
+ trackGear(gear)
+ setNewGearValues(gear)
+ end
+
+ --if GetGearType(gear) == gtBall then
+ -- SetTimer(gear, 5000)
+ --end
+
+ if GetGearType(gear) == gtHedgehog then
+ SetEffect(gear, heResurrectable, true)
+
+ -----------
+ -- control
+ hhs[numhhs] = gear
+ numhhs = numhhs + 1
+ -----------
+ end
+
+end
+
+function onGearDelete(gear)
+
+
+ --[[if GetGearType(gear) == gtShell then
+ --nw WriteLnToConsole("on GearDelete call. Shell ID: " .. getGearValue(gear,"ID"))
+ --WriteLnToConsole("The above event occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+
+ --if CurrentHedgehog ~= nil then
+ -- WriteLnToConsole("As it happens, player is at: " .. GetX(CurrentHedgehog) .. "; " .. GetY(CurrentHedgehog))
+ --end
+ elseif GetGearType(gear) == gtExplosives then
+ --nw WriteLnToConsole("on GearDelete call. Explosives ID: " .. getGearValue(gear,"ID"))
+ --WriteLnToConsole("The above event occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+
+ --if CurrentHedgehog ~= nil then
+ -- WriteLnToConsole("As it happens, player is at: " .. GetX(CurrentHedgehog) .. "; " .. GetY(CurrentHedgehog))
+ --end
+ elseif GetGearType(gear) == gtFlame then
+ --WriteLnToConsole("on GearDelete flame")
+ end]]
+
+ if isATrackedGear(gear) then
+ trackDeletion(gear)
+ end
+
+ if CurrentHedgehog ~= nil then
+ FollowGear(CurrentHedgehog)
+ end
+
+end
+
+
+
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+-- FLOATY THINGS
+-- "I'll make this into a generic library and code properly
+-- when I have more time and feel less lazy"
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+
+function DoHorribleThings(cUID)
+
+ -- work out the distance to the target
+ g1X, g1Y = GetGearPosition(CurrentHedgehog)
+ g2X, g2Y = vCircX[cUID], vCircY[cUID]
+ q = g1X - g2X
+ w = g1Y - g2Y
+ r = math.sqrt( (q*q) + (w*w) ) --alternate
+
+ opp = w
+ if opp < 0 then
+ opp = opp*-1
+ end
+
+ -- work out the angle (theta) to the target
+ t = math.deg ( math.asin(opp / r) )
+
+ -- based on the radius of the radar, calculate what x/y displacement should be
+ NR = 150 -- radius at which to draw circs
+ NX = math.cos( math.rad(t) ) * NR
+ NY = math.sin( math.rad(t) ) * NR
+
+ -- displace xy based on where this thing actually is
+
+ if r < NR then
+ rCircX[cUID] = g2X
+ elseif q > 0 then
+ rCircX[cUID] = g1X - NX
+ else
+ rCircX[cUID] = g1X + NX
+ end
+
+ if r < NR then
+ rCircY[cUID] = g2Y
+ elseif w > 0 then
+ rCircY[cUID] = g1Y - NY
+ else
+ rCircY[cUID] = g1Y + NY
+ end
+
+end
+
+function PlayerIsFine()
+ return (playerIsFine)
+end
+
+function GetDistFromXYtoXY(a, b, c, d)
+ q = a - c
+ w = b - d
+ return ( (q*q) + (w*w) )
+end
+
+function GetDistFromGearToGear(gear, gear2)
+
+ g1X, g1Y = GetGearPosition(gear)
+ g2X, g2Y = GetGearPosition(gear2)
+ q = g1X - g2X
+ w = g1Y - g2Y
+
+
+ --[[
+ WriteLnToConsole("I just got the position of two gears and calculated the distance betwen them")
+ if gear == CurrentHedgehog then
+ WriteLnToConsole("Gear 1 is CurrentHedgehog.")
+ end
+ if gear2 == CurrentHedgehog then
+ WriteLnToConsole("Gear 2 is CurrentHedgehog.")
+ end
+ WriteLnToConsole("G1X: " .. g1X .. "; G1Y: " .. g1Y)
+ WriteLnToConsole("G2X: " .. g2X .. "; G2Y: " .. g2Y)
+ WriteLnToConsole("Their distance is " .. (q*q) + (w*w) )
+ WriteLnToConsole("The above events occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+]]
+
+
+ return ( (q*q) + (w*w) )
+
+end
+
+function GetDistFromGearToXY(gear, g2X, g2Y)
+
+ g1X, g1Y = GetGearPosition(gear)
+ q = g1X - g2X
+ w = g1Y - g2Y
+
+
+ --[[WriteLnToConsole("I just got the position of a gear and calculated the distance betwen it and another xy")
+ if gear == CurrentHedgehog then
+ WriteLnToConsole("Gear 1 is CurrentHedgehog.")
+ end
+
+ WriteLnToConsole("G1X: " .. g1X .. "; G1Y: " .. g1Y)
+ WriteLnToConsole("Other X: " .. g2X .. "; Other Y: " .. g2Y)
+ WriteLnToConsole("Their distance is " .. (q*q) + (w*w) )
+ WriteLnToConsole("The above events occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+]]
+
+
+ return ( (q*q) + (w*w) )
+
+
+end
+
+function CreateMeSomeCircles()
+
+ for i = 0, 7 do
+ vCCount = vCCount +1
+ vCirc[i] = AddVisualGear(0,0,vgtCircle,0,true)
+
+ rCirc[i] = AddVisualGear(0,0,vgtCircle,0,true)
+ rCircX[i] = 0
+ rCircY[i] = 0
+
+ vCircDX[i] = 0
+ vCircDY[i] = 0
+
+ vType[i] = "generic"
+ vCounter[i] = 0
+ vCounterLim[i] = 150
+ vCircScore[i] = 0
+ vCircHealth[i] = 1
+
+ vCircMinA[i] = 80 --80 --20
+ vCircMaxA[i] = 255
+ vCircType[i] = 1 --1
+ vCircPulse[i] = 10
+ vCircFuckAll[i] = 0
+ vCircRadius[i] = 0
+ vCircWidth[i] = 3 --5
+
+ vCircRadMax[i] = 0
+ vCircRadMin[i] = 0
+ vCircRadDir[i] = -1
+ vCircRadCounter[i] = 0
+
+ vCircX[i], vCircY[i] = 0,0
+
+ vCircCol[i] = 0xff00ffff
+
+ SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], vCircMinA[i], vCircMaxA[i], vCircType[i], vCircPulse[i], vCircFuckAll[i], vCircRadius[i], vCircWidth[i], vCircCol[i])
+
+ SetVisualGearValues(rCirc[i], 0, 0, 100, 255, 1, 10, 0, 40, 3, vCircCol[i])
+
+ end
+
+ pShield = AddVisualGear(0,0,vgtCircle,0,true)
+ --SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 80, 200, 1, 10, 0, 200, 5, 0xff00ffff)
+
+
+ shockwave = AddVisualGear(0,0,vgtCircle,0,true)
+
+end
+
+function IGotMeASafeXYValue(i)
+
+ acceptibleDistance = 800
+
+ -- put this in here to thwart attempts at repositioning and test sanity limit
+ --vCircX[i] = GetX(CurrentHedgehog)+250
+ --vCircY[i] = GetY(CurrentHedgehog)+250
+
+ vCircX[i] = GetRandom(5000)
+ vCircY[i] = GetRandom(2000)
+ dist = GetDistFromGearToXY(CurrentHedgehog, vCircX[i], vCircY[i])
+ if dist > acceptibleDistance*acceptibleDistance then
+ return(true)
+ else
+ return(false)
+ end
+
+end
+
+function CircleDamaged(i)
+
+ res = ""
+ vCircHealth[i] = vCircHealth[i] -1
+
+ if vCircHealth[i] <= 0 then
+ -- circle is dead, do death effects/consequences
+
+ vCircActive[i] = false
+
+ if (vType[i] == "drone") then
+ PlaySound(sndHellishImpact4)
+ TimeLeft = TimeLeft + 4
+ AddCaption(loc("Time Extended!") .. "+" .. 4 .. loc("sec"), 0xff0000ff,capgrpMessage )
+ DrawTag(0)
+
+ morte = AddGear(vCircX[i], vCircY[i], gtExplosives, 0, 0, 0, 1)
+ SetHealth(morte, 0)
+
+ RK = RK + 1
+ if RK == 5 then
+ RK = 0
+ AddCaption(loc("Drone Hunter!") .. " +10 " .. loc("points") .. "!",0xffba00ff,capgrpMessage2)
+ AwardPoints(10)
+ end
+
+ elseif (vType[i] == "ammo") then
+ AddVisualGear(vCircX[i], vCircY[i], vgtExplosion, 0, false)
+ PlaySound(sndExplosion)
+ PlaySound(sndShotgunReload)
+ wepAmmo[0] = wepAmmo[0] +3
+ --primShotsLeft = primShotsLeft + 3
+ AddCaption("+" .. 3 .. " " .. loc("Ammo"), 0x00ff00ff,capgrpMessage)
+ DrawTag(1)
+
+ GK = GK + 1
+ if GK == 3 then
+ GK = 0
+ AddCaption(loc("Ammo Maniac!") .. " +5 " .. loc("points") .. "!",0xffba00ff,capgrpMessage2)
+ AwardPoints(5)
+ end
+
+ elseif (vType[i] == "bonus") then
+
+ AddVisualGear(vCircX[i], vCircY[i], vgtExplosion, 0, false)
+ PlaySound(sndExplosion)
+
+ AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false)
+ AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false)
+ AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false)
+ AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false)
+ AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false)
+ AddVisualGear(vCircX[i], vCircY[i], vgtSmoke, 0, false)
+
+ PlaySound(sndVaporize)
+ --sndWarp sndMineTick --sndSwitchHog --sndSuddenDeath
+
+ shieldHealth = shieldHealth + 30
+ AddCaption(loc("Shield boosted! +30 power"), 0xa800ffff,capgrpMessage)
+ if shieldHealth >= 250 then
+ shieldHealth = 250
+ AddCaption(loc("Shield is fully recharged!"),0xa800ffff,capgrpMessage)
+ end
+ DrawTag(2)
+
+ OK = OK + 1
+ if OK == 3 then
+ OK = 0
+ AddCaption(loc("Shield Seeker!") .. " + 10 " .. loc("points") .. "!",0xffba00ff,capgrpMessage2)
+ AwardPoints(10)
+ end
+
+ elseif (vType[i] == "blueboss") then
+ PlaySound(sndHellishImpact3)
+ AddCaption(loc("Boss defeated!") .. " +30 " .. loc("points") .. "!", 0x0050ffff,capgrpMessage)
+
+ morte = AddGear(vCircX[i], vCircY[i], gtExplosives, 0, 0, 0, 1)
+ SetHealth(morte, 0)
+
+ BK = BK + 1
+ if BK == 2 then
+ BK = 0
+ AddCaption(loc("Boss Slayer!") .. " +25 " .. loc("points") .. "!",0xffba00ff,capgrpMessage2)
+ AwardPoints(25)
+ end
+
+ end
+
+ AwardPoints(vCircScore[i])
+ AwardKills()
+ SetUpCircle(i)
+ res = "fatal"
+
+ chainCounter = 3000
+ chainLength = chainLength + 1
+ if chainLength > 1 then
+ AddCaption( chainLength .. "-" .. loc("Hit Combo!") .. " +" .. chainLength*2 .. " " .. loc("points") .. "!",0xffba00ff,capgrpAmmostate)
+ AwardPoints(chainLength*2)
+ end
+
+ else
+ -- circle is merely damaged
+ -- do damage effects/sounds
+ AddVisualGear(vCircX[i], vCircY[i], vgtSteam, 0, false)
+ r = GetRandom(4)
+ if r == 0 then
+ PlaySound(sndHellishImpact1)
+ elseif r == 1 then
+ PlaySound(sndHellishImpact2)
+ elseif r == 2 then
+ PlaySound(sndHellishImpact3)
+ elseif r == 3 then
+ PlaySound(sndHellishImpact4)
+ end
+ res = "non-fatal"
+
+ end
+
+ return(res)
+
+end
+
+function SetUpCircle(i)
+
+
+ r = GetRandom(10)
+ --r = 8
+ -- 80% of spawning either red/green
+ if r <= 7 then
+
+ --r = GetRandom(5)
+ r = GetRandom(2)
+ --r = 1
+ if r == 0 then
+ --if r <= 2 then
+ vCircCol[i] = 0xff0000ff -- red
+ vType[i] = "drone"
+ vCircRadMin[i] = 50 *5
+ vCircRadMax[i] = 90 *5
+ vCounterLim[i] = 150
+ vCircScore[i] = 10
+ vCircHealth[i] = 1
+ --else
+ elseif r == 1 then
+ vCircCol[i] = 0x00ff00ff -- green
+ vType[i] = "ammo"
+ vCircRadMin[i] = 25 *7
+ vCircRadMax[i] = 30 *7
+ vCircScore[i] = 3
+ vCircHealth[i] = 1
+ end
+
+ -- 20% chance of spawning boss or bonus
+ else
+ r = GetRandom(5)
+ --r = GetRandom(2)
+ --r = 0
+ if r <= 1 then
+ --if r == 0 then
+ vCircCol[i] = 0x0050ffff -- sexy blue
+ vType[i] = "blueboss"
+ vCircRadMin[i] = 100*5
+ vCircRadMax[i] = 180*5
+ vCircWidth[i] = 1
+ vCounterLim[i] = 100
+ vCircScore[i] = 30
+ vCircHealth[i] = 3
+ else
+ --elseif r == 1 then
+ --vCircCol[i] = 0xffae00ff -- orange
+ vCircCol[i] = 0xa800ffff -- purp
+ vType[i] = "bonus"
+ vCircRadMin[i] = 20 *7
+ vCircRadMax[i] = 40 *7
+ vCircScore[i] = 5
+ vCircHealth[i] = 1
+ end
+
+ end
+
+ -- regenerate circle xy if too close to player or until sanity limit kicks in
+ reN = 0
+ --zzz = 0
+ while (reN < 10) do
+ if IGotMeASafeXYValue(i) == false then
+ reN = reN + 1
+ --zzz = zzz + 1
+ else
+ reN = 15
+ end
+ end
+ --AddCaption("Took me this many retries: " .. zzz) -- number of times it took to work
+
+ vCircRadius[i] = vCircRadMax[i] - GetRandom(vCircRadMin[i])
+
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vCirc[i])
+ SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], g3, g4, g5, g6, g7, vCircRadius[i], vCircWidth[i], vCircCol[i]-0x000000ff)
+ -- - -0x000000ff
+
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(rCirc[i])
+ SetVisualGearValues(rCirc[i], 0, 0, g3, g4, g5, g6, g7, g8, g9, vCircCol[i]-0x000000ff)
+
+
+ vCircActive[i] = true -- new
+
+ --nw WriteLnToConsole("CIRC " .. i .. ": X: " .. vCircX[i] .. "; Y: " .. vCircY[i])
+ --nw WriteLnToConsole("CIRC " .. i .. ": dX: " .. vCircDX[i] .. "; dY: " .. vCircDY[i])
+ --nw WriteLnToConsole("CIRC " .. i .. ": RAD:" .. vCircRadius[i])
+
+end
+
+function SetMyCircles(s)
+
+ CirclesAreGo = s
+ playerIsFine = s
+
+ if s == true then
+ --nw WriteLnToConsole("About to set up all circles, old values are here:")
+ for i = 0,(vCCount-1) do
+ --nw WriteLnToConsole("CIRC " .. i .. ": X: " .. vCircX[i] .. "; Y: " .. vCircY[i])
+ --nw WriteLnToConsole("CIRC " .. i .. ": dX: " .. vCircDX[i] .. "; dY: " .. vCircDY[i])
+ --nw WriteLnToConsole("CIRC " .. i .. ": RAD:" .. vCircRadius[i])
+ end
+ --nw WriteLnToConsole("Old values given, new values to follow...")
+ end
+
+ for i = 0,(vCCount-1) do
+
+ if s == false then
+ --vCircCol[i] = 0xffffffff
+ vCircActive[i] = false
+ elseif s == true then
+ SetUpCircle(i)
+ end
+
+ end
+
+end
+
+function WellHeAintGonnaJumpNoMore(x,y)
+
+ AddVisualGear(x, y, vgtBigExplosion, 0, false)
+ playerIsFine = false
+ AddCaption(loc("GOTCHA!"))
+ PlaySound(sndExplosion)
+ PlaySound(sndHellish)
+
+ targetHit = true
+
+end
+
+--- collision detection for weapons fire
+function CheckVarious(gear)
+
+ --if (GetGearType(gear) == gtExplosives) then
+ --nw WriteLnToConsole("Start of CheckVarious(): Exp ID: " .. getGearValue(gear,"ID"))
+ --elseif (GetGearType(gear) == gtShell) then
+ --nw WriteLnToConsole("Start of CheckVarious(): Shell ID: " .. getGearValue(gear,"ID"))
+ --end
+
+ targetHit = false
+
+ -- if circle is hit by player fire
+ if (GetGearType(gear) == gtExplosives) then
+ circsHit = 0
+
+ for i = 0,(vCCount-1) do
+
+ --nw WriteLnToConsole("Is it neccessary to check for collision with circ " .. i)
+
+ --if (vCircActive[i] == true) and ( (vType[i] == "drone") ) then
+
+ --nw WriteLnToConsole("YES. about to calc distance between gtExplosives and circ " .. i)
+
+ dist = GetDistFromGearToXY(gear, vCircX[i], vCircY[i])
+
+ -- calculate my real radius if I am an aura
+ if vCircType[i] == 0 then
+ NR = vCircRadius[i]
+ else
+ NR = (48/100*vCircRadius[i])/2
+ end
+
+ if dist <= NR*NR then
+
+
+ --nw WriteLnToConsole("Collision confirmed. The gtExplosives is within the circ radius!")
+
+ dist = (GetDistFromXYtoXY(vCircX[i], vCircY[i], getGearValue(gear,"XP"), getGearValue(gear,"YP")) - (NR*NR))
+ --AddCaption(loc("Dist: ") .. dist .. "!",0xffba00ff,capgrpGameState)
+ if dist >= 1000000 then
+ sniperHits = sniperHits +1
+ AddCaption(loc("Sniper!") .. " +8 " .. loc("points") .. "!",0xffba00ff,capgrpGameState)
+ AwardPoints(8)
+ if sniperHits == 3 then
+ sniperHits = 0
+ AddCaption(loc("They Call Me Bullseye!") .. " +16 " .. loc("points") .. "!",0xffba00ff,capgrpGameState)
+ AwardPoints(15)
+ end
+ elseif dist <= 6000 then
+ pointBlankHits = pointBlankHits +1
+ if pointBlankHits == 3 then
+ pointBlankHits = 0
+ AddCaption(loc("Point Blank Combo!") .. " +5 " .. loc("points") .. "!",0xffba00ff,capgrpGameState)
+ AwardPoints(5)
+ end
+ end
+
+ AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+
+ targetHit = true
+ --DeleteGear(gear)
+ --SetHealth(gear,0)
+ --WriteLnToConsole("set " .. "Exp ID: " .. getGearValue(gear,"ID") .. " health to 0")
+ --WriteLnToConsole("targetHit set to true, explosive is at distance " .. dist .. "(within range " .. NR*NR.. ") of circ" )
+
+ CircleDamaged(i)
+
+ circsHit = circsHit + 1
+ if circsHit > 1 then
+ AddCaption(loc("Multi-shot!") .. " +15 " .. loc("points") .. "!",0xffba00ff,capgrpAmmostate)
+ AwardPoints(15)
+ circsHit = 0
+ end
+
+ shotsHit = shotsHit + 1
+
+
+
+ end
+
+ --end
+
+ end
+
+ -- if player is hit by circle bazooka
+ elseif (GetGearType(gear) == gtShell) and (CurrentHedgehog ~= nil) then --or (GetGearType(gear) == gtBall) then
+
+ dist = GetDistFromGearToGear(gear, CurrentHedgehog)
+
+ if beam == true then
+
+ if dist < 3000 then
+ tempE = AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, true)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+ SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, 0xff00ffff )
+ PlaySound(sndVaporize)
+ DeleteGear(gear)
+
+ SK = SK + 1
+ if SK == 5 then
+ SK = 0
+ AddCaption(loc("Shield Master!") .. " +10 " .. loc("points") .. "!",0xffba00ff,capgrpAmmoinfo)
+ AwardPoints(10)
+ end
+ end
+
+ elseif dist < 1600 then
+ WellHeAintGonnaJumpNoMore(GetX(gear), GetY(gear))
+ end
+
+ --[[if targetHit == true then
+ WriteLnToConsole("about to delete shell due to targetHit being set to true earlier")
+ DeleteGear(gear)
+ WriteLnToConsole("there, I deleted it")
+ end]]
+
+
+ end
+
+ if targetHit == true then
+ --nw WriteLnToConsole("about to delete something due to targetHit being set to true earlier")
+ DeleteGear(gear)
+ --nw WriteLnToConsole("there, I deleted it")
+ end
+
+ --nw WriteLnToConsole("End of CheckVarious()")
+
+end
+
+-- collision detection for player entering a circle
+function CheckDistances()
+
+ --nw WriteLnToConsole("Start of CheckDistances()")
+
+ for i = 0,(vCCount-1) do
+
+
+ --nw WriteLnToConsole("Attempting to calculate dist of circ " .. i)
+
+ g1X, g1Y = GetGearPosition(CurrentHedgehog)
+ g2X, g2Y = vCircX[i], vCircY[i]
+
+ g1X = g1X - g2X
+ g1Y = g1Y - g2Y
+ dist = (g1X*g1X) + (g1Y*g1Y)
+
+ --DoHorribleThings(i, g1X, g1Y, g2X, g2Y, dist)
+
+ --nw WriteLnToConsole("Calcs done. Dist to CurrentHedgehog is " .. dist)
+
+ -- calculate my real radius if I am an aura
+ if vCircType[i] == 0 then
+ NR = vCircRadius[i]
+ else
+ NR = (48/100*vCircRadius[i])/2
+ end
+
+ if dist <= NR*NR then
+
+ if (vCircActive[i] == true) and
+ ((vType[i] == "ammo") or (vType[i] == "bonus") )
+ then
+
+ CircleDamaged(i)
+
+ elseif (vCircActive[i] == true) and
+ ( (vType[i] == "drone") or (vType[i] == "blueboss") )
+ then
+
+ ss = CircleDamaged(i)
+ WellHeAintGonnaJumpNoMore(GetX(CurrentHedgehog),GetY(CurrentHedgehog))
+
+ if ss == "fatal" then
+
+ if (wepAmmo[0] == 0) and (TimeLeft <= 9) then
+ --if (primShotsLeft == 0) and (TimeLeft <= 9) then
+ AddCaption(loc("Kamikaze Expert!") .. " +15 " .. loc("points") .. "!",0xffba00ff,capgrpMessage)
+ AwardPoints(15)
+ elseif (wepAmmo[0] == 0) then
+ AddCaption(loc("Depleted Kamikaze!") .. " +5 " .. loc("points") .. "!",0xffba00ff,capgrpMessage)
+ AwardPoints(5)
+ elseif TimeLeft <= 9 then
+ AddCaption(loc("Timed Kamikaze!") .. " +10 " .. loc("points") .. "!",0xffba00ff,capgrpMessage)
+ AwardPoints(10)
+ end
+ end
+
+ end
+
+
+ end
+
+ end
+
+ --nw WriteLnToConsole("End of CheckDistances()")
+
+end
+
+function HandleCircles()
+
+ --[[if CirclesAreGo == true then
+
+ --CheckDistances()
+ --runOnGears(CheckVarious) -- used to be in handletracking for some bizarre reason
+
+ --pTimer = pTimer + 1
+ --if pTimer == 100 then
+ -- pTimer = 0
+ -- runOnGears(ProjectileTrack)
+ --end
+
+ end]]
+
+
+ if rAlpha ~= 255 then
+
+ if GameTime%100 == 0 then
+
+ rAlpha = rAlpha + 5
+ if rAlpha >= 255 then
+ rAlpha = 255
+ end
+ end
+
+ end
+
+ for i = 0,(vCCount-1) do
+
+ --if (vCircActive[i] == true) then
+ SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha)
+ --end
+
+
+
+ vCounter[i] = vCounter[i] + 1
+ if vCounter[i] >= vCounterLim[i] then
+
+ vCounter[i] = 0
+
+ if ((vType[i] == "drone") or (vType[i] == "blueboss") ) and
+ (vCircActive[i] == true) then
+ AddGear(vCircX[i], vCircY[i], gtShell, 0, 0, 0, 1)
+
+ --WriteLnToConsole("Circle " .. i .. " just fired/added a gtShell")
+ --WriteLnToConsole("The above event occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+
+ --elseif (vType[i] == "bluebottle") and (vCircActive[i] == true) then
+ -- AddGear(vCircX[i], vCircY[i]-vCircRadius[i], gtBall, 0, 0, 0, 1)
+ -- AddGear(vCircX[i], vCircY[i]+vCircRadius[i], gtBall, 0, 0, 0, 1)
+ -- AddGear(vCircX[i]-vCircRadius[i], vCircY[i], gtBall, 0, 0, 0, 1)
+ -- AddGear(vCircX[i]+vCircRadius[i], vCircY[i], gtBall, 0, 0, 0, 1)
+ end
+
+ end
+
+ if (vCircActive[i] == true) then
+
+ vCircRadCounter[i] = vCircRadCounter[i] + 1
+ if vCircRadCounter[i] == 100 then
+
+ vCircRadCounter[i] = 0
+
+ -- make my radius increase/decrease faster if I am an aura
+ if vCircType[i] == 0 then
+ M = 1
+ else
+ M = 10
+ end
+
+ vCircRadius[i] = vCircRadius[i] + vCircRadDir[i]
+ if vCircRadius[i] > vCircRadMax[i] then
+ vCircRadDir[i] = -M
+ elseif vCircRadius[i] < vCircRadMin[i] then
+ vCircRadDir[i] = M
+ end
+
+
+ -- random effect test
+ -- maybe use this to tell the difference between circs
+ -- you can kill by shooting or not
+ --vgtSmoke vgtSmokeWhite
+ --vgtSteam -- nice long trail
+ --vgtDust -- short trail on earthrise
+ --vgtSmokeTrace
+ if vType[i] == "ammo" then
+
+ tempE = AddVisualGear(vCircX[i], vCircY[i], vgtSmoke, 0, true)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) --0xff00ffff --0x00ff00ff
+ SetVisualGearValues(tempE, vCircX[i], vCircY[i], g3, g4, g5, g6, g7, g8, g9, vCircCol[i] )
+
+ --AddVisualGear(vCircX[i], vCircY[i], vgtDust, 0, true)
+
+ elseif vType[i] == "bonus" then
+
+ tempE = AddVisualGear(vCircX[i], vCircY[i], vgtDust, 0, true)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) --0xff00ffff --0x00ff00ff --vCircCol[i]
+ SetVisualGearValues(tempE, vCircX[i], vCircY[i], g3, g4, g5, g6, g7, 1, g9, 0xff00ffff )
+
+
+ elseif vType[i] == "blueboss" then
+
+ k = 25
+ g = vgtSteam
+ trailColour = 0xae00ffff
+
+ -- 0xffae00ff -- orange
+ -- 0xae00ffff -- purp
+
+ tempE = AddVisualGear(vCircX[i], vCircY[i], g, 0, true)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) --0xff00ffff --0x00ff00ff
+ SetVisualGearValues(tempE, vCircX[i], vCircY[i]+k, g3, g4, g5, g6, g7, g8, g9, trailColour-75 )
+
+ tempE = AddVisualGear(vCircX[i], vCircY[i], g, 0, true)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) --0xff00ffff --0x00ff00ff
+ SetVisualGearValues(tempE, vCircX[i]+k, vCircY[i]-k, g3, g4, g5, g6, g7, g8, g9, trailColour-75 )
+
+ tempE = AddVisualGear(vCircX[i], vCircY[i], g, 0, true)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) --0xff00ffff --0x00ff00ff
+ SetVisualGearValues(tempE, vCircX[i]-k, vCircY[i]-k, g3, g4, g5, g6, g7, g8, g9, trailColour-75 )
+
+
+ end
+
+
+ end
+
+ end
+
+
+ end
+
+ -- alter the circles velocities
+ if GameTime%2000 == 0 then
+
+ for i = 0,(vCCount-1) do
+
+ -- bounce the circles off the edges if they go too far
+ -- or make them move in random directions
+
+ if vCircX[i] > 5500 then
+ vCircDX[i] = -4 --5 circmovchange
+ elseif vCircX[i] < -1500 then
+ vCircDX[i] = 4 --5 circmovchange
+ else
+
+ z = GetRandom(2)
+ if z == 1 then
+ z = 1
+ else
+ z = -1
+ end
+ vCircDX[i] = vCircDX[i] + GetRandom(3)*z --3 circmovchange
+ end
+
+ if vCircY[i] > 1500 then
+ vCircDY[i] = -4 --5 circmovchange
+ elseif vCircY[i] < -2900 then
+ vCircDY[i] = 4 --5 circmovchange
+ else
+ z = GetRandom(2)
+ if z == 1 then
+ z = 1
+ else
+ z = -1
+ end
+ vCircDY[i] = vCircDY[i] + GetRandom(3)*z --3 circmovchange
+ end
+
+ end
+
+ end
+
+ -- move the circles according to their current velocities
+ --m2Count = m2Count + 1
+ --if m2Count == 25 then --25 circmovchange
+
+ -- m2Count = 0
+ for i = 0,(vCCount-1) do
+ vCircX[i] = vCircX[i] + vCircDX[i]
+ vCircY[i] = vCircY[i] + vCircDY[i]
+
+ if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then
+ DoHorribleThings(i)--(i, g1X, g1Y, g2X, g2Y, dist)
+ end
+
+ end
+
+ if (TimeLeft == 0) and (tumbleStarted == true) then
+
+ FadeAlpha = FadeAlpha + 1
+ if FadeAlpha >= 255 then
+ FadeAlpha = 255
+ end
+
+ --new
+ --if FadeAlpha == 1 then
+ -- AddCaption("GOT IT")
+ -- for i = 0,(vCCount-1) do
+ -- g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vCirc[i])
+ -- vCircCol[i] = g10
+ -- end
+ --end
+
+ end
+
+
+ -- derp
+ if shockwaveHealth > 0 then
+ shockwaveHealth = shockwaveHealth - 1
+ shockwaveRad = shockwaveRad + 80
+
+ --mrm = ((48/100*shockwaveRad)/2)
+ --AddVisualGear(GetX(CurrentHedgehog)-mrm+GetRandom(mrm*2),GetY(CurrentHedgehog)-mrm+GetRandom(mrm*2), vgtSmoke, 0, false)
+ end
+
+
+
+ --end
+
+ for i = 0,(vCCount-1) do
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vCirc[i]) -- vCircCol[i] g10
+ SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], g3, g4, g5, g6, g7, vCircRadius[i], g9, g10)
+ end
+
+ if (TimeLeft == 0) or
+ ((tumbleStarted == false)) then
+ for i = 0,(vCCount-1) do
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vCirc[i]) -- vCircCol[i] g10
+ SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], g3, g4, g5, g6, g7, vCircRadius[i], g9, (vCircCol[i]-FadeAlpha))
+ end
+ end
+
+
+ if (CurrentHedgehog ~= nil) then
+ if beam == true then
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(pShield)
+ --SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), g3, g4, g5, g6, g7, 200, g9, g10 )
+ SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), g3, g4, g5, g6, g7, 200, g9, 0xa800ffff-0x000000ff - -shieldHealth )
+ DrawTag(2)
+ else
+ SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), g3, g4, g5, g6, g7, 0, g9, g10 )
+ end
+
+ if shockwaveHealth > 0 then
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(shockwave)
+ SetVisualGearValues(shockwave, GetX(CurrentHedgehog), GetY(CurrentHedgehog), g3, g4, g5, g6, g7, shockwaveRad, g9, 0xff3300ff-0x000000ff - -shockwaveHealth )
+ else
+ SetVisualGearValues(shockwave, GetX(CurrentHedgehog), GetY(CurrentHedgehog), g3, g4, g5, g6, g7, 0, g9, g10 )
+ end
+
+ end
+
+
+end
+
+function ProjectileTrack(gear)
+
+ if (GetGearType(gear) == gtShell) then
+
+ --nw WriteLnToConsole("ProjectileTrack() for Shell ID: " .. getGearValue(gear,"ID"))
+
+ -- newnew
+ if (GetGearType(gear) == gtShell) then
+ turningSpeed = 0.1*fMod
+ --elseif (GetGearType(gear) == gtBall) then
+ -- turningSpeed = 0.2*fMod
+ end
+
+ dx, dy = GetGearVelocity(gear)
+
+ --WriteLnToConsole("I'm trying to track currenthedge with shell ID: " .. getGearValue(gear,"ID"))
+ --WriteLnToConsole("I just got the velocity of the shell. It is dx: " .. dx .. "; dy: " .. dy)
+ --WriteLnToConsole("CurrentHedgehog is at X: " .. GetX(CurrentHedgehog) .. "; Y: " .. GetY(CurrentHedgehog) )
+
+ if CurrentHedgehog ~= nil then
+ if GetX(gear) > GetX(CurrentHedgehog) then
+ dx = dx - turningSpeed--0.1
+ else
+ dx = dx + turningSpeed--0.1
+ end
+
+ if GetY(gear) > GetY(CurrentHedgehog) then
+ dy = dy - turningSpeed--0.1
+ else
+ dy = dy + turningSpeed--0.1
+ end
+ end
+
+
+ if (GetGearType(gear) == gtShell) then
+ dxlimit = 0.4*fMod
+ dylimit = 0.4*fMod
+ --elseif (GetGearType(gear) == gtBall) then
+ -- dxlimit = 0.5 -- 0.5 is about the same
+ -- dylimit = 0.5 -- 0.6 is faster than player
+ end
+
+ if dx > dxlimit then
+ dx = dxlimit
+ end
+ if dy > dylimit then
+ dy = dylimit
+ end
+ if dx < -dxlimit then
+ dx = -dxlimit
+ end
+ if dy < -dylimit then
+ dy = -dylimit
+ end
+
+ SetGearVelocity(gear, dx, dy)
+
+ --WriteLnToConsole("I just SET the velocity of shell towards currenthegdge. It is now dx: " .. dx .. "; dy: " .. dy)
+ --WriteLnToConsole("The above events occured game Time: " .. GameTime .. "; luaTicks: " .. luaGameTicks)
+ --nw WriteLnToConsole("ProjectileTrack() finished successfully")
+
+ end
+
+end
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/The_Specialists.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/The_Specialists.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+Default
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/The_Specialists.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/The_Specialists.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,291 @@
+----------------------------------
+-- THE SPECIALISTS MODE 0.7
+-- by mikade
+----------------------------------
+
+-- version history
+-----------------
+-- version 0.1
+-----------------
+-- concept test
+
+----------------
+-- version 0.2
+----------------
+-- added gfRandomOrder to gameflags
+-- removed some deprecated variables/methods
+-- fixed lack of portal reset
+
+----------------
+-- version 0.3
+----------------
+-- added switching on start
+-- removed switch from engineer weaponset
+
+----------------
+-- version 0.4
+----------------
+-- Attempted to:
+-- fix potential switch explit
+-- improve user feedback on start
+
+----------------
+-- version 0.5
+----------------
+-- provision for variable minetimer / demo mines set to 5000ms
+-- don't autoswitch if player only has 1 hog on his team
+
+----------------
+-- version 0.6
+----------------
+-- for the meanwhile, don't drop any crates except health crates
+
+----------------
+-- version 0.7
+----------------
+-- perhogadmsdf :D :D :D :D
+
+--------------------
+--TO DO
+--------------------
+
+-- balance hog health, maybe
+-- add proper gameflag checking, maybe (so that we can throw in a .cfg and let the users break everything)
+
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+
+local numhhs = 0
+local hhs = {}
+
+local currName
+local lastName
+local started = false
+local switchStage = 0
+
+local hogCounter
+
+function CountHog(gear)
+ hogCounter = hogCounter +1
+end
+
+function onNewAmmoStore(groupIndex, hogIndex)
+
+ SetAmmo(amSkip, 9, 0, 0, 0)
+
+ if hogIndex == 0 then
+ SetAmmo(amBazooka, 1, 0, 0, 0)
+ SetAmmo(amGrenade, 1, 0, 0, 0)
+ SetAmmo(amShotgun, 1, 0, 0, 0)
+ elseif hogIndex == 1 then
+ SetAmmo(amGirder, 2, 0, 0, 0)
+ SetAmmo(amBlowTorch, 1, 0, 0, 0)
+ SetAmmo(amPickHammer, 1, 0, 0, 0)
+ elseif hogIndex == 2 then
+ SetAmmo(amRope, 9, 0, 0, 0)
+ SetAmmo(amParachute, 9, 0, 0, 0)
+ SetAmmo(amFirePunch, 1, 0, 0, 0)
+ elseif hogIndex == 3 then
+ SetAmmo(amDynamite, 1, 0, 0, 0)
+ SetAmmo(amMine, 1, 0, 0, 0)
+ SetAmmo(amDrill, 1, 0, 0, 0)
+ elseif hogIndex == 4 then
+ SetAmmo(amSniperRifle, 1, 0, 0, 0)
+ SetAmmo(amDEagle, 1, 0, 0, 0)
+ SetAmmo(amPortalGun, 2, 0, 0, 0)
+ elseif hogIndex == 5 then
+ SetAmmo(amSeduction, 9, 0, 0, 0)
+ SetAmmo(amResurrector, 1, 0, 0, 0)
+ SetAmmo(amInvulnerable, 1, 0, 0, 0)
+ elseif hogIndex == 6 then
+ SetAmmo(amFlamethrower, 1, 0, 0, 0)
+ SetAmmo(amMolotov, 1, 0, 0, 0)
+ SetAmmo(amNapalm, 1, 0, 0, 0)
+ elseif hogIndex == 7 then
+ SetAmmo(amBaseballBat, 1, 0, 0, 0)
+ SetAmmo(amGasBomb, 1, 0, 0, 0)
+ SetAmmo(amKamikaze, 1, 0, 0, 0)
+ end
+
+end
+
+function CreateTeam()
+
+ currTeam = ""
+ lastTeam = ""
+ z = 0
+
+ for i = 0, (numhhs-1) do
+
+ currTeam = GetHogTeamName(hhs[i])
+
+ if currTeam == lastTeam then
+ z = z + 1
+ else
+ z = 1
+ end
+
+ if z == 1 then
+
+ SetHogName(hhs[i],"Soldier")
+ SetHogHat(hhs[i], "sf_vega")
+ SetHealth(hhs[i],200)
+
+ elseif z == 2 then
+
+ SetHogHat(hhs[i], "Glasses")
+ SetHogName(hhs[i],"Engineer")
+
+ elseif z == 3 then
+
+ SetHogName(hhs[i],"Ninja")
+ SetHogHat(hhs[i], "NinjaFull")
+ SetHealth(hhs[i],80)
+
+ elseif z == 4 then
+
+ SetHogName(hhs[i],"Demo")
+ SetHogHat(hhs[i], "Skull")
+ SetHealth(hhs[i],200)
+
+ elseif z == 5 then
+
+ SetHogName(hhs[i],"Sniper")
+ SetHogHat(hhs[i], "Sniper")
+ SetHealth(hhs[i],120)
+
+ elseif z == 6 then
+
+ SetHogName(hhs[i],"Saint")
+ SetHogHat(hhs[i], "angel")
+ SetHealth(hhs[i],300)
+
+ elseif z == 7 then
+
+ SetHogName(hhs[i],"Pyro")
+ SetHogHat(hhs[i], "Gasmask")
+ SetHealth(hhs[i],150)
+
+ elseif z == 8 then
+
+ SetHogName(hhs[i],"Loon")
+ SetHogHat(hhs[i], "clown")
+ SetHealth(hhs[i],100)
+
+ end
+
+ lastTeam = GetHogTeamName(hhs[i])
+
+ end
+
+end
+
+function onGameInit()
+ GameFlags = gfRandomOrder + gfResetWeps + gfInfAttack + gfPlaceHog +gfPerHogAmmo
+ Delay = 10
+ HealthCaseProb = 100
+end
+
+function onGameStart()
+
+ CreateTeam()
+
+ ShowMission (
+ loc("THE SPECIALISTS"),
+ loc("a Hedgewars mini-game"),
+
+ loc("Eliminate the enemy specialists.") .. "|" ..
+ " " .. "|" ..
+
+ loc("Game Modifiers: ") .. "|" ..
+ loc("Per-Hog Ammo") .. "|" ..
+ loc("Weapons Reset") .. "|" ..
+ loc("Unlimited Attacks") .. "|" ..
+
+ "", 4, 4000
+ )
+
+ trackTeams()
+
+end
+
+
+function onNewTurn()
+ currName = GetHogName(CurrentHedgehog)
+ lastName = GetHogName(CurrentHedgehog)
+ started = true
+ switchStage = 0
+end
+
+function onGameTick20()
+
+ if (CurrentHedgehog ~= nil) then
+
+ currName = GetHogName(CurrentHedgehog)
+
+ if (currName ~= lastName) and (switchStage > 5) then
+ AddCaption(loc("Switched to ") .. currName .. "!")
+ end
+
+ if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) and (switchStage < 5) then
+
+ AddCaption(loc("Prepare yourself") .. ", " .. currName .. "!")
+
+ hogCounter = 0
+ runOnHogsInTeam(CountHog, GetHogTeamName(CurrentHedgehog) )
+
+ if hogCounter > 1 then
+
+ switchStage = switchStage + 1
+
+ if switchStage == 1 then
+ AddAmmo(CurrentHedgehog, amSwitch, 1)
+
+ elseif switchStage == 2 then
+ ParseCommand("setweap " .. string.char(amSwitch))
+ elseif switchStage == 3 then
+ SetGearMessage(CurrentHedgehog,gmAttack)
+ elseif switchStage == 4 then
+ switchStage = 6
+ AddAmmo(CurrentHedgehog, amSwitch, 0)
+ end
+
+ else
+ switchStage = 6
+ end
+
+
+ end
+
+ lastName = currName
+
+ end
+
+end
+
+function onGearAdd(gear)
+
+ if GetGearType(gear) == gtHedgehog then
+ hhs[numhhs] = gear
+ numhhs = numhhs + 1
+ elseif (GetGearType(gear) == gtMine) and (started == true) then
+ SetTimer(gear,5000)
+ end
+
+ if (GetGearType(gear) == gtHedgehog) or (GetGearType(gear) == gtResurrector) then
+ trackGear(gear)
+ end
+
+
+end
+
+function onGearDelete(gear)
+ if (GetGearType(gear) == gtHedgehog) or (GetGearType(gear) == gtResurrector) then
+ trackDeletion(gear)
+ end
+end
+
+function onAmmoStoreInit()
+--
+end
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Tumbler.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Tumbler.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Default
+Default
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Tumbler.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/Tumbler.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,786 @@
+------------------------------------
+-- TUMBLER
+-- v.0.7.1
+------------------------------------
+
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+
+local fMod = 1000000 -- use this for dev and .16+ games
+
+local leftOn = false
+local rightOn = false
+local upOn = false
+local downOn = false
+local preciseOn = false
+
+local wep = {}
+local wepAmmo = {}
+local wepCol = {}
+local wepIndex = 0
+local wepCount = 0
+local fGears = 0
+
+local mineSpawn
+local barrelSpawn
+
+local roundKills = 0
+local barrelsEaten = 0
+local minesEaten = 0
+
+local moveTimer = 0
+local fireTimer = 0
+local TimeLeftCounter = 0
+local TimeLeft = 0
+local stopMovement = false
+local tumbleStarted = false
+
+local vTag = {}
+
+------------------------
+-- version 0.4
+------------------------
+
+-- removed some old code/comments
+-- removed both shell and mortar as the primary and secondary weapons
+-- the primary weapon is now an explosive(barrel)
+
+-- added support for picking up barrels scattered about the map (backspace)
+-- added support for dragging around mines (enter toggles on/off)
+-- added support for primary fire being onAttackUp
+-- added a trail to indicate when the player has 5s or less left to tumble
+-- updated showmission to reflect changed controls and options
+
+------------------------
+-- version 0.5
+------------------------
+
+-- changed some of the user feedback
+-- i can't remember??
+-- substituted onAttackUp for onPrecise()
+-- brought in line with new velocity changes
+
+------------------------
+-- version 0.6
+------------------------
+
+-- reduced starting "ammo"
+-- randomly spawn new barrels/mines on new turn
+-- updated user feedback
+-- better locs and coloured addcaptions
+-- added tag for turntime
+-- removed tractor beam
+-- added two new weapons and changed ammo handling
+-- health crates now give tumbler time, and wep/utility give flamer ammo
+-- explosives AND mines can be picked up to increase their relative ammo
+-- replaced "no weapon" selected message that hw serves
+-- modified crate frequencies a bit
+-- added some simple kill-based achievements, i think
+
+------------------------
+-- version 0.7
+------------------------
+
+-- a few code optimisations/performance tweaks
+-- removed some deprecated code
+-- fix a potential spawn bug
+
+-- improved HUD (now shows ammo counts)
+-- improved user feedback (less generic messages)
+-- colour-coded addcaptions to match hud :)
+
+-- base tumbling time now equals scheme turntime
+-- tumbling time extension is now based on the amount of health contained in crate
+-- new mines per turn based on minesnum
+-- new barrels per turn based on explosives
+
+-- added 2 more achievements: barrel eater and mine eater (like kills, don't do anything atm)
+-- slightly increased grab distance for explosives/mines
+-- slightly increased flamer velocity
+-- slightly decreased flamer volume
+-- added a flame vaporiser (based on number of flame gears?)
+-- give tumblers an extra 47 health on the start of their tumble to counter the grenade (exp)
+-- refocus camera on tumbler on newturn (not on crates, barrels etc)
+-- increase delay: yes, yes, eat your hearts out
+
+-- commit log
+-- Better HUD
+-- Allow more user customization
+-- Bugfix for new gear spawns
+-- Performance tweaks
+-- Variety of small gameplay changes
+
+------------------------
+-- version 0.7.1
+------------------------
+
+-- redraw HUD on screen resolution change
+
+---------------------------
+-- some other ideas/things
+---------------------------
+--[[
+-- add better gameflag handling
+-- fix flamer "shots remaining" message on start or choose a standard versus %
+-- add more sounds
+-- better barrel/minespawn effects
+-- separate grab distance for mines/barrels
+-- [probably not] make barrels always explode?
+-- [probably not] persistent ammo?
+-- [probably not] dont hurt tumblers and restore their health at turn end?
+]]
+
+
+----------------------------------------------------------------
+----------------------------------------------------------------
+
+local flames = {}
+local fGearValues = {}
+
+function runOnflames(func)
+ for k, gear in ipairs(flames) do
+ func(gear)
+ end
+end
+
+function trackFGear(gear)
+ table.insert(flames, gear)
+end
+
+function trackFGearDeletion(gear)
+ fGearValues[gear] = nil
+ for k, g in ipairs(flames) do
+ if g == gear then
+ table.remove(flames, k)
+ break
+ end
+ end
+end
+
+function getFGearValue(gear, key)
+ if fGearValues[gear] ~= nil then
+ return fGearValues[gear][key]
+ end
+ return nil
+end
+
+function setFGearValue(gear, key, value)
+ found = false
+ for id, values in pairs(fGearValues) do
+ if id == gear then
+ values[key] = value
+ found = true
+ end
+ end
+ if not found then
+ fGearValues[gear] = { [key] = value }
+ end
+end
+
+function decreaseFGearValue(gear, key)
+ for id, values in pairs(fGearValues) do
+ if id == gear then
+ values[key] = values[key] - 1
+ end
+ end
+end
+
+function HandleLife(gear)
+
+ decreaseFGearValue(gear, "L")
+ if getFGearValue(gear, "L") == 0 then
+ AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false)
+ DeleteGear(gear)
+ end
+
+end
+
+----------------------------------------------------------------
+----------------------------------------------------------------
+
+function HideTags()
+
+ for i = 0, 3 do
+ SetVisualGearValues(vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xffffff00)
+ end
+
+end
+
+function DrawTag(i)
+
+ zoomL = 1.3
+
+ xOffset = 40
+
+ if i == 0 then
+ yOffset = 40
+ tCol = 0xffba00ff --0xffed09ff --0xffba00ff
+ tValue = TimeLeft
+ elseif i == 1 then
+ zoomL = 1.1
+ yOffset = 70
+ tCol = wepCol[0]
+ tValue = wepAmmo[0]
+ elseif i == 2 then
+ zoomL = 1.1
+ xOffset = 40 + 35
+ yOffset = 70
+ tCol = wepCol[1]
+ tValue = wepAmmo[1]
+ elseif i == 3 then
+ zoomL = 1.1
+ xOffset = 40 + 70
+ yOffset = 70
+ tCol = wepCol[2]
+ tValue = wepAmmo[2]
+ end
+
+ DeleteVisualGear(vTag[i])
+ vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(vTag[i])
+ SetVisualGearValues (
+ vTag[i], --id
+ -(ScreenWidth/2) + xOffset, --xoffset
+ ScreenHeight - yOffset, --yoffset
+ 0, --dx
+ 0, --dy
+ zoomL, --zoom
+ 1, --~= 0 means align to screen
+ g7, --frameticks
+ tValue, --value
+ 240000, --timer
+ tCol --GetClanColor( GetHogClan(CurrentHedgehog) )
+ )
+
+end
+
+function GetGearDistance(gear)
+
+ g1X, g1Y = GetGearPosition(gear)
+ g2X, g2Y = GetGearPosition(CurrentHedgehog)
+
+ q = g1X - g2X
+ w = g1Y - g2Y
+ return( (q*q) + (w*w) )
+
+end
+
+-- add to your ammo ***WHEN YOU PUSH A KEY*** near them
+-- yes that was my justification for a non generic method
+function CheckProximityToExplosives(gear)
+
+ if (GetGearDistance(gear) < 1400) then
+
+ if (GetGearType(gear) == gtExplosives) then
+
+ wepAmmo[0] = wepAmmo[0] + 1
+ PlaySound(sndShotgunReload)
+ DeleteGear(gear)
+ AddCaption(wep[0] .. " " .. loc("ammo extended!"), wepCol[0], capgrpAmmoinfo )
+ DrawTag(1)
+
+ barrelsEaten = barrelsEaten + 1
+ if barrelsEaten == 5 then
+ AddCaption(loc("Achievement Unlocked") .. ": " .. loc("Barrel Eater!"),0xffba00ff,capgrpMessage2)
+ end
+
+ elseif (GetGearType(gear) == gtMine) then
+ wepAmmo[1] = wepAmmo[1] + 1
+ PlaySound(sndShotgunReload)
+ DeleteGear(gear)
+ AddCaption(wep[1] .. " " .. loc("ammo extended!"), wepCol[1], capgrpAmmoinfo )
+ DrawTag(2)
+
+ minesEaten = minesEaten + 1
+ if minesEaten == 5 then
+ AddCaption(loc("Achievement Unlocked") .. ": " .. loc("Mine Eater!"),0xffba00ff,capgrpMessage2)
+ end
+
+ end
+
+ else
+ --AddCaption("There is nothing here...")
+ end
+
+end
+
+-- check proximity on crates
+function CheckProximity(gear)
+
+ dist = GetGearDistance(gear)
+
+ if (dist < 1600) and (GetGearType(gear) == gtCase) then
+
+ if GetHealth(gear) > 0 then
+
+ AddCaption(loc("Tumbling Time Extended!"), 0xffba00ff, capgrpMessage2 )
+
+ TimeLeft = TimeLeft + HealthCaseAmount --5 --5s
+ DrawTag(0)
+ --PlaySound(sndShotgunReload)
+ else
+ wepAmmo[2] = wepAmmo[2] + 800
+ PlaySound(sndShotgunReload)
+ AddCaption(wep[2] .. " " .. loc("fuel extended!"), wepCol[2], capgrpAmmoinfo )
+ DrawTag(3)
+ end
+
+ DeleteGear(gear)
+
+ end
+
+end
+
+function ChangeWeapon()
+
+ wepIndex = wepIndex + 1
+ if wepIndex == wepCount then
+ wepIndex = 0
+ end
+
+ AddCaption(wep[wepIndex] .. " " .. loc("selected!"), wepCol[wepIndex],capgrpAmmoinfo )
+ AddCaption(wepAmmo[wepIndex] .. " " .. loc("shots remaining."), wepCol[wepIndex],capgrpMessage2)
+
+end
+
+---------------
+-- action keys
+---------------
+
+function onPrecise()
+
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and (wepAmmo[wepIndex] > 0) then
+
+ wepAmmo[wepIndex] = wepAmmo[wepIndex] - 1
+ AddCaption(wepAmmo[wepIndex] .. " " .. loc("shots remaining."), wepCol[wepIndex],capgrpMessage2)
+
+ if wep[wepIndex] == loc("Barrel Launcher") then
+ morte = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtExplosives, 0, 0, 0, 1)
+ CopyPV(CurrentHedgehog, morte) -- new addition
+ x,y = GetGearVelocity(morte)
+ x = x*2
+ y = y*2
+ SetGearVelocity(morte, x, y)
+ DrawTag(1)
+
+ elseif wep[wepIndex] == loc("Mine Deployer") then
+ morte = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtMine, 0, 0, 0, 0)
+ SetTimer(morte, 1000)
+ DrawTag(2)
+ end
+
+ end
+
+ preciseOn = true
+
+end
+
+function onPreciseUp()
+ preciseOn = false
+end
+
+function onHJump()
+ -- pick up explosives/mines if nearby them
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then
+ runOnGears(CheckProximityToExplosives)
+ end
+end
+
+function onLJump()
+ ChangeWeapon()
+end
+
+-----------------
+-- movement keys
+-----------------
+
+function onLeft()
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) then
+ leftOn = true
+ end
+end
+
+function onRight()
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) then
+ rightOn = true
+ end
+end
+
+function onUp()
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) then
+ upOn = true
+ end
+end
+
+function onDown()
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) then
+ downOn = true
+ end
+end
+
+function onDownUp()
+ downOn = false
+end
+function onUpUp()
+ upOn = false
+end
+function onLeftUp()
+ leftOn = false
+end
+function onRightUp()
+ rightOn = false
+end
+
+--------------------------
+-- other event handlers
+--------------------------
+
+function onGameInit()
+ CaseFreq = 0
+ HealthCaseProb = 0
+ Delay = 1000
+
+ mineSpawn = MinesNum
+ if mineSpawn > 4 then
+ mineSpawn = 4
+ end
+
+ barrelSpawn = Explosives
+ if barrelSpawn > 4 then
+ barrelSpawn = 4
+ end
+
+ --MinesNum = 0
+ --Explosives = 0
+
+ for i = 0, 3 do
+ vTag[0] = AddVisualGear(0, 0, vgtHealthTag, 0, false)
+ end
+
+ HideTags()
+
+ wep[0] = loc("Barrel Launcher")
+ wep[1] = loc("Mine Deployer")
+ wep[2] = loc("Flamer")
+
+ wepCol[0] = 0x78818eff
+ wepCol[1] = 0xa12a77ff
+ wepCol[2] = 0xf49318ff
+
+ wepCount = 3
+
+end
+
+function onGameStart()
+
+ ShowMission (
+ "TUMBLER",
+ loc("a Hedgewars mini-game"),
+ loc("Eliminate the enemy hogs to win.") .. "|" ..
+ " " .. "|" ..
+
+ loc("New Mines Per Turn") .. ": " .. (mineSpawn) .. "|" ..
+ loc("New Barrels Per Turn") .. ": " .. (barrelSpawn) .. "|" ..
+ loc("Time Extension") .. ": " .. (HealthCaseAmount) .. loc("sec") .. "|" ..
+ " " .. "|" ..
+
+ loc("Movement: [Up], [Down], [Left], [Right]") .. "|" ..
+ loc("Fire") .. ": " .. loc("[Left Shift]") .. "|" ..
+ loc("Change Weapon") .. ": " .. loc("[Enter]") .. "|" ..
+ loc("Grab Mines/Explosives") .. ": " .. loc("[Backspace]") .. "|" ..
+
+ " " .. "|" ..
+
+ loc("Health crates extend your time.") .. "|" ..
+ loc("Ammo is reset at the end of your turn.") .. "|" ..
+
+ "", 4, 4000
+ )
+
+end
+
+function onScreenResize()
+
+ -- redraw Tags so that their screen locations are updated
+ if (CurrentHedgehog ~= nil) and (tumbleStarted == true) then
+ for i = 0, 3 do
+ DrawTag(i)
+ end
+ end
+
+end
+
+function onNewTurn()
+
+ stopMovement = false
+ tumbleStarted = false
+
+ -- randomly create new barrels mines on the map every turn (can be disabled by setting mine/barrels to 0 in scheme)
+ for i = 0, barrelSpawn-1 do
+ gear = AddGear(100, 100, gtExplosives, 0, 0, 0, 0)
+ SetHealth(gear, 100)
+ if FindPlace(gear, false, 0, LAND_WIDTH, false) ~= nil then
+ tempE = AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+ end
+ end
+ for i = 0, mineSpawn-1 do
+ gear = AddGear(100, 100, gtMine, 0, 0, 0, 0)
+ if FindPlace(gear, false, 0, LAND_WIDTH, false) ~= nil then
+ tempE = AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+ end
+ end
+
+ -- randomly spawn time extension crates / flamer fuel on the map
+ r = GetRandom(100)
+ if r > 50 then
+ gear = SpawnHealthCrate(0, 0)
+ end
+ r = GetRandom(100)
+ if r > 70 then
+ gear = SpawnAmmoCrate(0, 0, amSkip)
+ end
+
+ HideTags()
+
+ --reset ammo counts
+ wepAmmo[0] = 2
+ wepAmmo[1] = 1
+ wepAmmo[2] = 50 -- 50000 -- 50
+ wepIndex = 2
+ ChangeWeapon()
+
+ roundKills = 0
+ barrelsEaten = 0
+ minesEaten = 0
+
+ FollowGear(CurrentHedgehog)
+
+end
+
+
+function DisableTumbler()
+ stopMovement = true
+ upOn = false
+ down = false
+ leftOn = false
+ rightOn = false
+ HideTags()
+end
+
+function onGameTick()
+
+ -- start the player tumbling with a boom once their turn has actually begun
+ if tumbleStarted == false then
+ if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then
+ --AddCaption(loc("Good to go!"))
+ tumbleStarted = true
+ TimeLeft = (TurnTime/1000)
+ AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
+ SetHealth(CurrentHedgehog, GetHealth(CurrentHedgehog) + 47) -- new
+ for i = 0, 3 do
+ DrawTag(i)
+ end
+ end
+ end
+
+ if (CurrentHedgehog ~= nil) and (tumbleStarted == true) then
+
+ runOnGears(CheckProximity) -- crates
+
+ -- Calculate and display turn time
+ TimeLeftCounter = TimeLeftCounter + 1
+ if TimeLeftCounter == 1000 then
+ TimeLeftCounter = 0
+ TimeLeft = TimeLeft - 1
+
+ if TimeLeft >= 0 then
+ DrawTag(0)
+ end
+
+ end
+
+ if TimeLeft == 0 then
+ DisableTumbler()
+ end
+
+ -- handle movement based on IO
+ moveTimer = moveTimer + 1
+ if moveTimer == 100 then -- 100
+ moveTimer = 0
+
+ runOnflames(HandleLife)
+
+ ---------------
+ -- new trail code
+ ---------------
+ -- the trail lets you know you have 5s left to pilot, akin to birdy feathers
+ if (TimeLeft <= 5) and (TimeLeft > 0) then
+ tempE = AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmoke, 0, false)
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+ SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, GetClanColor(GetHogClan(CurrentHedgehog)) )
+ end
+ --------------
+
+ dx, dy = GetGearVelocity(CurrentHedgehog)
+
+ dxlimit = 0.4*fMod
+ dylimit = 0.4*fMod
+
+ if dx > dxlimit then
+ dx = dxlimit
+ end
+ if dy > dylimit then
+ dy = dylimit
+ end
+ if dx < -dxlimit then
+ dx = -dxlimit
+ end
+ if dy < -dylimit then
+ dy = -dylimit
+ end
+
+
+ if leftOn == true then
+ dx = dx - 0.1*fMod
+ end
+ if rightOn == true then
+ dx = dx + 0.1*fMod
+ end
+
+ if upOn == true then
+ dy = dy - 0.1*fMod
+ end
+ if downOn == true then
+ dy = dy + 0.1*fMod
+ end
+
+ SetGearVelocity(CurrentHedgehog, dx, dy)
+
+ end
+
+ --
+ --flamer
+ --
+ fireTimer = fireTimer + 1
+ if fireTimer == 6 then -- 5 --10
+ fireTimer = 0
+
+ if (wep[wepIndex] == loc("Flamer") ) and (preciseOn == true) and (wepAmmo[wepIndex] > 0) and (stopMovement == false) and (tumbleStarted == true) then
+
+ wepAmmo[wepIndex] = wepAmmo[wepIndex] - 1
+ AddCaption(
+ loc("Flamer") .. ": " ..
+ (wepAmmo[wepIndex]/800*100) - (wepAmmo[wepIndex]/800*100)%2 .. "%",
+ wepCol[2],
+ capgrpMessage2
+ )
+ DrawTag(3)
+
+ dx, dy = GetGearVelocity(CurrentHedgehog)
+ shell = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtFlame, 0, 0, 0, 0)
+
+ xdev = 1 + GetRandom(25) --15
+ xdev = xdev / 100
+
+ r = GetRandom(2)
+ if r == 1 then
+ xdev = xdev*-1
+ end
+
+ ydev = 1 + GetRandom(25) --15
+ ydev = ydev / 100
+
+ r = GetRandom(2)
+ if r == 1 then
+ ydev = ydev*-1
+ end
+
+ --*13 --8 *-4
+ SetGearVelocity(shell, (dx*4.5)+(xdev*fMod), (dy*4.5)+(ydev*fMod)) --10
+
+ end
+
+ end
+ --
+
+ end
+
+
+end
+
+function isATrackedGear(gear)
+ if (GetGearType(gear) == gtExplosives) or
+ (GetGearType(gear) == gtMine) or
+ (GetGearType(gear) == gtCase)
+ then
+ return(true)
+ else
+ return(false)
+ end
+end
+
+--[[function onGearDamage(gear, damage)
+ if gear == CurrentHedgehog then
+ -- You are now tumbling
+ end
+end]]
+
+function onGearAdd(gear)
+
+ if GetGearType(gear) == gtFlame then
+
+ trackFGear(gear)
+
+ fGears = fGears +1
+
+ if fGears < 80 then
+ setFGearValue(gear,"L",30)
+ else
+ setFGearValue(gear,"L",5) --3
+ end
+
+ elseif isATrackedGear(gear) then
+ trackGear(gear)
+ end
+
+end
+
+function onGearDelete(gear)
+
+ if GetGearType(gear) == gtFlame then
+ trackFGearDeletion(gear)
+ fGears = fGears -1
+
+ elseif isATrackedGear(gear) then
+ trackDeletion(gear)
+
+ -- achievements? prototype
+ elseif GetGearType(gear) == gtHedgehog then
+
+ if GetHogTeamName(gear) ~= GetHogTeamName(CurrentHedgehog) then
+
+ roundKills = roundKills + 1
+ if roundKills == 2 then
+ AddCaption(loc("Double Kill!"),0xffba00ff,capgrpMessage2)
+ elseif roundKills == 3 then
+ AddCaption(loc("Killing spree!"),0xffba00ff,capgrpMessage2)
+ elseif roundKills >= 4 then
+ AddCaption(loc("Unstoppable!"),0xffba00ff,capgrpMessage2)
+ end
+
+ elseif gear == CurrentHedgehog then
+ DisableTumbler()
+
+ elseif gear ~= CurrentHedgehog then
+ AddCaption(loc("Friendly Fire!"),0xffba00ff,capgrpMessage2)
+ end
+
+ end
+
+ if CurrentHedgehog ~= nil then
+ FollowGear(CurrentHedgehog)
+ end
+
+end
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/WxW.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/WxW.cfg Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,2 @@
+Shoppa
+Shoppa
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/WxW.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Multiplayer/WxW.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,751 @@
+
+----------------------
+-- WALL TO WALL 0.4
+----------------------
+-- a shoppa minigame
+-- by mikade
+
+-- feel free to add map specific walls to LoadConfig, or post additional
+-- wall suggestions on our forum at: http://www.hedgewars.org/forum
+
+----------------
+--0.1
+----------------
+-- concept test
+
+----------------
+--0.2
+----------------
+-- unhardcoded turntimeleft, now uses shoppa default of 45s
+-- changed some things behind the scenes
+-- fixed oooooold radar bug
+-- added radar / script support for multiple crates
+-- tweaked weapons tables
+-- added surfing and changed crate spawn requirements a bit
+
+----------------
+--0.3
+----------------
+-- stuffed dirty clothes into cupboard
+-- improved user feedback
+-- added/improved experimental config system, input masks included :D
+
+----------------
+--0.4
+----------------
+-- for version 0.9.18, now detects border in correct location
+-- fix 0.3 config constraint
+-- remove unnecessary vars
+-- oops, remove hardcoding of minesnum,explosives
+-- ... and unhardcode turntime (again)... man, 30s is hard :(
+-- move some initialisations around
+-- numerous improvements to user feedback
+-- walls disappear after being touched
+-- added backwards compatibility with 0.9.17
+
+----------------
+--TO DO
+----------------
+-- achievements / try detect shoppa moves? :|
+-- maybe add ability for the user to place zones like in Racer?
+-- add more hard-coded values for specific maps
+
+-----------------------------
+-- GO PONIES, GO PONIES, GO!
+-----------------------------
+
+loadfile(GetDataPath() .. "Scripts/Locale.lua")()
+loadfile(GetDataPath() .. "Scripts/Tracker.lua")()
+loadfile(GetDataPath() .. "Scripts/Utils.lua")()
+
+-- experimental menu stuff
+local menuIndex = 1
+local menu = {}
+local preMenuCfg
+local postMenuCfg
+local roundN = 0
+
+-- config and wall variables
+local AFR = false
+local allowCrazyWeps = false
+local requireSurfer = true
+local wX = {}
+local wY = {}
+local wWidth = {}
+local wHeight = {}
+local wTouched = {}
+--local margin
+local wallsLeft = 0
+
+local highestY = 0
+local surferTimer = 0
+local hasSurfed = false
+local allWallsHit = false
+
+local gTimer = 1
+local effectTimer = 1
+
+local ropeG = nil
+local crateG = nil
+local allowCrate = true
+
+-- crate radar vars
+local rCirc = {}
+local rAlpha = 255
+local rPingTimer = 0
+local m2Count = 0
+
+local weapons = {}
+
+--[[local unlisted = {amTardis, amLandGun,amExtraTime,amExtraDamage,
+ amVampiric, amSwitch, amInvulnerable, amGirder, amJetpack,
+ amPortalGun, amTeleport, amResurrector, amLaserSight, amLowGravity,
+ amAirAttack, amNapalm, amMineStrike, amDrillStrike,
+ amKamikaze, amSnowball, amSeduction}]]
+
+local crazyWeps = {amWatermelon, amHellishBomb, amBallgun, amRCPlane}
+
+local groundWeps = {amBee, amShotgun,amDEagle,amFirePunch, amWhip,
+ amPickHammer, amBaseballBat, amCake,amBallgun,
+ amRCPlane, amSniperRifle, amBirdy, amBlowTorch, amGasBomb,
+ amFlamethrower, amSMine, amMortar, amHammer}
+
+local ropeWeps = {amGrenade, amClusterBomb, amBazooka, amMine, amDynamite,
+ amWatermelon, amHellishBomb, amDrill, amMolotov}
+
+-- 0.9.18+ extra custom data for preset maps
+local MapList =
+ {
+ --name, surfer, roof, LRwalls
+ {"Atlantis Shoppa", true, false, true},
+ {"BambooPlinko", true, false, true},
+ {"BrickShoppa", false, false, true},
+ {"BubbleFlow", true, false, true},
+ {"Cave", false, false, true},
+ {"Glass Shoppa", true, false, true},
+ {"HardIce", false, false, true},
+ {"Industrial", false, false, true},
+ {"Islands", true, false, true},
+ {"Hedgelove", true, false, true},
+ {"NeonStyle", false, false, true},
+ {"Octorama", false, false, true},
+ {"red vs blue - Castle", true, false, true},
+ {"red vs blue - castle2", true, false, true},
+ {"red vs blue - True Shoppa Sky", true, false, true},
+ {"Ropes", false, false, true},
+ {"Ropes Rearranged", false, false, true},
+ {"RopesRevenge Flipped", true, false, true},
+ {"Ropes Three", false, false, true},
+ {"RopesTwo", false, false, true},
+ {"ShapeShoppa1.0", true, false, true},
+ {"ShappeShoppa Darkhow", true, false, true},
+ {"ShoppaCave2", true, false, true},
+ {"ShoppaFun", true, false, true},
+ {"ShoppaGolf", false, false, true},
+ {"ShoppaHell", false, true, false},
+ {"ShoppaKing", false, false, false},
+ {"ShoppaNeon", false, false, true},
+ {"ShoppaSky", false, false, true},
+ {"Shoppawall", false, false, true},
+ {"SkatePark", false, false, true},
+ {"SloppyShoppa", false, false, true},
+ {"Sticks", true, false, true},
+ {"Symmetrical Ropes ", false, false, true},
+ {"Tetris", false, false, true},
+ {"TransRopes2", false, false, true},
+ {"Wildmap", false, false, true},
+ {"Winter Shoppa", false, false, true},
+ {"2Cshoppa", true, false, true}
+ }
+
+function BoolToCfgTxt(p)
+ if p == false then
+ return("Disabled")
+ else
+ return("Enabled")
+ end
+end
+
+function LoadConfig(p)
+
+ margin = 20
+ mapID = nil
+
+ -- 0.9.17
+ if Map == "CHANGE_ME" then
+ AddCaption(loc("For improved features/stability, play 0.9.18+"))
+ --AddWall(10,10,4085,margin)
+ AddWall(10,10,margin,2025)
+ AddWall(4085-margin,10,margin,2025)
+ end
+
+ --0.9.18+
+ for i = 1, #MapList do
+ if Map == MapList[i][1] then
+ mapID = i
+ --AddCaption(MapList[i][1] .. " found. reqSurf is " .. BoolToCfgTxt(MapList[i][2]))
+ end
+ end
+
+ if (p == 1) and (mapID ~= nil) then
+ requireSurfer = MapList[mapID][2]
+ end
+
+ if mapID ~= nil then
+
+ -- add a wall to the roof
+ if MapList[mapID][3] == true then
+ AddWall(LeftX+10,TopY+10,RightX-LeftX-20,margin)
+ end
+
+ -- add walls on the left and right border
+ if MapList[mapID][4] == true then
+ AddWall(LeftX+10,TopY+10,margin,WaterLine)
+ AddWall(RightX-10-margin,TopY+10,margin,WaterLine)
+ end
+
+ -- add map specific walls
+ if Map == "Ropes" then
+ AddWall(1092,934,54,262)
+ AddWall(2822,323,33,137)
+ elseif Map == "ShoppaKing" then
+ AddWall(3777,1520,50,196)
+ AddWall(1658,338,46,670)
+ elseif Map == "ShoppaHell" then
+ AddWall(2035,831,30,263)
+ AddWall(3968,1668,31,383)
+ elseif Map == "ShoppaNeon" then
+ AddWall(980,400,20,300)
+ AddWall(1940,400,20,300)
+ AddWall(3088,565,26,284)
+ AddWall(187,270,28,266)
+ end
+
+ -- if map is unrecognized, add two walls on the side borders
+ -- also, if version of hw is not 0.9.17 or lower
+ elseif Map ~= "CHANGE_ME" then
+ AddWall(LeftX+10,TopY+10,margin,WaterLine)
+ AddWall(RightX-10-margin,TopY+10,margin,WaterLine)
+ end
+
+
+end
+
+function AddWall(zXMin,zYMin, zWidth, zHeight)
+
+ table.insert(wX, zXMin)
+ table.insert(wY, zYMin)
+ table.insert(wWidth, zWidth)
+ table.insert(wHeight, zHeight)
+ table.insert(wTouched, false)
+
+end
+
+function DrawBlip(gear)
+ SetVisualGearValues(getGearValue(gear,"CIRC"), getGearValue(gear,"RX"), getGearValue(gear,"RY"), 100, 255, 1, 10, 0, 40, 3, GetClanColor(GetHogClan(CurrentHedgehog))-rAlpha)
+end
+
+function TrackRadarBlip(gear)
+
+ -- work out the distance to the target
+ g1X, g1Y = GetGearPosition(CurrentHedgehog)
+ g2X, g2Y = GetX(gear), GetY(gear)
+ q = g1X - g2X
+ w = g1Y - g2Y
+ r = math.sqrt( (q*q) + (w*w) ) --alternate
+
+ RCX = getGearValue(gear,"RX")
+ RCY = getGearValue(gear,"RY")
+
+ rCircDistance = r -- distance to circle
+
+ opp = w
+ if opp < 0 then
+ opp = opp*-1
+ end
+
+ -- work out the angle (theta) to the target
+ t = math.deg ( math.asin(opp / r) )
+
+ -- based on the radius of the radar, calculate what x/y displacement should be
+ NR = 150 -- radius at which to draw circs
+ NX = math.cos( math.rad(t) ) * NR
+ NY = math.sin( math.rad(t) ) * NR
+
+ if rCircDistance < NR then
+ RCX = g2X
+ elseif q > 0 then
+ RCX = g1X - NX
+ else
+ RCX = g1X + NX
+ end
+
+ if rCircDistance < NR then
+ RCY = g2Y
+ elseif w > 0 then
+ RCY = g1Y - NY
+ else
+ RCY = g1Y + NY
+ end
+
+ setGearValue(gear, "RX", RCX)
+ setGearValue(gear, "RY", RCY)
+
+end
+
+
+function HandleCircles()
+
+ -- enable this if you want the radar to only show for a few seconds
+ -- after you spawn the crate
+ --[[if rAlpha ~= 255 then
+
+ rPingTimer = rPingTimer + 1
+ if rPingTimer == 100 then
+ rPingTimer = 0
+
+ rAlpha = rAlpha + 5
+ if rAlpha >= 255 then
+ rAlpha = 255
+ end
+ end
+
+ end]]
+
+ runOnGears(DrawBlip)
+
+ m2Count = m2Count + 1
+ if m2Count == 25 then
+ m2Count = 0
+
+ if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then
+ runOnGears(TrackRadarBlip)
+ end
+
+ end
+
+end
+
+
+function CheckCrateConditions()
+
+ crateSpawn = true
+
+ if requireSurfer == true then
+ if hasSurfed == false then
+ crateSpawn = false
+ end
+ end
+
+ if #wTouched > 0 then
+ if allWallsHit == false then
+ crateSpawn = false
+ end
+ end
+
+ if crateSpawn == true then
+ if allowCrate == true then
+ --if (crateG == nil) and (allowCrate == true) then
+ --AddCaption("")
+ SpawnAmmoCrate(0, 0, weapons[1+GetRandom(#weapons)] )
+ rPingTimer = 0
+ rAlpha = 0
+ PlaySound(sndWarp)
+ end
+ end
+
+end
+
+function CheckSurfer()
+
+ if GetY(CurrentHedgehog) > highestY then
+ highestY = GetY(CurrentHedgehog)
+ end
+
+ if (highestY == (WaterLine-8)) and (hasSurfed == false) then
+
+ surferTimer = surferTimer +1
+ if (surferTimer == 40) then
+ hasSurfed = true
+ AddCaption(loc("Surfer!"),0xffba00ff,capgrpMessage2)
+ end
+ end
+
+end
+
+
+
+function WallHit(id, zXMin,zYMin, zWidth, zHeight)
+
+ if wTouched[id] == false then
+ tempE = AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtBigExplosion, 0, false)
+ PlaySound(sndExplosion)
+ wallsLeft = wallsLeft - 1
+
+ if wallsLeft == 0 then
+ AddCaption(loc("All walls touched!"))
+ allWallsHit = true
+ if (requireSurfer == true) and (hasSurfed == false) then
+ AddCaption(loc("Go surf!"),0xffba00ff,capgrpMessage2)
+ end
+ else
+ AddCaption(loc("Walls Left") .. ": " .. wallsLeft)
+ end
+
+ end
+
+ wTouched[id] = true
+ tempE = AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmoke, 0, false)
+ --PlaySound(sndVaporize) -- yeah, this is just annoying as shit
+
+end
+
+function CheckForWallCollision()
+
+ for i = 1, #wTouched do
+ if gearIsInBox(CurrentHedgehog, wX[i],wY[i],wWidth[i],wHeight[i]) then
+ WallHit(i, wX[i],wY[i],wWidth[i],wHeight[i])
+ end
+ end
+
+end
+
+function BorderSpark(zXMin,zYMin, zWidth, zHeight, bCol)
+
+ eX = zXMin + GetRandom(zWidth+10)
+ eY = zYMin + GetRandom(zHeight+10)
+
+ tempE = AddVisualGear(eX, eY, vgtDust, 0, false)
+ if tempE ~= 0 then
+ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE)
+ SetVisualGearValues(tempE, eX, eY, g3, g4, g5, g6, g7, 1, g9, bCol )
+ end
+
+end
+
+
+function HandleBorderEffects()
+
+ effectTimer = effectTimer + 1
+ if effectTimer > 15 then --25
+
+ effectTimer = 1
+
+ for i = 1, #wTouched do
+ if wTouched[i] == true then
+ --bCol = GetClanColor(GetHogClan(CurrentHedgehog))
+ else
+ --bCol = 0xFFFFFFFF
+ bCol = GetClanColor(GetHogClan(CurrentHedgehog))
+ BorderSpark(wX[i],wY[i],wWidth[i],wHeight[i], bCol)
+ end
+ --BorderSpark(wX[i],wY[i],wWidth[i],wHeight[i], bCol)
+ end
+
+ end
+
+end
+
+function onLJump()
+ if roundN < 2 then
+ roundN = 100
+ SetInputMask(0xFFFFFFFF)
+ TurnTimeLeft = 1
+ AddCaption(loc("Configuration accepted."),0xffba00ff,capgrpMessage)
+ HideMission()
+ end
+end
+
+function onAttack()
+
+ if roundN < 2 then
+
+ if menuIndex == 1 then
+
+ if #wTouched > 0 then
+ for i = 1, #wTouched do
+ wTouched[i] = nil
+ wX[i] = nil
+ wY[i] = nil
+ wWidth[i] = nil
+ wHeight[i] = nil
+ end
+ else
+ LoadConfig(2)
+ end
+
+ elseif menuIndex == 2 then
+ requireSurfer = not(requireSurfer)
+ elseif menuIndex == 3 then
+ AFR = not(AFR)
+ elseif menuIndex == 4 then
+ allowCrazyWeps = not(allowCrazyWeps)
+ end
+
+ UpdateMenu()
+ configureWeapons()
+ HandleStartingStage()
+
+ elseif (AFR == true) then
+
+ if (GetCurAmmoType() ~= amRope) and
+ (GetCurAmmoType() ~= amSkip) and
+ (GetCurAmmoType() ~= amNothing)
+ then
+ AddCaption(loc("You may only attack from a rope!"),0xffba00ff,capgrpMessage2)
+ end
+
+ end
+
+end
+
+function onDown()
+ if roundN < 2 then
+ menuIndex = menuIndex +1
+ if menuIndex > #menu then
+ menuIndex = 1
+ end
+ HandleStartingStage()
+ end
+end
+
+function onUp()
+ if roundN < 2 then
+ menuIndex = menuIndex -1
+ if menuIndex == 0 then
+ menuIndex = #menu
+ end
+ HandleStartingStage()
+ end
+end
+
+function onGameInit()
+
+ GameFlags = gfRandomOrder + gfBorder + gfSolidLand --+ gfInfAttack
+ HealthCaseProb = 0
+ CaseFreq = 0
+
+end
+
+function configureWeapons()
+
+ -- reset wep array
+ for i = 1, #weapons do
+ weapons[i] = nil
+ end
+
+ -- add rope weps
+ for i, w in pairs(ropeWeps) do
+ table.insert(weapons, w)
+ end
+
+ -- add ground weps
+ for i, w in pairs(groundWeps) do
+ table.insert(weapons, w)
+ end
+
+ -- remove ground weps if attacking from rope is mandatory
+ if AFR == true then
+ for i = 1, #weapons do
+ for w = 1, #groundWeps do
+ if groundWeps[w] == weapons[i] then
+ table.remove(weapons, i)
+ end
+ end
+ end
+ end
+
+ -- remove crazy weps is crazy weps aren't allowed
+ if allowCrazyWeps == false then
+ for i = 1, #weapons do
+ for w = 1, #crazyWeps do
+ if crazyWeps[w] == weapons[i] then
+ table.remove(weapons, i)
+ end
+ end
+ end
+ end
+
+end
+
+function onGameStart()
+
+ LoadConfig(1)
+ configureWeapons()
+ UpdateMenu()
+ HandleStartingStage()
+
+end
+
+function onNewTurn()
+
+ wallsLeft = #wTouched
+
+ for i = 1, #wTouched do
+ wTouched[i] = false
+ end
+
+ allowCrate = true
+
+ surferTimer = 0
+ hasSurfed = false
+ allWallsHit = false
+ highestY = 0
+
+ crateG = nil
+
+ -- new config stuff
+ roundN = roundN + 1
+ if roundN < 2 then
+ TurnTimeLeft = -1
+ SetInputMask(0)
+ allowCrate = false
+ HandleStartingStage() -- new
+ end
+
+end
+
+function UpdateMenu()
+
+ preMenuCfg = loc("Spawn the crate, and attack!") .. "|"
+ postMenuCfg = loc("Press [Enter] to accept this configuration.")
+
+ menu = {
+ loc("Walls Required") .. ": " .. #wTouched .. "|",
+ loc("Surf Before Crate") .. ": " .. BoolToCfgTxt(requireSurfer) .. "|",
+ loc("Attack From Rope") .. ": " .. BoolToCfgTxt(AFR) .. "|",
+ loc("Super Weapons") .. ": " .. BoolToCfgTxt(allowCrazyWeps) .. "|"
+ }
+end
+
+function HandleStartingStage()
+
+ temp = menu[menuIndex]
+ menu[menuIndex] = "--> " .. menu[menuIndex]
+
+ missionComment = ""
+ for i = 1, #menu do
+ missionComment = missionComment .. menu[i]
+ end
+
+ ShowMission (
+ loc("WALL TO WALL") .. " 0.4",
+ loc("a shoppa minigame"),
+ preMenuCfg..
+ missionComment ..
+ postMenuCfg ..
+ --" " .. "|" ..
+ "", 4, 300000
+ )
+
+ menu[menuIndex] = temp
+
+end
+
+function onGameTick()
+
+ if CurrentHedgehog ~= nil then
+
+ --AddCaption(Map)
+ --AddCaption(RightX ..";" .. GetX(CurrentHedgehog))
+
+ CheckSurfer()
+
+ gTimer = gTimer + 1
+ if gTimer == 25 then
+ gTimer = 1
+
+ CheckForWallCollision()
+ CheckCrateConditions()
+
+ if (crateG == GetFollowGear()) and (crateG ~= nil) then
+ FollowGear(CurrentHedgehog)
+ end
+
+ -- if attackfromrope is set, forbid firing unless using rope
+ if (AFR == true) and (roundN >= 2) then
+ if (GetCurAmmoType() == amRope) or
+ (GetCurAmmoType() == amSkip) or
+ (GetCurAmmoType() == amNothing)
+ then
+ SetInputMask(0xFFFFFFFF)
+ elseif ropeG == nil then
+ SetInputMask(bnot(gmAttack))
+ end
+ end
+
+ end
+
+ HandleBorderEffects()
+ HandleCircles()
+
+ end
+
+end
+
+function onGearAdd(gear)
+
+ if GetGearType(gear) == gtRope then
+ ropeG = gear
+ elseif GetGearType(gear) == gtCase then
+
+ crateG = gear
+ trackGear(gear)
+
+ table.insert(rCirc, AddVisualGear(0,0,vgtCircle,0,true) )
+ setGearValue(gear,"CIRC",rCirc[#rCirc])
+ setGearValue(gear,"RX",0)
+ setGearValue(gear,"RY",0)
+ SetVisualGearValues(rCirc[#rCirc], 0, 0, 100, 255, 1, 10, 0, 40, 3, 0xff00ffff)
+
+ allowCrate = false
+
+ rPingTimer = 0
+ rAlpha = 0
+
+ end
+
+end
+
+function onGearDelete(gear)
+
+ if gear == ropeG then
+ ropeG = nil
+ elseif GetGearType(gear) == gtCase then
+
+ if gear == crateG then
+ crateG = nil
+ -- rAlpha = 255
+ end
+
+ for i = 1, #rCirc do
+ if rCirc[i] == getGearValue(gear,"CIRC") then
+ DeleteVisualGear(rCirc[i])
+ table.remove(rCirc, i)
+ end
+ end
+
+ trackDeletion(gear)
+
+ end
+
+end
+
+function onAmmoStoreInit()
+
+ for i, w in pairs(ropeWeps) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+
+ for i, w in pairs(groundWeps) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+
+ for i, w in pairs(crazyWeps) do
+ SetAmmo(w, 0, 0, 0, 1)
+ end
+
+ SetAmmo(amRope, 9, 0, 0, 0)
+ SetAmmo(amSkip, 9, 0, 0, 0)
+
+end
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Tracker.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Tracker.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,295 @@
+-- Library for keeping track of gears in the game
+-- and running functions on them
+-- also keeps track of clans and teams
+
+local trackingTeams = false
+local resurrecting = false
+local gears = {}
+local teams = {}
+local clans = {}
+local resurrectedHogs = {}
+local gearValues = {}
+local teamValues = {}
+local clanValues = {}
+
+-- Registers when a gear is added
+function trackGear(gear)
+ table.insert(gears, gear)
+ if trackingTeams and GetGearType(gear) == gtResurrector then
+ resurrecting = true
+ elseif resurrecting and GetGearType(gear) == gtHedgehog then
+ table.insert(resurrectedHogs, gear)
+ end
+end
+
+-- Registers when a gear is deleted
+function trackDeletion(gear)
+ gearValues[gear] = nil
+ for k, g in ipairs(gears) do
+ if g == gear then
+ table.remove(gears, k)
+ break
+ end
+ end
+ if trackingTeams and GetGearType(gear) == gtHedgehog then
+ hogs = teams[GetHogTeamName(gear)]
+ if hogs ~= nil then
+ if table.maxn(hogs) == 1 then
+ hogs = nil
+ else
+ for k, hog in ipairs(hogs) do
+ if hog == gear then
+ table.remove(hogs, k)
+ break
+ end
+ end
+ end
+ end
+ elseif resurrecting and GetGearType(gear) == gtResurrector then
+ for k, gear in ipairs(resurrectedHogs) do
+ team = GetHogTeamName(gear)
+ if teams[team] == nil then
+ teams[team] = {}
+ end
+ table.insert(teams[team], gear)
+ end
+ resurrecting = false
+ resurrectedHogs = {}
+ end
+end
+
+-- Start to keep track of teams
+function trackTeams()
+ if not trackingTeams then
+ trackingTeams = true
+ for k, gear in ipairs(gears) do
+ if GetGearType(gear) == gtHedgehog then
+ team = GetHogTeamName(gear)
+ if teams[team] == nil then
+ teams[team] = { gear }
+ clans[team] = GetHogClan(gear)
+ else
+ table.insert(teams[team], gear)
+ end
+ end
+ end
+ end
+end
+
+-- Registers when a hog is hidden
+function trackHiding(gear)
+ for k, g in ipairs(gears) do
+ if g == gear then
+ table.remove(gears, k)
+ break
+ end
+ end
+
+ if trackingTeams then
+ hogs = teams[GetHogTeamName(gear)]
+
+ if hogs ~= nil then
+ if table.maxn(hogs) == 1 then
+ hogs = nil
+ else
+ for k, hog in ipairs(hogs) do
+ if hog == gear then
+ table.remove(hogs, k)
+ break
+ end
+ end
+ end
+ end
+ end
+end
+
+-- Registers when a hog is restored
+function trackRestoring(gear)
+ table.insert(gears, gear)
+
+ if trackingTeams then
+ team = GetHogTeamName(gear)
+ if teams[team] == nil then
+ teams[team] = {}
+ end
+ table.insert(teams[team], gear)
+ end
+end
+
+-- Get a value for a specific gear
+function getGearValue(gear, key)
+ if gearValues[gear] ~= nil then
+ return gearValues[gear][key]
+ end
+ return nil
+end
+
+-- Set a value for a specific gear
+function setGearValue(gear, key, value)
+ found = false
+ for id, values in pairs(gearValues) do
+ if id == gear then
+ values[key] = value
+ found = true
+ end
+ end
+ if not found then
+ gearValues[gear] = { [key] = value }
+ end
+end
+
+-- Increase a value for a specific gear
+function increaseGearValue(gear, key)
+ for id, values in pairs(gearValues) do
+ if id == gear then
+ values[key] = values[key] + 1
+ end
+ end
+end
+
+-- Decrease a value for a specific gear
+function decreaseGearValue(gear, key)
+ for id, values in pairs(gearValues) do
+ if id == gear then
+ values[key] = values[key] - 1
+ end
+ end
+end
+
+-- Get a value for a specific team
+function getTeamValue(team, key)
+ if teamValues[team] ~= nil then
+ return teamValues[team][key]
+ end
+ return nil
+end
+
+-- Set a value for a specific team
+function setTeamValue(team, key, value)
+ found = false
+ for name, values in pairs(teamValues) do
+ if name == team then
+ values[key] = value
+ found = true
+ end
+ end
+ if not found then
+ teamValues[team] = { [key] = value }
+ end
+end
+
+-- Increase a value for a specific team
+function increaseTeamValue(team, key)
+ for name, values in pairs(teamValues) do
+ if name == team then
+ values[key] = values[key] + 1
+ end
+ end
+end
+
+-- Decrease a value for a specific team
+function decreaseTeamValue(team, key)
+ for name, values in pairs(teamValues) do
+ if name == team then
+ values[key] = values[key] - 1
+ end
+ end
+end
+
+-- Get a value for a specific clan
+function getClanValue(clan, key)
+ if clanValues[clan] ~= nil then
+ return clanValues[clan][key]
+ end
+ return nil
+end
+
+-- Set a value for a specific clan
+function setClanValue(clan, key, value)
+ found = false
+ for num, values in ipairs(clanValues) do
+ if num == clan then
+ values[key] = value
+ found = true
+ end
+ end
+ if not found then
+ clanValues[clan] = { [key] = value }
+ end
+end
+
+-- Increase a value for a specific clan
+function increaseClanValue(clan, key)
+ for num, values in ipairs(clanValues) do
+ if num == clan then
+ values[key] = values[key] + 1
+ end
+ end
+end
+
+-- Decrease a value for a specific clan
+function decreaseClanValue(clan, key)
+ for num, values in ipairs(clanValues) do
+ if num == clan then
+ values[key] = values[key] - 1
+ end
+ end
+end
+
+-- Run a function on all tracked gears
+function runOnGears(func)
+ for k, gear in ipairs(gears) do
+ func(gear)
+ end
+end
+
+-- Run a function on all tracked hogs
+function runOnHogs(func)
+ for k, hogs in pairs(teams) do
+ for m, hog in ipairs(hogs) do
+ func(hog)
+ end
+ end
+end
+
+-- Run a function on hogs in a team
+function runOnHogsInTeam(func, team)
+ if teams[team] ~= nil then
+ for k, hog in ipairs(teams[team]) do
+ func(hog)
+ end
+ end
+end
+
+-- Run a function on hogs in other teams
+function runOnHogsInOtherTeams(func, team)
+ for k, hogs in pairs(teams) do
+ if k ~= team then
+ for m, hog in ipairs(hogs) do
+ func(hog)
+ end
+ end
+ end
+end
+
+-- Run a function on hogs in a clan
+function runOnHogsInClan(func, clan)
+ for i = 1, table.maxn(clans) do
+ if clans[i] == clan then
+ for k, hog in ipairs(teams[i]) do
+ func(hog)
+ end
+ end
+ end
+end
+
+-- Run a function on hogs in other clans
+function runOnHogsInOtherClans(func, clan)
+ for i = 1, table.maxn(clans) do
+ if clans[i] ~= clan then
+ for k, hog in ipairs(teams[i]) do
+ func(hog)
+ end
+ end
+ end
+end
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Scripts/Utils.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/Data/Scripts/Utils.lua Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,22 @@
+-- Library for miscellaneous utilitiy functions
+
+-- Check if a gear is inside a box
+function gearIsInBox(gear, x, y, w, h)
+ gx, gy = GetGearPosition(gear)
+ if gx >= x and gy >= y and gx <= x + w and gy <= y + h then
+ return true
+ end
+ return false
+end
+
+-- Check if a gear is inside a circle
+function gearIsInCircle(gear, x, y, r, useRadius)
+ gx, gy = GetGearPosition(gear)
+ if useRadius then
+ r = r + GetGearRadius(gear)
+ end
+ if r ^ 2 >= (x - gx) ^ 2 + (y - gy) ^ 2 then
+ return true
+ end
+ return false
+end
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/TARDIS.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/TARDIS.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/beep.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/beep.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/beewater.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/beewater.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Amazing.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Amazing.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Brilliant.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Brilliant.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Bugger.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Bugger.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Bungee.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Bungee.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Cutitout.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Cutitout.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Drat.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Drat.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Excellent.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Excellent.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Fire.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Fire.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Gonnagetyou.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Gonnagetyou.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Grenade.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Grenade.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Hmm.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Hmm.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Justyouwait.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Justyouwait.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Leavemealone.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Leavemealone.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Ohdear.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Ohdear.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Ouch.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Ouch.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Perfect.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Perfect.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Revenge.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Revenge.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Runaway.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Runaway.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Solong.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Solong.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Thisoneismine.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Thisoneismine.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Watchthis.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Watchthis.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Whatthe.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Whatthe.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Whoopsee.ogg
Binary file project_files/Android-build/SDL-android-project/assets/Data/Sounds/voices/Classic/Whoopsee.ogg has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/assets/assetsversion.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/assets/assetsversion.txt Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,1 @@
+9
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/jni/Android.mk
--- a/project_files/Android-build/SDL-android-project/jni/Android.mk Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/jni/Android.mk Mon Nov 05 00:32:41 2012 +0400
@@ -6,5 +6,6 @@
include $(CLEAR_VARS)
include $(JNI_DIR)/../../../../misc/Android.mk
+include $(JNI_DIR)/../../../frontlib/Android.mk
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/jni/SDL/src/main/android/SDL_android_main.cpp
--- a/project_files/Android-build/SDL-android-project/jni/SDL/src/main/android/SDL_android_main.cpp Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/jni/SDL/src/main/android/SDL_android_main.cpp Mon Nov 05 00:32:41 2012 +0400
@@ -27,23 +27,20 @@
char *argv[argc];
jstring jstringArgv[argc];
for(int i = 0; i < argc; i++){
- jstringArgv[i] = (jstring)env->GetObjectArrayElement(strArray, i); //get the element
- argv[i] = (char*)malloc(sizeof(char) * env->GetStringLength(jstringArgv[i]));
- strcpy(argv[i], env->GetStringUTFChars(jstringArgv[i], JNI_FALSE)); //copy it to a mutable location
- //Don't release memory the JAVA GC will take care of it
- //env->ReleaseStringChars(jstringArgv[i], (jchar*)argv[i]);
+ jstringArgv[i] = (jstring)env->GetObjectArrayElement(strArray, i); //get the element
+ argv[i] = (char*)malloc(env->GetStringUTFLength(jstringArgv[i]) + 1);
+ const char *str = env->GetStringUTFChars(jstringArgv[i], NULL);
+ strcpy(argv[i], str); //copy it to a mutable location
+ env->ReleaseStringUTFChars(jstringArgv[i], str);
}
/* Run the application code! */
- int status;
- status = SDL_main(argc, argv);
+ int status = SDL_main(argc, argv);
//Clean up argv
for(int i = 0; i < argc; i++){
+ free(argv[i]);
}
-
- /* We exit here for consistency with other platforms. */
- //exit(status); Xeli: Or lets not crash the entire app.....
}
/* vi: set ts=4 sw=4 expandtab: */
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/jni/SDL_mixer/Android.mk
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/libs/android-support-v13.jar
Binary file project_files/Android-build/SDL-android-project/libs/android-support-v13.jar has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/libs/armeabi/libjnidispatch.so
Binary file project_files/Android-build/SDL-android-project/libs/armeabi/libjnidispatch.so has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/libs/jna.jar
Binary file project_files/Android-build/SDL-android-project/libs/jna.jar has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-hdpi/button_local_play.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-hdpi/button_local_play.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-hdpi/button_network_play.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-hdpi/button_network_play.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-large-mdpi/button_local_play.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-large-mdpi/button_local_play.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-large-mdpi/button_network_play.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-large-mdpi/button_network_play.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/backbutton.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/backbutton.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/button.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/drawable-mdpi/button.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_disabled.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_disabled.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_focused.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_focused.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_focused_disabled.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_focused_disabled.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_normal.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/button_normal.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_disabled.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_disabled.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_focused.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_focused.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_focused_disabled.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_focused_disabled.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_normal.9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/dropdown_normal.9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount1.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount1.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount2.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount3.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount3.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount4.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount4.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount5.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount5.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount6.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount6.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount7.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount7.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount8.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/hogcount8.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/lightbulb_off.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/lightbulb_off.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/lightbulb_on.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/lightbulb_on.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/playerlist_player.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/playerlist_player.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/roomlist_ingame.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/roomlist_ingame.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/roomlist_preparing.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/roomlist_preparing.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/savebutton.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/savebutton.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_local_by_level.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_local_by_level.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot1.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot1.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot2.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot3.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot3.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot4.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot4.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot5.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_bot5.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_by_level.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_by_level.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_human.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/team_net_human.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount.xml
--- a/project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount0.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount0.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount1.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount1.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount2.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount2.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount3.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount3.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount4.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount4.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount5.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount5.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount6.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount6.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount7.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount7.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount8.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount8.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount9.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-mdpi/teamcount9.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-mdpi/teams_number.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/drawable-mdpi/teams_number.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-small-hdpi/button_local_play.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-small-hdpi/button_local_play.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/drawable-small-hdpi/button_network_play.png
Binary file project_files/Android-build/SDL-android-project/res/drawable-small-hdpi/button_network_play.png has changed
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout-large/activity_lobby.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout-large/activity_lobby.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout-large/activity_localroom.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout-large/activity_localroom.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout-large/activity_netroom.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout-large/activity_netroom.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout-large/fragment_roomlist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout-large/fragment_roomlist.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout-large/listview_room.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout-large/listview_room.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout-xlarge/roomlist_player_team_count.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout-xlarge/roomlist_player_team_count.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout-xlarge/roomlist_player_team_count_header.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout-xlarge/roomlist_player_team_count_header.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/activity_lobby.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/activity_lobby.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/activity_localroom.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/activity_localroom.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/activity_main.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/activity_main.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/activity_netroom.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/activity_netroom.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/activity_schemelist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/activity_schemelist.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/activity_teamlist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/activity_teamlist.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/activity_weaponsetlist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/activity_weaponsetlist.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/backbutton.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/backbutton.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/config.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/config.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/fragment_chat.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/fragment_chat.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/fragment_map.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/fragment_map.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/fragment_playerlist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/fragment_playerlist.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/fragment_roomlist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/fragment_roomlist.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/fragment_settings.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/fragment_settings.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/fragment_teamlist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/fragment_teamlist.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/listview_item.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/listview_item.xml Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/res/layout/listview_item.xml Mon Nov 05 00:32:41 2012 +0400
@@ -1,5 +1,6 @@
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/listview_room.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/listview_room.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/listview_room_header.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/listview_room_header.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/listview_team.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/listview_team.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/main.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/main.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/savebutton.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/savebutton.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/starting_game.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/starting_game.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,166 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/tab_indicator_vertical.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/layout/tab_indicator_vertical.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,23 @@
+
+
+
+
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/team_creation.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/team_creation.xml Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/res/layout/team_creation.xml Mon Nov 05 00:32:41 2012 +0400
@@ -15,8 +15,6 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
-
-
-
-
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/layout/team_selection_entry.xml
--- a/project_files/Android-build/SDL-android-project/res/layout/team_selection_entry.xml Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/res/layout/team_selection_entry.xml Mon Nov 05 00:32:41 2012 +0400
@@ -31,7 +31,7 @@
android:layout_alignBottom="@id/imgDifficulty"
android:adjustViewBounds="true"
android:scaleType="centerInside"
- android:src="@drawable/teamcount7"/>
+ android:src="@drawable/hogcount"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/menu/lobby_options.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/menu/lobby_options.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/menu/lobby_playerlist_context.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/menu/lobby_playerlist_context.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/menu/main_options.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/menu/main_options.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,20 @@
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/menu/room_playerlist_chief_context.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/menu/room_playerlist_chief_context.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/menu/room_playerlist_context.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/menu/room_playerlist_context.xml Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/basicflags.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/basicflags.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,390 +0,0 @@
-
-
-
-
- false
-
-
- false
-
-
- e$damagepct
-
-
- 100
-
-
- Damage
-
-
- 300
-
-
- 10
-
-
- Damage Modifier
-
-
-
-
- true
-
-
- true
-
-
- e$turntime
-
-
- 45
-
-
- Time
-
-
- 100
-
-
- 1
-
-
- Turn Time
-
-
-
-
- false
-
-
- inithealth
-
-
- 200
-
-
- Health
-
-
- 200
-
-
- 50
-
-
- Initial Health
-
-
-
-
- true
-
-
- false
-
-
- e$sd_turns
-
-
- 15
-
-
- SuddenDeath
-
-
- 50
-
-
- 0
-
-
- Sudden Death Timeout
-
-
-
-
- false
-
-
- false
-
-
- e$casefreq
-
-
- 5
-
-
- Box
-
-
- 9
-
-
- 0
-
-
- Crate Drop Turns
-
-
-
-
- false
-
-
- true
-
-
- e$minestime
-
-
- 3
-
-
- Time
-
-
- 5
-
-
- -1
-
-
- Mines Time
-
-
-
-
- false
-
-
- false
-
-
- e$minesnum
-
-
- 4
-
-
- Mine
-
-
- 80
-
-
- 0
-
-
- Mines Number
-
-
-
-
- false
-
-
- false
-
-
- e$minedudpct
-
-
- 0
-
-
- Dud
-
-
- 100
-
-
- 0
-
-
- Dud Mines Probability (%)
-
-
-
-
- false
-
-
- false
-
-
- e$explosives
-
-
- 2
-
-
- Damage
-
-
- 40
-
-
- 0
-
-
- Explosives
-
-
-
-
- false
-
-
- false
-
-
- e$healthprob
-
-
- 35
-
-
- Health
-
-
- 100
-
-
- 0
-
-
- Health Kit Probability (%)
-
-
-
-
- false
-
-
- false
-
-
- e$hcaseamount
-
-
- 25
-
-
- Health
-
-
- 200
-
-
- 0
-
-
- Health Amount in Kit
-
-
-
-
- false
-
-
- false
-
-
- e$waterrise
-
-
- 47
-
-
- SuddenDeath
-
-
- 100
-
-
- 0
-
-
- Water Rise Amount
-
-
-
-
- false
-
-
- false
-
-
- e$healthdec
-
-
- 5
-
-
- SuddenDeath
-
-
- 100
-
-
- 0
-
-
- Health Decrease
-
-
-
-
- false
-
-
- false
-
-
- e$ropepct
-
-
- 100
-
-
- Rope
-
-
- 999
-
-
- 25
-
-
- Rope Length (%)
-
-
-
-
- false
-
-
- false
-
-
- e$getawaytime
-
-
- 100
-
-
- Time
-
-
- 999
-
-
- 0
-
-
- Get Away Time (%)
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_barrelmayhem.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_barrelmayhem.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Barrel Mayhem
-
- 100
- 30
- 100
- 15
- 0
- 0
- 0
- 0
- 80
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_cleanslate.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_cleanslate.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Clean Slate
-
- 100
- 45
- 100
- 15
- 5
- 3
- 4
- 0
- 2
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_default_scheme.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_default_scheme.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Default
-
- 100
- 45
- 100
- 15
- 5
- 3
- 4
- 0
- 2
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_fortmode.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_fortmode.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Fort Mode
-
- 100
- 45
- 100
- 15
- 5
- 3
- 0
- 0
- 0
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_kingmode.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_kingmode.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- King Mode
-
- 100
- 45
- 100
- 15
- 5
- 3
- 4
- 0
- 2
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_minefield.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_minefield.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Minefield
-
- 100
- 30
- 50
- 15
- 0
- 0
- 80
- 0
- 0
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_promode.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_promode.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Pro Mode
-
- 100
- 15
- 100
- 15
- 0
- 3
- 0
- 0
- 2
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_shoppa.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_shoppa.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Shoppa
-
- 100
- 30
- 100
- 50
- 1
- 3
- 0
- 0
- 0
- 0
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_thinkingwithportals.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_thinkingwithportals.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Thinking with Portals
-
- 100
- 45
- 100
- 15
- 2
- 3
- 5
- 0
- 5
- 25
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_timeless.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_timeless.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Timeless
-
- 100
- 9999
- 100
- 15
- 5
- 3
- 5
- 10
- 2
- 35
- 30
- 0
- 0
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/scheme_tunnelhogs.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/scheme_tunnelhogs.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
- Tunnelhogs
-
- 100
- 30
- 100
- 15
- 5
- 3
- 10
- 10
- 10
- 35
- 25
- 47
- 5
- 100
- 100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/schemes_builtin.ini
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/raw/schemes_builtin.ini Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,456 @@
+
+[schemes]
+size = 11
+1\name = Default
+1\fortsmode = false
+1\divteams = false
+1\solidland = false
+1\border = false
+1\lowgrav = false
+1\laser = false
+1\invulnerability = false
+1\resethealth = false
+1\vampiric = false
+1\karma = false
+1\artillery = false
+1\randomorder = false
+1\king = false
+1\placehog = false
+1\sharedammo = false
+1\disablegirders = false
+1\disablelandobjects = false
+1\aisurvival = false
+1\infattack = false
+1\resetweps = false
+1\perhogammo = false
+1\disablewind = false
+1\morewind = false
+1\tagteam = false
+1\bottomborder = false
+1\damagefactor = 100
+1\turntime = 45
+1\health = 100
+1\suddendeath = 15
+1\caseprobability = 5
+1\minestime = 3
+1\minesnum = 4
+1\minedudpct = 0
+1\explosives = 2
+1\healthprobability = 35
+1\healthcaseamount = 25
+1\waterrise = 47
+1\healthdecrease = 5
+1\ropepct = 100
+1\getawaytime = 100
+2\name = Pro Mode
+2\fortsmode = false
+2\divteams = false
+2\solidland = false
+2\border = false
+2\lowgrav = false
+2\laser = false
+2\invulnerability = false
+2\resethealth = false
+2\vampiric = false
+2\karma = false
+2\artillery = false
+2\randomorder = true
+2\king = false
+2\placehog = false
+2\sharedammo = false
+2\disablegirders = false
+2\disablelandobjects = false
+2\aisurvival = false
+2\infattack = false
+2\resetweps = false
+2\perhogammo = false
+2\disablewind = false
+2\morewind = false
+2\tagteam = false
+2\bottomborder = false
+2\damagefactor = 100
+2\turntime = 45
+2\health = 100
+2\suddendeath = 15
+2\caseprobability = 5
+2\minestime = 3
+2\minesnum = 4
+2\minedudpct = 0
+2\explosives = 2
+2\healthprobability = 35
+2\healthcaseamount = 25
+2\waterrise = 47
+2\healthdecrease = 5
+2\ropepct = 100
+2\getawaytime = 100
+3\name = Shoppa
+3\fortsmode = false
+3\divteams = false
+3\solidland = false
+3\border = false
+3\lowgrav = false
+3\laser = false
+3\invulnerability = false
+3\resethealth = false
+3\vampiric = false
+3\karma = false
+3\artillery = false
+3\randomorder = true
+3\king = false
+3\placehog = false
+3\sharedammo = true
+3\disablegirders = false
+3\disablelandobjects = false
+3\aisurvival = false
+3\infattack = false
+3\resetweps = false
+3\perhogammo = false
+3\disablewind = false
+3\morewind = false
+3\tagteam = false
+3\bottomborder = false
+3\damagefactor = 100
+3\turntime = 15
+3\health = 100
+3\suddendeath = 15
+3\caseprobability = 0
+3\minestime = 3
+3\minesnum = 0
+3\minedudpct = 0
+3\explosives = 2
+3\healthprobability = 35
+3\healthcaseamount = 25
+3\waterrise = 47
+3\healthdecrease = 5
+3\ropepct = 100
+3\getawaytime = 100
+4\name = Clean Slate
+4\fortsmode = false
+4\divteams = false
+4\solidland = true
+4\border = true
+4\lowgrav = false
+4\laser = false
+4\invulnerability = false
+4\resethealth = false
+4\vampiric = false
+4\karma = false
+4\artillery = false
+4\randomorder = true
+4\king = false
+4\placehog = false
+4\sharedammo = true
+4\disablegirders = true
+4\disablelandobjects = false
+4\aisurvival = false
+4\infattack = false
+4\resetweps = true
+4\perhogammo = false
+4\disablewind = false
+4\morewind = false
+4\tagteam = false
+4\bottomborder = false
+4\damagefactor = 100
+4\turntime = 30
+4\health = 100
+4\suddendeath = 50
+4\caseprobability = 1
+4\minestime = 3
+4\minesnum = 0
+4\minedudpct = 0
+4\explosives = 0
+4\healthprobability = 0
+4\healthcaseamount = 25
+4\waterrise = 47
+4\healthdecrease = 5
+4\ropepct = 100
+4\getawaytime = 100
+5\name = Minefield
+5\fortsmode = false
+5\divteams = false
+5\solidland = false
+5\border = false
+5\lowgrav = false
+5\laser = false
+5\invulnerability = false
+5\resethealth = true
+5\vampiric = false
+5\karma = false
+5\artillery = false
+5\randomorder = true
+5\king = false
+5\placehog = false
+5\sharedammo = false
+5\disablegirders = false
+5\disablelandobjects = false
+5\aisurvival = false
+5\infattack = true
+5\resetweps = true
+5\perhogammo = false
+5\disablewind = false
+5\morewind = false
+5\tagteam = false
+5\bottomborder = false
+5\damagefactor = 100
+5\turntime = 45
+5\health = 100
+5\suddendeath = 15
+5\caseprobability = 5
+5\minestime = 3
+5\minesnum = 4
+5\minedudpct = 0
+5\explosives = 2
+5\healthprobability = 35
+5\healthcaseamount = 25
+5\waterrise = 47
+5\healthdecrease = 5
+5\ropepct = 100
+5\getawaytime = 100
+6\name = Barrel Mayhem
+6\fortsmode = false
+6\divteams = false
+6\solidland = false
+6\border = false
+6\lowgrav = false
+6\laser = false
+6\invulnerability = false
+6\resethealth = false
+6\vampiric = false
+6\karma = false
+6\artillery = false
+6\randomorder = true
+6\king = false
+6\placehog = false
+6\sharedammo = true
+6\disablegirders = true
+6\disablelandobjects = false
+6\aisurvival = false
+6\infattack = false
+6\resetweps = false
+6\perhogammo = false
+6\disablewind = false
+6\morewind = false
+6\tagteam = false
+6\bottomborder = false
+6\damagefactor = 100
+6\turntime = 30
+6\health = 50
+6\suddendeath = 15
+6\caseprobability = 0
+6\minestime = 0
+6\minesnum = 80
+6\minedudpct = 0
+6\explosives = 0
+6\healthprobability = 35
+6\healthcaseamount = 25
+6\waterrise = 47
+6\healthdecrease = 5
+6\ropepct = 100
+6\getawaytime = 100
+7\name = Tunnel Hogs
+7\fortsmode = false
+7\divteams = false
+7\solidland = false
+7\border = false
+7\lowgrav = false
+7\laser = false
+7\invulnerability = false
+7\resethealth = false
+7\vampiric = false
+7\karma = false
+7\artillery = false
+7\randomorder = true
+7\king = false
+7\placehog = false
+7\sharedammo = true
+7\disablegirders = false
+7\disablelandobjects = false
+7\aisurvival = false
+7\infattack = false
+7\resetweps = false
+7\perhogammo = false
+7\disablewind = false
+7\morewind = false
+7\tagteam = false
+7\bottomborder = false
+7\damagefactor = 100
+7\turntime = 30
+7\health = 100
+7\suddendeath = 15
+7\caseprobability = 0
+7\minestime = 0
+7\minesnum = 0
+7\minedudpct = 0
+7\explosives = 80
+7\healthprobability = 35
+7\healthcaseamount = 25
+7\waterrise = 47
+7\healthdecrease = 5
+7\ropepct = 100
+7\getawaytime = 100
+8\name = Fort Mode
+8\fortsmode = false
+8\divteams = false
+8\solidland = false
+8\border = true
+8\lowgrav = false
+8\laser = false
+8\invulnerability = false
+8\resethealth = false
+8\vampiric = false
+8\karma = false
+8\artillery = false
+8\randomorder = true
+8\king = false
+8\placehog = false
+8\sharedammo = true
+8\disablegirders = true
+8\disablelandobjects = true
+8\aisurvival = false
+8\infattack = false
+8\resetweps = false
+8\perhogammo = false
+8\disablewind = false
+8\morewind = false
+8\tagteam = false
+8\bottomborder = false
+8\damagefactor = 100
+8\turntime = 30
+8\health = 100
+8\suddendeath = 15
+8\caseprobability = 5
+8\minestime = 3
+8\minesnum = 10
+8\minedudpct = 10
+8\explosives = 10
+8\healthprobability = 35
+8\healthcaseamount = 25
+8\waterrise = 47
+8\healthdecrease = 5
+8\ropepct = 100
+8\getawaytime = 100
+9\name = Timeless
+9\fortsmode = true
+9\divteams = true
+9\solidland = false
+9\border = false
+9\lowgrav = true
+9\laser = false
+9\invulnerability = false
+9\resethealth = false
+9\vampiric = false
+9\karma = false
+9\artillery = false
+9\randomorder = true
+9\king = false
+9\placehog = false
+9\sharedammo = false
+9\disablegirders = false
+9\disablelandobjects = false
+9\aisurvival = false
+9\infattack = false
+9\resetweps = false
+9\perhogammo = false
+9\disablewind = false
+9\morewind = false
+9\tagteam = false
+9\bottomborder = false
+9\damagefactor = 100
+9\turntime = 45
+9\health = 100
+9\suddendeath = 15
+9\caseprobability = 5
+9\minestime = 3
+9\minesnum = 0
+9\minedudpct = 0
+9\explosives = 0
+9\healthprobability = 35
+9\healthcaseamount = 25
+9\waterrise = 47
+9\healthdecrease = 5
+9\ropepct = 100
+9\getawaytime = 100
+10\name = Thinking with Portals
+10\fortsmode = false
+10\divteams = false
+10\solidland = false
+10\border = false
+10\lowgrav = false
+10\laser = false
+10\invulnerability = false
+10\resethealth = false
+10\vampiric = false
+10\karma = false
+10\artillery = false
+10\randomorder = true
+10\king = false
+10\placehog = false
+10\sharedammo = false
+10\disablegirders = false
+10\disablelandobjects = false
+10\aisurvival = false
+10\infattack = false
+10\resetweps = false
+10\perhogammo = true
+10\disablewind = false
+10\morewind = false
+10\tagteam = false
+10\bottomborder = false
+10\damagefactor = 100
+10\turntime = 9999
+10\health = 100
+10\suddendeath = 15
+10\caseprobability = 5
+10\minestime = 3
+10\minesnum = 5
+10\minedudpct = 10
+10\explosives = 2
+10\healthprobability = 35
+10\healthcaseamount = 30
+10\waterrise = 0
+10\healthdecrease = 0
+10\ropepct = 100
+10\getawaytime = 100
+11\name = King Mode
+11\fortsmode = false
+11\divteams = false
+11\solidland = false
+11\border = false
+11\lowgrav = false
+11\laser = false
+11\invulnerability = false
+11\resethealth = false
+11\vampiric = false
+11\karma = false
+11\artillery = true
+11\randomorder = true
+11\king = false
+11\placehog = false
+11\sharedammo = false
+11\disablegirders = false
+11\disablelandobjects = false
+11\aisurvival = false
+11\infattack = false
+11\resetweps = false
+11\perhogammo = false
+11\disablewind = false
+11\morewind = false
+11\tagteam = false
+11\bottomborder = false
+11\damagefactor = 100
+11\turntime = 45
+11\health = 100
+11\suddendeath = 15
+11\caseprobability = 2
+11\minestime = 3
+11\minesnum = 5
+11\minedudpct = 0
+11\explosives = 5
+11\healthprobability = 25
+11\healthcaseamount = 25
+11\waterrise = 47
+11\healthdecrease = 5
+11\ropepct = 100
+11\getawaytime = 100
+
+
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/team_one.hwt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/raw/team_one.hwt Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,74 @@
+[Team]
+Name=Team 1
+Grave=Bone
+Fort=Lego
+Voicepack=Classic
+Flag=hedgewars
+Difficulty=0
+Rounds=0
+Wins=0
+CampaignProgress=0
+
+[Hedgehog0]
+Name=Leonidas
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog1]
+Name=Pipo
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog2]
+Name=Sonic
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog3]
+Name=Xin
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog4]
+Name=Arnold
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog5]
+Name=Jack
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog6]
+Name=Tom
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog7]
+Name=Goldie
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/team_one.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/team_one.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-
-
- Team 1
- hedgewars
- Lego
- Bone
- Classic
- 0
-
- Leonidas
- NoHat
- 0
-
-
- Pipo
- NoHat
- 0
-
-
- Sonic
- NoHat
- 0
-
-
- Xin
- NoHat
- 0
-
-
- Arnold
- NoHat
- 0
-
-
- Jack
- NoHat
- 0
-
-
- Tom
- NoHat
- 0
-
-
- Goldie
- NoHat
- 0
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/team_two.hwt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/raw/team_two.hwt Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,74 @@
+[Team]
+Name=Team 2
+Grave=Bone
+Fort=Lego
+Voicepack=Classic
+Flag=cm_binary
+Difficulty=2
+Rounds=0
+Wins=0
+CampaignProgress=0
+
+[Hedgehog0]
+Name=Paris
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog1]
+Name=Knut
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog2]
+Name=Ash
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog3]
+Name=Woad
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog4]
+Name=Bob
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog5]
+Name=Corky
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog6]
+Name=Bea
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
+
+[Hedgehog7]
+Name=Silvia
+Hat=NoHat
+Rounds=0
+Kills=0
+Deaths=0
+Suicides=0
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/team_two.xml
--- a/project_files/Android-build/SDL-android-project/res/raw/team_two.xml Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-
-
- Team 2
- cm_binary
- Lego
- Bone
- Classic
- 0
-
- Paris
- NoHat
- 2
-
-
- Knut
- NoHat
- 2
-
-
- Ash
- NoHat
- 2
-
-
- Woad
- NoHat
- 2
-
-
- Bob
- NoHat
- 2
-
-
- Corky
- NoHat
- 2
-
-
- Bea
- NoHat
- 2
-
-
- Silvia
- NoHat
- 2
-
-
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapon_clean
--- a/project_files/Android-build/SDL-android-project/res/raw/weapon_clean Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-
-
- Clean
-
- 101000900001000001100000000000000000000000000000100000
-
-
- 040504054160065554655446477657666666615551010111541111
-
-
- 000000000000000000000000000000000000000000000000000000
-
-
- 131111031211111112311411111111111111121111110111111111
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapon_crazy
--- a/project_files/Android-build/SDL-android-project/res/raw/weapon_crazy Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-
-
- Crazy
-
- 999999999999999999299999999999999929999999990999999229
-
-
- 111111011111111111111111111111111111111111110111111111
-
-
- 000000000000000000000000000000000000000000000000000000
-
-
- 131111031211111112311411111111111111121111010111111111
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapon_default
--- a/project_files/Android-build/SDL-android-project/res/raw/weapon_default Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-
-
- Default
-
- 939192942219912103223511100120100000021111010101111991
-
-
- 040504054160065554655446477657666666615551010111541111
-
-
- 000000000000020550000004000700400000000022000000060000
-
-
- 131111031211111112311411111111111111121111110111111111
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapon_mines
--- a/project_files/Android-build/SDL-android-project/res/raw/weapon_mines Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-
-
- Mines
-
- 000000990009000000030000000000000000000000000000000000
-
-
- 000000000000000000000000000000000000000000000000000000
-
-
- 000000000000020550000004000700400000000020000000060000
-
-
- 111111111111111111111111111111111111111111110111111111
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapon_portals
--- a/project_files/Android-build/SDL-android-project/res/raw/weapon_portals Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-
-
- Portals
-
- 900000900200000000210000000000000011000009000000000000
-
-
- 040504054160065554655446477657666666615551010111541111
-
-
- 000000000000020550000004000700400000000020000000060000
-
-
- 131111031211111112311411111111111111121111110111111111
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapon_promode
--- a/project_files/Android-build/SDL-android-project/res/raw/weapon_promode Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-
-
- Pro Mode
-
- 909000900000000000000900000000000000000000000000000000
-
-
- 000000000000000000000000000000000000000000000000000000
-
-
- 000000000000020550000004000700400000000020000000000000
-
-
- 111111111111111111111111111111111111111110010111111111
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapon_shoppa
--- a/project_files/Android-build/SDL-android-project/res/raw/weapon_shoppa Sun Nov 04 23:56:27 2012 +0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-
-
- Shoppa
-
- 000000990000000000000000000000000000000000000000000000
-
-
- 444441004424440221011212122242200000000200040001001111
-
-
- 000000000000000000000000000000000000000000000000000000
-
-
- 111111111111111111111111111111111111111110110111111111
-
-
-
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/raw/weapons_builtin.ini
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/res/raw/weapons_builtin.ini Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,8 @@
+[General]
+%44efault=9391929422199121032235111001201000000211110101011111011040504054160065554655446477657666666615551010111541101100000000000002055000000400070040000000002200000006000001311110312111111123114111111111111111211111101111111010
+%43razy=9999999999999999992999999999999999299999999909999992099111111011111111111111111111111111111111111110111111101100000000000000000000000000000000000000000000000000000001311110312111111123114111111111111111211110101111111011
+%50ro%20%4dode=9090009000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002055000000400070040000000002000000000000001111111111111111111111111111111111111111100101111111011
+%53hoppa=0000009900000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111101101111111001
+%43lean%20%53late=1010009000010000011000000000000000000000000000001000000040504054160065554655446477657666666615551010111541101100000000000000000000000000000000000000000000000000000001311110312111111123114111111111111111211111101111111011
+%4dinefield=0000009900090000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002055000000400070040000000002000000006000001111111111111111111111111111111111111111111101111111011
+%54hinking%20with%20%50ortals=9000009002000000002100000000000000110000090000000000000040504054160065554655446477657666666615551010111541101100000000000002055000000400070040000000002000000006000001311110312111111123114111111111111111211111101111111011
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/values/frontend_data_pointers.xml
--- a/project_files/Android-build/SDL-android-project/res/values/frontend_data_pointers.xml Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/res/values/frontend_data_pointers.xml Mon Nov 05 00:32:41 2012 +0400
@@ -1,34 +1,11 @@
-
-
- @raw/basicflags
- @raw/scheme_default_scheme
- @raw/scheme_barrelmayhem
- @raw/scheme_cleanslate
- @raw/scheme_fortmode
- @raw/scheme_kingmode
- @raw/scheme_minefield
- @raw/scheme_promode
- @raw/scheme_shoppa
- @raw/scheme_thinkingwithportals
- @raw/scheme_timeless
- @raw/scheme_tunnelhogs
-
-
-
- @raw/weapon_default
- @raw/weapon_clean
- @raw/weapon_crazy
- @raw/weapon_mines
- @raw/weapon_portals
- @raw/weapon_promode
- @raw/weapon_shoppa
-
-
@raw/team_one@raw/team_two
-
+
+
+ Team 1.hwt
+ Team 2.hwt
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/res/values/strings.xml
--- a/project_files/Android-build/SDL-android-project/res/values/strings.xml Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/res/values/strings.xml Mon Nov 05 00:32:41 2012 +0400
@@ -1,20 +1,20 @@
+
Hedgewars
-
SelectEditDeleteSaved succesfully
-
+
Sorry! Could not find the SDCardThere\'s been an error when accessing the SDcard. Please check if there is an SDcard present in the device (internal or external) and if the SDcard is not mounted (via usb to your computer for example). Hedgewars for Android will now quit
-
+
- Downloading hedgewars files...
+ Downloading hedgewars files…Successfully downloaded:
-
+
Continue in backgroundCancel
@@ -22,28 +22,31 @@
Back to main menuTry againThe download has failed because of:
- Before starting the game we must download some extra files...
-
+ Before starting the game we must download some extra files…Are you sure you want to download this package?You\'ve already downloaded this package, are you sure you want to download it again?Download now!
-
This download has been queued
+
+
+ Local Game
+ Network Game
+ Downloader
+ Preferences
-
Style
- Game scheme
+ SchemeWeaponsMapFilter
- Themes
-
-
+
+
+ You need at least two teams.
+ You need at least two different team colors (clans).
+ No teams
+ New team
-
- Not enough teams
- Selected teams = %dNameUnnamed
@@ -52,7 +55,7 @@
FlagVoiceFort
-
+
HumanLevel 5
@@ -60,5 +63,131 @@
Level 3Level 2Level 1
+
+ Hedgewars Server Lobby
+ Room
+ User-defined Weaponsets
+ Weaponset Editor
+ User-defined Schemes
+ Scheme Editor
+ Type here to chat
+
+
+ Map
+ Name
+ Type
+ Type
+ Mission:
+ Edit drawn map
+
+ Generated map
+ Generated maze
+ Hand-drawn map
+ Map file
+
+
+ Random
+ Small
+ Medium
+ Large
+ Cavern
+ Wacky
+
+
+ Small tunnels
+ Medium tunnels
+ Large tunnels
+ Small floating islands
+ Medium floating islands
+ Large floating islands
+
+
+
+ No players
+
+
+ Add team
+ Team color
+ Hog count
+ No teams
+ Edit Teams
+
+
+ Room Name
+ C
+ T
+ Owner
+ Map
+ Rules
+ Weapons
+ No rooms
+
+ by %1$s
+ Map: %1$s
+ Scheme: %1$s
+ Random map
+ Random maze
+ Drawn map
+
+
+ %1$s has joined.
+ %1$s has left.
+ %1$s has left (%2$s).
+
+
+ Connect
+ Please select a username.
+ Username
+
+ Kick
+ Info (shown in chat)
+ Follow
+ Create room
+ Refresh
+ Disconnect
+ Rooms
+ Chat
+ Users
+
+ Sorry, not implemented yet. :(
+
+
+ Unable to connect to the server.
+ An unexpected error has occurred: %1$s
+ The server you tried to connect to is using an incompatible protocol.
+ Unable to authenticate for your username.
+ The connection to the server was lost.
+ Saving has failed.
+ Error: Either the sdcard is not available, or files are missing from the Data directory.
+ Error: This team uses assets which we do not have. Try downloading the big data package from the main menu.
+
+
+ Please wait
+ Connecting to the server…
+ Password required
+ The server has requested a password to connect as "%1$s".
+ Password
+ remember password
+ Room name
+ Create new room
+ Add team
+
+ Disconnected: %1$s
+ The room was closed because the owner left.
+ You were kicked from the room.
+
+
+ New Weaponset
+ No weaponsets
+ Edit Weaponsets
+
+ New Scheme
+
+
+ Map
+ Game
+ Teams
+ Chat
+ Users
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/BasicRoomState.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/BasicRoomState.java Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,161 @@
+/*
+ * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
+ * Copyright (C) 2012 Simeon Maxein
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.hedgewars.hedgeroid;
+
+import static org.hedgewars.hedgeroid.util.ObjectUtils.equal;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.hedgewars.hedgeroid.RoomStateManager;
+import org.hedgewars.hedgeroid.Datastructures.MapRecipe;
+import org.hedgewars.hedgeroid.Datastructures.Scheme;
+import org.hedgewars.hedgeroid.Datastructures.TeamInGame;
+import org.hedgewars.hedgeroid.Datastructures.Weaponset;
+
+/**
+ * Common base implementation for a roomstate that will call listeners on every
+ * change. The derived classes have to coordinate how state is changed to
+ * complete the implementation of the RoomStateManager interface.
+ *
+ * See {@link RoomStateManager} for a description of what this is for.
+ */
+public abstract class BasicRoomState implements RoomStateManager {
+ private final List observers = new LinkedList();
+
+ private boolean chief;
+ private String gameStyle;
+ private Scheme scheme;
+ private MapRecipe map;
+ private Weaponset weaponset;
+ private Map teams = Collections.emptyMap();
+
+ public final MapRecipe getMapRecipe() {
+ return map;
+ }
+
+ public final boolean getChiefStatus() {
+ return chief;
+ }
+
+ public final Scheme getScheme() {
+ return scheme;
+ }
+
+ public final String getGameStyle() {
+ return gameStyle;
+ }
+
+ public final Weaponset getWeaponset() {
+ return weaponset;
+ }
+
+ public final Map getTeams() {
+ return teams;
+ }
+
+ public final void setWeaponset(Weaponset weaponset) {
+ if(!equal(weaponset, this.weaponset)) {
+ this.weaponset = weaponset;
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onWeaponsetChanged(weaponset);
+ }
+ }
+ }
+
+ public final void setMapRecipe(MapRecipe map) {
+ if(!equal(map, this.map)) {
+ this.map = map;
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onMapChanged(map);
+ }
+ }
+ }
+
+ public final void setGameStyle(String gameStyle) {
+ if(!equal(gameStyle, this.gameStyle)) {
+ this.gameStyle = gameStyle;
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onGameStyleChanged(gameStyle);
+ }
+ }
+ }
+
+ public final void setScheme(Scheme scheme) {
+ if(!equal(scheme, this.scheme)) {
+ this.scheme = scheme;
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onSchemeChanged(scheme);
+ }
+ }
+ }
+
+ public final void setChief(boolean chief) {
+ if(chief != this.chief) {
+ this.chief = chief;
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onChiefStatusChanged(chief);
+ }
+ }
+ }
+
+ public final void putTeam(TeamInGame team) {
+ TeamInGame oldEntry = teams.get(team.team.name);
+ if(!equal(team, oldEntry)) {
+ Map changedMap = new TreeMap(teams);
+ changedMap.put(team.team.name, team);
+ teams = Collections.unmodifiableMap(changedMap);
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onTeamsChanged(teams);
+ }
+ }
+ }
+
+ public final void removeTeam(String teamname) {
+ if(teams.containsKey(teamname)) {
+ Map changedMap = new TreeMap(teams);
+ changedMap.remove(teamname);
+ teams = Collections.unmodifiableMap(changedMap);
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onTeamsChanged(teams);
+ }
+ }
+ }
+
+ public final void setTeams(Map newTeams) {
+ if(!newTeams.equals(teams)) {
+ teams = Collections.unmodifiableMap(new TreeMap(newTeams));
+ for(RoomStateManager.Listener observer : observers) {
+ observer.onTeamsChanged(teams);
+ }
+ }
+ }
+
+ public final void addListener(Listener observer) {
+ observers.add(observer);
+ }
+
+ public final void removeListener(Listener observer) {
+ observers.remove(observer);
+ }
+}
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ChatFragment.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ChatFragment.java Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,99 @@
+/*
+ * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
+ * Copyright (C) 2012 Simeon Maxein
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.hedgewars.hedgeroid;
+
+import org.hedgewars.hedgeroid.R;
+import org.hedgewars.hedgeroid.netplay.MessageLog;
+import org.hedgewars.hedgeroid.netplay.Netplay;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
+
+/**
+ * This fragment displays a chatlog and text input field for chatting in either
+ * the lobby or a room.
+ */
+public class ChatFragment extends Fragment {
+ private ChatlogAdapter adapter;
+ private Netplay netplay;
+ private MessageLog messageLog;
+ private boolean inRoom;
+
+ public void setInRoom(boolean inRoom) {
+ this.inRoom = inRoom;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ netplay = Netplay.getAppInstance(getActivity().getApplicationContext());
+ adapter = new ChatlogAdapter(getActivity());
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ messageLog = inRoom ? netplay.roomChatlog : netplay.lobbyChatlog;
+ adapter.setLog(messageLog.getLog());
+ messageLog.addListener(adapter);
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ messageLog.removeListener(adapter);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.fragment_chat, container, false);
+
+ ListView listView = (ListView) view.findViewById(R.id.chatConsole);
+ listView.setAdapter(adapter);
+ listView.setDivider(null);
+ listView.setDividerHeight(0);
+ listView.setVerticalFadingEdgeEnabled(true);
+
+ EditText editText = (EditText) view.findViewById(R.id.chatInput);
+ editText.setOnEditorActionListener(new ChatSendListener());
+
+ return view;
+ }
+
+ private final class ChatSendListener implements OnEditorActionListener {
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ String text = v.getText().toString();
+ if(text.length()>0) {
+ v.setText("");
+ netplay.sendChat(text);
+ }
+ return true;
+ }
+ }
+}
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ChatlogAdapter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ChatlogAdapter.java Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,121 @@
+/*
+ * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
+ * Copyright (C) 2012 Simeon Maxein
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.hedgewars.hedgeroid;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.hedgewars.hedgeroid.netplay.MessageLog;
+
+import android.content.Context;
+import android.text.method.LinkMovementMethod;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView.LayoutParams;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+/**
+ * Optimization: ListView is smart enough to try re-using the same view for an item
+ * with the same ID, but it still calls getView for those items when the list changes.
+ * Since lines with a given ID never change in our chatlog, we can avoid the effort
+ * of TextView.setText in many cases by checking if the view is already set up for the
+ * line with the right ID - but to do that, the view needs to remember the ID it's
+ * holding the text for. That's what the LoglineView does.
+ */
+class LoglineView extends TextView {
+ long chatlogId = -1;
+
+ public LoglineView(Context context) {
+ super(context);
+ }
+}
+
+/**
+ * For performance reasons, the chatlog is implemented as ListView instead of a
+ * single TextView (although I later learned that TextView might also have
+ * facilities for efficient appending with limited backlog... oh well, this
+ * works). Every chat line is a line in the ListView, and this adapter prepares
+ * the textviews from a messagelog in an efficient way.
+ */
+public class ChatlogAdapter extends BaseAdapter implements MessageLog.Listener {
+ long idOffset = 0;
+ private List log = new ArrayList();
+ private Context context;
+
+ public ChatlogAdapter(Context context) {
+ this.context = context;
+ }
+
+ public int getCount() {
+ return log.size();
+ }
+
+ public Object getItem(int position) {
+ return log.get(position);
+ }
+
+ public long getItemId(int position) {
+ return position+idOffset;
+ }
+
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ public void clear() {
+ idOffset += log.size();
+ log.clear();
+ notifyDataSetChanged();
+ }
+
+ public void lineAdded(CharSequence text) {
+ log.add(text);
+ notifyDataSetChanged();
+ }
+
+ public void lineRemoved() {
+ log.remove(0);
+ idOffset += 1;
+ notifyDataSetChanged();
+ }
+
+ public void setLog(Collection log) {
+ idOffset += log.size();
+ this.log = new ArrayList(log);
+ notifyDataSetChanged();
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ LoglineView v = (LoglineView)convertView;
+ if (v == null) {
+ v = new LoglineView(context);
+ v.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
+ v.setMovementMethod(LinkMovementMethod.getInstance());
+ }
+ long id = getItemId(position);
+ if(id != v.chatlogId) {
+ v.setText(log.get(position));
+ v.chatlogId = id;
+ }
+ return v;
+ }
+}
\ No newline at end of file
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ConnectingDialog.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ConnectingDialog.java Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,94 @@
+/*
+ * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
+ * Copyright (C) 2012 Simeon Maxein
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.hedgewars.hedgeroid;
+
+import org.hedgewars.hedgeroid.netplay.Netplay;
+import org.hedgewars.hedgeroid.netplay.Netplay.State;
+
+import android.app.Dialog;
+import android.app.ProgressDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
+import android.widget.Toast;
+
+/**
+ * Indeterminate progress dialog that is shown in the MainActivity while trying
+ * to connect to the server. If the connection fails (disconnect before we reach
+ * lobby state), an error toast with the disconnect message is shown.
+ *
+ */
+public class ConnectingDialog extends ConnectionDependendDialogFragment {
+ @Override
+ public void onStart() {
+ super.onStart();
+ LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).registerReceiver(connectedReceiver, new IntentFilter(Netplay.ACTION_CONNECTED));
+ LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).registerReceiver(disconnectedReceiver, new IntentFilter(Netplay.ACTION_DISCONNECTED));
+
+ if(Netplay.getAppInstance(getActivity().getApplicationContext()).getState() != State.CONNECTING) {
+ dismiss();
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).unregisterReceiver(connectedReceiver);
+ LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).unregisterReceiver(disconnectedReceiver);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ ProgressDialog dialog = new ProgressDialog(getActivity());
+ dialog.setIndeterminate(true);
+ dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ dialog.setTitle(R.string.dialog_connecting_title);
+ dialog.setMessage(getString(R.string.dialog_connecting_message));
+ return dialog;
+ }
+
+ private BroadcastReceiver connectedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Dialog dialog = getDialog();
+ if(dialog != null) {
+ dialog.dismiss();
+ } else {
+ dismiss();
+ }
+ }
+ };
+
+ private BroadcastReceiver disconnectedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Toast.makeText(getActivity(), intent.getExtras().getString(Netplay.EXTRA_MESSAGE), Toast.LENGTH_LONG).show();
+ }
+ };
+
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
+ Netplay.getAppInstance(getActivity().getApplicationContext()).disconnect();
+ };
+}
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ConnectionDependendDialogFragment.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/ConnectionDependendDialogFragment.java Mon Nov 05 00:32:41 2012 +0400
@@ -0,0 +1,65 @@
+/*
+ * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
+ * Copyright (C) 2012 Simeon Maxein
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.hedgewars.hedgeroid;
+
+import org.hedgewars.hedgeroid.netplay.Netplay;
+import org.hedgewars.hedgeroid.netplay.Netplay.State;
+
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.content.LocalBroadcastManager;
+
+/**
+ * Helper class for DialogFragments that are supposed to be dismissed when the
+ * network connection is lost. This is used for some dialog fragments that
+ * appear during connecting (e.g. username input)
+ */
+public class ConnectionDependendDialogFragment extends DialogFragment {
+ @Override
+ public void onStart() {
+ super.onStart();
+ LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).registerReceiver(dismissReceiver, new IntentFilter(Netplay.ACTION_DISCONNECTED));
+ if(Netplay.getAppInstance(getActivity().getApplicationContext()).getState() == State.NOT_CONNECTED) {
+ dismiss();
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).unregisterReceiver(dismissReceiver);
+ }
+
+ private BroadcastReceiver dismissReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Dialog dialog = getDialog();
+ if(dialog != null) {
+ dialog.dismiss();
+ } else {
+ dismiss();
+ }
+ }
+ };
+}
diff -r 5a27ed7f17b7 -r c64c0b413ff7 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/FrontendDataUtils.java
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/FrontendDataUtils.java Sun Nov 04 23:56:27 2012 +0400
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/FrontendDataUtils.java Mon Nov 05 00:32:41 2012 +0400
@@ -1,10 +1,12 @@
/*
* Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
* Copyright (c) 2011-2012 Richard Deurwaarder
+ * Copyright (C) 2012 Simeon Maxein
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -13,95 +15,89 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-
package org.hedgewars.hedgeroid.Datastructures;
import java.io.File;
+import java.io.FileNotFoundException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.hedgewars.hedgeroid.R;
-import org.hedgewars.hedgeroid.Utils;
-import org.hedgewars.hedgeroid.Datastructures.Map.MapType;
+import org.hedgewars.hedgeroid.util.FileUtils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import java.nio.ByteBuffer;
public class FrontendDataUtils {
-
- public static ArrayList