<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Basic Turret Defense Game</title>
		<link>http://www.allegro.cc/forums/view/602590</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 27 Dec 2009 18:28:00 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><h1>Wuh!?</h1><p>

Original idea from <a href="http://www.allegro.cc/forums/thread/602586">this thread</a></p><p>OK, the tank idea was cool but it eventually turned into a a turret game.  The tank moving/aiming controls didn&#39;t work so well in a single player, a little slow, so I turned the tanks into turrets and did a turret-defense type game.</p><p>The game is bare-bones.  It&#39;s for testing the &quot;robustness&quot; of my little framework thing I&#39;m working on.  Technically, the game came together quickly!  If I feel like it, I might add damage to the turrets, shields (shields are drawn but they serve no purpose), power-ups, etc.</p><h2>Screenshot</h2><p>

<span class="remote-thumbnail"><span class="json">{"name":"600036","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/9\/09fc3b48d9ef600f6449dde51a2f5ba7.png","w":626,"h":491,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/9\/09fc3b48d9ef600f6449dde51a2f5ba7"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/0/9/09fc3b48d9ef600f6449dde51a2f5ba7-240.jpg" alt="600036" width="240" height="188" /></span></p><h2>Download</h2><p>
<a href="http://www.allegro.cc/files/attachment/600037">Basic Turret Defense Game V1</a></p><h2>Instructions</h2><p>

</p><ol><li><p>shoot with the left turret using mouse b1
</p></li><li><p>shoot with the right using mouse b2
</p></li><li><p>there can only be 4 bullets on the screen at a time.
</p></li><li><p>have fun watching in debug mode (F1) <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></li><li><p>starts slow, speeds up for difficulty
</p></li><li><p>enemy bombs are positioned randomly, so you may experience an even distribution in one game only to have massive waves of bombs in another.
</p></li><li><p>no sound
</p></li><li><p>press ESC to quit, or use the close button in your window. (I recommend ESC, the close button can still get backed up from events)
</p></li><li><p>only one &quot;level&quot;
</p></li><li><p>if you lose, close and start again.
</p></li><li><p>on the top left is the number of enemies left</p></li></ol><h2>Questions</h2><p>

</p><ol><li><p>How many tries does it take you to win?
</p></li><li><p>Do you experience any slow-downs or serious time stutters?
</p></li><li><p>Does it run? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> need dlls?
</p></li></ol></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 21 Dec 2009 21:03:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1. First attempt, with not even one that manged to get by my furious burst of fire.</p><p>2. None (2ghz laptop)<br />3. It does run, I would even say smooth.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Malinus)</author>
		<pubDate>Mon, 21 Dec 2009 21:58:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So you expect me to boot into windows just to see your game?<br />NSND; No Source No Download.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Slartibartfast)</author>
		<pubDate>Mon, 21 Dec 2009 22:18:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1) I never winned. I tried twice. I suck at double coordination games. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /><br />2) Nope. Athlon X2 2.7 GHZ<br />3) Yes, pretty smoothly.</p><p>I like the idea of your framework(I red your other post). Maybe I&#39;ll start a fresh one after CH. It&#39;d be so much cleaner than the mess I have actually <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Mon, 21 Dec 2009 22:31:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Slart: There&#39;s been a screenshot there since he started the thread <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 21 Dec 2009 23:29:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is the sourcecode in the screenshot?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 21 Dec 2009 23:43:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, the meaning of NSND changed? I didn&#39;t get the memo. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 21 Dec 2009 23:45:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It changed for this topic at least.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Tue, 22 Dec 2009 00:18:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It changed for the scope of my posts in this thread.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Slartibartfast)</author>
		<pubDate>Tue, 22 Dec 2009 00:22:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What&#39;s the Einstein image in the data folder used for? <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Tue, 22 Dec 2009 00:39:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Holy <span class="cuss"><span><span class="cuss"><span>shit</span></span></span></span>, when did Allegro become bloated with 10+ dlls?</p><p>Anyway, I didn&#39;t win, only tried a few times though. Ran smoothly, ran fine. The bursts were weird, and the game was difficult at spots where you&#39;d have a bunch of dots bunched together but can only shoot 4 bullets (also, the bullets slowing down near their destination seemed really weird at first).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 22 Dec 2009 00:42:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1) only tried once, was pretty hard with a trackpad (especially since it only has one button!)<br />2) Nice and smooth<br />3) Probably too many dlls <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 22 Dec 2009 00:48:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/843819#target">BAF</a> said:</div><div class="quote"><p>Holy <span class="cuss"><span><span class="cuss"><span>shit</span></span></span></span>, when did Allegro become bloated with 10+ dlls?</p></div></div><p>

