<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Only the background image will not draw??!</title>
		<link>http://www.allegro.cc/forums/view/612888</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 28 Jun 2013 12:08:46 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have been going over this code for 2 days now trying to figure out why the background image for this loading screen will not appear. I have created an object named BG_INDEX that keeps track of all the background information for a given room including the background image, whether the background is tiled or stretched, and scrolling speeds. I also created an object named BG_CTRL that will handle the BG_INDEX objects; for example, during the loading phase it will create all of the BG_INDEX objects with all of the desired parameters and the main.cpp program interfaces through BG_CTRL to control the BG_INDEX from there on out.</p><p>The program executes without error and going through the code in debug mode line by line leads me to believe that each variable has been assigned the correct values and each function the correct parameters but for some reason the background image just never appears on the loading screen. Here is the code:</p><p>bg_ctrl.h:
</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="p">#ifndef BG_CTRL_H</span>
<span class="number">  2</span><span class="p">#define BG_CTRL_H</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include&lt;allegro5/allegro.h&gt;</span>
<span class="number">  5</span><span class="p">#include&lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  6</span><span class="p">#include&lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  7</span><span class="p">#include "bg_index.h"</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">extern</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="number"> 10</span><span class="k1">extern</span> <span class="k1">int</span> roomIndex<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">class</span> BG_CTRL<span class="k2">{</span>
<span class="number"> 13</span>
<span class="number"> 14</span>public:
<span class="number"> 15</span>    BG_CTRL<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    ~BG_CTRL<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">void</span> initiate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> step<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>protected:
<span class="number"> 22</span>    <span class="k1">enum</span> ROOM_INDEX<span class="k2">{</span>
<span class="number"> 23</span>        LOAD, <a href="http://www.allegro.cc/manual/MENU"><span class="a">MENU</span></a>, CREDITS
<span class="number"> 24</span>        <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    BG_INDEX bgIndex<span class="k2">[</span>CREDITS<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 29</span>
<span class="number"> 30</span><span class="p">#endif //BG_CTRL_H</span>
</div></div><p>

bg_ctrl.cpp:
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include "bg_ctrl.h"</span>

BG_CTRL::BG_CTRL<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
BG_CTRL::~BG_CTRL<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>

<span class="k1">void</span> BG_CTRL::initiate<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
    bgIndex<span class="k2">[</span>LOAD<span class="k2">]</span>.initiate<span class="k2">(</span> <span class="n">102</span>, <span class="n">576</span>, <span class="n">380</span><span class="k3">-</span><span class="n">102</span>, <span class="n">717</span><span class="k3">-</span><span class="n">576</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
    bgIndex<span class="k2">[</span><a href="http://www.allegro.cc/manual/MENU"><span class="a">MENU</span></a><span class="k2">]</span>.initiate<span class="k2">(</span> <span class="n">268</span>, <span class="n">367</span>, <span class="n">32</span>, <span class="n">32</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
    bgIndex<span class="k2">[</span>CREDITS<span class="k2">]</span>.initiate<span class="k2">(</span> <span class="n">268</span>, <span class="n">367</span>, <span class="n">32</span>, <span class="n">32</span>, <span class="n">2</span>, <span class="n">0</span>, <span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>

<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> BG_CTRL::step<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
    <span class="k1">return</span> bgIndex<span class="k2">[</span>roomIndex<span class="k2">]</span>.step<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

bg_index.h:
</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="p">#ifndef BG_INDEX_H</span>
<span class="number">  2</span><span class="p">#define BG_INDEX_H</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include&lt;stdio.h&gt;</span>
<span class="number">  5</span><span class="p">#include&lt;string&gt;</span>
<span class="number">  6</span><span class="p">#include&lt;allegro5/allegro.h&gt;</span>
<span class="number">  7</span><span class="p">#include&lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  8</span><span class="p">#include&lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">using</span> std::string<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">extern</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="number"> 13</span><span class="k1">extern</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>allSprites<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">class</span> BG_INDEX<span class="k2">{</span>
<span class="number"> 16</span>
<span class="number"> 17</span>public:
<span class="number"> 18</span>    BG_INDEX<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    ~BG_INDEX<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">void</span> initiate<span class="k2">(</span> <span class="k1">const</span> <span class="k1">int</span> sx, <span class="k1">const</span> <span class="k1">int</span> sy, <span class="k1">const</span> <span class="k1">int</span> sw,
<span class="number"> 21</span>                  <span class="k1">const</span> <span class="k1">int</span> sh, <span class="k1">int</span> type,
<span class="number"> 22</span>                  <span class="k1">const</span> <span class="k1">int</span> argHSpeed <span class="k3">=</span> <span class="n">0</span>, <span class="k1">const</span> <span class="k1">int</span> argVSpeed <span class="k3">=</span> <span class="n">0</span>
<span class="number"> 23</span>                  <span class="k2">)</span><span class="k2">;</span> <span class="c">//type: 1 - stretch, 2 - tile</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">void</span> set_hspeed<span class="k2">(</span> <span class="k1">const</span> <span class="k1">int</span> argHSpeed<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    <span class="k1">void</span> set_vspeed<span class="k2">(</span> <span class="k1">const</span> <span class="k1">int</span> argVSpeed<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>    <span class="k1">int</span> get_hspeed<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>    <span class="k1">int</span> get_vspeed<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>
<span class="number"> 30</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> step<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>protected:
<span class="number"> 33</span>    <span class="k1">int</span> DISPLAY_W, DISPLAY_H<span class="k2">;</span>
<span class="number"> 34</span>    <span class="k1">int</span> IMAGE_W, IMAGE_H<span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>canvas<span class="k2">;</span> <span class="c">//Large canvas with room for extra tiles on all sides</span>
<span class="number"> 37</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>fullImage<span class="k2">;</span> <span class="c">//Medium canvas with room for extra tiles on 2 sides</span>
<span class="number"> 38</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bgImage<span class="k2">;</span> <span class="c">//Small bitmap representing the display</span>
<span class="number"> 39</span>    <span class="k1">int</span> bgType<span class="k2">;</span>
<span class="number"> 40</span>    <span class="k1">int</span> hspeed, vspeed<span class="k2">;</span>
<span class="number"> 41</span>    <span class="k1">int</span> hoffset, voffset<span class="k2">;</span>
<span class="number"> 42</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span><span class="p">#endif //BG_INDEX_H</span>
</div></div><p>

bg_index.cpp:
</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="p">#include "bg_index.h"</span>
<span class="number">  2</span>
<span class="number">  3</span>BG_INDEX::BG_INDEX<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number">  4</span>BG_INDEX::~BG_INDEX<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> BG_INDEX::initiate<span class="k2">(</span> <span class="k1">const</span> <span class="k1">int</span> sx, <span class="k1">const</span> <span class="k1">int</span> sy,
<span class="number">  7</span>                        <span class="k1">const</span> <span class="k1">int</span> sw, <span class="k1">const</span> <span class="k1">int</span> sh, <span class="k1">const</span> <span class="k1">int</span> type,
<span class="number">  8</span>                        <span class="k1">const</span> <span class="k1">int</span> argHSpeed, <span class="k1">const</span> <span class="k1">int</span> argVSpeed
<span class="number">  9</span>                        <span class="k2">)</span><span class="k2">{</span>
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>tempBitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span> allSprites, sx, sy, sw, sh<span class="k2">)</span><span class="k2">;</span> <span class="c">//used to hold original size of bitmap</span>
<span class="number"> 11</span>    bgImage <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>DISPLAY_W, DISPLAY_H<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>    fullImage <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> IMAGE_W <span class="k3">+</span> DISPLAY_W, IMAGE_H <span class="k3">+</span> DISPLAY_H<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>    canvas <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> DISPLAY_W <span class="k3">+</span> IMAGE_W <span class="k3">*</span> <span class="n">2</span>, DISPLAY_H <span class="k3">+</span> IMAGE_H <span class="k3">*</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>tempBitmap<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 15</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to create sub bitmap in bg_index.initiate()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k2">}</span>
<span class="number"> 17</span>    DISPLAY_W <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    DISPLAY_H <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    IMAGE_W <span class="k3">=</span> sw<span class="k2">;</span>
<span class="number"> 20</span>    IMAGE_H <span class="k3">=</span> sh<span class="k2">;</span>
<span class="number"> 21</span>    <span class="k1">if</span><span class="k2">(</span>type <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k2">{</span> <span class="c">//Stretch</span>
<span class="number"> 22</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>fullImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>        <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span> tempBitmap, <span class="n">0</span>, <span class="n">0</span>, sw, sh, <span class="n">0</span>, <span class="n">0</span>, DISPLAY_W, DISPLAY_H, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</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><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>    <span class="k2">}</span><span class="k1">else</span><span class="k2">{</span> <span class="c">//Tile</span>
<span class="number"> 26</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>fullImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</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="k3">=</span> DISPLAY_H <span class="k3">/</span> IMAGE_H <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 28</span>            <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span><span class="k3">=</span> DISPLAY_W <span class="k3">/</span> IMAGE_W <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 29</span>                <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span> tempBitmap, IMAGE_W <span class="k3">*</span> j, IMAGE_H <span class="k3">*</span> i, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>            <span class="k2">}</span>
<span class="number"> 31</span>        <span class="k2">}</span>
<span class="number"> 32</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><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>    <span class="k2">}</span>
<span class="number"> 34</span>    bgType <span class="k3">=</span> type<span class="k2">;</span>
<span class="number"> 35</span>    hspeed <span class="k3">=</span> argHSpeed<span class="k2">;</span>
<span class="number"> 36</span>    vspeed <span class="k3">=</span> argVSpeed<span class="k2">;</span>
<span class="number"> 37</span>    hoffset <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 38</span>    voffset <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span>
<span class="number"> 40</span>
<span class="number"> 41</span><span class="k1">void</span> BG_INDEX::set_hspeed<span class="k2">(</span> <span class="k1">const</span> <span class="k1">int</span> argHSpeed<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 42</span>    hspeed <span class="k3">=</span> argHSpeed<span class="k2">;</span>
<span class="number"> 43</span><span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span><span class="k1">void</span> BG_INDEX::set_vspeed<span class="k2">(</span> <span class="k1">const</span> <span class="k1">int</span> argVSpeed<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 46</span>    vspeed <span class="k3">=</span> argVSpeed<span class="k2">;</span>
<span class="number"> 47</span><span class="k2">}</span>
<span class="number"> 48</span>
<span class="number"> 49</span><span class="k1">int</span> BG_INDEX::get_hspeed<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 50</span>    <span class="k1">return</span> hspeed<span class="k2">;</span>
<span class="number"> 51</span><span class="k2">}</span>
<span class="number"> 52</span>
<span class="number"> 53</span><span class="k1">int</span> BG_INDEX::get_vspeed<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 54</span>    <span class="k1">return</span> vspeed<span class="k2">;</span>
<span class="number"> 55</span><span class="k2">}</span>
<span class="number"> 56</span>
<span class="number"> 57</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> BG_INDEX::step<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 58</span>    hoffset <span class="k3">+</span><span class="k3">=</span> hspeed<span class="k2">;</span>
<span class="number"> 59</span>    voffset <span class="k3">+</span><span class="k3">=</span> vspeed<span class="k2">;</span>
<span class="number"> 60</span>
<span class="number"> 61</span>    <span class="k1">while</span><span class="k2">(</span>hoffset <span class="k3">&gt;</span><span class="k3">=</span> IMAGE_H<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 62</span>        hoffset <span class="k3">-</span><span class="k3">=</span> IMAGE_H<span class="k2">;</span>
<span class="number"> 63</span>    <span class="k2">}</span>
<span class="number"> 64</span>    <span class="k1">while</span><span class="k2">(</span>voffset <span class="k3">&gt;</span><span class="k3">=</span> IMAGE_W<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 65</span>        voffset <span class="k3">-</span><span class="k3">=</span> IMAGE_W<span class="k2">;</span>
<span class="number"> 66</span>    <span class="k2">}</span>
<span class="number"> 67</span>    <span class="k1">while</span><span class="k2">(</span>hoffset <span class="k3">&lt;</span><span class="k3">=</span> <span class="k3">-</span>IMAGE_H<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 68</span>        hoffset <span class="k3">+</span><span class="k3">=</span> IMAGE_H<span class="k2">;</span>
<span class="number"> 69</span>    <span class="k2">}</span>
<span class="number"> 70</span>    <span class="k1">while</span><span class="k2">(</span>voffset <span class="k3">&lt;</span><span class="k3">=</span> <span class="k3">-</span>IMAGE_W<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 71</span>        voffset <span class="k3">+</span><span class="k3">=</span> IMAGE_W<span class="k2">;</span>
<span class="number"> 72</span>    <span class="k2">}</span>
<span class="number"> 73</span>
<span class="number"> 74</span>    <span class="c">//Draw fullImage to canvas</span>
<span class="number"> 75</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> canvas<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 76</span>    <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span> fullImage, <span class="n">0</span>, <span class="n">0</span>, DISPLAY_W <span class="k3">+</span> IMAGE_W, DISPLAY_H <span class="k3">+</span> IMAGE_H, <span class="c">//Take entire fullImage</span>
<span class="number"> 77</span>                          <span class="k2">(</span>hspeed <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> ? IMAGE_W <span class="k2">:</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">+</span> hoffset, <span class="k2">(</span>vspeed <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> ? IMAGE_H <span class="k2">:</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">+</span> voffset, <span class="c">//If speed is neg draw 1 full tile ahead</span>
<span class="number"> 78</span>                          DISPLAY_W <span class="k3">+</span> IMAGE_W, DISPLAY_H <span class="k3">+</span> IMAGE_H, <span class="n">0</span>
<span class="number"> 79</span>                          <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 80</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> bgImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 81</span>    <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span> canvas, IMAGE_W, IMAGE_H, DISPLAY_W, DISPLAY_H, <span class="c">//Take only the middle of the canvas</span>
<span class="number"> 82</span>                          <span class="n">0</span>, <span class="n">0</span>, DISPLAY_W, DISPLAY_H, <span class="n">0</span> <span class="c">//Draw to display dimensions</span>
<span class="number"> 83</span>                          <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 84</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> <a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 85</span>    <span class="k1">return</span> bgImage<span class="k2">;</span>
<span class="number"> 86</span><span class="k2">}</span>
</div></div><p>

