<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Getting artefact when loading image</title>
		<link>http://www.allegro.cc/forums/view/615607</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 31 Jul 2015 19:01:25 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to load an image for my game. Each robot is a structure and I store the image in it. What happen when the image is drawn is sometimes it draw some artefact over the image and sometimes it doesn&#39;t and it&#39;s completely random. In the first image attached, only the blue robot doesn&#39;t have artefact and in the second one, the pink one doesn&#39;t have it either. Those 2 frame are from different run of the program and the 4 robots are the same.</p><p>I was just wondering if storing an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a></span> into a structure is a good idea or this could be the source of my problem?</p><p>PS: I don&#39;t know how to link image directly in the post so I attached it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Francis Langlais)</author>
		<pubDate>Thu, 30 Jul 2015 19:44:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s hard to help you without having the code that produces this output.</p><p>So if I had to guess from the screenshots, I&#39;d say it looks like you&#39;re trying to draw bitmaps that weren&#39;t properly initialized. These pink-ish garbage sprites above the robots look like you were trying to draw bitmaps with random data in them.</p><p>Or, actually, looking at the garbage sprites... it also looks like it could be actual sprites that for some reason have the wrong dimensions, so that the pixels are at the wrong locations.</p><p>In any case, as I said, without any code it&#39;s really hard to help here.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (RPG Hacker)</author>
		<pubDate>Thu, 30 Jul 2015 20:16:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could be drawing destroyed copies of bitmaps depending on your code. What do you do with your stored ALLEGRO_BITMAP*? Remember it&#39;s just a pointer but if you&#39;re destroying it in your destructor and you make copies of your struct then the original will be destroyed and you will be left with a dangling pointer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 31 Jul 2015 00:14:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s the code (it&#39;s scattered around my program) :</p><p>How I create the Robot:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> BENDERBOT<span class="k2">(</span>ROBOTCOLORS color<span class="k2">)</span> <span class="k2">{</span>
  RegisterRobot<span class="k2">(</span><span class="s">"Bender"</span>, color, <span class="k3">&amp;</span>BenderActions, <span class="k3">&amp;</span>PimpOutBender,
      <span class="s">"resources\\images\\basic_robot.bmp"</span>, <span class="k3">-</span><span class="n">1</span>, <span class="k3">-</span><span class="n">1</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</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><span class="k1">void</span> RegisterRobot<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>robotName, ROBOTCOLORS color,
<span class="number">   2</span>    <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>robotActions<span class="k2">)</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>, <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>configureRobot<span class="k2">)</span><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>,
<span class="number">   3</span>    <span class="k1">char</span> <span class="k3">*</span>customImage, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">float</span> heading<span class="k2">)</span> <span class="k2">{</span>
<span class="number">   4</span>  <span class="k1">int</span> i, robotNumber<span class="k2">;</span>
<span class="number">   5</span>  ROBOT newRobot<span class="k2">;</span>
<span class="number">   6</span>
<span class="number">   7</span>  <span class="k1">if</span> <span class="k2">(</span>theGame.state <span class="k3">!</span><span class="k3">=</span> GS_SETUP<span class="k2">)</span>
<span class="number">   8</span>    AbortOnError<span class="k2">(</span>
<span class="number">   9</span>        <span class="s">"Call made to RegisterRobot() when game is not in setup state."</span>
<span class="number">  10</span>            <span class="s">"\nProgram will end."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span>  robotNumber <span class="k3">=</span> SizeLL<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>  <span class="k1">if</span> <span class="k2">(</span>robotNumber <span class="k3">=</span><span class="k3">=</span> MAX_ROBOTS<span class="k2">)</span>
<span class="number">  14</span>    AbortOnError<span class="k2">(</span><span class="s">"RegisterRobot() Attempted to add too many robots.\n"</span>
<span class="number">  15</span>        <span class="s">"Program will end."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span>  newRobot.ActionsFunction <span class="k3">=</span> robotActions<span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span>  <span class="k1">switch</span> <span class="k2">(</span>color<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  20</span>  <span class="k1">case</span> ROBOT_RED:
<span class="number">  21</span>    newRobot.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  23</span>  <span class="k1">case</span> ROBOT_GREEN:
<span class="number">  24</span>    newRobot.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  26</span>  <span class="k1">case</span> ROBOT_BLUE:
<span class="number">  27</span>    newRobot.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  29</span>  <span class="k1">case</span> ROBOT_YELLOW:
<span class="number">  30</span>    newRobot.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  32</span>  <span class="k1">case</span> ROBOT_PURPLE:
<span class="number">  33</span>    newRobot.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  35</span>  <span class="k1">case</span> ROBOT_TURQUOISE:
<span class="number">  36</span>    newRobot.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>    <span class="k1">break</span><span class="k2">;</span>
<span class="number">  38</span>  <span class="k1">case</span> ROBOT_WHITE:
<span class="number">  39</span>  default:
<span class="number">  40</span>    newRobot.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>  <span class="k2">}</span>
<span class="number">  42</span>  <span class="k1">if</span> <span class="k2">(</span>HasNullCharacter<span class="k2">(</span>robotName, MAX_NAME_LEN<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  43</span>    newRobot.name <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">char</span><span class="k2">)</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>robotName<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>newRobot.name, robotName<span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>    newRobot.number <span class="k3">=</span> robotNumber<span class="k2">;</span>
<span class="number">  46</span>  <span class="k2">}</span> <span class="k1">else</span>
<span class="number">  47</span>    AbortOnError<span class="k2">(</span><span class="s">"RegisterRobot() was passed a robot name exceeding "</span>
<span class="number">  48</span>        <span class="s">"MAX_NAME_LEN.\nProgram will end."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>  <span class="c">//Set starting speed values</span>
<span class="number">  51</span>  newRobot.leftTreadSpeed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  52</span>  newRobot.rightTreadSpeed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  53</span>  newRobot.impulseHeading <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  54</span>  newRobot.impulseSpeed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  55</span>  newRobot.turboTime <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</span>  <span class="c">//Configure the sensors.</span>
<span class="number">  58</span>  newRobot.bumped <span class="k3">=</span> BUMP_NONE<span class="k2">;</span>
<span class="number">  59</span>  <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> MAX_SENSORS<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  60</span>    newRobot.sensorArray<span class="k2">[</span>i<span class="k2">]</span>.type <span class="k3">=</span> SENSOR_NONE<span class="k2">;</span>
<span class="number">  61</span>    newRobot.sensorArray<span class="k2">[</span>i<span class="k2">]</span>.image <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  62</span>  <span class="k2">}</span>
<span class="number">  63</span>
<span class="number">  64</span>  <span class="c">//Configure the laser.</span>
<span class="number">  65</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.type <span class="k3">=</span> WEAPON_LASER<span class="k2">;</span>
<span class="number">  66</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.maxAngle <span class="k3">=</span> LASER_MAX_ANGLE<span class="k2">;</span>
<span class="number">  67</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.minEnergy <span class="k3">=</span> MIN_LASER_ENERGY<span class="k2">;</span>
<span class="number">  68</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.maxEnergy <span class="k3">=</span> MAX_LASER_ENERGY<span class="k2">;</span>
<span class="number">  69</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.bonusEnergy <span class="k3">=</span> LASER_ENERGY_BONUS<span class="k2">;</span>
<span class="number">  70</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.splashRange <span class="k3">=</span> LASER_SPLASH_RANGE<span class="k2">;</span>
<span class="number">  71</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.splashDamage <span class="k3">=</span> LASER_SPLASH_DAMAGE<span class="k2">;</span>
<span class="number">  72</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.speed <span class="k3">=</span> LASER_SPEED<span class="k2">;</span>
<span class="number">  73</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.bumpValue <span class="k3">=</span> BUMP_LASER<span class="k2">;</span>
<span class="number">  74</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.firingSound <span class="k3">=</span> SND_LASER_FIRE<span class="k2">;</span>
<span class="number">  75</span>  newRobot.weaponArray<span class="k2">[</span>LASER_PORT<span class="k2">]</span>.impactSound <span class="k3">=</span> SND_LASER_HIT<span class="k2">;</span>
<span class="number">  76</span>
<span class="number">  77</span>  <span class="c">//Configure the missiles.</span>
<span class="number">  78</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.type <span class="k3">=</span> WEAPON_MISSILE<span class="k2">;</span>
<span class="number">  79</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.maxAngle <span class="k3">=</span> MISSILE_MAX_ANGLE<span class="k2">;</span>
<span class="number">  80</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.minEnergy <span class="k3">=</span> MIN_MISSILE_ENERGY<span class="k2">;</span>
<span class="number">  81</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.maxEnergy <span class="k3">=</span> MAX_MISSILE_ENERGY<span class="k2">;</span>
<span class="number">  82</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.bonusEnergy <span class="k3">=</span> MISSILE_ENERGY_BONUS<span class="k2">;</span>
<span class="number">  83</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.splashRange <span class="k3">=</span> MISSILE_SPLASH_RANGE<span class="k2">;</span>
<span class="number">  84</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.splashDamage <span class="k3">=</span> MISSILE_SPLASH_DAMAGE<span class="k2">;</span>
<span class="number">  85</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.speed <span class="k3">=</span> MISSILE_SPEED<span class="k2">;</span>
<span class="number">  86</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.bumpValue <span class="k3">=</span> BUMP_MISSILE<span class="k2">;</span>
<span class="number">  87</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.firingSound <span class="k3">=</span> SND_MISSILE_FIRE<span class="k2">;</span>
<span class="number">  88</span>  newRobot.weaponArray<span class="k2">[</span>MISSILE_PORT<span class="k2">]</span>.impactSound <span class="k3">=</span> SND_MISSILE_HIT<span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>  <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> MAX_WEAPONS<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  91</span>    newRobot.weaponArray<span class="k2">[</span>i<span class="k2">]</span>.chargeRate <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  92</span>    newRobot.weaponArray<span class="k2">[</span>i<span class="k2">]</span>.chargeEnergy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  93</span>  <span class="k2">}</span>
<span class="number">  94</span>
<span class="number">  95</span>  <span class="c">//Set starting energy priorites in same order as SYSTEMS declaration.</span>
<span class="number">  96</span>  <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> NUM_ENERGY_SYSTEMS<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  97</span>    newRobot.energyPriorities<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>SYSTEM<span class="k2">)</span> i<span class="k2">;</span>
<span class="number">  98</span>
<span class="number">  99</span>  <span class="c">//Set initial energy values.  Weapons were done in the weapons section.</span>
<span class="number"> 100</span>  newRobot.shields <span class="k3">=</span> START_SHIELD_ENERGY<span class="k2">;</span>
<span class="number"> 101</span>  newRobot.shieldChargeRate <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 102</span>
<span class="number"> 103</span>  <span class="c">//Set structure-related values</span>
<span class="number"> 104</span>  newRobot.generatorStructure <span class="k3">=</span> MAX_GENERATOR_STRUCTURE<span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>  <span class="c">//Robot has no damage to be applied at start.</span>
<span class="number"> 107</span>  newRobot.damageBank <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 108</span>
<span class="number"> 109</span>  <span class="c">//Load the robot's graphic, if required.  There is no error checking here as</span>
<span class="number"> 110</span>  <span class="c">//if newRobot.graphic is NULL, the graphics routines will simply use the</span>
<span class="number"> 111</span>  <span class="c">//default robot graphic to render the robot.</span>
<span class="number"> 112</span>  newRobot.graphic <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 113</span>  <span class="k1">if</span> <span class="k2">(</span>customImage <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 114</span>    newRobot.graphic <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span>customImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>    <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>newRobot.graphic, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>  <span class="k2">}</span>
<span class="number"> 117</span>
<span class="number"> 118</span>  <span class="c">//Create the robot's bitmap.</span>
<span class="number"> 119</span>  newRobot.shield <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>SHIELD_BMP_SZ, SHIELD_BMP_SZ<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>  newRobot.image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>SHIELD_BMP_SZ, SHIELD_BMP_SZ<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>  <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>  <span class="k1">if</span> <span class="k2">(</span>newRobot.image <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> newRobot.shield <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 123</span>    AbortOnError<span class="k2">(</span><span class="s">"RegisterRobot() failed to create robot image.\n"</span>
<span class="number"> 124</span>        <span class="s">"Program will end."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>
<span class="number"> 126</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>newRobot.statusMessage, <span class="s">""</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//No status message at start.</span>
<span class="number"> 127</span>
<span class="number"> 128</span>  newRobot.mailBox <span class="k3">=</span> ConsLL<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>        <span class="c">//Create the robot's mailbox.</span>
<span class="number"> 129</span>
<span class="number"> 130</span>  InsLastLL<span class="k2">(</span>robotList, newRobot<span class="k2">)</span><span class="k2">;</span>     <span class="c">//Put robot on end of the list.</span>
<span class="number"> 131</span>  curRobot <span class="k3">=</span> LastElmLL<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span>   <span class="c">//Record current robot for configuration.</span>
<span class="number"> 132</span>
<span class="number"> 133</span>  <span class="c">//Set robot starting location.  This is done only after insertion into the</span>
<span class="number"> 134</span>  <span class="c">//list because ChooseRandomLocation() requires the list to have robots in it.</span>
<span class="number"> 135</span>  <span class="k1">if</span> <span class="k2">(</span>x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 136</span>    ChooseRandomLocation<span class="k2">(</span>curRobot<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>  <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 138</span>    curRobot-&gt;x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 139</span>    curRobot-&gt;y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 140</span>  <span class="k2">}</span>
<span class="number"> 141</span>  <span class="k1">if</span> <span class="k2">(</span>heading <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 142</span>    curRobot-&gt;heading <span class="k3">=</span> GetRandomNumber<span class="k2">(</span><span class="n">360</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>  <span class="k1">else</span>
<span class="number"> 144</span>    curRobot-&gt;heading <span class="k3">=</span> heading<span class="k2">;</span>
<span class="number"> 145</span>
<span class="number"> 146</span>  configureRobot<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                   <span class="c">//Call user's configuration function.</span>
<span class="number"> 147</span><span class="k2">}</span>
</div></div><p>

The image is stored in <span class="source-code">newRobot.graphic</span> at the 112-115th line. Also note that if, when I call the RegistewrRobot and <span class="source-code">customImage <span class="k3">=</span> NULL</span> the program gives it the default image and it work fine but if I give it the path to the default image it gives me artefact.</p><p>Then this is when I draw the robot :
</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><span class="k1">void</span> DrawRobotBitmaps<span class="k2">(</span>t_LL listOfRobots<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>  <span class="k1">float</span> shieldCenterX, shieldCenterY<span class="k2">;</span>
<span class="number">  3</span>  <span class="k1">float</span> drawAngle, modifier<span class="k2">;</span>
<span class="number">  4</span>  ROBOT <span class="k3">*</span>robot<span class="k2">;</span>
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>robotGraphic<span class="k2">;</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>temp<span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>  ForeachLL_M<span class="k2">(</span>listOfRobots, robot<span class="k2">)</span>
<span class="number">  9</span>  <span class="k2">{</span>
<span class="number"> 10</span>    temp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>SHIELD_BMP_SZ, SHIELD_BMP_SZ<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    clearBitmap<span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>    clearBitmap<span class="k2">(</span>robot-&gt;image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    shieldCenterX <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>temp<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span> <span class="c">//All robot's shields are same size,</span>
<span class="number"> 16</span>    shieldCenterY <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>temp<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span> <span class="c">//so calculate center point here.</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    drawAngle <span class="k3">=</span> <span class="n">90</span> <span class="k3">-</span> robot-&gt;heading<span class="k2">;</span> <span class="c">//Convert "math" angle to screen "heading"</span>
<span class="number"> 19</span>    <span class="k1">if</span> <span class="k2">(</span>drawAngle <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>                <span class="c">//angle as rotate_sprite is in compass</span>
<span class="number"> 20</span>      drawAngle <span class="k3">=</span> drawAngle <span class="k3">+</span> <span class="n">360</span><span class="k2">;</span>  <span class="c">//coords and make positive.</span>
<span class="number"> 21</span>    drawAngle <span class="k3">=</span> drawAngle <span class="k3">*</span> PI <span class="k3">/</span> <span class="n">180</span><span class="k2">;</span> <span class="c">//Convert from degrees to radian.</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    modifier <span class="k3">=</span> robot-&gt;shields <span class="k3">/</span> MAX_SHIELD_ENERGY<span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">if</span> <span class="k2">(</span>robot-&gt;graphic <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 26</span>      robotGraphic <span class="k3">=</span> robot-&gt;graphic<span class="k2">;</span>
<span class="number"> 27</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 28</span>      robotGraphic <span class="k3">=</span> robotImg<span class="k2">;</span>
<span class="number"> 29</span>    <span class="k2">}</span>
<span class="number"> 30</span>
<span class="number"> 31</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>robotGraphic,
<span class="number"> 33</span>        <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>robot-&gt;image<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>
<span class="number"> 34</span>            <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>robotGraphic<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>,
<span class="number"> 35</span>        <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>robot-&gt;image<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>
<span class="number"> 36</span>            <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>robotGraphic<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>robot-&gt;image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>    <a href="http://www.allegro.cc/manual/al_draw_rotated_bitmap"><span class="a">al_draw_rotated_bitmap</span></a><span class="k2">(</span>temp, shieldCenterX, shieldCenterY,
<span class="number"> 39</span>        SHIELD_BMP_SZ <span class="k3">/</span> <span class="n">2</span>, SHIELD_BMP_SZ <span class="k3">/</span> <span class="n">2</span>, drawAngle, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>    <a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a><span class="k2">(</span>robot-&gt;shield,
<span class="number"> 41</span>        <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span> <span class="k3">*</span> modifier, <span class="n">1</span> <span class="k3">*</span> modifier, <span class="n">1</span> <span class="k3">*</span> modifier,
<span class="number"> 42</span>            modifier<span class="k2">)</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>  <span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span><span class="k2">}</span>
</div></div><p>

And this is when I destroy the bitmap :
</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><span class="k1">void</span> EndCompetition<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  3</span>  ROBOT <span class="k3">*</span>tempRobot, <span class="k3">*</span>nextRobot<span class="k2">;</span>
<span class="number">  4</span>  WEAPON <span class="k3">*</span>tempWeapon, <span class="k3">*</span>nextWeapon<span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  <span class="c">//Move the dead robots back into the main list for deletion.</span>
<span class="number">  7</span>  <span class="c">//deadRobotList should be empty after this loop has finished.</span>
<span class="number">  8</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>IsEmptyLL<span class="k2">(</span>deadRobotList<span class="k2">)</span><span class="k2">)</span>
<span class="number">  9</span>    LinkAftLL<span class="k2">(</span>LastElmLL<span class="k2">(</span>robotList<span class="k2">)</span>, UnlinkLL<span class="k2">(</span>FirstElmLL<span class="k2">(</span>deadRobotList<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <span class="c">//Now iterate through each robot, cleaning up allocated memory</span>
<span class="number"> 12</span>  <span class="c">//and, when all memory is cleaned up, remove each one from the list.</span>
<span class="number"> 13</span>  SafeForeachLL_M<span class="k2">(</span>robotList, tempRobot, nextRobot<span class="k2">)</span>
<span class="number"> 14</span>  <span class="c">//Has to be "safe" as</span>
<span class="number"> 15</span>  <span class="k2">{</span>                                                    <span class="c">//list elements will be</span>
<span class="number"> 16</span>    nextRobot <span class="k3">=</span> NextElmLL<span class="k2">(</span>tempRobot<span class="k2">)</span><span class="k2">;</span>                   <span class="c">//deleted during the</span>
<span class="number"> 17</span>    <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> MAX_SENSORS<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>                       <span class="c">//iteration.</span>
<span class="number"> 18</span>      <span class="k1">if</span> <span class="k2">(</span>tempRobot-&gt;sensorArray<span class="k2">[</span>i<span class="k2">]</span>.image <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 19</span>        <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>tempRobot-&gt;sensorArray<span class="k2">[</span>i<span class="k2">]</span>.image<span class="k2">)</span><span class="k2">;</span> <span class="c">//Free sensor images.</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    <span class="k1">if</span> <span class="k2">(</span>tempRobot-&gt;graphic <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 22</span>      <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>tempRobot-&gt;graphic<span class="k2">)</span><span class="k2">;</span>        <span class="c">//Free custom images.</span>
<span class="number"> 23</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>tempRobot-&gt;image<span class="k2">)</span><span class="k2">;</span>            <span class="c">//Free robot bitmaps.</span>
<span class="number"> 24</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>tempRobot-&gt;name<span class="k2">)</span><span class="k2">;</span>                       <span class="c">//Free robot name strings.</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    DestLL<span class="k2">(</span>tempRobot-&gt;mailBox<span class="k2">)</span><span class="k2">;</span>                  <span class="c">//Remove all messages.</span>
<span class="number"> 27</span>
<span class="number"> 28</span>    DelElmLL<span class="k2">(</span>tempRobot<span class="k2">)</span><span class="k2">;</span>                   <span class="c">//Delete the robot from the list.</span>
<span class="number"> 29</span>  <span class="k2">}</span>
<span class="number"> 30</span>
<span class="number"> 31</span>  <span class="c">//Now clean up the weapon list, deleting each weapon.</span>
<span class="number"> 32</span>  SafeForeachLL_M<span class="k2">(</span>weaponList, tempWeapon, nextWeapon<span class="k2">)</span>
<span class="number"> 33</span>  <span class="k2">{</span>
<span class="number"> 34</span>    nextWeapon <span class="k3">=</span> NextElmLL<span class="k2">(</span>tempWeapon<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>    <span class="k1">if</span> <span class="k2">(</span>tempWeapon-&gt;image <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 36</span>      <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>tempWeapon-&gt;image<span class="k2">)</span><span class="k2">;</span>          <span class="c">//Free weapon images.</span>
<span class="number"> 37</span>    DelElmLL<span class="k2">(</span>tempWeapon<span class="k2">)</span><span class="k2">;</span>                          <span class="c">//Delete the weapon.</span>
<span class="number"> 38</span>  <span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</span>  <span class="k1">if</span> <span class="k2">(</span>IsEmptyLL<span class="k2">(</span>robotList<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> IsEmptyLL<span class="k2">(</span>deadRobotList<span class="k2">)</span>
<span class="number"> 41</span>      <span class="k3">&amp;</span><span class="k3">&amp;</span> IsEmptyLL<span class="k2">(</span>weaponList<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 42</span>    DestLL<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>    DestLL<span class="k2">(</span>deadRobotList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    DestLL<span class="k2">(</span>weaponList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>  <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 46</span>    DestLL<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>    DestLL<span class="k2">(</span>deadRobotList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>    DestLL<span class="k2">(</span>weaponList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>    AbortOnError<span class="k2">(</span>
<span class="number"> 50</span>        <span class="s">"EndCompetition() discovered one of the main linked lists was "</span>
<span class="number"> 51</span>            <span class="s">"not empty before deletion.\n"</span>
<span class="number"> 52</span>            <span class="s">"Program will now end."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>  <span class="k2">}</span>
<span class="number"> 54</span>
<span class="number"> 55</span>  <span class="c">//Delete the sounds.</span>
<span class="number"> 56</span>  <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> NUM_SOUNDS<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 57</span>    <span class="k1">if</span> <span class="k2">(</span>theGame.sounds<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 58</span>      <a href="http://www.allegro.cc/manual/al_destroy_sample"><span class="a">al_destroy_sample</span></a><span class="k2">(</span>theGame.sounds<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>
<span class="number"> 60</span>  DeInitGraphics<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</span>
<span class="number"> 62</span><span class="k2">}</span>
</div></div><p>

The bitmap is destroyed at line 21-22th line.</p><p>Those are the only action I take on the <span class="source-code">robot.graphic</span>.</p><p>Finally here is the action order of my game loop :
</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><span class="k1">void</span> Fight<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>  calcsUntilOrders<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>  UpdateEnergySystems<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span> <span class="c">//Do first so we know what</span>
<span class="number">  6</span>                  <span class="c">//systems are powered.</span>
<span class="number">  7</span>
<span class="number">  8</span>  MoveRobots<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>  DrawRobotBitmaps<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>  CheckRobotCollisions<span class="k2">(</span><span class="k3">&amp;</span>theGame, robotList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>  MoveWeapons<span class="k2">(</span>weaponList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  CheckWeaponCollisions<span class="k2">(</span><span class="k3">&amp;</span>theGame, robotList, weaponList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="c">//Now that collisions are</span>
<span class="number"> 16</span>  ApplyDamage<span class="k2">(</span><span class="k3">&amp;</span>theGame, robotList, deadRobotList<span class="k2">)</span><span class="k2">;</span> <span class="c">//done and weapons have</span>
<span class="number"> 17</span>                           <span class="c">//hit, we apply damage.</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  DrawSensorBitmaps<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span> <span class="c">//Need to draw BEFORE data is</span>
<span class="number"> 20</span>                  <span class="c">//updated because bimaps are</span>
<span class="number"> 21</span>                  <span class="c">//used in collision detection.</span>
<span class="number"> 22</span>  UpdateSensorData<span class="k2">(</span>robotList<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>  UpdateParticles<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>  calcsCompleted<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>  <span class="k1">if</span> <span class="k2">(</span>calcsUntilOrders <span class="k3">=</span><span class="k3">=</span> ORDER_FREQ<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 29</span>    calcsUntilOrders <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 30</span>    ForeachLL_M<span class="k2">(</span>robotList, curRobot<span class="k2">)</span>
<span class="number"> 31</span>      curRobot-&gt;ActionsFunction<span class="k2">(</span>TURN_TIME<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  <span class="k2">}</span>
<span class="number"> 33</span>
<span class="number"> 34</span><span class="c">//            if (theGame.useSounds)</span>
<span class="number"> 35</span><span class="c">//              PlaySounds(&amp;theGame);</span>
<span class="number"> 36</span>
<span class="number"> 37</span><span class="k2">}</span>
</div></div><p>

@Edgar Reynaldo<br />I don&#39;t know because all the robot are managed the same way and the artefact are random. They don&#39;t appear on random frame they just show up randomly on a robot graphic . Plus I don&#39;t destroy the <span class="source-code">robot.graphic</span> until the end of the game.</p><p>The fact that if I load the bitmap using a path in the RegisterRobot or using NULL to load the same bitmap doesn&#39;t give me the same result feel strange to me.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Francis Langlais)</author>
		<pubDate>Fri, 31 Jul 2015 18:21:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/615607">Francis Langlais</a> said:</div><div class="quote"><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"> 119</span>newRobot.shield <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>SHIELD_BMP_SZ, SHIELD_BMP_SZ<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>newRobot.image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>SHIELD_BMP_SZ, SHIELD_BMP_SZ<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span><a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span><span class="k2">;</span>
</div></div></div></div><p>

I see this is where you create &quot;shield&quot;, but where do you fill its contents? If you just create a bitmap without filling it, it will only contain garbage.<br />Also is there a special reason to set the bitmap flags to &quot;memory bitmaps&quot; after creating these bitmaps? First of all, memory bitmaps should be avoided if possible, because they&#39;re slow. Secondly, if you were intending &quot;shield&quot; or &quot;image&quot; to be memory bitmaps, you should have called al_set_new_bitmap_flags before creating the bitmaps.</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/615607">Francis Langlais</a> said:</div><div class="quote"><p><span class="source-code">temp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>SHIELD_BMP_SZ, SHIELD_BMP_SZ<span class="k2">)</span><span class="k2">;</span></span></p></div></div><p>

Is there a reason for creating and destroying the bitmap in every draw call? Creating bitmaps can be slow and shouldn&#39;t be done every frame unless absolutely necessary. Since you&#39;re using constant sizes here, recreating the bitmap every frame isn&#39;t necessary. Just create the image onces with the robot and destroy it once the robot is destroyed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (RPG Hacker)</author>
		<pubDate>Fri, 31 Jul 2015 18:55:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah I found out that the shield was doing the artefact and I will simply remove the pre-rendered shield. I did that because I had a FPS problem which had nothing to do with it.</p><p>The memory thing was because I wanted to draw my particles (which use al_put_pixel) on it but Edgar told me to lock/unlock my bitmap instead.</p><p>Yes I will fix this creating/destroying bitmap thing.</p><p>Thank you for your help!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Francis Langlais)</author>
		<pubDate>Fri, 31 Jul 2015 19:01:25 +0000</pubDate>
	</item>
</rss>
