From 6d93c744add4c06b85cf6c6d7e6317536a5c8ec1 Mon Sep 17 00:00:00 2001 From: Stephen Sweeney Date: Mon, 8 Mar 2010 08:29:27 +0000 Subject: [PATCH] 1.17 Medal Support --- gfx/main/CircuitBoard.jpg | Bin gfx/main/alienDevice.png | Bin gfx/main/areaClear.png | Bin gfx/main/areaClearBackGround.jpg | Bin gfx/main/areaPerfect.png | Bin gfx/main/cheats.png | Bin gfx/main/creditsBack.png | Bin gfx/main/creditsDevice.png | Bin gfx/main/cursor1.png | Bin gfx/main/cursor2.png | Bin gfx/main/cursor3.png | Bin gfx/main/cursor4.png | Bin gfx/main/cursor5.png | Bin gfx/main/cursor6.png | Bin gfx/main/gameover.png | Bin 18760 -> 47772 bytes gfx/main/hubArrowLeft.png | Bin gfx/main/hubArrowLeft2.png | Bin gfx/main/hubArrowRight.png | Bin gfx/main/hubArrowRight2.png | Bin gfx/main/hubIcon1.png | Bin gfx/main/hubIcon2.png | Bin gfx/main/hubIcon3.png | Bin gfx/main/hubIcon4.png | Bin gfx/main/hubIcon5.png | Bin gfx/main/hubIcon6.png | Bin gfx/main/joystickConfig.png | Bin gfx/main/keyConfig.png | Bin gfx/main/licensePic.png | Bin gfx/main/mapBackground.png | Bin gfx/main/options.png | Bin gfx/main/optionsBackground.png | Bin gfx/main/prlogo.gif | Bin gfx/main/title.png | Bin gfx/main/worldMap.jpg | Bin locale/ca.mo | Bin 23651 -> 24711 bytes locale/nl.mo | Bin 23088 -> 24048 bytes makefile | 13 +- makefile.windows | 10 +- src/CAudio.cpp | 0 src/CAudio.h | 0 src/CBoss.cpp | 0 src/CBoss.h | 0 src/CCollision.cpp | 0 src/CCollision.h | 0 src/CConfig.cpp | 385 +++++++++++++++---------------- src/CConfig.h | 60 ++--- src/CCutscene.cpp | 0 src/CCutscene.h | 0 src/CData.cpp | 0 src/CData.h | 0 src/CEffect.cpp | 0 src/CEffect.h | 0 src/CEngine.cpp | 5 + src/CEngine.h | 0 src/CEntity.cpp | 0 src/CEntity.h | 0 src/CFileData.cpp | 0 src/CFileData.h | 0 src/CGame.cpp | 0 src/CGame.h | 0 src/CGameData.cpp | 0 src/CGameData.h | 0 src/CGameObject.cpp | 0 src/CGameObject.h | 0 src/CGraphics.cpp | 94 +++++++- src/CGraphics.h | 8 + src/CHashtable.cpp | 0 src/CHashtable.h | 0 src/CHub.cpp | 0 src/CHub.h | 0 src/CJoystick.cpp | 0 src/CJoystick.h | 0 src/CKeyboard.cpp | 0 src/CKeyboard.h | 0 src/CLineDef.cpp | 0 src/CLineDef.h | 0 src/CList.cpp | 0 src/CList.h | 0 src/CMap.cpp | 0 src/CMap.h | 0 src/CMath.cpp | 0 src/CMath.h | 0 src/CObjective.cpp | 0 src/CObjective.h | 0 src/CPak.cpp | 0 src/CPak.h | 0 src/CParticle.cpp | 0 src/CParticle.h | 0 src/CPersistData.cpp | 0 src/CPersistData.h | 0 src/CPersistant.cpp | 0 src/CPersistant.h | 0 src/CRadarBlip.cpp | 0 src/CRadarBlip.h | 0 src/CReference.cpp | 0 src/CReference.h | 0 src/CReplayData.cpp | 0 src/CReplayData.h | 0 src/CReplayDataHeader.h | 0 src/CSpawnPoint.cpp | 0 src/CSpawnPoint.h | 0 src/CSprite.cpp | 0 src/CSprite.h | 0 src/CString.cpp | 0 src/CString.h | 0 src/CSwitch.cpp | 0 src/CSwitch.h | 0 src/CTeleporter.cpp | 0 src/CTeleporter.h | 0 src/CTrain.cpp | 0 src/CTrain.h | 0 src/CTrap.cpp | 0 src/CTrap.h | 0 src/CWeapon.cpp | 0 src/CWeapon.h | 0 src/CWidget.cpp | 0 src/CWidget.h | 0 src/aquaBoss.cpp | 0 src/aquaBoss.h | 0 src/bosses.cpp | 0 src/bosses.h | 0 src/bullets.cpp | 5 + src/bullets.h | 1 + src/cutscene.cpp | 0 src/cutscene.h | 0 src/defines.h | 0 src/defs.h | 12 +- src/droidBoss.cpp | 0 src/droidBoss.h | 0 src/effects.cpp | 0 src/effects.h | 0 src/enemies.cpp | 21 +- src/enemies.h | 2 + src/entities.cpp | 0 src/entities.h | 0 src/explosions.cpp | 2 +- src/explosions.h | 1 + src/finalBattle.cpp | 1 + src/finalBattle.h | 1 + src/galdov.cpp | 0 src/galdov.h | 0 src/game.cpp | 10 +- src/game.h | 2 + src/graphics.cpp | 0 src/graphics.h | 0 src/headers.h | 2 + src/hub.cpp | 30 ++- src/hub.h | 1 + src/info.cpp | 2 + src/info.h | 0 src/init.cpp | 72 +++++- src/init.h | 2 + src/intro.cpp | 0 src/intro.h | 0 src/items.cpp | 7 +- src/items.h | 2 + src/lineDefs.cpp | 2 +- src/lineDefs.h | 0 src/loadSave.cpp | 1 + src/loadSave.h | 0 src/main.cpp | 4 +- src/main.h | 3 + src/map.cpp | 2 +- src/map.h | 0 src/mapData.cpp | 3 +- src/mapData.h | 0 src/mapEditor.cpp | 9 +- src/mapEditor.h | 0 src/mias.cpp | 18 ++ src/mias.h | 1 + src/mission.cpp | 11 + src/mission.h | 1 + src/objectives.cpp | 2 + src/objectives.h | 2 + src/obstacles.cpp | 0 src/obstacles.h | 0 src/options.cpp | 0 src/options.h | 0 src/pak.cpp | 0 src/pak.h | 0 src/particles.cpp | 0 src/particles.h | 0 src/player.cpp | 79 ++++++- src/player.h | 2 + src/resources.cpp | 3 +- src/resources.h | 0 src/spawnPoints.cpp | 0 src/spawnPoints.h | 0 src/switches.cpp | 0 src/switches.h | 0 src/tankBoss.cpp | 0 src/tankBoss.h | 0 src/teleporters.cpp | 0 src/teleporters.h | 0 src/title.cpp | 0 src/title.h | 0 src/trains.cpp | 0 src/trains.h | 0 src/traps.cpp | 0 src/traps.h | 0 src/triggers.cpp | 0 src/triggers.h | 0 src/weapons.cpp | 0 src/weapons.h | 0 src/widgets.cpp | 0 src/widgets.h | 0 206 files changed, 616 insertions(+), 278 deletions(-) mode change 100644 => 100755 gfx/main/CircuitBoard.jpg mode change 100644 => 100755 gfx/main/alienDevice.png mode change 100644 => 100755 gfx/main/areaClear.png mode change 100644 => 100755 gfx/main/areaClearBackGround.jpg mode change 100644 => 100755 gfx/main/areaPerfect.png mode change 100644 => 100755 gfx/main/cheats.png mode change 100644 => 100755 gfx/main/creditsBack.png mode change 100644 => 100755 gfx/main/creditsDevice.png mode change 100644 => 100755 gfx/main/cursor1.png mode change 100644 => 100755 gfx/main/cursor2.png mode change 100644 => 100755 gfx/main/cursor3.png mode change 100644 => 100755 gfx/main/cursor4.png mode change 100644 => 100755 gfx/main/cursor5.png mode change 100644 => 100755 gfx/main/cursor6.png mode change 100644 => 100755 gfx/main/gameover.png mode change 100644 => 100755 gfx/main/hubArrowLeft.png mode change 100644 => 100755 gfx/main/hubArrowLeft2.png mode change 100644 => 100755 gfx/main/hubArrowRight.png mode change 100644 => 100755 gfx/main/hubArrowRight2.png mode change 100644 => 100755 gfx/main/hubIcon1.png mode change 100644 => 100755 gfx/main/hubIcon2.png mode change 100644 => 100755 gfx/main/hubIcon3.png mode change 100644 => 100755 gfx/main/hubIcon4.png mode change 100644 => 100755 gfx/main/hubIcon5.png mode change 100644 => 100755 gfx/main/hubIcon6.png mode change 100644 => 100755 gfx/main/joystickConfig.png mode change 100644 => 100755 gfx/main/keyConfig.png mode change 100644 => 100755 gfx/main/licensePic.png mode change 100644 => 100755 gfx/main/mapBackground.png mode change 100644 => 100755 gfx/main/options.png mode change 100644 => 100755 gfx/main/optionsBackground.png mode change 100644 => 100755 gfx/main/prlogo.gif mode change 100644 => 100755 gfx/main/title.png mode change 100644 => 100755 gfx/main/worldMap.jpg mode change 100644 => 100755 makefile mode change 100644 => 100755 makefile.windows mode change 100644 => 100755 src/CAudio.cpp mode change 100644 => 100755 src/CAudio.h mode change 100644 => 100755 src/CBoss.cpp mode change 100644 => 100755 src/CBoss.h mode change 100644 => 100755 src/CCollision.cpp mode change 100644 => 100755 src/CCollision.h mode change 100644 => 100755 src/CConfig.cpp mode change 100644 => 100755 src/CConfig.h mode change 100644 => 100755 src/CCutscene.cpp mode change 100644 => 100755 src/CCutscene.h mode change 100644 => 100755 src/CData.cpp mode change 100644 => 100755 src/CData.h mode change 100644 => 100755 src/CEffect.cpp mode change 100644 => 100755 src/CEffect.h mode change 100644 => 100755 src/CEngine.cpp mode change 100644 => 100755 src/CEngine.h mode change 100644 => 100755 src/CEntity.cpp mode change 100644 => 100755 src/CEntity.h mode change 100644 => 100755 src/CFileData.cpp mode change 100644 => 100755 src/CFileData.h mode change 100644 => 100755 src/CGame.cpp mode change 100644 => 100755 src/CGame.h mode change 100644 => 100755 src/CGameData.cpp mode change 100644 => 100755 src/CGameData.h mode change 100644 => 100755 src/CGameObject.cpp mode change 100644 => 100755 src/CGameObject.h mode change 100644 => 100755 src/CGraphics.cpp mode change 100644 => 100755 src/CGraphics.h mode change 100644 => 100755 src/CHashtable.cpp mode change 100644 => 100755 src/CHashtable.h mode change 100644 => 100755 src/CHub.cpp mode change 100644 => 100755 src/CHub.h mode change 100644 => 100755 src/CJoystick.cpp mode change 100644 => 100755 src/CJoystick.h mode change 100644 => 100755 src/CKeyboard.cpp mode change 100644 => 100755 src/CKeyboard.h mode change 100644 => 100755 src/CLineDef.cpp mode change 100644 => 100755 src/CLineDef.h mode change 100644 => 100755 src/CList.cpp mode change 100644 => 100755 src/CList.h mode change 100644 => 100755 src/CMap.cpp mode change 100644 => 100755 src/CMap.h mode change 100644 => 100755 src/CMath.cpp mode change 100644 => 100755 src/CMath.h mode change 100644 => 100755 src/CObjective.cpp mode change 100644 => 100755 src/CObjective.h mode change 100644 => 100755 src/CPak.cpp mode change 100644 => 100755 src/CPak.h mode change 100644 => 100755 src/CParticle.cpp mode change 100644 => 100755 src/CParticle.h mode change 100644 => 100755 src/CPersistData.cpp mode change 100644 => 100755 src/CPersistData.h mode change 100644 => 100755 src/CPersistant.cpp mode change 100644 => 100755 src/CPersistant.h mode change 100644 => 100755 src/CRadarBlip.cpp mode change 100644 => 100755 src/CRadarBlip.h mode change 100644 => 100755 src/CReference.cpp mode change 100644 => 100755 src/CReference.h mode change 100644 => 100755 src/CReplayData.cpp mode change 100644 => 100755 src/CReplayData.h mode change 100644 => 100755 src/CReplayDataHeader.h mode change 100644 => 100755 src/CSpawnPoint.cpp mode change 100644 => 100755 src/CSpawnPoint.h mode change 100644 => 100755 src/CSprite.cpp mode change 100644 => 100755 src/CSprite.h mode change 100644 => 100755 src/CString.cpp mode change 100644 => 100755 src/CString.h mode change 100644 => 100755 src/CSwitch.cpp mode change 100644 => 100755 src/CSwitch.h mode change 100644 => 100755 src/CTeleporter.cpp mode change 100644 => 100755 src/CTeleporter.h mode change 100644 => 100755 src/CTrain.cpp mode change 100644 => 100755 src/CTrain.h mode change 100644 => 100755 src/CTrap.cpp mode change 100644 => 100755 src/CTrap.h mode change 100644 => 100755 src/CWeapon.cpp mode change 100644 => 100755 src/CWeapon.h mode change 100644 => 100755 src/CWidget.cpp mode change 100644 => 100755 src/CWidget.h mode change 100644 => 100755 src/aquaBoss.cpp mode change 100644 => 100755 src/aquaBoss.h mode change 100644 => 100755 src/bosses.cpp mode change 100644 => 100755 src/bosses.h mode change 100644 => 100755 src/bullets.cpp mode change 100644 => 100755 src/bullets.h mode change 100644 => 100755 src/cutscene.cpp mode change 100644 => 100755 src/cutscene.h mode change 100644 => 100755 src/defines.h mode change 100644 => 100755 src/defs.h mode change 100644 => 100755 src/droidBoss.cpp mode change 100644 => 100755 src/droidBoss.h mode change 100644 => 100755 src/effects.cpp mode change 100644 => 100755 src/effects.h mode change 100644 => 100755 src/enemies.cpp mode change 100644 => 100755 src/enemies.h mode change 100644 => 100755 src/entities.cpp mode change 100644 => 100755 src/entities.h mode change 100644 => 100755 src/explosions.cpp mode change 100644 => 100755 src/explosions.h mode change 100644 => 100755 src/finalBattle.cpp mode change 100644 => 100755 src/finalBattle.h mode change 100644 => 100755 src/galdov.cpp mode change 100644 => 100755 src/galdov.h mode change 100644 => 100755 src/game.cpp mode change 100644 => 100755 src/game.h mode change 100644 => 100755 src/graphics.cpp mode change 100644 => 100755 src/graphics.h mode change 100644 => 100755 src/headers.h mode change 100644 => 100755 src/hub.cpp mode change 100644 => 100755 src/hub.h mode change 100644 => 100755 src/info.cpp mode change 100644 => 100755 src/info.h mode change 100644 => 100755 src/init.cpp mode change 100644 => 100755 src/init.h mode change 100644 => 100755 src/intro.cpp mode change 100644 => 100755 src/intro.h mode change 100644 => 100755 src/items.cpp mode change 100644 => 100755 src/items.h mode change 100644 => 100755 src/lineDefs.cpp mode change 100644 => 100755 src/lineDefs.h mode change 100644 => 100755 src/loadSave.cpp mode change 100644 => 100755 src/loadSave.h mode change 100644 => 100755 src/main.cpp mode change 100644 => 100755 src/main.h mode change 100644 => 100755 src/map.cpp mode change 100644 => 100755 src/map.h mode change 100644 => 100755 src/mapData.cpp mode change 100644 => 100755 src/mapData.h mode change 100644 => 100755 src/mapEditor.cpp mode change 100644 => 100755 src/mapEditor.h mode change 100644 => 100755 src/mias.cpp mode change 100644 => 100755 src/mias.h mode change 100644 => 100755 src/mission.cpp mode change 100644 => 100755 src/mission.h mode change 100644 => 100755 src/objectives.cpp mode change 100644 => 100755 src/objectives.h mode change 100644 => 100755 src/obstacles.cpp mode change 100644 => 100755 src/obstacles.h mode change 100644 => 100755 src/options.cpp mode change 100644 => 100755 src/options.h mode change 100644 => 100755 src/pak.cpp mode change 100644 => 100755 src/pak.h mode change 100644 => 100755 src/particles.cpp mode change 100644 => 100755 src/particles.h mode change 100644 => 100755 src/player.cpp mode change 100644 => 100755 src/player.h mode change 100644 => 100755 src/resources.cpp mode change 100644 => 100755 src/resources.h mode change 100644 => 100755 src/spawnPoints.cpp mode change 100644 => 100755 src/spawnPoints.h mode change 100644 => 100755 src/switches.cpp mode change 100644 => 100755 src/switches.h mode change 100644 => 100755 src/tankBoss.cpp mode change 100644 => 100755 src/tankBoss.h mode change 100644 => 100755 src/teleporters.cpp mode change 100644 => 100755 src/teleporters.h mode change 100644 => 100755 src/title.cpp mode change 100644 => 100755 src/title.h mode change 100644 => 100755 src/trains.cpp mode change 100644 => 100755 src/trains.h mode change 100644 => 100755 src/traps.cpp mode change 100644 => 100755 src/traps.h mode change 100644 => 100755 src/triggers.cpp mode change 100644 => 100755 src/triggers.h mode change 100644 => 100755 src/weapons.cpp mode change 100644 => 100755 src/weapons.h mode change 100644 => 100755 src/widgets.cpp mode change 100644 => 100755 src/widgets.h diff --git a/gfx/main/CircuitBoard.jpg b/gfx/main/CircuitBoard.jpg old mode 100644 new mode 100755 diff --git a/gfx/main/alienDevice.png b/gfx/main/alienDevice.png old mode 100644 new mode 100755 diff --git a/gfx/main/areaClear.png b/gfx/main/areaClear.png old mode 100644 new mode 100755 diff --git a/gfx/main/areaClearBackGround.jpg b/gfx/main/areaClearBackGround.jpg old mode 100644 new mode 100755 diff --git a/gfx/main/areaPerfect.png b/gfx/main/areaPerfect.png old mode 100644 new mode 100755 diff --git a/gfx/main/cheats.png b/gfx/main/cheats.png old mode 100644 new mode 100755 diff --git a/gfx/main/creditsBack.png b/gfx/main/creditsBack.png old mode 100644 new mode 100755 diff --git a/gfx/main/creditsDevice.png b/gfx/main/creditsDevice.png old mode 100644 new mode 100755 diff --git a/gfx/main/cursor1.png b/gfx/main/cursor1.png old mode 100644 new mode 100755 diff --git a/gfx/main/cursor2.png b/gfx/main/cursor2.png old mode 100644 new mode 100755 diff --git a/gfx/main/cursor3.png b/gfx/main/cursor3.png old mode 100644 new mode 100755 diff --git a/gfx/main/cursor4.png b/gfx/main/cursor4.png old mode 100644 new mode 100755 diff --git a/gfx/main/cursor5.png b/gfx/main/cursor5.png old mode 100644 new mode 100755 diff --git a/gfx/main/cursor6.png b/gfx/main/cursor6.png old mode 100644 new mode 100755 diff --git a/gfx/main/gameover.png b/gfx/main/gameover.png old mode 100644 new mode 100755 index 3001db7fd31481404102ff0d1131ea47f8ecadc6..c08c5963037fbea906545275d28d83b9cdd1453f GIT binary patch literal 47772 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