main.cpp:
</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="p">#include&lt;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include&lt;string&gt;</span>
<span class="number">   3</span><span class="p">#include&lt;vector&gt;</span>
<span class="number">   4</span><span class="p">#include&lt;allegro5/allegro.h&gt;</span>
<span class="number">   5</span><span class="p">#include&lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   6</span><span class="p">#include&lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   7</span><span class="p">#include&lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">   8</span><span class="p">#include&lt;allegro5/allegro_audio.h&gt;</span>
<span class="number">   9</span><span class="p">#include&lt;allegro5/allegro_acodec.h&gt;</span>
<span class="number">  10</span><span class="p">#include&lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  11</span><span class="p">#include "sprite_library.h"</span>
<span class="number">  12</span><span class="p">#include "bg_ctrl.h"</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="k1">using</span> std::string<span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="c">//Global Constants</span>
<span class="number">  17</span><span class="k1">const</span> <span class="k1">int</span> FPS <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number">  18</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">=</span> <span class="n">640</span>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>
<span class="number">  19</span><span class="k1">const</span> <span class="k1">int</span> LOAD_SCREEN_W <span class="k3">=</span> <span class="n">600</span>, LOAD_SCREEN_H <span class="k3">=</span> <span class="n">250</span><span class="k2">;</span>
<span class="number">  20</span>
<span class="number">  21</span><span class="k1">enum</span> ROOM_INDEX<span class="k2">{</span>
<span class="number">  22</span>    LOAD, <a href="http://www.allegro.cc/manual/MENU"><span class="a">MENU</span></a>, CREDITS
<span class="number">  23</span>    <span class="k2">}</span><span class="k2">;</span>
<span class="number">  24</span>
<span class="number">  25</span><span class="c">//Global Variables</span>
<span class="number">  26</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="number">  27</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue<span class="k2">;</span>
<span class="number">  28</span><a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  29</span><span class="k1">int</span> roomIndex<span class="k2">;</span> <span class="c">//Tracks which room we're in</span>
<span class="number">  30</span>
<span class="number">  31</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>allSprites<span class="k2">;</span>
<span class="number">  32</span>SPRITE_LIBRARY spriteLib<span class="k2">;</span>
<span class="number">  33</span>BG_CTRL bgCtrl<span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span><span class="c">//BG Index</span>
<span class="number">  36</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>roomBg<span class="k2">[</span>CREDITS<span class="k2">]</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="c">//Prints the resource that failed to initiate</span>
<span class="number">  39</span><span class="k1">int</span> init_fail<span class="k2">(</span> string failType<span class="k2">)</span><span class="k2">{</span>
<span class="number">  40</span>    string tempStr <span class="k3">=</span> <span class="s">"Failed to initiate "</span> <span class="k3">+</span> failType <span class="k3">+</span> <span class="s">"!\n"</span><span class="k2">;</span>
<span class="number">  41</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span> stderr, tempStr.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  43</span><span class="k2">}</span>
<span class="number">  44</span>
<span class="number">  45</span><span class="k1">void</span> update_progress_bar<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>loadProgressBar,
<span class="number">  46</span>                         <span class="k1">const</span> <span class="k1">int</span> LOAD_BAR_HEIGHT, <span class="k1">const</span> <span class="k1">float</span> percentage,
<span class="number">  47</span>                         <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>fntLoad, <span class="k1">const</span> string nextToLoad<span class="k2">)</span><span class="k2">{</span>
<span class="number">  48</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>loadProgressBar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>    <a href="http://www.allegro.cc/manual/al_set_clipping_rectangle"><span class="a">al_set_clipping_rectangle</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, percentage<span class="k3">*</span><span class="k2">(</span>LOAD_SCREEN_W<span class="k3">*</span>.<span class="n">9</span><span class="k2">)</span>, LOAD_BAR_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</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="k2">;</span>
<span class="number">  51</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><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span> bgCtrl.step<span class="k2">(</span><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">  53</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>loadProgressBar, LOAD_SCREEN_W <span class="k3">*</span> .<span class="n">05</span>, LOAD_SCREEN_H <span class="k3">/</span> <span class="n">4</span> <span class="k3">*</span> <span class="n">3</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>    <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>fntLoad, <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="number">  55</span>                 LOAD_SCREEN_W <span class="k3">*</span> .<span class="n">05</span>, LOAD_SCREEN_H <span class="k3">/</span> <span class="n">4</span> <span class="k3">*</span> <span class="n">3</span> <span class="k3">-</span> <span class="n">28</span>,
<span class="number">  56</span>                 ALLEGRO_ALIGN_LEFT, nextToLoad.c_str<span class="k2">(</span><span class="k2">)</span>
<span class="number">  57</span>                 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>    <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span><span class="k2">}</span>
<span class="number">  60</span>
<span class="number">  61</span><span class="c">//Loads everything needed for the game to execute</span>
<span class="number">  62</span><span class="k1">int</span> load_game<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  63</span>    <span class="k1">const</span> <span class="k1">int</span> BLOCKS_TO_LOAD <span class="k3">=</span> CREDITS<span class="k2">;</span>
<span class="number">  64</span>    <span class="k1">const</span> <span class="k1">int</span> LOAD_BAR_HEIGHT <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span>
<span class="number">  65</span>
<span class="number">  66</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>sprProgressBar<span class="k2">;</span>
<span class="number">  67</span>    <span class="k1">float</span> loadProgress <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  68</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>fntLogoBackup, <span class="k3">*</span>fntLoadProgress<span class="k2">;</span>
<span class="number">  69</span>
<span class="number">  70</span>    <span class="c">///////////////////</span>
<span class="number">  71</span>    <span class="c">//LOAD BLOCK 1</span>
<span class="number">  72</span>    <span class="c">//Initiate Allegro, Primitives, Images, Display, and Font</span>
<span class="number">  73</span>    <span class="c">//Draw the Load Screen</span>
<span class="number">  74</span>    <span class="c">//Load main bitmap and extract load screen</span>
<span class="number">  75</span>    <span class="c">///////////////////</span>
<span class="number">  76</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span> <span class="c">//Initiate Allegro</span>
<span class="number">  77</span>        <span class="k1">return</span> init_fail<span class="k2">(</span><span class="s">"Allegro"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>    <span class="k2">}</span>
<span class="number">  79</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span> <span class="c">//Initiate primitives to draw load screen</span>
<span class="number">  80</span>        <span class="k1">return</span> init_fail<span class="k2">(</span><span class="s">"Primitives Addon"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    <span class="k2">}</span>
<span class="number">  82</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span> <span class="c">//Initiate images for loading screen</span>
<span class="number">  83</span>        <span class="k1">return</span> init_fail<span class="k2">(</span><span class="s">"Image Addon"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>    <span class="k2">}</span>
<span class="number">  85</span>    display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>LOAD_SCREEN_W, LOAD_SCREEN_H<span class="k2">)</span><span class="k2">;</span> <span class="c">//Initiate the display</span>
<span class="number">  86</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span><span class="k2">{</span>
<span class="number">  87</span>        <span class="k1">return</span> init_fail<span class="k2">(</span><span class="s">"Display"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>    <span class="k2">}</span>
<span class="number">  89</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//Initiate font</span>
<span class="number">  90</span>    <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>
<span class="number">  92</span>    allSprites <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><span class="s">"sprites.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>allSprites<span class="k2">)</span><span class="k2">{</span>
<span class="number">  94</span>        <span class="k1">return</span> init_fail<span class="k2">(</span><span class="s">"sprites"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>    <span class="k2">}</span>
<span class="number">  96</span>    bgCtrl.initiate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span>    sprProgressBar <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><span class="s">"load_progress.bmp"</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//Create Loading Bar</span>
<span class="number">  99</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>sprProgressBar<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 100</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span> stderr, <span class="s">"Failed to load load_progress.bmp\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>        sprProgressBar <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>LOAD_SCREEN_W <span class="k3">*</span> .<span class="n">9</span>, LOAD_BAR_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>sprProgressBar<span class="k2">)</span><span class="k2">{</span> <span class="c">//If can't create bitmaps</span>
<span class="number"> 103</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span> stderr, <span class="s">"Cannot create bitmaps!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>            <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 105</span>        <span class="k2">}</span>
<span class="number"> 106</span>    <span class="k2">}</span>
<span class="number"> 107</span>    fntLoadProgress <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"256Bytes.ttf"</span>, <span class="n">24</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>    update_progress_bar<span class="k2">(</span>sprProgressBar, LOAD_BAR_HEIGHT,
<span class="number"> 109</span>                        <span class="k3">+</span><span class="k3">+</span>loadProgress<span class="k3">/</span>BLOCKS_TO_LOAD, fntLoadProgress, <span class="s">"Loading Sprites..."</span>
<span class="number"> 110</span>                        <span class="k2">)</span><span class="k2">;</span> <span class="c">//Update Progress Bar</span>
<span class="number"> 111</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>
<span class="number"> 113</span>    <span class="c">///////////////////</span>
<span class="number"> 114</span>    <span class="c">//LOAD BLOCK 2</span>
<span class="number"> 115</span>    <span class="c">//Load sprites</span>
<span class="number"> 116</span>    <span class="c">///////////////////</span>
<span class="number"> 117</span>
<span class="number"> 118</span>    update_progress_bar<span class="k2">(</span>sprProgressBar, LOAD_BAR_HEIGHT,
<span class="number"> 119</span>                        <span class="k3">+</span><span class="k3">+</span>loadProgress<span class="k3">/</span>BLOCKS_TO_LOAD, fntLoadProgress, <span class="s">"Complete!"</span>
<span class="number"> 120</span>                        <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>    spriteLib.initiate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>
<span class="number"> 124</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 125</span><span class="k2">}</span>
<span class="number"> 126</span>
<span class="number"> 127</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 128</span>    roomIndex <span class="k3">=</span> LOAD<span class="k2">;</span>
<span class="number"> 129</span>    <span class="k1">int</span> loadSuccess <span class="k3">=</span> load_game<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</span>    <span class="k1">if</span><span class="k2">(</span>loadSuccess<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 132</span>        <span class="k1">return</span> loadSuccess<span class="k2">;</span>
<span class="number"> 133</span>    <span class="k2">}</span>
<span class="number"> 134</span>
<span class="number"> 135</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 136</span><span class="k2">}</span>
</div></div><p>

BG_CTRL is referenced in main.cpp on lines 33, 52, and 96.</p><p>My logic for drawing the background the way I do is this:<br />I have a canvas which is huge and has room for a full extra tile on each side of it (so a scrolling image can go in any direction without drawing out of bounds) and I have a fullImage which is extended ONE tile past what is needed for the display because that&#39;s all that&#39;s needed to make the scrolling appearance and it draws to the canvas at the end of each <span class="source-code">step<span class="k2">(</span><span class="k2">)</span></span>. bgImage is made the same size as the display and will be directly drawn to the backbuffer. bgImage is made by extracting the middle of the canvas the same size as the display (keeping an extra &quot;unseen&quot; tile size on all sides to work the magic).</p><p>The problem is first noticeable on line 58 when the display should be updated (in update_progress_bar function called from load_game called from main())
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AmnesiA)</author>
		<pubDate>Fri, 28 Jun 2013 12:08:46 +0000</pubDate>
	</item>
</rss>