You haven&#39;t been paying attention to Allegro 5&#39;s development, have you?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Tue, 22 Dec 2009 01:39:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>So you expect me to boot into windows just to see your game?</p></div></div><p>Either that or buy a copy if Windows if you don&#039;t have it. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>NSND; No Source No Download.</p></div></div><p>No download then.  My source code is still top secret. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /><img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />  Not to say that I don&#039;t support Linux, just not for this purpose.  If I were to make a real game then I&#039;d look into providing some kind of support for the other platforms.</p><p>Apart from the framework code, here&#039;s the code I wrote for the actual game:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>Object tank1<span class="k2">;</span>
<span class="number">   2</span>Object turret1<span class="k2">;</span>
<span class="number">   3</span>
<span class="number">   4</span>Object tank2<span class="k2">;</span>
<span class="number">   5</span>Object turret2<span class="k2">;</span>
<span class="number">   6</span>
<span class="number">   7</span>Object bullet1<span class="k2">;</span>
<span class="number">   8</span>Object bullet2<span class="k2">;</span>
<span class="number">   9</span>Object bullet3<span class="k2">;</span>
<span class="number">  10</span>Object bullet4<span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span>Object title_text<span class="k2">;</span>
<span class="number">  13</span>
<span class="number">  14</span>Object sheild1<span class="k2">;</span>
<span class="number">  15</span>Object sheild2<span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="p">#define TURRET_ROTATION_SPEED 0.01f</span>
<span class="number">  18</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">int</span> tank_strength <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  21</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">float</span> sheild_max_scale <span class="k3">=</span> <span class="n">1</span>.<span class="n">2</span><span class="k2">;</span>
<span class="number">  24</span><span class="k1">float</span> sheild_min_scale <span class="k3">=</span> <span class="n">0</span>.<span class="n">9</span><span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span>
<span class="number">  27</span>
<span class="number">  28</span>Object win_notification<span class="k2">;</span>
<span class="number">  29</span>Object win_notification_2<span class="k2">;</span>
<span class="number">  30</span>
<span class="number">  31</span>
<span class="number">  32</span>Object fail_notification<span class="k2">;</span>
<span class="number">  33</span>Object fail_notification_2<span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span>
<span class="number">  36</span>
<span class="number">  37</span><span class="k1">enum</span> <span class="k2">{</span> GAME_STATE_PLAYING, GAME_STATE_WIN, GAME_STATE_FAIL <span class="k2">}</span><span class="k2">;</span>
<span class="number">  38</span><span class="k1">int</span> game_state <span class="k3">=</span> GAME_STATE_PLAYING<span class="k2">;</span>
<span class="number">  39</span>
<span class="number">  40</span>
<span class="number">  41</span>
<span class="number">  42</span>vector<span class="k3">&lt;</span>Object <span class="k3">*</span><span class="k3">&gt;</span> enemies<span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span>
<span class="number">  45</span>
<span class="number">  46</span><span class="k1">void</span> init_bullet_position<span class="k2">(</span>Object <span class="k3">*</span>bullet<span class="k2">)</span>
<span class="number">  47</span><span class="k2">{</span>
<span class="number">  48</span>  bullet-&gt;position<span class="k2">(</span><span class="k3">-</span><span class="n">300</span>, <span class="k3">-</span><span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span><span class="k2">}</span>
<span class="number">  50</span>
<span class="number">  51</span>
<span class="number">  52</span><span class="k1">void</span> initialize<span class="k2">(</span><span class="k2">)</span>
<span class="number">  53</span><span class="k2">{</span>
<span class="number">  54</span>  tank1.set_image<span class="k2">(</span><span class="s">"data/images/tank.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>  tank1.position<span class="k2">(</span><span class="n">100</span>, screen_h-160<span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>  tank1.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>  tank1.scale_x <span class="k3">=</span> <span class="n">0</span>.<span class="n">75</span><span class="k2">;</span>
<span class="number">  58</span>  tank1.scale_y <span class="k3">=</span> <span class="n">0</span>.<span class="n">75</span><span class="k2">;</span>
<span class="number">  59</span>  tank1.position_z <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>  tank2.set_image<span class="k2">(</span><span class="s">"data/images/tank.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>  tank2.position<span class="k2">(</span>screen_w-100, screen_h-160<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>  tank2.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>  tank2.scale_x <span class="k3">=</span> <span class="n">0</span>.<span class="n">75</span><span class="k2">;</span>
<span class="number">  65</span>  tank2.scale_y <span class="k3">=</span> <span class="n">0</span>.<span class="n">75</span><span class="k2">;</span>
<span class="number">  66</span>  tank2.position_z <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>  turret1.set_image<span class="k2">(</span><span class="s">"data/images/turret.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>  turret1.position<span class="k2">(</span>screen_w<span class="k3">/</span><span class="n">2</span>, screen_h<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>  turret1.align<span class="k2">(</span>ALIGN_CENTER, <span class="n">0</span>.<span class="n">75</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>  turret1.position_z <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  72</span>
<span class="number">  73</span>  turret2.set_image<span class="k2">(</span><span class="s">"data/images/turret.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>  turret2.position<span class="k2">(</span>screen_w<span class="k3">/</span><span class="n">2</span>, screen_h<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>  turret2.align<span class="k2">(</span>ALIGN_CENTER, <span class="n">0</span>.<span class="n">75</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>  turret2.position_z <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>  bullet1.set_image<span class="k2">(</span><span class="s">"data/images/bullet.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>  bullet1.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>  bullet1.opacity <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  81</span>  init_bullet_position<span class="k2">(</span><span class="k3">&amp;</span>bullet1<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>  bullet2.set_image<span class="k2">(</span><span class="s">"data/images/bullet.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>  bullet2.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>  bullet2.opacity <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  86</span>  init_bullet_position<span class="k2">(</span><span class="k3">&amp;</span>bullet2<span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>
<span class="number">  88</span>  bullet3.set_image<span class="k2">(</span><span class="s">"data/images/bullet.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>  bullet3.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>  bullet3.opacity <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  91</span>  init_bullet_position<span class="k2">(</span><span class="k3">&amp;</span>bullet3<span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>
<span class="number">  93</span>  bullet4.set_image<span class="k2">(</span><span class="s">"data/images/bullet.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>  bullet4.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>  bullet4.opacity <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  96</span>  init_bullet_position<span class="k2">(</span><span class="k3">&amp;</span>bullet4<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span>
<span class="number">  99</span>
<span class="number"> 100</span>  sheild1.set_image<span class="k2">(</span><span class="s">"data/images/sheild.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>  sheild1._blending_mode <span class="k3">=</span> BLENDER_ADDITIVE<span class="k2">;</span>
<span class="number"> 102</span>  sheild1.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>  sheild1.opacity <span class="k3">=</span> <span class="n">0</span>.<span class="n">3</span><span class="k2">;</span>
<span class="number"> 104</span>  sheild1.position_z <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 105</span>  sheild1.scale_x <span class="k3">=</span> sheild_min_scale<span class="k2">;</span>
<span class="number"> 106</span>  sheild1.scale_y <span class="k3">=</span> sheild_min_scale<span class="k2">;</span>
<span class="number"> 107</span>
<span class="number"> 108</span>
<span class="number"> 109</span>  sheild2.set_image<span class="k2">(</span><span class="s">"data/images/sheild.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>  sheild2._blending_mode <span class="k3">=</span> BLENDER_ADDITIVE<span class="k2">;</span>
<span class="number"> 111</span>  sheild2.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>  sheild2.opacity <span class="k3">=</span> <span class="n">0</span>.<span class="n">3</span><span class="k2">;</span>
<span class="number"> 113</span>  sheild2.position_z <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 114</span>  sheild2.scale_x <span class="k3">=</span> sheild_min_scale<span class="k2">;</span>
<span class="number"> 115</span>  sheild2.scale_y <span class="k3">=</span> sheild_min_scale<span class="k2">;</span>
<span class="number"> 116</span>
<span class="number"> 117</span>
<span class="number"> 118</span>
<span class="number"> 119</span>
<span class="number"> 120</span>  title_text.set_image<span class="k2">(</span>get_text_render<span class="k2">(</span><span class="s">"data/fonts/StencilStd.otf"</span>, <span class="k3">-</span><span class="n">110</span>, <span class="s">"TANK"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>  title_text.position<span class="k2">(</span>screen_w<span class="k3">/</span><span class="n">2</span>, screen_h<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>  title_text.align<span class="k2">(</span>ALIGN_CENTER, ALIGN_MIDDLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>  title_text.hide<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>
<span class="number"> 125</span>  title_text.show<span class="k2">(</span><span class="n">0</span>.<span class="n">4</span>, ANIMATION_CURVE_DOUBLE_SLOW<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>
<span class="number"> 127</span>
<span class="number"> 128</span>
<span class="number"> 129</span>  win_notification.set_image<span class="k2">(</span>get_text_render<span class="k2">(</span><span class="s">"data/fonts/StencilStd.otf"</span>, <span class="k3">-</span><span class="n">200</span>, <span class="s">"WIN"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>  win_notification.align_center<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>  win_notification.align_middle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>  win_notification.tint <span class="k3">=</span> al_color_name<span class="k2">(</span><span class="s">"green"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</span>  win_notification.position<span class="k2">(</span>screen_w<span class="k3">/</span><span class="n">2</span>, screen_h<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>  win_notification.hide<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>  win_notification.bring_to_top<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>
<span class="number"> 137</span>  win_notification_2.set_image<span class="k2">(</span>get_text_render<span class="k2">(</span><span class="s">"data/fonts/StencilStd.otf"</span>, <span class="k3">-</span><span class="n">40</span>, <span class="s">"That's all for now folks!"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>  win_notification_2.align_center<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>  win_notification_2.align_middle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>  win_notification_2.tint <span class="k3">=</span> al_color_name<span class="k2">(</span><span class="s">"green"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>  win_notification_2.position<span class="k2">(</span>screen_w<span class="k3">/</span><span class="n">2</span>, screen_h<span class="k3">/</span><span class="n">3</span><span class="k3">*</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>  win_notification_2.hide<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>  win_notification_2.bring_to_top<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 144</span>
<span class="number"> 145</span>
<span class="number"> 146</span>
<span class="number"> 147</span>  fail_notification.set_image<span class="k2">(</span>get_text_render<span class="k2">(</span><span class="s">"data/fonts/StencilStd.otf"</span>, <span class="k3">-</span><span class="n">200</span>, <span class="s">"FAIL"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>  fail_notification.align_center<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>  fail_notification.align_middle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>  fail_notification.tint <span class="k3">=</span> al_color_name<span class="k2">(</span><span class="s">"red"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>  fail_notification.position<span class="k2">(</span>screen_w<span class="k3">/</span><span class="n">2</span>, screen_h<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 152</span>  fail_notification.hide<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>  fail_notification.bring_to_top<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>
<span class="number"> 155</span>  fail_notification_2.set_image<span class="k2">(</span>get_text_render<span class="k2">(</span><span class="s">"data/fonts/StencilStd.otf"</span>, <span class="k3">-</span><span class="n">40</span>, <span class="s">"The ESC key is your only way out."</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>  fail_notification_2.align_center<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>  fail_notification_2.align_middle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>  fail_notification_2.tint <span class="k3">=</span> al_color_name<span class="k2">(</span><span class="s">"red"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>  fail_notification_2.position<span class="k2">(</span>screen_w<span class="k3">/</span><span class="n">2</span>, screen_h<span class="k3">/</span><span class="n">3</span><span class="k3">*</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 160</span>  fail_notification_2.hide<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>  fail_notification_2.bring_to_top<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>
<span class="number"> 163</span>
<span class="number"> 164</span>
<span class="number"> 165</span>  Object <span class="k3">*</span>obj<span class="k2">;</span>
<span class="number"> 166</span>  <span class="k1">int</span> multiplier <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 167</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">20</span><span class="k3">*</span>multiplier<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 168</span>  <span class="k2">{</span>
<span class="number"> 169</span>    enemies.push_back<span class="k2">(</span><span class="k1">new</span> Object<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>    obj <span class="k3">=</span> enemies<span class="k2">[</span>enemies.size<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 171</span>    obj-&gt;position_x <span class="k3">=</span> random_int<span class="k2">(</span><span class="n">100</span>, screen_w-100<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 172</span>    obj-&gt;position_y <span class="k3">=</span> random_int<span class="k2">(</span><span class="k3">-</span><span class="n">1500</span><span class="k3">*</span>multiplier, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 173</span>    obj-&gt;set_image<span class="k2">(</span><span class="s">"data/images/enemy_bullet.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>    obj-&gt;align_center<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>    obj-&gt;align_middle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 176</span>  <span class="k2">}</span>
<span class="number"> 177</span><span class="k2">}</span>
<span class="number"> 178</span>
<span class="number"> 179</span>
<span class="number"> 180</span>
<span class="number"> 181</span>
<span class="number"> 182</span><span class="k1">void</span> win_game<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 183</span><span class="k2">{</span>
<span class="number"> 184</span>  <span class="k1">if</span> <span class="k2">(</span>game_state <span class="k3">!</span><span class="k3">=</span> GAME_STATE_PLAYING<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 185</span>  game_state <span class="k3">=</span> GAME_STATE_WIN<span class="k2">;</span>
<span class="number"> 186</span>  win_notification.show<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>  win_notification_2.show<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span><span class="k2">}</span>
<span class="number"> 189</span>
<span class="number"> 190</span>
<span class="number"> 191</span><span class="k1">void</span> lose_game<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 192</span><span class="k2">{</span>
<span class="number"> 193</span>  <span class="k1">if</span> <span class="k2">(</span>game_state <span class="k3">!</span><span class="k3">=</span> GAME_STATE_PLAYING<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 194</span>  game_state <span class="k3">=</span> GAME_STATE_FAIL<span class="k2">;</span>
<span class="number"> 195</span>  fail_notification.show<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</span>  fail_notification_2.show<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span><span class="k2">}</span>
<span class="number"> 198</span>
<span class="number"> 199</span>
<span class="number"> 200</span>
<span class="number"> 201</span><span class="p">#define BULLET_VELOCITY 350.0</span>
<span class="number"> 202</span>
<span class="number"> 203</span><span class="k1">void</span> fire_bullet<span class="k2">(</span>Object <span class="k3">&amp;</span>gun<span class="k2">)</span>
<span class="number"> 204</span><span class="k2">{</span>
<span class="number"> 205</span>  Object <span class="k3">*</span>obj <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 206</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bullet1.visible<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> obj <span class="k3">=</span> <span class="k3">&amp;</span>bullet1<span class="k2">;</span>
<span class="number"> 207</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bullet2.visible<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> obj <span class="k3">=</span> <span class="k3">&amp;</span>bullet2<span class="k2">;</span>
<span class="number"> 208</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bullet3.visible<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> obj <span class="k3">=</span> <span class="k3">&amp;</span>bullet3<span class="k2">;</span>
<span class="number"> 209</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bullet4.visible<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> obj <span class="k3">=</span> <span class="k3">&amp;</span>bullet4<span class="k2">;</span>
<span class="number"> 210</span>
<span class="number"> 211</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>obj<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 212</span>
<span class="number"> 213</span>  obj-&gt;opacity.animate<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">2</span>, ANIMATION_CURVE_DOUBLE_FAST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>  obj-&gt;opacity.animate<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">6</span>, <span class="n">0</span>.<span class="n">4</span>, ANIMATION_CURVE_SLOW<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</span>  obj-&gt;position<span class="k2">(</span>gun._position_x, gun._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>  obj-&gt;rotation <span class="k3">=</span> gun._rotation<span class="k2">;</span>
<span class="number"> 217</span>
<span class="number"> 218</span>  vec2d destination <span class="k3">=</span> PolarCoords<span class="k2">(</span>gun._rotation <span class="k3">-</span> ALLEGRO_PI<span class="k3">/</span><span class="n">2</span>, BULLET_VELOCITY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>
<span class="number"> 220</span>  obj-&gt;position_x.animate<span class="k2">(</span>gun._position_x, gun._position_x<span class="k3">+</span>destination.x, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, ANIMATION_CURVE_FAST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>  obj-&gt;position_y.animate<span class="k2">(</span>gun._position_y, gun._position_y<span class="k3">+</span>destination.y, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, ANIMATION_CURVE_FAST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span><span class="k2">}</span>
<span class="number"> 223</span>
<span class="number"> 224</span>
<span class="number"> 225</span>
<span class="number"> 226</span>
<span class="number"> 227</span><span class="k1">void</span> update_shield_animation<span class="k2">(</span>Object <span class="k3">&amp;</span>sheild<span class="k2">)</span>
<span class="number"> 228</span><span class="k2">{</span>
<span class="number"> 229</span>  <span class="k1">if</span> <span class="k2">(</span>sheild._scale_x <span class="k3">=</span><span class="k3">=</span> sheild_max_scale<span class="k2">)</span>
<span class="number"> 230</span>  <span class="k2">{</span>
<span class="number"> 231</span>    sheild.scale_x.animate<span class="k2">(</span>sheild_max_scale, sheild_min_scale, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_SLOW_IN_OUT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>    sheild.scale_y.animate<span class="k2">(</span>sheild_max_scale, sheild_min_scale, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_SLOW_IN_OUT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>  <span class="k2">}</span>
<span class="number"> 234</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>sheild._scale_x <span class="k3">=</span><span class="k3">=</span> sheild_min_scale<span class="k2">)</span>
<span class="number"> 235</span>  <span class="k2">{</span>
<span class="number"> 236</span>    sheild.scale_x.animate<span class="k2">(</span>sheild_min_scale, sheild_max_scale, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_SLOW_IN_OUT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 237</span>    sheild.scale_y.animate<span class="k2">(</span>sheild_min_scale, sheild_max_scale, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_SLOW_IN_OUT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>  <span class="k2">}</span>
<span class="number"> 239</span><span class="k2">}</span>
<span class="number"> 240</span>
<span class="number"> 241</span>
<span class="number"> 242</span>
<span class="number"> 243</span>
<span class="number"> 244</span><span class="k1">float</span> enemy_falling_speed <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 245</span><span class="k1">float</span> enemy_falling_accel <span class="k3">=</span> <span class="n">0</span>.<span class="n">0005</span><span class="k2">;</span>
<span class="number"> 246</span>
<span class="number"> 247</span>
<span class="number"> 248</span>
<span class="number"> 249</span><span class="k1">void</span> detonate_enemy<span class="k2">(</span>Object <span class="k3">*</span>obj<span class="k2">)</span>
<span class="number"> 250</span><span class="k2">{</span>
<span class="number"> 251</span>  obj-&gt;opacity.animate<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_FAST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 252</span>  obj-&gt;tint.animate<span class="k2">(</span>al_color_name<span class="k2">(</span><span class="s">"white"</span><span class="k2">)</span>, al_color_name<span class="k2">(</span><span class="s">"red"</span><span class="k2">)</span>, <span class="n">0</span>.<span class="n">1</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_DOUBLE_FAST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 253</span>  obj-&gt;scale_x.animate<span class="k2">(</span><span class="n">1</span>.<span class="n">001</span>, <span class="n">20</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_DOUBLE_FAST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 254</span>  obj-&gt;scale_y.animate<span class="k2">(</span><span class="n">1</span>.<span class="n">001</span>, <span class="n">20</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span>, ANIMATION_CURVE_DOUBLE_FAST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span><span class="k2">}</span>
<span class="number"> 256</span>
<span class="number"> 257</span>
<span class="number"> 258</span>
<span class="number"> 259</span><span class="k1">void</span> detonate_bullet<span class="k2">(</span>Object <span class="k3">*</span>bullet<span class="k2">)</span>
<span class="number"> 260</span><span class="k2">{</span>
<span class="number"> 261</span>  bullet-&gt;opacity <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 262</span>  init_bullet_position<span class="k2">(</span>bullet<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 263</span>  bullet-&gt;clear_animations<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 264</span><span class="k2">}</span>
<span class="number"> 265</span>
<span class="number"> 266</span>
<span class="number"> 267</span>
<span class="number"> 268</span><span class="k1">void</span> update_enemy_positions<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 269</span><span class="k2">{</span>
<span class="number"> 270</span>  Object <span class="k3">*</span>obj<span class="k2">;</span>
<span class="number"> 271</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>enemies.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 272</span>  <span class="k2">{</span>
<span class="number"> 273</span>    obj <span class="k3">=</span> enemies<span class="k3">&lt;</span>i&gt;<span class="k2">;</span>
<span class="number"> 274</span>    obj-&gt;position_y <span class="k3">+</span><span class="k3">=</span> enemy_falling_speed<span class="k2">;</span>
<span class="number"> 275</span>    <span class="k1">if</span> <span class="k2">(</span>obj-&gt;_position_y <span class="k3">&gt;</span> screen_h<span class="k2">)</span>
<span class="number"> 276</span>    <span class="k2">{</span>
<span class="number"> 277</span>      <span class="k1">if</span> <span class="k2">(</span>obj-&gt;_scale_x <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 278</span>      <span class="k2">{</span>
<span class="number"> 279</span>        detonate_enemy<span class="k2">(</span>obj<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 280</span>        tank_strength <span class="k3">-</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 281</span>        <span class="k1">if</span> <span class="k2">(</span>tank_strength <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span> tank_strength <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> lose_game<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 282</span>      <span class="k2">}</span>
<span class="number"> 283</span>    <span class="k2">}</span>
<span class="number"> 284</span>  <span class="k2">}</span>
<span class="number"> 285</span><span class="k2">}</span>
<span class="number"> 286</span>
<span class="number"> 287</span>
<span class="number"> 288</span>
<span class="number"> 289</span>
<span class="number"> 290</span><span class="k1">void</span> test_bullet_collision<span class="k2">(</span>Object <span class="k3">*</span>obj, Object <span class="k3">*</span>bullet<span class="k2">)</span>
<span class="number"> 291</span><span class="k2">{</span>
<span class="number"> 292</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>obj-&gt;visible_on_screen<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 293</span>  <span class="k1">if</span> <span class="k2">(</span>obj-&gt;_opacity <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> bullet-&gt;_opacity <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span>  <span class="k3">&amp;</span><span class="k3">&amp;</span> collides<span class="k2">(</span><span class="k3">*</span>obj, <span class="k3">*</span>bullet<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 294</span>  <span class="k2">{</span>
<span class="number"> 295</span>    detonate_enemy<span class="k2">(</span>obj<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 296</span>    detonate_bullet<span class="k2">(</span>bullet<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 297</span>  <span class="k2">}</span>
<span class="number"> 298</span><span class="k2">}</span>
<span class="number"> 299</span>
<span class="number"> 300</span>
<span class="number"> 301</span><span class="k1">int</span> num_active<span class="k2">;</span>
<span class="number"> 302</span>
<span class="number"> 303</span><span class="k1">int</span> test_win_condition<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 304</span><span class="k2">{</span>
<span class="number"> 305</span>  <span class="k1">int</span> num_visible <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>enemies.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 306</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>enemies.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 307</span>  <span class="k2">{</span>
<span class="number"> 308</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>enemies<span class="k3">&lt;</span>i&gt;-&gt;visible<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> num_visible--<span class="k2">;</span>
<span class="number"> 309</span>  <span class="k2">}</span>
<span class="number"> 310</span>  <span class="k1">if</span> <span class="k2">(</span>num_visible <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> win_game<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 311</span>  <span class="k1">return</span> num_visible<span class="k2">;</span>
<span class="number"> 312</span><span class="k2">}</span>
<span class="number"> 313</span>
<span class="number"> 314</span>
<span class="number"> 315</span>
<span class="number"> 316</span><span class="k1">void</span> test_bullet_enemy_collisions<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 317</span><span class="k2">{</span>
<span class="number"> 318</span>  Object <span class="k3">*</span>obj<span class="k2">;</span>
<span class="number"> 319</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>enemies.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 320</span>  <span class="k2">{</span>
<span class="number"> 321</span>    obj <span class="k3">=</span> enemies<span class="k3">&lt;</span>i&gt;<span class="k2">;</span>
<span class="number"> 322</span>
<span class="number"> 323</span>    test_bullet_collision<span class="k2">(</span>obj, <span class="k3">&amp;</span>bullet1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 324</span>    test_bullet_collision<span class="k2">(</span>obj, <span class="k3">&amp;</span>bullet2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 325</span>    test_bullet_collision<span class="k2">(</span>obj, <span class="k3">&amp;</span>bullet3<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 326</span>    test_bullet_collision<span class="k2">(</span>obj, <span class="k3">&amp;</span>bullet4<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 327</span>  <span class="k2">}</span>
<span class="number"> 328</span><span class="k2">}</span>
<span class="number"> 329</span>
<span class="number"> 330</span>
<span class="number"> 331</span>
<span class="number"> 332</span><span class="p">#define TANK_VELOCITY 1.0</span>
<span class="number"> 333</span>
<span class="number"> 334</span><span class="k1">void</span> update_logic<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 335</span><span class="k2">{</span>
<span class="number"> 336</span>  <span class="k1">if</span> <span class="k2">(</span>game_state <span class="k3">=</span><span class="k3">=</span> GAME_STATE_PLAYING<span class="k2">)</span>
<span class="number"> 337</span>  <span class="k2">{</span>
<span class="number"> 338</span>    update_enemy_positions<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 339</span>    test_bullet_enemy_collisions<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 340</span>    enemy_falling_speed <span class="k3">+</span><span class="k3">=</span> enemy_falling_accel<span class="k2">;</span>
<span class="number"> 341</span>  <span class="k2">}</span>
<span class="number"> 342</span>
<span class="number"> 343</span>  vec2d <a href="http://www.allegro.cc/manual/mouse_pos" target="_blank"><span class="a">mouse_pos</span></a> <span class="k3">=</span> vec2d<span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">(</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 344</span>  vec2d tank1_pos <span class="k3">=</span> vec2d<span class="k2">(</span>tank1._position_x, tank1._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 345</span>  vec2d tank2_pos <span class="k3">=</span> vec2d<span class="k2">(</span>tank2._position_x, tank2._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 346</span>
<span class="number"> 347</span>  tank1._rotation <span class="k3">=</span> <span class="k2">(</span>mouse_pos-tank1_pos<span class="k2">)</span>.GetAngle<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> ALLEGRO_PI <span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 348</span>  tank2._rotation <span class="k3">=</span> <span class="k2">(</span>mouse_pos-tank2_pos<span class="k2">)</span>.GetAngle<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> ALLEGRO_PI <span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 349</span>
<span class="number"> 350</span>  turret1.rotation <span class="k3">=</span> tank1._rotation<span class="k2">;</span>
<span class="number"> 351</span>  turret1.position<span class="k2">(</span>tank1._position_x, tank1._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 352</span>  turret1.position<span class="k2">(</span>tank1._position_x, tank1._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 353</span>  sheild1.position<span class="k2">(</span>tank1._position_x, tank1._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 354</span>
<span class="number"> 355</span>  turret2.rotation <span class="k3">=</span> tank2._rotation<span class="k2">;</span>
<span class="number"> 356</span>  turret2.position<span class="k2">(</span>tank2._position_x, tank2._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 357</span>  turret2.position<span class="k2">(</span>tank2._position_x, tank2._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 358</span>  sheild2.position<span class="k2">(</span>tank2._position_x, tank2._position_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 359</span>
<span class="number"> 360</span>  update_shield_animation<span class="k2">(</span>sheild1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 361</span>  update_shield_animation<span class="k2">(</span>sheild2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 362</span>
<span class="number"> 363</span>  <span class="k1">if</span> <span class="k2">(</span>just_pressed<span class="k2">(</span>MOUSE_B1<span class="k2">)</span><span class="k2">)</span> fire_bullet<span class="k2">(</span>tank1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 364</span>  <span class="k1">if</span> <span class="k2">(</span>just_pressed<span class="k2">(</span>MOUSE_B2<span class="k2">)</span><span class="k2">)</span> fire_bullet<span class="k2">(</span>tank2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 365</span>
<span class="number"> 366</span>  num_active <span class="k3">=</span> test_win_condition<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 367</span><span class="k2">}</span>
<span class="number"> 368</span>
<span class="number"> 369</span>
<span class="number"> 370</span>
<span class="number"> 371</span><span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 372</span><span class="k2">{</span>
<span class="number"> 373</span>  <span class="c">//draw("data/images/einstein.png", 50, 50);</span>
<span class="number"> 374</span>
<span class="number"> 375</span>  object_manager.draw_all<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 376</span>
<span class="number"> 377</span>  font_manager.use_font<span class="k2">(</span><span class="s">"data/fonts/lacuna.ttf"</span>, <span class="k3">-</span><span class="n">40</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 378</span>  print<span class="k2">(</span><span class="s">"Energy"</span>, <span class="n">30</span>, screen_h-100<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 379</span>  string energy_string <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 380</span>
<span class="number"> 381</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>tank_strength<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> energy_string <span class="k3">+</span><span class="k3">=</span> <span class="s">"."</span><span class="k2">;</span>
<span class="number"> 382</span>
<span class="number"> 383</span>  font_manager.use_font<span class="k2">(</span><span class="s">"data/fonts/lacuna.ttf"</span>, <span class="k3">-</span><span class="n">130</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 384</span>  print<span class="k2">(</span>energy_string, <span class="n">30</span>, screen_h-140<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 385</span>
<span class="number"> 386</span>
<span class="number"> 387</span>  <span class="c">//font_manager.destroy_text_render("data/fonts/lacuna.ttf", -130, tostring(num_active-1));</span>
<span class="number"> 388</span>  font_manager.use_font<span class="k2">(</span><span class="s">"data/fonts/lacuna.ttf"</span>, <span class="k3">-</span><span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 389</span>  print<span class="k2">(</span>tostring<span class="k2">(</span>num_active<span class="k2">)</span>, <span class="n">30</span>, <span class="n">30</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 390</span>
<span class="number"> 391</span>  
<span class="number"> 392</span>  draw<span class="k2">(</span><span class="s">"data/images/crosshair.png"</span>, <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">(</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">(</span><span class="k2">)</span>, ALIGN_CENTER<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 393</span>  al_hide_mouse_cursor<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 394</span>
<span class="number"> 395</span>  draw<span class="k2">(</span><span class="s">"data/images/vignette2.png"</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 396</span><span class="k2">}</span>
<span class="number"> 397</span><span class="k2">}</span>
</div></div><p>

</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Anyway, I didn&#039;t win, only tried a few times though. Ran smoothly, ran fine. The bursts were weird, and the game was difficult at spots where you&#039;d have a bunch of dots bunched together but can only shoot 4 bullets (also, the bullets slowing down near their destination seemed really weird at first).</p></div></div><p>I agree.  Game balance is pretty much non-existent in this demo.  If anyone can beat it, I don&#039;t believe them, unless they can post a screenshot of the win screen <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Probably too many dlls <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p></div></div><p>Yea, I think half of them don&#039;t even get used.  I wish I could dump them in a folder or something so the EXE is the only file in the root of the folder.</p><p>So from what I hear, no technical problems?  Awesome! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />   While making it, I noticed some slowdown when I went to about 80 enemies and 4 bullets on the screen.  That&#039;s 320 separating-axis tests, so I limited the collisions tests to on-screen objects and it fixed it.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>What&#039;s the Einstein image in the data folder used for? <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p></div></div><p>Ah, just forgot to take it out.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 22 Dec 2009 04:25:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The more I play it, the more I grow to hate your bullet acceleration/deceleration. It throws me off shooting thingies that are further away.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 22 Dec 2009 05:41:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I Won!<br /><span class="remote-thumbnail"><span class="json">{"name":"600042","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/0\/20de9ddd1116732a8532b60ceb1d8917.jpg","w":791,"h":598,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/0\/20de9ddd1116732a8532b60ceb1d8917"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/2/0/20de9ddd1116732a8532b60ceb1d8917-240.jpg" alt="600042" width="240" height="181" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Tue, 22 Dec 2009 06:17:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://www.allegro.cc/files/attachment/600043">Here you go Baf</a>, an EXE with linear bullet trajectory.</p><p>Nice dario.  I haven&#39;t even beat it, yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 22 Dec 2009 07:10:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is the game for &quot;Now Folks,&quot; or is it a direct address?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Tue, 22 Dec 2009 07:37:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>both.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 22 Dec 2009 07:46:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/843769#target">Malinus</a> said:</div><div class="quote"><p>1. First attempt, with not even one that manged to get by my furious burst of fire.</p></div></div><p>

I don&#39;t believe him. But how can he prove it? He could easily copy my screenshot. <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Tue, 22 Dec 2009 08:00:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The game runs without any problem for me. I couldn&#39;t win the game though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fishcake)</author>
		<pubDate>Tue, 22 Dec 2009 08:08:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /></p><p>Sorry Oates, but your lack for OOP makes me want to cry <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (blargmob)</author>
		<pubDate>Tue, 22 Dec 2009 08:32:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="remote-thumbnail"><span class="json">{"name":"600044","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd.png","w":791,"h":598,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/b/fb1bccf96ee6a62d14a47f2dff6269cd-240.jpg" alt="600044" width="240" height="181" /></span></p><p>I won too!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Tue, 22 Dec 2009 08:37:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I beat it twice in a row!!</p><p><span class="remote-thumbnail"><span class="json">{"name":"fb1bccf96ee6a62d14a47f2dff6269cd.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd.png","w":791,"h":598,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/b/fb1bccf96ee6a62d14a47f2dff6269cd-240.jpg" alt="fb1bccf96ee6a62d14a47f2dff6269cd.png" width="240" height="181" /></span></p><p><span class="remote-thumbnail"><span class="json">{"name":"fb1bccf96ee6a62d14a47f2dff6269cd.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd.png","w":791,"h":598,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/b/fb1bccf96ee6a62d14a47f2dff6269cd-240.jpg" alt="fb1bccf96ee6a62d14a47f2dff6269cd.png" width="240" height="181" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 22 Dec 2009 08:42:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/843900#target">blargmob</a> said:</div><div class="quote"><p>your lack for OOP makes me want to cry</p></div></div><p>You&#39;ll be OK. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />  All the OOP is under the hood in this example.</p><p>Matthew, your kerning is a mess. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>Hey everybody, try the version with linear bullet trajectories.  It&#39;s easier.  I find the trick is to aim <i>with</i> the cursor and shoot below the bullets.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 22 Dec 2009 08:55:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The game is pretty easy once I realized that there is no penalty for shooting, so I just kept clicking as fast as I could.</p><p>Anyway the fonts are pretty smooth, nice job.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Tue, 22 Dec 2009 08:59:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/843851#target">Mark Oates</a> said:</div><div class="quote"><p>No download then.  My source code is still top secret. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /><img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />  Not to say that I don&#39;t support Linux, just not for this purpose.  If I were to make a real game then I&#39;d look into providing some kind of support for the other platforms.</p><p>Apart from the framework code, here&#39;s the code I wrote for the actual game:
</p></div></div><p>
So even when your framework will be complete you do not intend to release it? Do you plan on making money with it?<br />Anyway, looking at the code it seem like your framework is nice and interesting though I didn&#39;t see anything about image animations (your objects only changed in place/size/opacity but seem not to change their image), and while I can&#39;t really think of a better way (partly because I haven&#39;t given it any thought <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />) it seems pretty likely that in the future you will end up extending your framework to support more animation types when the currently defined constant ones just won&#39;t do for some complex animation that you will need.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Slartibartfast)</author>
		<pubDate>Tue, 22 Dec 2009 14:13:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/843928#target">Slartibartfast</a> said:</div><div class="quote"><p>you do not intend to release it? </p></div></div><p>Perhaps.  I&#39;d need to write a manual. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 22 Dec 2009 22:39:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/843975#target">Mark Oates</a> said:</div><div class="quote"><p>Perhaps.  I&#39;d need to write a manual. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p></div></div><p>
Cool, that&#39;s your decision, I&#39;m just curious.<br />If I ever wrote something worthwhile I&#39;d probably release it publicly (unless of course I was paid for it under an agreement that does not allow me to release it), in the worst case scenario it would be poorly documented.<br />Partly for the bragging rights, partly to be helpful to other people.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Slartibartfast)</author>
		<pubDate>Tue, 22 Dec 2009 23:25:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1) I beat it on the first try, although I was down to one energy. But I got a really even distribution with no heavy waves, so it was kind of easy.</p><p>2) No big slowdowns, but like I said it was a very even distribution, so I didn&#39;t have more than eight or nine bombs on screen at any one time. Maybe an even dozen near the end.</p><p>3) It ran great on my computer, didn&#39;t complain about any dlls at all (and right now the only dll I know for sure is on my computer is the allegro 4.2 dll).</p><p>As for the game itself, it&#39;s well done in my opinion. The graphics were neat and the gameplay flowed smoothly. Add a little more variety and I might have to play again... and again and again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Black)</author>
		<pubDate>Wed, 23 Dec 2009 01:50:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Man that game was so easy I didn&#39;t even download it and I beat it.</p><p><span class="remote-thumbnail"><span class="json">{"name":"fb1bccf96ee6a62d14a47f2dff6269cd.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd.png","w":791,"h":598,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/b\/fb1bccf96ee6a62d14a47f2dff6269cd"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/b/fb1bccf96ee6a62d14a47f2dff6269cd-240.jpg" alt="fb1bccf96ee6a62d14a47f2dff6269cd.png" width="240" height="181" /></span></p><p><img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> Okay I&#39;ll probably try it.</p><p>Edit:<br />The game takes awhile to init, and then I see some images, but it takes ~3-4 seconds to render each frame. Unplayable for me. Sounded fun though. Are you doing something with the large background each frame? Something takes a very long time for each frame.</p><p>EditEdit:<br />Even after adding 2GB of RAM, it doesn&#39;t improve. I don&#39;t know what it is.<br />On a somewhat irrelevant note can someone tell me if 2 sticks of DDR1 RAM of equal size is redundant.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Fri, 25 Dec 2009 22:17:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you have a graphics card?  It sounds like you don&#39;t have a graphics card. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /><br />Or need drivers?</p><p>The <i>only</i> thing I can think of that could be causing a major slowdown, more so for software rendering, would be the vignette image.  It requires a full screen of blending.</p><p>try taking &quot;vignette2.png&quot; and &quot;sheild.png&quot; out of the images folder and run it again.  Or, replace them with something small like a 1x1 pixel image.</p><p>Do you have any problems running other games?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 26 Dec 2009 07:31:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you force OpenGL upon the user?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 26 Dec 2009 07:36:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/844504#target">Matthew Leverton</a> said:</div><div class="quote"><p>
Do you force OpenGL upon the user?
</p></div></div><p>
What? There are modern video chipsets with the most recent drivers use the default MS software OpenGL implementation?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sat, 26 Dec 2009 07:39:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/844504#target">Matthew Leverton</a> said:</div><div class="quote"><p>Do you force OpenGL upon the user?</p></div></div><p>No.</p><p>Felix, what does your memory and processor usage look like when the program is running?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 26 Dec 2009 07:42:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Then he could try switching to OpenGL via the config file. Although it&#39;s unlikely that it runs better than D3D, which I think is default.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 26 Dec 2009 07:44:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>D3D is something I use for PSX emulating. It runs fine for me. OpenGL2 does not <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /> No graphics card, no pixel-shader.</p><p>I&#39;ll try the given advice though.</p><p>Also, I run other games just fine. Some Allegro games too. Except for the ones that need XNA Framework...haven&#39;t gotten that to work yet. My own programs run too, (4.2/4.4) But Allegro Programs use all my CPU. My &quot;prettiest&quot; program uses all my CPU, but barely any slow-down. This program uses a bunch of CPU too. I added 2GB of RAM and it didn&#39;t help any, I&#39;m guessing the absence of a graphics card is a problem, but dang 4-5 seconds for each frame.</p><p>Edit: Enabling OpenGL pwns the program during initialization. No speed up for D3D.<br />Shrinking the images did nothing for speed, and neither did deleting them.<br />Does Allegro 5 have the Five Finger Salute option? I keep having to use Windows Task Manager to close the program. I guess the close button only checks once a loop, and well I don&#39;t get many loops.</p><p>I don&#39;t really know what happened. Maybe Allegro 5 hates me.</p><p>EditEdit: </p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/844506#target">Mark Oates</a> said:</div><div class="quote"><p>Felix, what does your memory and processor usage look like when the program is running?
</p></div></div><p>
Uh, I&#39;ll get to that screenshot, but I can say the CPU spikes on start-up.</p><p>EditEditEdit: Cool. I didn&#39;t know the quote tag works without a specified name.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Sat, 26 Dec 2009 11:09:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/844528#target">Felix-The-Ghost</a> said:</div><div class="quote"><p>I guess the close button only checks once a loop, and well I don&#39;t get many loops.</p></div></div><p>The close button is handled as an event.  Unless events are piling up somehow (which might be what&#39;s happening) it wouldn&#39;t be getting skipped.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 26 Dec 2009 12:25:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since I had some problems with your Haku game I decided to download this one and test it. Game refreshes at one frame per second at best, needles to say unplayable, are there some configurations available in order to increase game performance? My hardware is a P4 2400MHz, 1GB ram, FX5700le.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Sat, 26 Dec 2009 19:19:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>He could try setting <span class="source-code">ALLEGRO_NO_PRESERVE_TEXTURE</span> and provide an option to disable all fonts.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 26 Dec 2009 21:46:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/844532#target">Mark Oates</a> said:</div><div class="quote"><p>The close button is handled as an event.  Unless events are piling up somehow (which might be what&#39;s happening) it wouldn&#39;t be getting skipped.</p></div></div><p>
What sort of events? From the screenshots its a relatively simple game? Do you have any other Allegro 5 programs so I can see if my computer can&#39;t handle them?</p><p>Edit: Okay for real I&#39;ll get those specs. Also I forgot to say you spelled shield wrong in the files, and why is there a vignette2 and not a vignette1?</p><p>EditEdit:<br /><span class="remote-thumbnail"><span class="json">{"name":"600083","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/8\/28c631ce00342b2e2e95323fecad4e20.png","w":507,"h":509,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/8\/28c631ce00342b2e2e95323fecad4e20"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/2/8/28c631ce00342b2e2e95323fecad4e20-240.jpg" alt="600083" width="240" height="240" /></span><br />The mountain shapes are from just moving the windows around. The plateau looking thing is the program running. I guess my computer has a bad CPU.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Sat, 26 Dec 2009 23:08:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That doesn&#39;t help solve the issue.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Sun, 27 Dec 2009 05:24:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your post doesn&#39;t help either. Perhaps your mom can help solve the issue.<br />All informalities aside, I was just addressing this post:</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602590/844506#target">Mark Oates</a> said:</div><div class="quote"><p>Felix, what does your memory and processor usage look like when the program is running?
</p></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Sun, 27 Dec 2009 07:16:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Some information regarding this extreme slowdown on Paul and Felix. I tried myself in my game setting the ALLEGRO_MEMORY_BITMAP flag, and it worked like crap, pretty much how they say it works, 3 or 4 FPS, totally unplayable. My guess, A5 falling back to these memory bitmaps?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Sun, 27 Dec 2009 18:28:00 +0000</pubDate>
	</item>
</rss>