WBz)RHvfr)$DYw=@s_* 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 Ef?^o@X#fBK literal 18760 zcmV)UK(N1wP)-HUk4T z7#Al37%dkUHUbSRE(0|u12;A&1Oz7o7bX`2E*2O!1O+w%7B&|GC<7=b12!)fE;j=w zHv~5(Cj%`m7AQ6YHYWl$Hv%jyECd8c1q4?O5KIOOX$db*0x)SU1yDEvMKJ?sE;33j zFl_}#1Oi7F1XlwKP!||S0vJ{S0!SwVM>h&kD*;wG32Y1lcLWz^0R?X^CPxD&RslCg z12Rn(H&+8KODia40XJp=Fmnbka4if;O#)a)0#{ZAOl|~NWd&WmcW;Xz9H84m5Mn?ixP8CX414dT@R!{$12K>-FRlYIt0@DKPy&x}39(QEuWT)uSP;qy9?d5&$pZ+>WKWI+OpGf}uLDx4 zEpCwpcZLCPkuGno25+q_U!Gb~%L7~29B$47apneP!&n81j0dukBdDM&v&$9Ln>WnJ zTcDm?tjbQrq>2g&js-7|F$I+_Ew2X*s{$^mF#?bUPmBg^oiJLi0#K|4aE(s`j8iO+ zZv&laFse`lt#1RGWL?e?C&mL$%mQ%NA7jH#0myI!%2jWj7n-dFik)Mf%mR+m7o^Wu zjK)C3$6v>WmjRNF1C5U=jj#omr2w0tEv%6OudM^7wE?ZIE}WiRjm-v|&@PSV2eQlt zvFHPv&Q{5h1Iw@j)u0u`pj6Aw0^ijV&gKKh&Qg+(lgNp%dj|h700001VoOIv0Eh)0 zNB{r;32;bRa{vGfhX4QzhXIp7hf@Fm00(qQO+^RS1PBrY8v<~1?f?KF07*naRCwC$ zy$M{CSN1<_LP$agBq0lAhd@>cAwa{vud;+iMH3Pr37hO9i+~Ui5RgTyZLI-g)Yeub zf>f)WIvp#Zb*UJ|wll4@GxGyMK(Sb9ZKv=1fE%<5%x~Ix`~Sb*&&T_TJjuP!J@?%6 zJ>PTBbDw3)UY3{TWqDa%mOpMWdMSdJM5@I5jmn+7=4=t+{z%c(kjnZKxIt|J~NC zVR}>>DN3~tiPDcx=-Gd4gaY7Uc)D@4>4Btq+|blo!-YeCM^%{-1{lm~x;B3M>T6X( z|2;>qPIqI0dw?@JiA?Ap$;z}0HPa=Hi8UNafxNmgBY$9gs40{Fd#oui+c1!yi=YXm zW#(j8`M|@GX67GPX~1MIC*#Y0No#L!F}-!*T>n@r=XYE6P9KR4oqu4U6aO%xVWu@UWHeT%HPbj5>N*KAqkD8{czkNKj`bY!0&_(V9m`h8zE=mIhiqJU%{nt(wM>lT|5n2`6Wuj{Uo=b*4HT z4kd@Sjotb3%TZ46wOSuq1v-z)mHhemq34UOz2IyMj#o{fb=7U3SlQ=5yBR3x*|T55x}GosPdwO!-m zwQ%@kE;V`DWh0Bb0do0*j)f&SY{58-5-|8n~Ka~Jx# z%a&D6Mcdj}oS%l*{PghX)muOQczZyZQz51aRTl*`VNtm&rS$7B2Jf6b*PBTGuLueb zS$H&({(5>%GCQfVIfX9Es7as%rr(W3~+% zQen(OV=0bWj8;;}&S<5iwz;jf21~B#?(PBs06gs~*IFtJ{)BsNHzh*F@ zl|WRsv_ep_ba*=RMYjfLGO5}9Up^Q&WRjOo0--gd4}bc8aLkZY^|$jtublgbolDF< z8)QPON8dZV%`pAm_0Q7E0eC{^3T7$-&&4vgVC?SIFMoWvmGXNy;*ZA%CDJ)8951~g zox-D%;R~otS4xP2)qt##PyuA3vomRxWO}7_cx9tud_-U0QWyMur2}Kbw~dcc!cr_` z)S=1EFVq=w%h4<8R6BGEf@+Ob6-uqKh5Vd`(WZ>dx=N0^ZKy}zJv!Re)y4krdAHSS zE_9Bm;BZr0$A;Uu;K%wzA9!F;RFtT!txKGfB@f46JW0&TjNaD%!LbK}e|s?4uu#ws zxCDa3nRJf2<<|7~(}y>?rdg}Uu1RJZd3e;d)c%t(Kmg28z-NKr)_vA1M_N`mB$-*2 zI;fC@QlT7)D~ZV)xO?}t-hAeNFmw`)MwKQjlZhmtK%vl?e?$_INlaE{7bNB7WHr@f zXJKBrAxL$}95n%xz2Zav4M$s?wZj*)-Oz<}l%Ku3<=8-3G9! zw(jxaY7P?&UflA+L&HO{@WqVhLcWS&xVdKbZlPojho0ClJlKD}cksbr;*%k8M}O>+ z6w;Cb43+dx*SyeNNb;{;%g5apN{_|fx z96#4r4j_&yx9P_%Gd;o|-ix<$I(we;s8L#W{;iF@@(TizOHR4K8bBs7)ghqC{WO;enNlEgYtjr9#T#}KIl~rJ9lxGdJHb@hz z>uRJ#dT6yml3{2~e1V9mpXX=M8%j7?sWoy=VrH|Fla!j7OqJ0yrDR!XEtT3ZG@-9b z{S}IWq1diNQ>W%~xuKzKCiAHS0fJ+h;VnHqT|+~4*kxokyS`^~a-g&YECROmYPyZEpxB^#F}kr;NE_P>&9~&(2NCKzV7Vz_pX$qa|ApWbdD2GNKgt` zrRW?2z@t>IVG3UFgCB379~@FY5)bej5QqzS5ldiHBxzwuZcYl3Mp7#23`I^J&sC8n zVKEpo373ScB(aIiRAeX>#zlrF<1?v-j2DZiS#)S5h5KDAa!X|S%9&;fX&G80p3 zsLTwz5GpehSwEDX!Thz#Fee67)^sFGWk*Ni!;cPdo@WtSuMO8(ODZaI>?q~MfO%Ef zP?6a5%>z$RpmBPXk^-YzLnxT0;fawNIPjCv@rjY{q0wyT48y(DRs%zl5tryCZTeGthO?VZK7avSK5<=Qf(Q%Ha&(3tt z-E-#S)6s&Jj<2sZ@pEyKnpl-OD$G1w92C}sQWvQSu0p6t3G`nBsMUe(`AuOs7@3X7 zUHN|9Pm7xwk}9`ERi2Yaqa{m~BwJNZIgMl^Ei*^jB}zF&RhFDeQpvK@$%RQd6iG=| zcK!=g22A_3uOO?ME^QhJq095L8tKaXtZJ$}BRhjAP0Ch>R(4I@@2Yy9a|#|FRh7u{ zaMsQeIgZkBHXHiOFF`X5V@(oHGRoGOtTd)NQDiiB!U)w*)&ol(+^I80*fdQ>ERJEE z{J{r6E9bM*sED05&|sx%l@Y$z}8P+ zQ%eY>kcX|$ms{fCgDuG=R5_EDE6ZWfO60jP+hS!o%&w&DVpcir};sXXsO zM(dU=+pV;)?q&kfhI8%5v1_AIV!HU&_l=L$`u^UXgpXdME(6=0y?$yVpSM22+|jjS z)l9XL;h@MBlN=P~v1Y>bT!2R@@~kNQi(g;A`_*3oj5>R+|IY2t`Y-=@c+p&-lrky| z@al7uiNz2lg<1@k7vc-yax=0sT*{!7Q{*&y3Q^9gE~93#YRb9gy&2CRIW@aC4=YQp zR7ta>W#w#HYIQj_E3>8?D@&|aaq<+kTLuPO*x=`)TH|CjkN?* zi&;`Sy&NKEP)i_6nzRI7W@lGU&MmGoTm!63ZAfwThRQKb9{ez9{Oz9vdiEN~}Xm7(ho-+_^FC{O>Uf47G5k%9d(PRwYx7u*oS@ zYi4nY1j!EH+Mo8cmF|b#98u(AP- zRkViw^8x?ED9V*>otq_k0ro$Lr;G%tX&@=}^jGtsPr-?Hn1P1Y=XT?<767`>cBhn(pp^ z;ZA*gU=t$N#ZijzS?`#H^eJ_`u;tdJzn)wB$_*!l830ri6F*0%Br_iuM+MTy<@L4p zE8f`2v)}LdO1{m##mo$}@UpVpD8;#~+>TbP%wbpqhLHw*%1tJvq$+Kt#j-pqF*z}t z#VE?kuA(Gg{`9%HM9TXl+m4u=k<*}7x^v+0pzr{ld8<^oTX(rYa6;0%?%&O06&cl>+cMx zWdxF4N-WNk|*G|Lw#3$2FUHjAD%b#MEON4(@&!W{U0jwr*i^1+JT( z-fC)VW8-XUEwn2(MVi?Zni?U^Y)z5Qg(@SGu&|hK!yB0XX?(bKWN(taZHfTuaQn+S zVj>Su)d%pF1ix)~dZNB4qb}LUS%_0v*a{^|CRHU}*MH<3Pd{ycWfa zBk$kd6G<%n`o>O|S0bu|D66BYR!Cl{Pmd+K)+NOg9oLp8*g7gIRz;rbj=pn%u!t*D z^0lpsK`VnOCG>JIpyg$7xs+Z8xWbf+IT9GP43Z<|$>jH05${ zL$z9kl_hnjE1|@^&yx}XWWvkRnsc$T>c%qZxq-$PFJ|!gm`p{^p;YIhOor1aj6$f2!YedRCWHkyH9a%81>4VYr`Io0Nnb}i!VCfwV;s!vAgb1H`5R%&PIg@M4?fk3DU+S z1p!pHre=jk$w*oux)2fE^WZ^OI2K;7d$kaqEZ_;ZeAzlj5jn$?f{{)Z81!q|K_D1h zaL>tG>1-;2=xn8;&`SkMI=#eLnbb9ypYh1`gC|`ZMo`KjDoSGWIcaxO8Ctb&ax-~$ z5I~#I=AO34tDx%0fjwxb{*>c-v{JlWh|b;d_O9#EZ!F*U%GUR8ziKXxJGJZj52sJ> zx_ONa$CTOR$9X< z)=O=f#f9Y;dM{k;%PFd;xR9Ow>8E`PR&JTZHuJ(axzB3_R&irP7}6`3l0h5Dpuv{W zK0P-8t1DA9+C~-w@Kjg9$UFa_`h^)k&}lSvQf&L8};%DH5{R60B;uj>gbaZaXmKlr{MkS>TB za&&NTdaC~E77J+jVK{5#+p2{f->wrK8|>|j5Y9q7Bx1dNiZ#LxVT(jKBdm=OF7|~; z)Ahm<$@p~sY#0UKbF^Ftznw(SEeW6Y^_|1`4}9zIg@Tfo38GV8TS~ z=*UBeODlQ}(+$+8j^e-rL;gkQ99mO<%Eab)m-T(q6Hk~82t@ed%Jkzk2CJ(F_}|v| zcU=@Dnt2GF6qnxf+cM(gyYkN)tzY}ORRd2t!ccD*teMgvSAj#fyO!l34TeN-q(lD#pv;*(w( zm6)ApL0460WnZWuJ#WgBH-25zn8ac^XJ+T;&jbc(Sz}Rna#52koTzBX4h0bBLjSeC z>=$gl694+gc7k{OMlZ<8DDrbtPD>#y|c#sB1dp;eGvr0ebk> z`#l1ry@`z}5@Bs;N?hGC+PRtGTqv+cFr0x4XgezsuYUTc$NLyW|c{4P^^c z<%aOy{*qW&(4EoHXBT%|s`#oE{b-&cGoeXH{h6C<3vz(=8ZKNt_0KCC{M2t9`|)1% ztJR_8nK%z*<{txkrjkF4J7d_WCqULW=l%OPOH42nGYap+$ zH@^U$ZQ!St;AN?e<*2OmW`H;~47K&qUZ679hNy{3tenCshvd*hlbMpiDeg0cY#JSI zgD(Sf+Xk*R!nlQ436Y!vrvVrRk&-wy4gK7?ZB6Way>7NM%Mz+*~_}ZDo#9MysR}GbPilPrFJT9&Q)~)B;4#7<|y0 zrc9=j*eOIRiJW39A(1(m`3-aLiZeCDP}$0>tCT4cWaaqSJc7rZcvwBr{bWOq-D;>= zaBmJAq1A@bj7$M2GBFi8IFs7C2*%v*2Zl@&ff<5oWZ`U2WA!}Tn)SUQ=Di-*9lEz=HODbYwEh_~{KBZ=Tew0+F==f+RHB-W+suCq+VzM+D%1i@H z+T7(hK8}Xj&{Sv}BrHWe)iw8yA%^J!$*4Z`aReF!S!90+-`U}5ie^|r5ilDcyt{U! zD;(`riEW#nin1b^S=(81qDFqYUypg#3OKlDn8Hc6Aes%2&1*a4;D<;@9%B{R$??kl z2>6o(pRg-~t}#RhmSPpzA*m>q=*X*z((aiYsri*p&K_A~!vVQd~=;*TE^ zJ6PEzta1{_AD)arJyMDAo-1lrysr=~jSmx|mGOQKf{llF2eF=$&ceB`;gz6OVv5kR zL~wlf92E%v;B^T`?}Mv%P5&gIN&aLsMkCGb88hAywH4t;mo+7KPRa2CvIL} zclGB5b8w-m3YTJplwtvp0VHbun|6TLZEO3;h=GmfYmO20xh+vPex2S(u2(P`tZP-g zM(a9R#pP@O4~U7EFUvBl)k++=4B;Zpb zZDdqE(;KvVDqShf$ee0}JmK5D{f*ExrJPPmQ%b2MCMR>CdTwjY<7!xnEr|rTB~hgh zN9Qioi7AyGt?7Qt5;H~M`kp{5E3~P2 z(|RUH{c$VKrR$$SCWxf!yLjW9i>hBs8=Akaytq;3&N0iBd6J#0r8U)zKH1DFf-67G zX^^Lqlau6?ba_Em6@C5XPk+7NKs6YY(oC6}E@_n2B_=f|hLWk3^qQeoz{La8$A&O; zhFUs0@+4^$o-r_9kEKczWgMzJQAXvY zYcBosA9vRfeyJ6>k8cWC3^A0C@B8ZXf}E-Rq9DZ#Lb1d#j3xAo6?5zg<)Xa8?vZ;c z>AU>Jx%1~QeDR6o*Qr%wLk$4zRCVX#lj>WF0RS3S#;nxD)M^@8!l~~DEET+AtTwbpLZ>&6bfrB}W%|Gv zmzs>Frd9(#qlQ-IXUv_s#IY74F$FG#5>-&8;bB|z@X%0e>-g08*jO7D7dHN&a>)rX zAaly|b@k=fI>@7{ao z{r!A-NZZK|B*T{Q!uh*~f zc;n|w^W=&>^1+S@h)T>VLMg3qMQFJ=jOVxG?wy;j{qWrfKkvGG_q&hzu=zc(e%@sd zq5D`M(6nnmuUSxKE-=g(1hP4XLZByqa`9Od2b^;WzOf{QWLJLq^UrVGSeME2@_6E}c3Ax|EBG_m3OsIaXg$J=EBia8HJCS*v# zx@%KixaZs=<<1F#Z>fXCL|p2q5NZ#ddF}3j4^Q7c_Lp6MN<{Fs@7g%`%f_3&I~G?W zl-ihA2&qT{@Ck`70X_u_W75|~uUWm^=IEI}zcL>&xIgbg2yjLiQvv<@zZTpxD8H;g zK>2hE0gm8EKfgG~G5+*Ia^5%JeE!Mj-+bD~A|g_iI6C5sPk;G)>A8Mc2)(2=D}-0n z27D?i=pT5Rl?KiI#E_oOQ549kiK>jOG>*IvN+$n8=QzU#EScJv8qUcdY-TnX>ecMf zmf@l1O87Fiek;8?mBoUk(SvJ-45?4Bskx1lBCQ69Q*xp_mD?~^WxyHzO*v$uQX*#) zX^9d}s#Kz+bCeQE&G6XxD4>D=hQ@%v%W@Y9r~m*U07*naRM_?U0*ax#7Q3XMp(1MZ zEh{&hr!iuPEA}?eTlYQ3KcvMiPhV;7v`KN|9pguo4Gsc<@tyDN*&N1*fjWgW>h~TQ z(X*ekv9Js_FugX`)zmK527z?7f=3`MYDmT;5RH~+OD z!K%2NZiO*{kO?THaq<^)R7UlQA+jc~ueYf{iZ7_DQ+O8CcS|pS@k>jb|4Bn)RZBTO z3qYn|S(QQ2*C%_XzN8E1wz}7=P_pVqC03SE*WA}%@Qb8rDAX{T)<~r%R(21ifkB}S z4K?_#o>}w&clFfRVJkh=HduP7x~6rk1^YM=ySrJU!b`XrDyD?4uF03o%|AI;Ag6MY z$ufFc3Xw|Z(BMENB`XaRE#0GCwb&&q3_QFxq;~S#A&GI*)cujxO6KCZp%C|out;5) z4T`eDLVRS~e8ztKZAY>1rk$%Dt)yKiBj!8|0r71=T1ycJi~X+d)wsPtIdNwPtKxa3 z#(8neT`bF1ZE~^7SzUDzt&EL5b@RKAPW@@#B!k!8jdrpxH7?;KubY+);tgtjmdV2vzH z__klq*{3f1tPUm;GO9_QLS7>yqLkNa7FBffufG^j&8r&~1<0912fO<6q6Vs=w=Zwb zwg6b#dreU-m#5Ndl#&eF@DNs3R?{zBXu4s@x<*3HNShdfE&~U1s=JN5MrQp0@K6_y zN>>}HiL7d)a2C38;_)6Lv%4)>DNiMFa^#8DzfhUfbNMpsN~M%;%~eWMk)g>{4pPKZ z_K(+r!OY;LKPCsMKi;9yO?i0pt+=o#t!8WJ;y(q!;lY!d7`}jF>MeNd=sf2b)OGNU z=pDB@b_(NI=I+`UU8@p79vec?Nvsm&h~alQ)e?nS7hQt)x02meY=bIEl z+|Hlxe!T1SuA8TKp1%7E#)QB%!f)F3Ka>SWsrn|HVP$NJBU=&p$jg_X#RxBa-jrlP zwy&0Y!_6CW-003tSsvsam*#I15r;Q3T$?lSROf1$7rn4m*4joT&P~;ZN(K#hVsWCZ zlA4l{T}5`z`y_upGJ(?!b(z6TSlh%%C>V^zVw*=ox;ld&r6=_0(^4BUg1NB9v|tW5 zG_yPO@xun)Od_pX5=xb(NvhQiiF2CE>`ls)aLB||prWPH*>qZUnrHLyxElPNSos1r zre;#_8{xW%C9)7iRAPetH>WNBxCjVRIXupbh1ydYvBZ5x=1acz-Ico!baftbbxbdc z-gD-)O<{QBCqG+0Tn}hyP}qxYp!fFP%#8^&2S!B#(NR&6Fq2;wPjgt?``rP{Wgw98 zFTyVMC*MD%bSW+okc5RLd>Y?YC7{_muNM#z$%Up+Gg>i@yZ`1tj-CFWf82Cb3VAoK zpZ=e9JPg#FO9{RD@hgjD<$aSEY~e;gv)n}HkPCCX)5~9QGeW`{sEm->6nsWR%X&VWAk*A-uU?PLk`#k$e-_Xn7u+ofzi;5Cc(#sW%$l4-aLrSgT z$~={U-}=ciut?B=46ER$TLZ{c!{|A@B|CF&jDR{YkW)UB0g;zeVB4HmcA>v|{^Znd zWi=zaduF!}!EiXFuChC_RvS1=Qm~YK3`b%}^VlTg+MG0OkyJ5tY(3q`Ejc z5!p3b@JvVHElo3MRVf9?6jw^gG*VL-sS_hJsRAIBC-%vmk?Yh8VieZ@wXjr#w;)br z;w?xBVFFI+5-9f2WV=%=%LKy^RGN6ZADHhFaJ#zn5D?_xhb~SmgrCFC)zP~TeWcN8 zRs{7N4DwjBEquY4tLK{Qs}(bucF86HJgH1v-*m}Aic4Sr$DR2PNLa;KJ~E-f9cTWL zEkgpFNvXR1^FO}&?t|-J{qWu0OTBa>b7ut62+a_0GPg)E=@lR`;) z^Sd>RggWj1et`?alTAXI7%YNv`I9HW1HJgQygG@SQGWi*t7p%4wFc77nzE{fUYn~j zAjP=>nTRNC$nqdM7i4sA9hhhng%w>mH&FR(^w3Ph+Co)BmYP~pouy8-RrNN(=kFGW zpu_7%^iOOuie1~)=@tIw(+>G3*bc6FhN(#*tAIwdo)W~lBN z)`6Q1G-3^h%_gfkY!O z$-u>737$G!??e@5=ftuc(iQRHZ*QM}IXDC`R3P0)2qzvRf#_txi*bK@&GwGn$Br_z z@2tQs+yUn89a)UhRRA)T#1erjo+MOM#IjC(P&>Qs@Tf;12i{W~^kfLpXRhlj0Awoa zyLVuDy?)R3*Y4eW|Md0m0>nfFqtJ?ouqy`G6D$0E>vcD zgqPxFxUdSV3)`Z%Tp3@JT!inR9-U*8p$+RQ07li=n#+}CHp}6C1M?6&Jj&7pMeM14 zs)r~PTkmh;u8G7y(hqoTPk?{m*1EZ#A+)+DSe?vC;?^WH6RStM=O|&zFr9`?4X$P2 z)9^KIgCh~FuBKU33h&WJJ$7M(wMTso3qFei(d@M&P-5NeEvYfy_NME4JeNSR=xsgw z)~s2+Ho?=yJSpC5@8;(`fCoB$Xa(QWHr~(PQW@_i_N$EQT25Hop)p>halGbOnV=+2 zEVL?j61bQb3tUTqPj7#;eP-zFPQCU~17YuXzyH*$UUS``;+vNWZrpXB=@|epV?z9{ zpYNWsw?osc&}POdrnnSHiY3kt!mz^I8B;CsYfj(XvRLkK@{JpWY7=*XxDpo1Ae4We z{UnHbwp6(Oi*xyQB=9nl@{_-9sw#3VNEsia%-w@I;Nn_fQ&Uk?fUL@^__VbWPHmgm zQdT6-8l9U^%QRfLSe|6tSYDQ4+gx7JH-E#fHblh2;Cs3t&)iZlTN^}q!$0t`YJtP+ zqav~M%r-b}s8%hPRFi6@lxo^&_ng4Y(5N|sRb%AEu&ha)8qR1Q88$q!K`r|Fo=2ZT zJ9j7SJi4HjVIO?k-YL!0*DQ`@BI3tw?^^u%I1rqYZs<9B_S%?#Y>9w_j6AaD*MSaI+jjDa_QC%2@%411RjI>`JCSo@8j8Cg>?jvn&!oH4kXAMbYovwEOeTk& zJsFvK{SozEsL`a(`QpO&!e>f8rS;I(_toK?_l zO-Tr(odAlkwj)4IXfqXV)7>+>tQWfzW%lYKA)4+RZiY$}scle~KTmpeA@8bt_^!)O zU&*>k37BYelPx?nNFhycP2}TkY<-ciG*&v>4a~avqPw54mooSegYRzRP zshjDXjIdfeY;0=^vw@HZ1T%=OIl=Y7&6|roUa)K#vivMh?BG;sNhgdZD$k{&BCCH2{w&h@UYD^~kx((Zx}1?g8$HUJJst%c;v*ES ztA4T_4hi;%j;c3_C~|GEu2t}=k&zn+NmI{Y3!o6ov;l$`FSM>BXwFU!2pyn}3f8&5 zK$swAOAltIJrl1D{Pco}(77rDi(JcVFo{rX=zscWfL()vBlRI}0lJQT_K{uU8l7gL zI552Hc#NN^6U%g^qZ7--t7CUhPe)KtNH_)!0WE57*!Q(@rHm9HcH*^v z*~NeJu736hK1c2)h$~8^Cg!hxyb(Gd9Q{82DqDgycQ&IM;e<$%k%KmS+< zTl7XszWHQB44cnN_FxIBC?09C8$W;i6n*yK(W`5pZg6a1hS$c@ZPNQEo~R5&w8v0K zcjK<;X$gAOG}17son3`+ZoNNGy!~lvBd0~XiC5PwBJ%5!Jel^*86pk=H!#Y4oR_uvaecVE+Y5LEws|PrlS!zn5z+bK1*3CRX5eA9h(%~gcjp9c zo3&%Ki6sPSKjp@3_@)g{3AIKnET69(tzAAR&lN5`I{ zw~uT5S&KdA4oZKhSw#atWaJ(6uP<8YPaJ$32jEdGG0uXqlDU6xPsmct7wg-O1gMj_ z^D2@wnE~~#=nRjj*Z=+`{%f0;oyVFv zm3c-zwx%zyydM}Tw>j7Ll<4Ss5;0WY08Io|8*Rqhs&${;HGzjl`8p7m59>o`p$XhP zrL8A~4F#<(;Ye7u&Ztz+NOM%uRHrtO`&ebb5hpYeR;W<#sP_3O2JjHAzv%fY1Hy(> zwbX{xQt;L8^$db?bdD>VKVI!s%fM!O)&*>vfl78yS3SF@=j6do_gbAU+&t=?AXKnU z6X3SsM1gCM?-Q7s(^h#qh^aB50w20pU68xJ=Xl4FlP5a8j2AdB3$yv2S3HhSuzm0N zuQ$L!#%OoVN2eUDC<%UiA4)>d+Xq-nI)sQh(vje2Phi9ggqAATgKy1aSOg;+EU@Fi z-S(ZQHtx7SlQ@p;_~2}4nV9DSD-%Q=+Od32A0SxOiFbGOK~$#J&Za3dvA$%4wKJsn z>OKFZyqcl>@1J*>y1TAwHgRW&8F(J6FNp#EAErzb6*%^&S{;uLW zqi}*aEKt)P6!BQ-7CK#wZ+wE6NoU6|C5#ohW1cHd2*y_&7-8-o9~)`vE^sm%s(p5C z%Xpnh2t!o_+O8MwJ)Ia}SvW+D(20>U+3~n{Ky|?|Si*-NMIZd=FZ(xsaO(Pw9avzc*B|_- z)Io_5yEsTqMC~7a@SfLG9W&-tbtbs>Wz&%+g=Tg}06fu*aD_H@r5}7CSc1JXs`%nd zcVDhk9mSW+uafj{d6p+mgc6q}=P9Ynh}qXvW9(}WlEmyihnY{J{8LdeOhIVDWCREl ztc`LH#y&LwwNX)BUA4iu^z`cbu!h$9k&qciU(J z!Z?gr65q-^CZI!$nsKH9A8HZtgmk=3aIzq*g2Y)^#zNz)%wypK3v(YR-;ELEf8g$& z_jm8v%7XvW+JHcTyLa;}&Eug?g7j|#Ul3zCv_C$K7ekKosy@Eka%n@hIC^_^Jk&u^ z97}Uhl;7Fy{V4GY4u>h$R=suL^z~yqnScHuO0;JAa`-YZ>$_u4Qiq}nCz4QEB4)p` z>-u|7g=Usa&(?8$S0JxP>Xf=}+K_J=CR98Rv(^4Q3TK4%5D+9%tYL7ruOyz+n;p+vS}u=Q-y=+w2$-T~ZMgNzs05&a~U=txhv*wY+Mo$U04;KPGOBK(|eeF&~j zALxdIaU!?U!VF!JkeSET*VQC?L=Y@F?jZzJuv>`cvHKbLjyu}Z&rM*-)O9R9@ky@< zGzYNEOMt5Mh!Dqao%2BMW7glOM-Ltu$Z@Dp3%R>knGV5?#TX!96fdn?{5o`aQCe|-1elgD)d7W3MHM4f!c z*WQw`D#qTb@Y~MkTM*EpLuMANmF^A#*A9;*t`pqR_uS)oE|#h|f{RJ+t&;&WX9)3* z9t~e{?7+Q)(XTGwByRr*uvlnI3lPNP*bh}R0lzXQ!Fqr*t#&cJ^xd<_51=#AD^8vM z`GZpqrH~X;q%)+@)Z7`O%J}XSZz(SoAbs-v@+h9T#w1d~YnD#W?jeD|P$CYd82Em> z$M&mJnl*9jMxtNaoMkuB^XRlBNQ6ccl8Uro*s~&a9U7fZ)7~E7IdAN6d~j7&TYYWA zx~AFFe<8SSZPf^OL0mY(LmVG&EDC6!4Z2`E-cDHMY2qHc%2L<4M1=uC@Ld6ZIB~d< zySW%3dn~8T&wvS}-Ns4-U{)Y8^2CWlEWHKdP!l&(KF36W6cA17bpe2z4hcLF)w$SQ zh3nonb7CQ41aWv%F##oO=*+7Wq`<{NWhSl=N=z$4u?8m(85$X63Jzb`Prx7GFf$goG-Iv`Z^ za3sr*=@ib2!HPrh-hq#tU9XNmVdLCIeyA9czfQD-6$gSqASk>(zz-$%!n={hAz^O8 zD*~Pc|Jl0Dib{$%g&)qcgj-b-yx{^*lpiD(gS9fU!kJ^V9ok^ez)pSSiN$0C(eCya zqs>=A<18&>jl~v(Sf~I^SP6IX=C33=i7Z!=ojiCk5&I9ncf7-YQ*DF@0z$dBAE_6_ zL;1X!D4p+-N=oprNat7IrmoMk-IkdrrSF}nR=O3Lwb7WM+lN?_;dn;_Mf-;wEgM#;b zaBN*=@oeVaOr_#%yLs~~%HsF(={c>x-WijzTwhH1^czXvuOfJ|la|Yi7zYUOjquUjc>{gEB?qV%!AASYJ0Qe=YvGqkr;8i2t_Wv>0~* zniC@uSg>QFH2$;GqFdo6Msxi{K33jZEp{m;1}N}w?MiPeOt7Dq09!4J@bIsC`b+(Z z&33p%v4=T{>x(ysuzW-UG}gxgsH{+Ev`MVUJ*uZurxoct7wZg+Z*TX&5fWC#S)pTn z1Oya-Os0ec0N-${0JMUw@)h`SR=SJDoAjN#_ntU;T%$dHuwyv}7awDfW+eFX1MtC zl>lF~<{#S@&2t7{KHp|mTjbhc7P!&ni(camI|i@%M|-rI1-S^*%~rTLCE0ig`H42T z6ydGW8H0gE;adQqcXsvoyK{Wfj76TJdiQ`x_drj`LgR-7Z4Rpu`3d4{5N@%n!c06g zZvjrf?>ky6Z-6eDy7?sdMrl!tD+~w@F@m5)Q6g_kKedS$j-WOQabKaWecU(rM5hmf zpNRA{H?0KlNWd||5MuGh76JjzL}2dG)v41(grmgFfKL6Qs10`4==2c+H!M2T${Q!( zn8XU4n5MDj0umyYKSQBrd6WQvEWbbP5Att+>#dIV{WFm^0F+oWi4*NFQcG;dK8>cM zqdmxCsY#`g@BG;@F3ChJbYz*vxHw8oMG5=e1uOY8&*t)-DowokPQt_Q1fio2ei#sU zBKknzy0h=Se{9{Y_YYjZe)WS7u3x%xGzzdX^G_898@qmW{iyj&e#FcHugPZSrA{~h zRSN>_g7J&_HUxL+T$9|3>RgcPo4)2!24Q1wYqllTC8;8o;*wsm66P4D@+0!YBp9~l zg!&P|^^EE~(W%w<9M@?ABcgO#UFQkFo$5GsZAg|dExxvalsxd1KxI9 zX58KpVzGi5C&Gx__jPC^7F%-=3`QjK3=9Yeh{AYd#QUR@g9AY_C%-dpiUROIJt#*25651L(}SYzziP* z+_nI1V1jq7$O0flmX<)}V;)O(5)opcaUQH#3nv}{fH6D{03`wW2nP2&ZzXnrhZgjr z9N~cWpuj-SrS3s2!*%U`gXR>b0J;q0tt7`)F=qG{4-jVvD+VeM@c_^y$a{8gzH@B( zI|n9D9z1sJ-nTto5Ny3pdvtPA9~P#rkHEvRzkH(Dc=`2{{;{?$iV6YEUQrHIum9u6 z2xH3DqaiO84_3XduUgL9T7k=39d&pk5x3z||CZI26_`F(j}mNoT#O@5wc0~Ska%l! z;qcjoj+(V5AQaxyJwT)F)CBl@g?M3rvLI~*xdpB8(5(oxBH&{@1m>)jQM-d6qIOS= z+e)_>ORIfvz3qmAEb7PL0i6l#?9{r8f<+-#s9=$o6^bqL^0DlCv{wtNJrUvNWrg8- zi>!?CKHjEicx;RSh0p{AqAWEXnwbM$K*16I?(UeSIh~j&y(S<)s|B=FtLtdj=nn2~ zZ`b(mOmIS5CB*Yh%~#C;Rl*9sB_-aMZ#nykm*6+^H@~;qUzn(Gj7A$T{Y-d}MNp?E z#uuPz@cL_Jx+;R#9k}P+7&yjvh0miWTL63U zw4>*3br^5B{_akJ3%cCNyacV{o2?hz_~G8M>;JlQ?}fO{+`QpppUm2$!bO%lHAaDe zD0$~61Qr#gGBdXdq0A<%NSJ{XDHsi1-*)|~5fCOM&=dbyQxGXDsjrTP5 zh>Ply7iq3!GhD(wH_=za(Ui-KVBfI$GEfMpV)1^oSk z9U5&!h&a|vz%-4S!6-jL9BU@(7iR9wpZyeCh%u5A#L98wiN03OLi9IM)) zPW_(Asplmbf&Pv6On?9vPA7rNWV8SP1-3~Wswx7BdJ&p)iqpU5DdfIvXhz>!;JG{`w<<}OQLqarPoJAZ0phEmpmt6 zD2s&xcfGr_L?|y4Q(Y7@=Z~u@Too>MeLw86d;v6pjeVEDdiBm5j-`}}fqE=#86^E& zQ;w_edUWn;UkAd5HSK$D-_vOVLfHT5dwf9nfcB_xKam&>AXBV`XoYW35C&yoX$-OO zwt)OQs~%`*f4jyVU@RECAHc!5Zk}$MnM6=evN;O+P2TQPPzx%dd*eRqZNzuPzz3TJvQ-+JOh$5KL> zleiRJE^u|RD35a$T9#kCcbM^l6P^K8lVlG*y#3j^b7S2s@G|V?v)MAU;G!a#bJvwC zgA+a5s?t~}$bYObkPzM5`+dVr-NdosrlOcwjC+SB$Q|>)nnyUsEkJuv;~y5HHWdNw z8F|O-*XTtUuTGt}j}uoE7^Uyg>GVA(Iy(d5&&#&?ZS)536`<8eTKO;piKa2;PHbau zdw@N~0(8kVu%kok3HnV`W>u_zgq52hF2vkh41l`30Fa+MUtDeC!H-++-=5^NTJxvu zHFr(^ljJHp_bp`jh|o$N)*-Eu^$U?jTmgar&|nuWk9FSe{qNR#VUx2>eO{; zI|En1V?%L%*jT^%NK|d7yEoSla9gz689dVJ_2Iwk`$|D5cWo!&8EbUfAd6TLIu`DP zu>v@gKj10*qd>onUIy*cMgmYC?;h#v9uyGZ$Be7Rdo$yLac=H!zjLDFt-bFY-+kb% zBjNwM=9&2Ax9-35wgLd9m9A^{91hy_%G#MM^kYBX+e}&HNdpM{QL18Sv@764MejL$ zdo&XD8wnhY_w-_icqRDySYTo>R%ld=XkU9E2J|1=EwmdjH@n~37vK@Ma)n1k2*7SU zWBl8-QC=7n1Pp-3@BW@D5JaTaYT5xZwR>NX7e2vTK)@yJf4f7caWnpnItQWm%`mk6 zA9i#c`tUrzp9E;a{zD(_^Yq>K_6qEZ{rjx`_dP(j9{K1myN+Ey^U;~R zADsEit}Q!GojG&epkDIibECFh=^vZus)Q~B{dOiCC5q_m)OcWHM5cZ*t3v#=9YK)a zV#Y8L+K!H%POVO-jS9y{_2{*_D9nHJO~@duX9yl(QvLxNy*5AtuqjPPhsF#4+uZ{Q z?cSm5*gey-zlR5)p!*JYcI;s(AcJyzz(mnNhZ6IJ+mH}YZ z8HHK)-z}iovw=V;5dgIvnvTv+o!4({-cX)VfZ;Tr3CcoH7>t`JN~;4p(t7@OdTETs za+z4*zQGV)Wvlv+@XAuqtVwWdZ`Wx4wC`>I0AIJ?P^y3=ACY~4gJb_cd)YcLK2MAV z3WfR|@bDMG3=rt|e2J#fvOiD(q#CH}=mX8f?Xl_pmiyvV1+)ahj0tfU%f?aX1W{;xtqT z6{s->QRTlzJ@+hXfcq@}XVmkbV!<;?=;)QFU=;m314*cZk*K9BK+RwtYNX3iOSv93fKBELsQL%Y z6R55E+;kGW6^KKvTo=@UGg0l2!XV+y;AbGNKvj4ZRpF?49<`KLP&0~7^p>=hnU4J9 zjOIrJu0YjajatEtsCJ*iZnz6|md+-!{+hu>3S7L3%C}B(9L|%|12v;Ds6Cu*-hnzJ z8&FI8JgUP(s6%|p@>eb2u#?wrS91XB`Ei|Cf6ZtC1seHM)E+&6Iukq0*UeL?4zHL^ zlD&L))If)u(@-lIK(%*|<+q@=`uC_qyDw-3?_vWAK18j+1?0RqSFkq5cXpgQ*dFU) z5^7I-pz04otw0`XLUT|{zsSn(KuvHRY9+U$+6nF>p^gur8a#%Y$$8XFuUfuY7jH&g z%|YgP)Kbnv&1?l~AnQ==JYnuO-$k{14jFjRxlTf-x=~l}Mj~oy2BBs))|_cBLLH`+ zs1*sJ&dQ^hf_tzxUPQgd?Kp9_;#lM#XEi_C+8S)5_x~`7_7q$~eVL-WdxxkCY5>Dg z9Zo^*Ws&9YwEGXDX7nU#C0;@;@d?y(-=Nxw=;1gdouUoI&cF*;7hl9^eAzsRQRI)Kmi{bihL_D4mO(4k1vQ`))K(A1pbkME2_3d6sF5$n z1{gwB+-kmH<*#E5Y59*UaKWYqJsQdoZ_$|=wce}(FJ zC2EEbT7Hw|e}j6h{(yYsoP($>`vTQYRH}EXTcIY>0o7h6Y70hSEEb~rTae2BYe~x~ zP=kw6r}k0vIc!A!O;iWRQT5NG_WTlRW_8lM4&zY+>V?|EeAJc{+5J0E&uy^$?}8+B zXx=i@e) zkWj;;u`&8l4J<(|;Re)$J5dk5Y4^{e2JU2d_1c)dQ7beKb$=qp;v&@Eudwp_kQE9# zJ4k4R`%oQyh#JT@*bHysW!BQS#9J{LUG$;O$O>$T>rk)PCe#29qS`%*`aWDjwHMXL zTfz2W+5cW7bVx?njRI7IMW_cBqt3v6sMqWtOeGdzp>K75M$K7567*qCXmUT4(I24Q`yHiM}4)}U7Q zG1OK)gIcLwsKa?M)87A&?8YV2>F>>?IjUk3s=Sz+iX7H-`@ZI6sW;Ns8f0bHKP-#20u2xMAf^3TAAypdUXbP`9`RLw7^!_ z7PSI>Q3KDh`=e3q<_Ae=X{MP)R-p=OQNA3tr@zEb5sq^|YUy_k^qxC}>gZ3XJ^vat z;~$V$-H99IjLA4uPP9l-STJt&c18hh6_sC!SoR)*V`~Yl8ek$rvR#|=( zYKga?8m>VNY`>MCLJjzWs17pMe@s;c(VpiBbxZ@GjH#x0NGt!$`7gRn6^{LHAE#WNeh?Q6u zAI93a8SCMbs1MX{QT1O!4g3hIor~sos1>Yxn>X+dK@uAIU{u3}sFBS=HMAJDlxt8+ zyT$S^qf7pM)LFP}MvwCTmYaY&#JQ+}OhW40Fs$W)W)3mZK)H7B$fIn1auv{){+_1F^*z$4SG9*pvR9)g;v6i>SSM2Rq>x zs3mVY)_c$UpjK)MYEJ`Jz6P~I&!PtMDt5-B=;HUNcH_r+^)gW_mWzG#{?8|&k#4~{ zco-w`1M?JWsV-Q)R<3tH8dbj;#$deJ1?!XVhZ@*W)bo?gN>uv~U=#Xx9wDLA`7AcT zSFj7dgIbAypth!Mo@Xj*#j;WL3o#bwnM+U|-ivzfDOA1PsI7hjwIUZW*pNhIzBhn4 z)E;+5o$djsnGHeJ%d`9pRD-3cL$w^WM7PXbvFc#a5_wJ{RXZ;&d zkWIlYI05y*WYkD!pgLZGn(>3EC4Cxo7WSg*A4eBILUnK*^+k=D;FWhneJ94C+F5`a z(47-le@h$Q9H|#ZUAG z(i>H8LXdo#}@9P9!e?h&L zpP^PLa_gRMyDMn}{N46*!l)PR10YUoib--T-67-r#l?21WKyz)HM>Gz?|#6pb5 z4cHX7qWar~P4xaBBcYBjn6(PMnYTkKI2qU&N1z@o#Adh@bqMcAy@nex4!2?}+>Hb9 zJyiXe+xd$sCSY%zjr#ki^9Tu-f@9bczeWCha2iha@)J=Vl%WPxh1#0csKdM2%6FnV zdKER(^)So}jND@PFJ@OfMK0wW&-E?nH`=MUP+ff6ViF!Ny z*c#WMI@pdGxDT}jmr*Ns9W}5)c9rOrn<8UKPih!=>z61rv)za)M|oF?i}ZxYVH0qEl6*cLbAGGYR0F3tbu zYnpe%SwwLjF~V-&hpoAnPMjruJL=C2y)j#fHufAz=MG{D`4+@@(gRhtF=CS4J45=viMI(| zPkV&_H7-^434hQkH!}0Fhoxs?Pa@Cq2^d4%O5|8$hp{2~XZMom9;g8 zP(F=xA<>hFwsO&od#_l&fb`v@8xU8lOoadYf20)*$5)B=RMzz_(UKTJJ_$P!$wX(O zBW2OVSkhUTOYA1CYY$OGz6mj%^b^D!()}@xSWK)Vnh+oB{0$-gi`YawN3w5$%YViC{k-)>X?R{M(S0vsLk)gC(TnuIpZ5bTYLd)?cNfp(WM+ zia>E$Rb{9{T4MVN6+T90t=`negeB#HxuJe(T@wq6OaJdG1p!}KCGA)F12q%VDr!X+ zmn>$sqy5X=K+Q|N%IZe+4t2|H9hu(CO-;+p=v^}|b9>#UIsVFufWM4J%c@*oRdv8u z6^b1aR}(p8dY$@neQxe-f1t`&Gjn*?sN{fuPI*ZQds1D-g87P<`rNt6T631%8R@HZ zee-?uc)lX5S!i2c{LS^l+rR@1o}~-;E5lDz1pPT33zk?o1 zeAPc!^6sVofA^}(TpnA{3LK6pG7l9GaG& zlVD@fEc1MUs_>(1t?!1xga+re3~kDv-ozWWzoe3Lwts6`c}ZpH+x&#|@Iw4c|87b0 zu*wQw@eR#{hoHhrU#Ri;zrR+^>4H`D F{ujDiJ|_SG delta 7809 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 Vq13(Zl$9oqs$8M;(&&sT{{faE(w6`L delta 8309 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 F`Cl}m=i~qY diff --git a/makefile b/makefile old mode 100644 new mode 100755 index 1af900d..3232b1d --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ PAKNAME = blobwars.pak DOCS = doc/* ICONS = icons/ -VERSION = 1.14 +VERSION = 1.17 RELEASE = 1 USEPAK = 1 @@ -14,12 +14,15 @@ DOCDIR = $(PREFIX)/share/doc/$(PROG)/ ICONDIR = $(PREFIX)/share/icons/hicolor/ DESKTOPDIR = $(PREFIX)/share/applications/ LOCALEDIR = $(PREFIX)/share/locale/ +MEDAL_SERVER_HOST = www.parallelrealities.co.uk +#MEDAL_SERVER_HOST = localhost +MEDAL_SERVER_PORT = 80 CXXFLAGS += `sdl-config --cflags` -DVERSION=$(VERSION) -DRELEASE=$(RELEASE) -DUSEPAK=$(USEPAK) CXXFLAGS += -DPAKNAME=\"$(PAKNAME)\" -DPAKLOCATION=\"$(DATADIR)\" -DUNIX -DGAMEPLAYMANUAL=\"$(DOCDIR)index.html\" -Wall -CXXFLAGS += -DLOCALEDIR=\"$(LOCALEDIR)\" +CXXFLAGS += -DLOCALEDIR=\"$(LOCALEDIR)\" -DMEDAL_SERVER_HOST=\"$(MEDAL_SERVER_HOST)\" -DMEDAL_SERVER_PORT=$(MEDAL_SERVER_PORT) CXXFLAGS += $(CFLAGS) -Werror -LIBS = `sdl-config --libs` -lSDL_mixer -lSDL_image -lSDL_ttf -lz +LIBS = `sdl-config --libs` -lSDL_mixer -lSDL_image -lSDL_ttf -lSDL_net -lz OBJS += CAudio.o OBJS += CBoss.o @@ -33,7 +36,7 @@ OBJS += CKeyboard.o OBJS += CJoystick.o OBJS += CLineDef.o OBJS += CList.o -OBJS += CMap.o CMath.o +OBJS += CMap.o CMath.o CMedalServer.o OBJS += CObjective.o OBJS += CPak.o CParticle.o CPersistant.o CPersistData.o OBJS += CRadarBlip.o CReplayData.o @@ -89,7 +92,7 @@ mapeditor: $(MAPOBJS) clean: $(RM) $(GAMEOBJS) mapEditor.o pak.o $(PROG) $(PAKNAME) pak mapeditor $(LOCALE_MO) -buildpak: pak +buildpak: ./pak data gfx music sound $(PAKNAME) # install diff --git a/makefile.windows b/makefile.windows old mode 100644 new mode 100755 index 0f0e694..8e8281b --- a/makefile.windows +++ b/makefile.windows @@ -3,7 +3,7 @@ PAKNAME = blobwars.pak DOCS = doc/* ICONS = icons/ -VERSION = 1.14 +VERSION = 1.17 RELEASE = 1 USEPAK = 1 @@ -14,14 +14,16 @@ DOCDIR = $(PREFIX)/share/doc/$(PROG)/ ICONDIR = $(PREFIX)/share/icons/hicolor/ DESKTOPDIR = $(PREFIX)/share/applications/ LOCALEDIR = $(PREFIX)/share/locale/ +MEDAL_SERVER_HOST = www.parallelrealities.co.uk +MEDAL_SERVER_PORT = 80 CXX=i586-mingw32msvc-g++ SDLC=/home/steve/Windows/bin/sdl-config CXXFLAGS += `$(SDLC) --cflags` -DVERSION=$(VERSION) -DRELEASE=$(RELEASE) -DUSEPAK=$(USEPAK) CXXFLAGS += -DPAKNAME=\"$(PAKNAME)\" -DPAKLOCATION=\"\" -DGAMEPLAYMANUAL=\"doc/index.html\" -Wall -CXXFLAGS += -DLOCALEDIR=\"\" $(CFLAGS) -pg -Werror -LIBS = `$(SDLC) --libs` -lintl -lz -lSDL_mixer -lSDL_image -lSDL_ttf -pg -lSDLmain +CXXFLAGS += -DLOCALEDIR=\"\" $(CFLAGS) -DMEDAL_SERVER_HOST=\"$(MEDAL_SERVER_HOST)\" -DMEDAL_SERVER_PORT=$(MEDAL_SERVER_PORT) -pg -Werror +LIBS = `$(SDLC) --libs` -lintl -lz -lSDL_mixer -lSDL_image -lSDL_ttf -lSDL_net -pg -lSDLmain OBJS += CAudio.o OBJS += CBoss.o @@ -35,7 +37,7 @@ OBJS += CKeyboard.o OBJS += CJoystick.o OBJS += CLineDef.o OBJS += CList.o -OBJS += CMap.o CMath.o +OBJS += CMap.o CMath.o CMedalServer.o OBJS += CObjective.o OBJS += CPak.o CParticle.o CPersistant.o CPersistData.o OBJS += CRadarBlip.o CReplayData.o diff --git a/src/CAudio.cpp b/src/CAudio.cpp old mode 100644 new mode 100755 diff --git a/src/CAudio.h b/src/CAudio.h old mode 100644 new mode 100755 diff --git a/src/CBoss.cpp b/src/CBoss.cpp old mode 100644 new mode 100755 diff --git a/src/CBoss.h b/src/CBoss.h old mode 100644 new mode 100755 diff --git a/src/CCollision.cpp b/src/CCollision.cpp old mode 100644 new mode 100755 diff --git a/src/CCollision.h b/src/CCollision.h old mode 100644 new mode 100755 diff --git a/src/CConfig.cpp b/src/CConfig.cpp old mode 100644 new mode 100755 index cbeb334..5507f0f --- a/src/CConfig.cpp +++ b/src/CConfig.cpp @@ -1,197 +1,188 @@ -#include "headers.h" - -Config::Config() -{ - sdlJoystick = NULL; - - for (int i = 0 ; i < CONTROL::MAX ; i++) - { - command[i] = 0; - } -} - -Config::~Config() -{ -} - -void Config::populate() -{ - for (int i = 0 ; i < CONTROL::MAX ; i++) - { - command[i] = (engine->keyState[keyboard.control[i]]); - - if (joystick.control[i] >= 0) - { - command[i] = (command[i] || (engine->joystickState[joystick.control[i]])); - } - } - - if (engine->joyX < -joystick.sensitivity) command[CONTROL::LEFT] = 1; - if (engine->joyX > joystick.sensitivity) command[CONTROL::RIGHT] = 1; - if (engine->joyY < -joystick.sensitivity) command[CONTROL::UP] = 1; - if (engine->joyY > joystick.sensitivity) command[CONTROL::DOWN] = 1; -} - -void Config::populate(int *data) -{ - for (int i = 0 ; i < CONTROL::MAX ; i++) - { - command[i] = data[i]; - } - - command[CONTROL::MAP] = 0; - command[CONTROL::PAUSE] = 0; -} - -bool Config::isControl(CONTROL::TYPE type) -{ - return command[type]; -} - -void Config::resetControl(CONTROL::TYPE type) -{ - engine->keyState[keyboard.control[type]] = 0; - - command[type] = 0; - - if (joystick.control[type] >= 0) - { - engine->joystickState[joystick.control[type]] = 0; - } - - if (type == CONTROL::LEFT) engine->joyX = 0; - if (type == CONTROL::RIGHT) engine->joyX = 0; - if (type == CONTROL::UP) engine->joyY = 0; - if (type == CONTROL::DOWN) engine->joyY = 0; -} - -void Config::doPause() -{ - if (!engine->paused) - { - if (engine->keyState[keyboard.control[CONTROL::PAUSE]]) - { - engine->paused = true; - engine->keyState[keyboard.control[CONTROL::PAUSE]] = 0; - } - } - else - { - if ((engine->keyState[keyboard.control[CONTROL::PAUSE]]) || (engine->keyState[SDLK_ESCAPE])) - { - engine->paused = false; - engine->keyState[keyboard.control[CONTROL::PAUSE]] = 0; - engine->keyState[SDLK_ESCAPE] = 0; - } - } -} - -bool Config::loadJoystickConfig() -{ - char filename[PATH_MAX]; - sprintf(filename, "%sjoystick.cfg", engine->userHomeDirectory); - - debug(("Loading joystick config from %s\n", filename)); - - FILE *fp = fopen(filename, "rb"); - - if (!fp) - { - return false; - } - - if (fread(&joystick, sizeof(Joystick), 1, fp) != 1) - { - fclose(fp); - return false; - } - - fclose(fp); - - return true; -} - -bool Config::saveJoystickConfig() -{ - char filename[PATH_MAX]; - sprintf(filename, "%sjoystick.cfg", engine->userHomeDirectory); - - debug(("Saving joystick config to %s\n", filename)); - - FILE *fp = fopen(filename, "wb"); - - if (!fp) - { - debug(("WARNING: Couldn't save joystick config\n")); - return false; - } - - fwrite(&joystick, sizeof(Joystick), 1, fp); - - fclose(fp); - - return true; -} - -bool Config::loadKeyConfig() -{ - char filename[PATH_MAX]; - sprintf(filename, "%skeyboard.cfg", engine->userHomeDirectory); - - debug(("Loading keyboard config from %s\n", filename)); - - FILE *fp = fopen(filename, "rb"); - - if (!fp) - { - return false; - } - - if (fread(&keyboard, sizeof(Keyboard), 1, fp) != 1) - { - fclose(fp); - return false; - } - - for (int i = 0; i < CONTROL::MAX; i++) - { - if (keyboard.control[i] < 0 || keyboard.control[i] >= 350) - { - fclose(fp); - return false; - } - } - - fclose(fp); - - // Keyboard break fix - Feb 09 - keyboard.control[CONTROL::UP] = 0; - - return true; -} - -bool Config::saveKeyConfig() -{ - char filename[PATH_MAX]; - sprintf(filename, "%skeyboard.cfg", engine->userHomeDirectory); - - debug(("Saving keyboard config to %s\n", filename)); - - FILE *fp = fopen(filename, "wb"); - - if (!fp) - { - return false; - } - - fwrite(&keyboard, sizeof(keyboard), 1, fp); - - fclose(fp); - - return true; -} - -void Config::restoreKeyDefaults() -{ - keyboard.setDefaultKeys(); -} +#include "headers.h" + +Config::Config() +{ + sdlJoystick = NULL; + + for (int i = 0 ; i < CONTROL::MAX ; i++) + { + command[i] = 0; + } +} + +Config::~Config() +{ +} + +void Config::populate() +{ + for (int i = 0 ; i < CONTROL::MAX ; i++) + { + command[i] = (engine->keyState[keyboard.control[i]]); + + if (joystick.control[i] >= 0) + { + command[i] = (command[i] || (engine->joystickState[joystick.control[i]])); + } + } + + if (engine->joyX < -joystick.sensitivity) command[CONTROL::LEFT] = 1; + if (engine->joyX > joystick.sensitivity) command[CONTROL::RIGHT] = 1; + if (engine->joyY < -joystick.sensitivity) command[CONTROL::UP] = 1; + if (engine->joyY > joystick.sensitivity) command[CONTROL::DOWN] = 1; +} + +void Config::populate(int *data) +{ + for (int i = 0 ; i < CONTROL::MAX ; i++) + { + command[i] = data[i]; + } + + command[CONTROL::MAP] = 0; + command[CONTROL::PAUSE] = 0; +} + +bool Config::isControl(CONTROL::TYPE type) +{ + return command[type]; +} + +void Config::resetControl(CONTROL::TYPE type) +{ + engine->keyState[keyboard.control[type]] = 0; + + command[type] = 0; + + if (joystick.control[type] >= 0) + { + engine->joystickState[joystick.control[type]] = 0; + } + + if (type == CONTROL::LEFT) engine->joyX = 0; + if (type == CONTROL::RIGHT) engine->joyX = 0; + if (type == CONTROL::UP) engine->joyY = 0; + if (type == CONTROL::DOWN) engine->joyY = 0; +} + +void Config::doPause() +{ + if (!engine->paused) + { + if (engine->keyState[keyboard.control[CONTROL::PAUSE]]) + { + engine->paused = true; + engine->keyState[keyboard.control[CONTROL::PAUSE]] = 0; + } + } + else + { + if ((engine->keyState[keyboard.control[CONTROL::PAUSE]]) || (engine->keyState[SDLK_ESCAPE])) + { + engine->paused = false; + engine->keyState[keyboard.control[CONTROL::PAUSE]] = 0; + engine->keyState[SDLK_ESCAPE] = 0; + } + } +} + +bool Config::loadJoystickConfig() +{ + char filename[PATH_MAX]; + sprintf(filename, "%sjoystick.cfg", engine->userHomeDirectory); + + debug(("Loading joystick config from %s\n", filename)); + + FILE *fp = fopen(filename, "rb"); + + if (!fp) + { + return false; + } + + if (fread(&joystick, sizeof(Joystick), 1, fp) != 1) + { + fclose(fp); + return false; + } + + fclose(fp); + + return true; +} + +bool Config::saveJoystickConfig() +{ + char filename[PATH_MAX]; + sprintf(filename, "%sjoystick.cfg", engine->userHomeDirectory); + + debug(("Saving joystick config to %s\n", filename)); + + FILE *fp = fopen(filename, "wb"); + + if (!fp) + { + debug(("WARNING: Couldn't save joystick config\n")); + return false; + } + + fwrite(&joystick, sizeof(Joystick), 1, fp); + + fclose(fp); + + return true; +} + +bool Config::loadKeyConfig() +{ + char filename[PATH_MAX]; + sprintf(filename, "%skeyboard.cfg", engine->userHomeDirectory); + + debug(("Loading keyboard config from %s\n", filename)); + + FILE *fp = fopen(filename, "rb"); + + if (!fp) + { + return false; + } + + if (fread(&keyboard, sizeof(Keyboard), 1, fp) != 1) + { + fclose(fp); + return false; + } + + fclose(fp); + + // Keyboard break fix - Feb 09 + keyboard.control[CONTROL::UP] = 0; + + return true; +} + +bool Config::saveKeyConfig() +{ + char filename[PATH_MAX]; + sprintf(filename, "%skeyboard.cfg", engine->userHomeDirectory); + + debug(("Saving keyboard config to %s\n", filename)); + + FILE *fp = fopen(filename, "wb"); + + if (!fp) + { + return false; + } + + fwrite(&keyboard, sizeof(keyboard), 1, fp); + + fclose(fp); + + return true; +} + +void Config::restoreKeyDefaults() +{ + keyboard.setDefaultKeys(); +} diff --git a/src/CConfig.h b/src/CConfig.h old mode 100644 new mode 100755 index 6a6f5f7..3a288cd --- a/src/CConfig.h +++ b/src/CConfig.h @@ -1,30 +1,30 @@ -class Config -{ - public: - - Engine *engine; - - int command[CONTROL::MAX]; - - SDL_Joystick *sdlJoystick; - - Joystick joystick; - Keyboard keyboard; - - Config(); - ~Config(); - - void populate(); - void populate(int *data); - - bool isControl(CONTROL::TYPE type); - void resetControl(CONTROL::TYPE type); - - void doPause(); - - bool loadJoystickConfig(); - bool saveJoystickConfig(); - bool loadKeyConfig(); - bool saveKeyConfig(); - void restoreKeyDefaults(); -}; +class Config +{ + public: + + Engine *engine; + + int command[CONTROL::MAX]; + + SDL_Joystick *sdlJoystick; + + Joystick joystick; + Keyboard keyboard; + + Config(); + ~Config(); + + void populate(); + void populate(int *data); + + bool isControl(CONTROL::TYPE type); + void resetControl(CONTROL::TYPE type); + + void doPause(); + + bool loadJoystickConfig(); + bool saveJoystickConfig(); + bool loadKeyConfig(); + bool saveKeyConfig(); + void restoreKeyDefaults(); +}; diff --git a/src/CCutscene.cpp b/src/CCutscene.cpp old mode 100644 new mode 100755 diff --git a/src/CCutscene.h b/src/CCutscene.h old mode 100644 new mode 100755 diff --git a/src/CData.cpp b/src/CData.cpp old mode 100644 new mode 100755 diff --git a/src/CData.h b/src/CData.h old mode 100644 new mode 100755 diff --git a/src/CEffect.cpp b/src/CEffect.cpp old mode 100644 new mode 100755 diff --git a/src/CEffect.h b/src/CEffect.h old mode 100644 new mode 100755 diff --git a/src/CEngine.cpp b/src/CEngine.cpp old mode 100644 new mode 100755 index 57105a2..13a5409 --- a/src/CEngine.cpp +++ b/src/CEngine.cpp @@ -84,6 +84,11 @@ Engine::Engine() // Cheats memset(lastKeyEvents, ' ', 25); + #if USEPAK + cheats = false; + #else + cheats = true; + #endif cheatHealth = cheatExtras = cheatFuel = cheatLevels = false; cheatBlood = cheatInvulnerable = cheatReload = cheatSpeed = cheatSkipLevel = false; diff --git a/src/CEngine.h b/src/CEngine.h old mode 100644 new mode 100755 diff --git a/src/CEntity.cpp b/src/CEntity.cpp old mode 100644 new mode 100755 diff --git a/src/CEntity.h b/src/CEntity.h old mode 100644 new mode 100755 diff --git a/src/CFileData.cpp b/src/CFileData.cpp old mode 100644 new mode 100755 diff --git a/src/CFileData.h b/src/CFileData.h old mode 100644 new mode 100755 diff --git a/src/CGame.cpp b/src/CGame.cpp old mode 100644 new mode 100755 diff --git a/src/CGame.h b/src/CGame.h old mode 100644 new mode 100755 diff --git a/src/CGameData.cpp b/src/CGameData.cpp old mode 100644 new mode 100755 diff --git a/src/CGameData.h b/src/CGameData.h old mode 100644 new mode 100755 diff --git a/src/CGameObject.cpp b/src/CGameObject.cpp old mode 100644 new mode 100755 diff --git a/src/CGameObject.h b/src/CGameObject.h old mode 100644 new mode 100755 diff --git a/src/CGraphics.cpp b/src/CGraphics.cpp old mode 100644 new mode 100755 index 7c63193..e93d324 --- a/src/CGraphics.cpp +++ b/src/CGraphics.cpp @@ -31,6 +31,9 @@ Graphics::Graphics() infoMessage = NULL; fontSize = 0; + + medalMessageTimer = 0; + medalType = 0; currentLoading = 0; @@ -88,7 +91,11 @@ void Graphics::destroy() TTF_CloseFont(font[i]); } } - + + if (medalMessage != NULL) + { + SDL_FreeSurface(medalMessage); + } if (fadeBlack) { @@ -99,6 +106,15 @@ void Graphics::destroy() { SDL_FreeSurface(infoBar); } + + for (int i = 0 ; i < 4 ; i++) + { + if (medal[i] != NULL) + { + SDL_FreeSurface(medal[i]); + medal[i] = NULL; + } + } } void Graphics::registerEngine(Engine *engine) @@ -129,6 +145,8 @@ void Graphics::mapColors() fadeBlack = alphaRect(640, 480, 0x00, 0x00, 0x00); infoBar = alphaRect(640, 25, 0x00, 0x00, 0x00); + + medalMessage = NULL; } Sprite *Graphics::getSpriteHead() @@ -141,8 +159,34 @@ void Graphics::setTransparent(SDL_Surface *sprite) SDL_SetColorKey(sprite, (SDL_SRCCOLORKEY|SDL_RLEACCEL), SDL_MapRGB(sprite->format, 0, 0, 0)); } +bool Graphics::canShowMedalMessage() +{ + return (medalMessageTimer <= 0); +} + void Graphics::updateScreen() { + if (medalMessageTimer > 0) + { + int padding = 0; + + medalMessageTimer--; + + if (medalType >= 0) + { + padding = 18; + } + + drawRect(screen->w - (medalMessage->w + 5 + padding), 5, medalMessage->w + padding - 2, 20, grey, screen); + drawRect(screen->w - (medalMessage->w + 5 + padding - 1), 6, medalMessage->w + padding - 4, 18, black, screen); + blit(medalMessage, screen->w - (medalMessage->w + 5), 7, screen, false); + + if (medalType >= 0) + { + blit(medal[medalType], screen->w - (medalMessage->w + 5 + 16), 7, screen, false); + } + } + SDL_Flip(screen); SDL_Delay(1); @@ -923,6 +967,54 @@ void Graphics::drawChatString(SDL_Surface *surface, int y) } } +void Graphics::showMedalMessage(int type, const char *in) +{ + char message[1024]; + + if (medalMessage != NULL) + { + SDL_FreeSurface(medalMessage); + } + + setFontSize(0); + + switch (type) + { + // Bronze + case 1: + setFontColor(0xA6, 0x7D, 0x3D, 0x00, 0x00, 0x00); + break; + + // Silver + case 2: + setFontColor(0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00); + break; + + // Gold + case 3: + setFontColor(0xFF, 0xCC, 0x33, 0x00, 0x00, 0x00); + break; + + // Ruby + case 4: + setFontColor(0xFF, 0x11, 0x55, 0x00, 0x00, 0x00); + break; + } + + medalType = type - 1; // for indexing on the image + if (type != -1) + { + sprintf(message, " Medal Earned - %s ", in); + medalMessage = getString(message, true); + } + else + { + sprintf(message, " %s ", in); + medalMessage = getString(message, true); + } + medalMessageTimer = (5 * 60); +} + void Graphics::drawWidgetRect(int x, int y, int w, int h) { drawRect(x - 5, y - 4, w + 10, h + 8, white, screen); diff --git a/src/CGraphics.h b/src/CGraphics.h old mode 100644 new mode 100755 index b965d90..5b1a5b5 --- a/src/CGraphics.h +++ b/src/CGraphics.h @@ -40,6 +40,10 @@ class Graphics { int screenShotNumber; char screenshot[100]; char chatString[1024]; + + SDL_Surface *medalMessage; + int medalMessageTimer; + int medalType; SDL_Surface *fadeBlack; SDL_Surface *infoMessage; @@ -51,6 +55,8 @@ class Graphics { SDL_Surface *screen, *background; SDL_Surface *tile[MAX_TILES]; + SDL_Surface *medal[4]; + SDL_Surface *infoBar; int red, yellow, green, darkGreen, skyBlue, blue, cyan, white, lightGrey, grey, darkGrey, black; @@ -63,6 +69,7 @@ class Graphics { Sprite *getSpriteHead(); void setTransparent(SDL_Surface *sprite); void updateScreen(); + bool canShowMedalMessage(); void delay(int time); void RGBtoHSV(float r, float g, float b, float *h, float *s, float *v); void HSVtoRGB(float *r, float *g, float *b, float h, float s, float v); @@ -95,6 +102,7 @@ class Graphics { void drawString(const char *in, int x, int y, int alignment, SDL_Surface *dest); void clearChatString(); void createChatString(const char *in); + void showMedalMessage(int type, const char *in); void drawChatString(SDL_Surface *surface, int y); void drawWidgetRect(int x, int y, int w, int h); SDL_Surface *createSurface(int width, int height); diff --git a/src/CHashtable.cpp b/src/CHashtable.cpp old mode 100644 new mode 100755 diff --git a/src/CHashtable.h b/src/CHashtable.h old mode 100644 new mode 100755 diff --git a/src/CHub.cpp b/src/CHub.cpp old mode 100644 new mode 100755 diff --git a/src/CHub.h b/src/CHub.h old mode 100644 new mode 100755 diff --git a/src/CJoystick.cpp b/src/CJoystick.cpp old mode 100644 new mode 100755 diff --git a/src/CJoystick.h b/src/CJoystick.h old mode 100644 new mode 100755 diff --git a/src/CKeyboard.cpp b/src/CKeyboard.cpp old mode 100644 new mode 100755 diff --git a/src/CKeyboard.h b/src/CKeyboard.h old mode 100644 new mode 100755 diff --git a/src/CLineDef.cpp b/src/CLineDef.cpp old mode 100644 new mode 100755 diff --git a/src/CLineDef.h b/src/CLineDef.h old mode 100644 new mode 100755 diff --git a/src/CList.cpp b/src/CList.cpp old mode 100644 new mode 100755 diff --git a/src/CList.h b/src/CList.h old mode 100644 new mode 100755 diff --git a/src/CMap.cpp b/src/CMap.cpp old mode 100644 new mode 100755 diff --git a/src/CMap.h b/src/CMap.h old mode 100644 new mode 100755 diff --git a/src/CMath.cpp b/src/CMath.cpp old mode 100644 new mode 100755 diff --git a/src/CMath.h b/src/CMath.h old mode 100644 new mode 100755 diff --git a/src/CObjective.cpp b/src/CObjective.cpp old mode 100644 new mode 100755 diff --git a/src/CObjective.h b/src/CObjective.h old mode 100644 new mode 100755 diff --git a/src/CPak.cpp b/src/CPak.cpp old mode 100644 new mode 100755 diff --git a/src/CPak.h b/src/CPak.h old mode 100644 new mode 100755 diff --git a/src/CParticle.cpp b/src/CParticle.cpp old mode 100644 new mode 100755 diff --git a/src/CParticle.h b/src/CParticle.h old mode 100644 new mode 100755 diff --git a/src/CPersistData.cpp b/src/CPersistData.cpp old mode 100644 new mode 100755 diff --git a/src/CPersistData.h b/src/CPersistData.h old mode 100644 new mode 100755 diff --git a/src/CPersistant.cpp b/src/CPersistant.cpp old mode 100644 new mode 100755 diff --git a/src/CPersistant.h b/src/CPersistant.h old mode 100644 new mode 100755 diff --git a/src/CRadarBlip.cpp b/src/CRadarBlip.cpp old mode 100644 new mode 100755 diff --git a/src/CRadarBlip.h b/src/CRadarBlip.h old mode 100644 new mode 100755 diff --git a/src/CReference.cpp b/src/CReference.cpp old mode 100644 new mode 100755 diff --git a/src/CReference.h b/src/CReference.h old mode 100644 new mode 100755 diff --git a/src/CReplayData.cpp b/src/CReplayData.cpp old mode 100644 new mode 100755 diff --git a/src/CReplayData.h b/src/CReplayData.h old mode 100644 new mode 100755 diff --git a/src/CReplayDataHeader.h b/src/CReplayDataHeader.h old mode 100644 new mode 100755 diff --git a/src/CSpawnPoint.cpp b/src/CSpawnPoint.cpp old mode 100644 new mode 100755 diff --git a/src/CSpawnPoint.h b/src/CSpawnPoint.h old mode 100644 new mode 100755 diff --git a/src/CSprite.cpp b/src/CSprite.cpp old mode 100644 new mode 100755 diff --git a/src/CSprite.h b/src/CSprite.h old mode 100644 new mode 100755 diff --git a/src/CString.cpp b/src/CString.cpp old mode 100644 new mode 100755 diff --git a/src/CString.h b/src/CString.h old mode 100644 new mode 100755 diff --git a/src/CSwitch.cpp b/src/CSwitch.cpp old mode 100644 new mode 100755 diff --git a/src/CSwitch.h b/src/CSwitch.h old mode 100644 new mode 100755 diff --git a/src/CTeleporter.cpp b/src/CTeleporter.cpp old mode 100644 new mode 100755 diff --git a/src/CTeleporter.h b/src/CTeleporter.h old mode 100644 new mode 100755 diff --git a/src/CTrain.cpp b/src/CTrain.cpp old mode 100644 new mode 100755 diff --git a/src/CTrain.h b/src/CTrain.h old mode 100644 new mode 100755 diff --git a/src/CTrap.cpp b/src/CTrap.cpp old mode 100644 new mode 100755 diff --git a/src/CTrap.h b/src/CTrap.h old mode 100644 new mode 100755 diff --git a/src/CWeapon.cpp b/src/CWeapon.cpp old mode 100644 new mode 100755 diff --git a/src/CWeapon.h b/src/CWeapon.h old mode 100644 new mode 100755 diff --git a/src/CWidget.cpp b/src/CWidget.cpp old mode 100644 new mode 100755 diff --git a/src/CWidget.h b/src/CWidget.h old mode 100644 new mode 100755 diff --git a/src/aquaBoss.cpp b/src/aquaBoss.cpp old mode 100644 new mode 100755 diff --git a/src/aquaBoss.h b/src/aquaBoss.h old mode 100644 new mode 100755 diff --git a/src/bosses.cpp b/src/bosses.cpp old mode 100644 new mode 100755 diff --git a/src/bosses.h b/src/bosses.h old mode 100644 new mode 100755 diff --git a/src/bullets.cpp b/src/bullets.cpp old mode 100644 new mode 100755 index 1405476..b7ad722 --- a/src/bullets.cpp +++ b/src/bullets.cpp @@ -113,6 +113,11 @@ void addBullet(Entity *owner, float dx, float dy) { owner->reload = 4; } + + if (game.bulletsFired[game.currentWeapon] == 10000) + { + presentPlayerMedal("10000_Bullets"); + } } } diff --git a/src/bullets.h b/src/bullets.h old mode 100644 new mode 100755 index 6524f83..1059e24 --- a/src/bullets.h +++ b/src/bullets.h @@ -32,6 +32,7 @@ extern void addFireParticles(float x, float y, int amount); extern void checkSwitchContact(Entity *ent); extern void throwBrickParticles(float x, float y); extern void throwStalagParticles(float x, float y); +extern void presentPlayerMedal(const char *tname); extern Audio audio; extern Engine engine; diff --git a/src/cutscene.cpp b/src/cutscene.cpp old mode 100644 new mode 100755 diff --git a/src/cutscene.h b/src/cutscene.h old mode 100644 new mode 100755 diff --git a/src/defines.h b/src/defines.h old mode 100644 new mode 100755 diff --git a/src/defs.h b/src/defs.h old mode 100644 new mode 100755 index 1758ffb..a18a110 --- a/src/defs.h +++ b/src/defs.h @@ -359,6 +359,12 @@ enum { #ifndef GAMEPLAYMANUAL #define GAMEPLAYMANUAL "manual.html" #endif +#ifndef MEDAL_SERVER_HOST + #define MEDAL_SERVER_HOST "localhost" +#endif +#ifndef MEDAL_SERVER_PORT + #define MEDAL_SERVER_PORT 80 +#endif enum { @@ -371,10 +377,10 @@ enum { /* ############# debug ################## */ -#if DEBUG - #define debug(x) {printf("*** DEBUG: "); printf x;} -#else +#if USEPAK #define debug(x) {} +#else + #define debug(x) {printf("*** DEBUG: "); printf x;} #endif #ifndef IGNORE_FLAGTOKEN_ERRORS diff --git a/src/droidBoss.cpp b/src/droidBoss.cpp old mode 100644 new mode 100755 diff --git a/src/droidBoss.h b/src/droidBoss.h old mode 100644 new mode 100755 diff --git a/src/effects.cpp b/src/effects.cpp old mode 100644 new mode 100755 diff --git a/src/effects.h b/src/effects.h old mode 100644 new mode 100755 diff --git a/src/enemies.cpp b/src/enemies.cpp old mode 100644 new mode 100755 index 4ee1595..9179ebc --- a/src/enemies.cpp +++ b/src/enemies.cpp @@ -268,9 +268,8 @@ void doAI(Entity *enemy) // Don't enter areas you're not supposed to if (enemy->tx != (int)enemy->x) { - if (!(enemy->flags & ENT_FLIES)) + if (!(enemy->flags & (ENT_FLIES|ENT_SWIMS))) { - //if ((map.data[x][y] == MAP_AIR) || (map.data[x][y] >= MAP_DECORATION)) if (!map.isSolid(x, y)) { enemy->tx = (int)enemy->x; @@ -344,6 +343,18 @@ void doAI(Entity *enemy) lookForPlayer(enemy); } +void checkCombo() +{ + int old = game.currentComboHits; + + game.doCombo(); + + if (old == 24 && game.currentComboHits == 25) + { + presentPlayerMedal("25_Hit_Combo"); + } +} + void enemyBulletCollisions(Entity *bullet) { if (bullet->health < 1) @@ -439,12 +450,12 @@ void enemyBulletCollisions(Entity *bullet) { if (bullet->owner == &player) { - game.score += enemy->value; + addPlayerScore(enemy->value); game.currentMissionEnemiesDefeated++; if (player.currentWeapon != &weapon[WP_LASER]) { - game.doCombo(); + checkCombo(); } checkObjectives(comboString, false); @@ -494,7 +505,7 @@ void enemyBulletCollisions(Entity *bullet) { if (player.currentWeapon != &weapon[WP_LASER]) { - game.doCombo(); + checkCombo(); checkObjectives(comboString, false); } } diff --git a/src/enemies.h b/src/enemies.h old mode 100644 new mode 100755 index 231ca69..5353d13 --- a/src/enemies.h +++ b/src/enemies.h @@ -34,6 +34,8 @@ extern void addSmokeAndFire(Entity *ent, float dx, float dy, int amount); extern void checkObjectives(const char *name, bool alwaysInform); extern Weapon *getWeaponByName(const char *name); extern void addFireTrailParticle(float x, float y); +extern void addPlayerScore(int score); +extern void presentPlayerMedal(const char *tname); extern void doGaldovAI(Entity *galdov); extern void addTeleportParticles(float x, float y, int amount, int soundToPlay); diff --git a/src/entities.cpp b/src/entities.cpp old mode 100644 new mode 100755 diff --git a/src/entities.h b/src/entities.h old mode 100644 new mode 100755 diff --git a/src/explosions.cpp b/src/explosions.cpp old mode 100644 new mode 100755 index c5df00f..6e0ac98 --- a/src/explosions.cpp +++ b/src/explosions.cpp @@ -90,7 +90,7 @@ void addExplosion(float x, float y, int radius, Entity *owner) if (owner == &player) { - game.score += enemy->value; + addPlayerScore(enemy->value); } } diff --git a/src/explosions.h b/src/explosions.h old mode 100644 new mode 100755 index 760d0b3..fbdd416 --- a/src/explosions.h +++ b/src/explosions.h @@ -25,6 +25,7 @@ extern void throwAndDamageEntity(Entity *ent, int damage, int minDX, int maxDX, extern void addSmokeAndFire(Entity *ent, float dx, float dy, int amount); extern void addBlood(Entity *ent, float dx, float dy, int amount); extern void gibPlayer(); +extern void addPlayerScore(int score); extern Audio audio; extern Engine engine; diff --git a/src/finalBattle.cpp b/src/finalBattle.cpp old mode 100644 new mode 100755 index c6d1564..cf06372 --- a/src/finalBattle.cpp +++ b/src/finalBattle.cpp @@ -230,6 +230,7 @@ void galdovFinalDie() self->react = NULL; Math::removeBit(&self->flags, ENT_FLIES); Math::removeBit(&self->flags, ENT_FIRETRAIL); + presentPlayerMedal("Final_Battle"); } self->setActionFinished(1); diff --git a/src/finalBattle.h b/src/finalBattle.h old mode 100644 new mode 100755 index 9e8895a..8278d70 --- a/src/finalBattle.h +++ b/src/finalBattle.h @@ -33,6 +33,7 @@ extern Weapon *getRandomGaldovWeapon(); extern Weapon *getRandomAimedWeapon(); extern void dropItems(int x, int y); extern void addItem(int itemType, const char *name, int x, int y, const char *spriteName, int health, int value, int flags, bool randomMovement); +extern void presentPlayerMedal(const char *tname); extern Audio audio; extern Engine engine; diff --git a/src/galdov.cpp b/src/galdov.cpp old mode 100644 new mode 100755 diff --git a/src/galdov.h b/src/galdov.h old mode 100644 new mode 100755 diff --git a/src/game.cpp b/src/game.cpp old mode 100644 new mode 100755 index 8fa42b2..cff9414 --- a/src/game.cpp +++ b/src/game.cpp @@ -296,6 +296,7 @@ int gameover() } SDL_Surface *gameover = graphics.quickSprite("Game Over", graphics.loadImage("gfx/main/gameover.png")); + graphics.setTransparent(gameover); audio.loadGameOverMusic(); audio.playMusic(); @@ -568,7 +569,7 @@ int doGame() Uint32 then, frames, frameLimit, millis, frameCounter; - #if DEBUG + #if !USEPAK Uint32 now; char fps[10]; strcpy(fps, "fps"); @@ -584,10 +585,12 @@ int doGame() { player.health = -99; + //#if USEPAK if ((!map.isBossMission) && (replayData.replayMode == REPLAY_MODE::NONE)) { showMissionInformation(); } + //#endif game.levelsStarted++; } @@ -805,10 +808,11 @@ int doGame() if ((engine.keyState[SDLK_F3]) && (engine.cheatSkipLevel)) { autoCompleteAllObjectives(true); + engine.keyState[SDLK_F3] = 0; engine.setInfoMessage("Skipping Mission...", 2, INFO_OBJECTIVE); } - #if DEBUG + #if !USEPAK if (engine.keyState[SDLK_F1]) { autoCompleteAllObjectives(false); @@ -835,7 +839,7 @@ int doGame() if (game.missionOverReason == MIS_GAMECOMPLETE) frameLimit = SDL_GetTicks() + 64; - #if DEBUG + #if !USEPAK graphics.drawString(fps, 600, 30, true, graphics.screen); if (SDL_GetTicks() > frameCounter + 500) diff --git a/src/game.h b/src/game.h old mode 100644 new mode 100755 index 134873e..787e23b --- a/src/game.h +++ b/src/game.h @@ -67,6 +67,8 @@ extern void processPostMissionData(); extern void clearAllMissionData(); extern void saveGame(); +extern void presentPlayerMedal(const char *tname); + extern Audio audio; extern Config config; extern Engine engine; diff --git a/src/graphics.cpp b/src/graphics.cpp old mode 100644 new mode 100755 diff --git a/src/graphics.h b/src/graphics.h old mode 100644 new mode 100755 diff --git a/src/headers.h b/src/headers.h old mode 100644 new mode 100755 index 728ce02..f850159 --- a/src/headers.h +++ b/src/headers.h @@ -39,6 +39,7 @@ extern DECLSPEC int SDLCALL SDL_GetGamma(float *red, float *green, float *blue); #include "SDL/SDL_image.h" #include "SDL/SDL_mixer.h" #include "SDL/SDL_ttf.h" +#include "SDL/SDL_net.h" #endif #include @@ -96,3 +97,4 @@ extern DECLSPEC int SDLCALL SDL_GetGamma(float *red, float *green, float *blue); #include "CReplayDataHeader.h" #include "CReplayData.h" #include "CConfig.h" +#include "CMedalServer.h" diff --git a/src/hub.cpp b/src/hub.cpp old mode 100644 new mode 100755 index 6e34265..f6540ef --- a/src/hub.cpp +++ b/src/hub.cpp @@ -405,16 +405,6 @@ void createMIAPanel(int start, int max) bool requirementMet(const char *requiredLevel) { - if (engine.cheatLevels) - { - return true; - } - - if (strcmp(requiredLevel, "@none@") == 0) - { - return true; - } - if (strstr(requiredLevel, "Stages")) { int stages = 0; @@ -422,9 +412,20 @@ bool requirementMet(const char *requiredLevel) if (game.stagesCleared >= stages) { + presentPlayerMedal(requiredLevel); return true; } } + + if (engine.cheatLevels) + { + return true; + } + + if (strcmp(requiredLevel, "@none@") == 0) + { + return true; + } return gameData.requiredLevelCleared(requiredLevel); } @@ -440,6 +441,9 @@ int doHub() graphics.loadBackground("gfx/main/worldMap.jpg"); audio.loadMusic("music/forAFriend.mod"); + // we might want this now, for medals + audio.loadSound(SND_ITEM, "sound/item.wav"); + graphics.quickSprite("cheatHeader", graphics.loadImage("gfx/main/cheats.png")); graphics.quickSprite("optionsHeader", graphics.loadImage("gfx/main/options.png")); graphics.quickSprite("keyHeader", graphics.loadImage("gfx/main/keyConfig.png")); @@ -491,7 +495,7 @@ int doHub() char name[50], level[50], requiredLevel[50]; int x, y; - #if DEBUG + #if !USEPAK char pos[50]; #endif @@ -583,6 +587,8 @@ int doHub() hubList.clear(); return SECTION_EASYOVER; } + + presentPlayerMedal("World_Complete"); } audio.playMusic(); @@ -609,7 +615,7 @@ int doHub() graphics.drawRect(10, 430, 620, 40, graphics.black, graphics.white, graphics.screen); - #if DEBUG + #if !USEPAK sprintf(pos, "%.3d:%.3d", engine.getMouseX(), engine.getMouseY()); graphics.drawString(pos, 320, 15, true, graphics.screen); #endif diff --git a/src/hub.h b/src/hub.h old mode 100644 new mode 100755 index 7fbdf83..3c48939 --- a/src/hub.h +++ b/src/hub.h @@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "headers.h" extern void showOptions(); +extern void presentPlayerMedal(const char *tname); extern Audio audio; extern Config config; diff --git a/src/info.cpp b/src/info.cpp old mode 100644 new mode 100755 index cdf365c..6945f46 --- a/src/info.cpp +++ b/src/info.cpp @@ -213,8 +213,10 @@ void doPauseInfo() graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00); + //#if !USEPAK sprintf(string, _("Position = %d:%d"), (int)player.x, (int)player.y); graphics.drawString(string, 5, 25, false, graphics.screen); + //#endif graphics.drawString(_("*** PAUSED ***"), 320, y, TXT_CENTERED, graphics.screen); diff --git a/src/info.h b/src/info.h old mode 100644 new mode 100755 diff --git a/src/init.cpp b/src/init.cpp old mode 100644 new mode 100755 index 66e0949..cf555ca --- a/src/init.cpp +++ b/src/init.cpp @@ -195,6 +195,51 @@ void saveConfig() debug(("Output Type = %d\n", game.output)); } +// +// see if we can load the private keyState +// +int initMedalService(void *data) +{ + SDL_mutexP(medalServer.lock); + + char connectMessage[1024]; + sprintf(connectMessage, "Contacting Medal Server - %s:%d", MEDAL_SERVER_HOST, MEDAL_SERVER_PORT); + + graphics.showMedalMessage(-1, connectMessage); + + char keyPath[PATH_MAX]; + char privateKey[20]; + + sprintf(keyPath, "%smedalKey", engine.userHomeDirectory); + + debug(("Loading private key from %s\n", keyPath)); + + FILE *fp = fopen(keyPath, "rb"); + + if (!fp) + { + graphics.showMedalMessage(-1, "No Medal Key found - Online functions disabled"); + SDL_mutexV(medalServer.lock); + return 0; + } + + fscanf(fp, "%s", privateKey); + + fclose(fp); + + if (!medalServer.connect(privateKey)) + { + graphics.showMedalMessage(-1, "Medal Server Connection Failed - Online functions disabled"); + return 0; + } + + graphics.showMedalMessage(-1, "Connected to Medal Server"); + + SDL_mutexV(medalServer.lock); + + return 1; +} + /* Chugg chugg chugg.... brrr... chugg chugg chugg...brrrrrr... chugg ch.. BRRRRRRRRRRRRRRRRRMMMMMMMMMMMMMMMMMMM!! Well, hopefully anyway! ;) @@ -255,7 +300,7 @@ void initSystem() { if (Mix_OpenAudio(22050, AUDIO_S16, engine.useAudio, 1024) < 0) { - printf("Warning: Couldn't set 22050 Hz 16-bit audio - Reason: %s\n", Mix_GetError()); + printf("Warning: Couldn't set 44100 Hz 16-bit audio - Reason: %s\n", Mix_GetError()); printf("Sound and Music will be disabled\n"); engine.useAudio = 0; } @@ -317,6 +362,11 @@ void initSystem() audio.loadSound(SND_CHEAT, "sound/Lock And Load!!!"); audio.loadSound(SND_HIGHLIGHT, "sound/menu.wav"); audio.loadSound(SND_SELECT, "sound/select.wav"); + + graphics.medal[0] = graphics.loadImage("gfx/main/medal_bronze_1.png"); + graphics.medal[1] = graphics.loadImage("gfx/main/award_star_silver_3.png"); + graphics.medal[2] = graphics.loadImage("gfx/main/shield.png"); + graphics.medal[3] = graphics.loadImage("gfx/main/ruby.png"); SDL_Surface *device = graphics.loadImage("gfx/main/alienDevice.png"); @@ -342,6 +392,23 @@ void initSystem() checkForLicense(); } + if (SDLNet_Init() < 0) + { + printf("SDLNet_Init: %s\n", SDLNet_GetError()); + } + else + { + SDL_Thread *thread = SDL_CreateThread(initMedalService, NULL); + + if (thread == NULL) + { + printf("Unable to create thread: %s\n", SDL_GetError()); + printf("Calling medal server directly\n"); + initMedalService(NULL); + return; + } + } + engine.saveConfig = true; debug(("Init Complete...\n")); @@ -408,6 +475,9 @@ void cleanup() debug(("Closing TTF...\n")); TTF_Quit(); + + debug(("Closing NET...\n")); + SDLNet_Quit(); debug(("Closing SDL Sub System...\n")); SDL_Quit(); diff --git a/src/init.h b/src/init.h old mode 100644 new mode 100755 index 04e8221..2b6baaa --- a/src/init.h +++ b/src/init.h @@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif #include #include "headers.h" +#include "SDL_thread.h" extern SDL_Surface *loadImage(const char *filename); @@ -36,3 +37,4 @@ extern Game game; extern Graphics graphics; extern Map map; extern ReplayData replayData; +extern MedalServer medalServer; diff --git a/src/intro.cpp b/src/intro.cpp old mode 100644 new mode 100755 diff --git a/src/intro.h b/src/intro.h old mode 100644 new mode 100755 diff --git a/src/items.cpp b/src/items.cpp old mode 100644 new mode 100755 index 0a54e67..4db5fc8 --- a/src/items.cpp +++ b/src/items.cpp @@ -243,7 +243,7 @@ void pickUpItem(Entity *item) case ITEM_POINTS5: case ITEM_POINTS6: case ITEM_POINTS7: - game.score += item->value; + addPlayerScore(item->value); audio.playSound(SND_ITEM, CH_ITEM); break; case ITEM_CHERRY: @@ -289,6 +289,11 @@ void pickUpItem(Entity *item) engine.setInfoMessage(string, 0, INFO_NORMAL); checkObjectives(item->name, true); + + if (strcmp(item->name, "LRTS") == 0) + { + presentPlayerMedal("LRTS_PART"); + } } } diff --git a/src/items.h b/src/items.h old mode 100644 new mode 100755 index 45909ce..962c555 --- a/src/items.h +++ b/src/items.h @@ -27,6 +27,8 @@ extern bool checkBrickContact(Entity *object); extern void moveEntity(Entity *ent); extern void checkObjectives(const char *name, bool alwaysInform); extern void addTeleportParticles(float x, float y, int amount, int soundToPlay); +extern void addPlayerScore(int score); +extern void presentPlayerMedal(const char *tname); extern Audio audio; extern Engine engine; diff --git a/src/lineDefs.cpp b/src/lineDefs.cpp old mode 100644 new mode 100755 index ee55f84..81c5f48 --- a/src/lineDefs.cpp +++ b/src/lineDefs.cpp @@ -64,7 +64,7 @@ void doLineDefs() if ((absX < 800) && (absY < 600)) { - #if DEBUG + #if !USEPAK graphics.drawRect(x, y, lineDef->width, lineDef->height, graphics.red, graphics.screen); #endif diff --git a/src/lineDefs.h b/src/lineDefs.h old mode 100644 new mode 100755 diff --git a/src/loadSave.cpp b/src/loadSave.cpp old mode 100644 new mode 100755 index 1bb3e5a..cfb509d --- a/src/loadSave.cpp +++ b/src/loadSave.cpp @@ -328,6 +328,7 @@ void saveGame() return; graphics.setFontSize(1); + graphics.setFontColor(0xff, 0xff, 0xff, 0x00, 0x00, 0x00); sprintf(message, _("Saving Game to Save Slot #%d. Please Wait..."), slot + 1); graphics.drawString(message, 320, 220, true, graphics.screen); graphics.updateScreen(); diff --git a/src/loadSave.h b/src/loadSave.h old mode 100644 new mode 100755 diff --git a/src/main.cpp b/src/main.cpp old mode 100644 new mode 100755 index 00bdcf9..020724c --- a/src/main.cpp +++ b/src/main.cpp @@ -94,7 +94,7 @@ void showVersion() printf("Blob Wars, Episode I - Metal Blob Solid (Version %.2f, Release %d)\n", VERSION, RELEASE); printf("Copyright (C) 2004 Parallel Realities\n"); printf("Licensed under the GNU General Public License (GPL)\n\n"); - exit(0); +// exit(0); } int main(int argc, char *argv[]) @@ -131,7 +131,7 @@ int main(int argc, char *argv[]) else if (strcmp(argv[i], "-map") == 0) {game.setMapName(argv[++i]); requiredSection = SECTION_GAME;} else if (strcmp(argv[i], "-listmaps") == 0) listMaps(); - #if DEBUG + #if !USEPAK else if (strcmp(argv[i], "-showsprites") == 0) showSprites = true; else if (strcmp(argv[i], "-hub") == 0) hub = true; else if (strcmp(argv[i], "-randomscreens") == 0) graphics.takeRandomScreenShots = true; diff --git a/src/main.h b/src/main.h old mode 100644 new mode 100755 index be6d7f4..b5697d3 --- a/src/main.h +++ b/src/main.h @@ -44,6 +44,8 @@ extern void showMissionClear(); extern void checkStartCutscene(); extern void easyGameFinished(); +extern void presentPlayerMedal(const char *tname); + Audio audio; Config config; Engine engine; @@ -52,6 +54,7 @@ GameData gameData; Graphics graphics; Map map; ReplayData replayData; +MedalServer medalServer; Entity defEnemy[MAX_ENEMIES]; Entity defItem[MAX_ITEMS]; diff --git a/src/map.cpp b/src/map.cpp old mode 100644 new mode 100755 index 70279d9..e7083c8 --- a/src/map.cpp +++ b/src/map.cpp @@ -51,7 +51,7 @@ void drawMap() { graphics.blit(graphics.tile[brick], r.x, r.y, graphics.screen, false); - #if DEBUG + #if !USEPAK if ((brick >= MAP_NORESET) && (brick < MAP_DECORATION)) { graphics.drawRect(r.x, r.y, 32, 4, graphics.yellow, graphics.screen); diff --git a/src/map.h b/src/map.h old mode 100644 new mode 100755 diff --git a/src/mapData.cpp b/src/mapData.cpp old mode 100644 new mode 100755 index 7696363..1ccef79 --- a/src/mapData.cpp +++ b/src/mapData.cpp @@ -247,7 +247,8 @@ void getMapTokens() else if (strcmp("AMBIENCE", mapEntity) == 0) { sscanf(token, "%*s %*s %s", string[0]); - audio.loadSound(SND_AMBIANCE, string[0]); + if (!audio.loadSound(SND_AMBIANCE, string[0])) + graphics.showErrorAndExit(ERR_FILE, string[0]); } else if (strcmp("WATERLEVEL", mapEntity) == 0) { diff --git a/src/mapData.h b/src/mapData.h old mode 100644 new mode 100755 diff --git a/src/mapEditor.cpp b/src/mapEditor.cpp old mode 100644 new mode 100755 index e8096de..5810419 --- a/src/mapEditor.cpp +++ b/src/mapEditor.cpp @@ -20,9 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "mapEditor.h" -Config config; -ReplayData replayData; - void drawMap(int mapX, int mapY) { SDL_Rect r; @@ -434,10 +431,6 @@ int main(int argc, char *argv[]) exit(1); } - config.engine = &engine; - - replayData.reset(); - atexit(cleanup); engine.useAudio = 0; @@ -476,7 +469,7 @@ int main(int argc, char *argv[]) { engine.getInput(); config.populate(); - config.doPause(); + engine.doPause(); engine.doFrameLoop(); graphics.updateScreen(); diff --git a/src/mapEditor.h b/src/mapEditor.h old mode 100644 new mode 100755 diff --git a/src/mias.cpp b/src/mias.cpp old mode 100644 new mode 100755 index d9de863..5936f9b --- a/src/mias.cpp +++ b/src/mias.cpp @@ -153,6 +153,24 @@ void doMIAs() sprintf(message, _("Rescue %d MIAs - Objective Complete - Checkpoint Reached!"), map.requiredMIAs); game.setObjectiveCheckPoint(); } + + // MIA Medals + if (game.totalMIAsRescued == 50) + { + presentPlayerMedal("50_MIA"); + } + else if (game.totalMIAsRescued == 100) + { + presentPlayerMedal("100_MIA"); + } + else if (game.totalMIAsRescued == 200) + { + presentPlayerMedal("200_MIA"); + } + else if (game.totalMIAsRescued == 227) + { + presentPlayerMedal("ALL_MIA"); + } engine.setInfoMessage(message, 1, INFO_OBJECTIVE); } diff --git a/src/mias.h b/src/mias.h old mode 100644 new mode 100755 index 07e3244..55fed7c --- a/src/mias.h +++ b/src/mias.h @@ -30,3 +30,4 @@ extern Map map; extern Entity player; extern void moveEntity(Entity *ent); +extern void presentPlayerMedal(const char *tname); diff --git a/src/mission.cpp b/src/mission.cpp old mode 100644 new mode 100755 index 1bf4670..4d6e989 --- a/src/mission.cpp +++ b/src/mission.cpp @@ -66,6 +66,7 @@ void processPostMissionData() if (!gameData.stagePreviouslyCleared(game.stageName)) { + presentPlayerMedal(game.stageName); game.stagesCleared++; } @@ -110,6 +111,16 @@ void processPostMissionData() } game.totalUpStats(); + + if (game.totalEnemiesDefeated >= 1000) + { + presentPlayerMedal("1000_Enemies"); + } + + if (game.totalEnemiesDefeated >= 2500) + { + presentPlayerMedal("2500_Enemies"); + } } void clearAllMissionData() diff --git a/src/mission.h b/src/mission.h old mode 100644 new mode 100755 index eee869a..5ec0db5 --- a/src/mission.h +++ b/src/mission.h @@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern bool perfectlyCompleted(); extern void doParticles(); extern void saveGame(); +extern void presentPlayerMedal(const char *tname); extern Audio audio; extern Config config; diff --git a/src/objectives.cpp b/src/objectives.cpp old mode 100644 new mode 100755 index 7d78fbc..edc5ad4 --- a/src/objectives.cpp +++ b/src/objectives.cpp @@ -281,12 +281,14 @@ void checkObjectives(const char *name, bool alwaysInform) { sprintf(message, "Got the Aqua Lung! You can now swim forever!"); game.hasAquaLung = true; + presentPlayerMedal("Aqua_Lung"); } if (strcmp(objective->description, "Get the Jetpack") == 0) { sprintf(message, "Got the Jetpack! Press SPACE to Activate!"); game.hasJetPack = true; + presentPlayerMedal("Jetpack"); } engine.setInfoMessage(message, 9, INFO_OBJECTIVE); diff --git a/src/objectives.h b/src/objectives.h old mode 100644 new mode 100755 index 0df33f6..a6a57ee --- a/src/objectives.h +++ b/src/objectives.h @@ -20,6 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "headers.h" +extern void presentPlayerMedal(const char *tname); + extern Audio audio; extern Engine engine; extern Game game; diff --git a/src/obstacles.cpp b/src/obstacles.cpp old mode 100644 new mode 100755 diff --git a/src/obstacles.h b/src/obstacles.h old mode 100644 new mode 100755 diff --git a/src/options.cpp b/src/options.cpp old mode 100644 new mode 100755 diff --git a/src/options.h b/src/options.h old mode 100644 new mode 100755 diff --git a/src/pak.cpp b/src/pak.cpp old mode 100644 new mode 100755 diff --git a/src/pak.h b/src/pak.h old mode 100644 new mode 100755 diff --git a/src/particles.cpp b/src/particles.cpp old mode 100644 new mode 100755 diff --git a/src/particles.h b/src/particles.h old mode 100644 new mode 100755 diff --git a/src/player.cpp b/src/player.cpp old mode 100644 new mode 100755 index ac33957..4ce9892 --- a/src/player.cpp +++ b/src/player.cpp @@ -20,6 +20,83 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "player.h" +int medalWorker(void *data) +{ + char *tname = (char*)data; + + SDL_mutexP(medalServer.lock); + + int type = medalServer.postMedal(tname); + + while (!graphics.canShowMedalMessage()) + { + SDL_Delay(100); + } + + SDL_Delay(100); + + if (type >= 1 && type <= 3) + { + audio.playSound(SND_ITEM, CH_ANY); + graphics.showMedalMessage(type, medalServer.getMessage()); + + if (medalServer.hasRuby()) + { + while (!graphics.canShowMedalMessage()) + { + SDL_Delay(100); + } + + SDL_Delay(100); + + audio.playSound(SND_ITEM, CH_ANY); + graphics.showMedalMessage(4, medalServer.getRubyMessage()); + } + } + + SDL_mutexV(medalServer.lock); + + delete tname; + + return type; +} + +void presentPlayerMedal(const char *tname) +{ + // Copy the input, so that threading + // doesn't trip us up! + char *data = new char[128]; + strcpy(data, tname); + + SDL_Thread *thread = SDL_CreateThread(medalWorker, (void*)data); + + if (thread == NULL) + { + printf("Unable to create thread: %s\n", SDL_GetError()); + printf("Calling medal server directly\n"); + medalWorker((void*)data); + return; + } +} + +void addPlayerScore(int score) +{ + if (game.score < 100000 && game.score + score >= 100000) + { + presentPlayerMedal("Score_100000"); + } + else if (game.score < 250000 && game.score + score >= 250000) + { + presentPlayerMedal("Score_250000"); + } + else if (game.score < 500000 && game.score + score >= 500000) + { + presentPlayerMedal("Score_500000"); + } + + game.score += score; +} + void resetPlayer() { game.getCheckPoint(&player.x, &player.y); @@ -352,7 +429,7 @@ void doPlayer() } } - #if DEBUG + #if !USEPAK if (engine.keyState[SDLK_1]) player.currentWeapon = &weapon[WP_PISTOL]; else if (engine.keyState[SDLK_2]) diff --git a/src/player.h b/src/player.h old mode 100644 new mode 100755 index a2f997e..9d5a43e --- a/src/player.h +++ b/src/player.h @@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "headers.h" +#include "SDL_thread.h" extern void throwAndDamageEntity(Entity *ent, int damage, int minDX, int maxDX, int DY); extern void moveEntity(Entity *ent); @@ -36,6 +37,7 @@ extern Engine engine; extern Game game; extern Graphics graphics; extern Map map; +extern MedalServer medalServer; extern Entity player; extern Weapon weapon[MAX_WEAPONS]; diff --git a/src/resources.cpp b/src/resources.cpp old mode 100644 new mode 100755 index 5308eff..51a516a --- a/src/resources.cpp +++ b/src/resources.cpp @@ -22,7 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. void loadSound(int index, const char *filename) { - audio.loadSound(index, filename); + if (!audio.loadSound(index, filename)) + graphics.showErrorAndExit(ERR_FILE, filename); graphics.showLoading(1, 30); } diff --git a/src/resources.h b/src/resources.h old mode 100644 new mode 100755 diff --git a/src/spawnPoints.cpp b/src/spawnPoints.cpp old mode 100644 new mode 100755 diff --git a/src/spawnPoints.h b/src/spawnPoints.h old mode 100644 new mode 100755 diff --git a/src/switches.cpp b/src/switches.cpp old mode 100644 new mode 100755 diff --git a/src/switches.h b/src/switches.h old mode 100644 new mode 100755 diff --git a/src/tankBoss.cpp b/src/tankBoss.cpp old mode 100644 new mode 100755 diff --git a/src/tankBoss.h b/src/tankBoss.h old mode 100644 new mode 100755 diff --git a/src/teleporters.cpp b/src/teleporters.cpp old mode 100644 new mode 100755 diff --git a/src/teleporters.h b/src/teleporters.h old mode 100644 new mode 100755 diff --git a/src/title.cpp b/src/title.cpp old mode 100644 new mode 100755 diff --git a/src/title.h b/src/title.h old mode 100644 new mode 100755 diff --git a/src/trains.cpp b/src/trains.cpp old mode 100644 new mode 100755 diff --git a/src/trains.h b/src/trains.h old mode 100644 new mode 100755 diff --git a/src/traps.cpp b/src/traps.cpp old mode 100644 new mode 100755 diff --git a/src/traps.h b/src/traps.h old mode 100644 new mode 100755 diff --git a/src/triggers.cpp b/src/triggers.cpp old mode 100644 new mode 100755 diff --git a/src/triggers.h b/src/triggers.h old mode 100644 new mode 100755 diff --git a/src/weapons.cpp b/src/weapons.cpp old mode 100644 new mode 100755 diff --git a/src/weapons.h b/src/weapons.h old mode 100644 new mode 100755 diff --git a/src/widgets.cpp b/src/widgets.cpp old mode 100644 new mode 100755 diff --git a/src/widgets.h b/src/widgets.h old mode 100644 new mode 100755 -- 2.39.5