<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Animation movement and figting</title>
		<link>http://www.allegro.cc/forums/view/583187</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 05 May 2006 21:43:26 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello.</p><p>Im making a game in C++, but I have rused in to some problems that I hope you can help me with or give advice about what I can do.</p><p>1. The first thing I want to do is making it look like the main character is moving, like changing pictures between like 4-5 pictures if I press the UP-Key, and another 4-5picuters when hitting the DOWN-key. You get the idea i hope? Because now it looks like the character i sliding on the map, because it&#39;s 1 picture for each key. Any tips ? Code?</p><p>2. The second thing I want to do is making figthing possible. Right now the main char can run in to eniemes randomly placed on the map, then it starts a new window, kind of looking like Pokemon style, the main char on side och the enimie on the other. So in this place I want to be able to attack of course perhaps something else like run och defence. But in order for this to happen I must make HP points/bar Exp points/bar and hitpower like that stuff. I have been making some classes for Main char and Enimies, but I dont get it to work and have no Idea how to make a HP / Exp bar. So any tips on this ?</p><p>I would be greatful for any tips you have on either qeustion.</p><p>You should perhaps have my code:</p><p>#include &lt;allegro.h&gt;<br />#include &lt;time.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;cstdlib&gt;<br />#include &lt;Math.h&gt;</p><p>BITMAP *Buffer;<br />BITMAP *char_up;<br />BITMAP *char_down;<br />BITMAP *char_left;<br />BITMAP *char_right;<br />BITMAP *Bakgrund;<br />BITMAP *theMouse;<br />BITMAP *mainMenuBack;<br />BITMAP *mainMenuExit;<br />BITMAP *mainMenuOptions;<br />BITMAP *mainMenuNewGame;<br />BITMAP *mainMenuContinue;<br />BITMAP *fight_bg;<br />BITMAP *char_up_fight;<br />BITMAP *enemy_fight;<br />BITMAP *blackscreen;<br />BITMAP *loadingScreen;</p><p>bool Quit = false;<br />bool loading = true;<br />bool lastLoopMouseDown, mouse1release;<br />int data[100], level=0, enemy[100];<br />int menuWidth, menuHeight, menuX, menuY;<br />bool menuBtnPress, menuToggle, mouseOver1, mouseOver2, mouseOver3, enterLvl;<br />bool mainMenuOn = true;<br />/*void drawFightMenu(int MenuX, int MenuY)<br />{<br />int MenuW = 300;<br />int MenuH = 70;<br />int AminX = MenuX+11;<br />int AmaxX = MenuX+(MenuW/2)-5;<br />int AminY = MenuY+11;<br />int AmaxY = MenuX+(MenuW/2)-5;<br />rectfill(Buffer, MenuX, MenuY, MenuX+MenuW, MenuY+MenuH, makecol(0, 0, 0));<br />rectfill(Buffer, MenuX+2, MenuY+2, MenuX+MenuW-2, MenuY+MenuH-2, makecol(100, 100, 100));<br />rectfill(Buffer, MenuX+10, MenuY+10, MenuX+(MenuW/2)-4, MenuY+(MenuH/2)-4, makecol(0, 0, 0));<br />if(mouse_x&lt;1_maxX &amp;&amp; mouse_x&gt;1_minX &amp;&amp; mouse_y&lt;1_maxY &amp;&amp; mouse_y&gt;1_minY)<br />rectfill(Buffer, MenuX+11, MenuY+11, MenuX+(MenuW/2)-5, MenuY+(MenuH/2)-5, makecol(130, 130, 130));<br />else<br />rectfill(Buffer, MenuX+11, MenuY+11, MenuX+(MenuW/2)-5, MenuY+(MenuH/2)-5, makecol(100, 100, 100));</p><p>textout_ex(Buffer, font, &quot;Attack&quot;, MenuX+15, MenuY+18, makecol(0, 0, 0), -1);</p><p>draw_sprite(Buffer, theMouse, mouse_x, mouse_y);<br />}*/<br />void drawMenu()<br />{<br />if(mouse_x&gt;(230) &amp;&amp; mouse_y&gt;(100) &amp;&amp; mouse_x&lt;(410) &amp;&amp; mouse_y&lt;(120)) mouseOver1 = true;<br />else mouseOver1 = false;<br />if(mouse_x&gt;(230) &amp;&amp; mouse_y&gt;(130) &amp;&amp; mouse_x&lt;(410) &amp;&amp; mouse_y&lt;(150)) mouseOver2 = true;<br />else mouseOver2 = false;<br />if(mouse_x&gt;(230) &amp;&amp; mouse_y&gt;(160) &amp;&amp; mouse_x&lt;(410) &amp;&amp; mouse_y&lt;(180)) mouseOver3 = true;<br />else mouseOver3 = false;<br />if(menuToggle)<br />{<br />rectfill(blackscreen, 0, 0, SCREEN_W, SCREEN_H, makecol(0, 0, 0));<br />set_trans_blender(0, 0, 0, 200);<br />draw_trans_sprite(Buffer, blackscreen, 0, 0);</p><p>rectfill(Buffer, 218, 88, 422, 193, makecol(0, 0, 0));<br />rectfill(Buffer, 220, 90, 420, 191, makecol(100, 100, 100));</p><p>rectfill(Buffer, 229, 99, 411, 121, makecol(0, 0, 0));<br />rectfill(Buffer, 229, 129, 411, 151, makecol(0, 0, 0));<br />rectfill(Buffer, 229, 159, 411, 181, makecol(0, 0, 0));</p><p>if(mouseOver1) rectfill(Buffer, 230, 100, 410, 120, makecol(130, 130, 130));<br />else rectfill(Buffer, 230, 100, 410, 120, makecol(100, 100, 100));<br />if(mouseOver2) rectfill(Buffer, 230, 130, 410, 150, makecol(130, 130, 130));<br />else rectfill(Buffer, 230, 130, 410, 150, makecol(100, 100, 100));<br />if(mouseOver3) rectfill(Buffer, 230, 160, 410, 180, makecol(130, 130, 130));<br />else rectfill(Buffer, 230, 160, 410, 180, makecol(100, 100, 100));</p><p>textout_ex(Buffer, font, &quot;Exit to Windows&quot;, 240, 107, makecol(0, 0, 0), -1);<br />textout_ex(Buffer, font, &quot;Exit to Main Menu&quot;, 240, 137, makecol(0, 0, 0), -1);<br />textout_ex(Buffer, font, &quot;Return to game&quot;, 240, 167, makecol(0, 0, 0), -1);</p><p>if(mouse_x&gt;(230) &amp;&amp; mouse_y&gt;(100) &amp;&amp; mouse_x&lt;(410) &amp;&amp; mouse_y&lt;(120) &amp;&amp; mouse_b &amp; 1) Quit=true;<br />if(mouse_x&gt;(230) &amp;&amp; mouse_y&gt;(130) &amp;&amp; mouse_x&lt;(410) &amp;&amp; mouse_y&lt;(150) &amp;&amp; mouse_b &amp; 1) mainMenuOn=true;<br />if(mouse_x&gt;(230) &amp;&amp; mouse_y&gt;(160) &amp;&amp; mouse_x&lt;(410) &amp;&amp; mouse_y&lt;(180) &amp;&amp; mouse_b &amp; 1) menuToggle=false;<br />draw_sprite( Buffer, theMouse, mouse_x, mouse_y);<br />}<br />}<br />int xPic, yPic, charDir, xLoc, yLoc;<br />bool resting;<br />void moveChar()<br />{<br />if((xLoc*64)&lt;xPic)<br />{<br />resting=false;<br />xPic--;<br />}<br />else{resting=true;}<br />if((xLoc*64)&gt;xPic)<br />{<br />resting=false;<br />xPic++;<br />}<br />else{resting=true;}<br />if((yLoc*48)&lt;yPic)<br />{<br />resting=false;<br />yPic--;<br />}<br />else{resting=true;}<br />if((yLoc*48)&gt;yPic)<br />{<br />resting=false;<br />yPic++;}<br />else{resting=true;}<br />};</p><p>void setLocs(int newXloc, int newYloc){ xLoc=newXloc; yLoc=newYloc-1; };<br />void setPic(){ xPic=(xLoc*64); yPic=(yLoc*48); };<br />void setPicDown(){ xPic=(xLoc*64); yPic=((yLoc+1)*48); };<br />void setPicLeft(){ xPic=((xLoc-1)*64); yPic=(yLoc*48); };<br />void setPicRight(){ xPic=((xLoc+1)*64); yPic=(yLoc*48); };<br />void setPicUp(){ xPic=(xLoc*64); yPic=((yLoc-1)*48); };<br />void resetLvlData()<br />{<br />int rs = 0;<br />while(rs&lt;=100)<br />{<br />data[rs]=0;<br />rs++;<br />}<br />};<br />void resetEnemyData()<br />{<br />int rs = 0;<br />while(rs&lt;=100)<br />{<br />enemy[rs]=0;<br />rs++;<br />}<br />};</p><p>void setLvl(int prevLvl, int lvl)<br />{<br />enterLvl = false;<br />if(lvl==1)<br />{<br />Bakgrund = load_bitmap( &quot;SchoolEntrance.bmp&quot;, NULL);<br />resetLvlData();<br />level = lvl;<br />data[0] = 1;<br />data[1] = 1;<br />data[2] = 1;<br />data[3] = 1;<br />data[5] = 1;<br />data[6] = 1;<br />data[7] = 1;<br />data[8] = 1;<br />data[9] = 1;<br />resetEnemyData();<br />enemy[67]=1;<br />if(prevLvl==0)<br />{<br />setLocs(7,9);<br />setPicDown();<br />charDir=2;<br />}<br />if(prevLvl==2)<br />{<br />setLocs(4,1);<br />setPicUp();<br />charDir=4;<br />}<br />}<br />if(lvl==2)<br />{<br />Bakgrund = load_bitmap(&quot;kullensShop.bmp&quot;, NULL);<br />resetLvlData();<br />level = lvl;<br />data[0] = 1;<br />data[1] = 1;<br />data[2] = 1;<br />data[3] = 1;<br />data[4] = 1;<br />data[6] = 1;<br />data[7] = 1;<br />data[8] = 1;<br />data[9] = 1;<br />data[10] = 1;<br />data[19] = 1;<br />data[20] = 1;<br />data[29] = 1;<br />data[30] = 1;<br />data[39] = 1;<br />data[40] = 1;<br />data[48] = 1;<br />data[49] = 1;<br />data[50] = 1;<br />data[60] = 1;<br />data[69] = 1;<br />data[70] = 1;<br />data[79] = 1;<br />data[80] = 1;<br />data[89] = 1;<br />data[90] = 1;<br />data[91] = 1;<br />data[92] = 1;<br />data[93] = 1;<br />data[95] = 1;<br />data[96] = 1;<br />data[97] = 1;<br />data[98] = 1;<br />data[99] = 1;<br />resetEnemyData();<br />if(prevLvl==1)<br />{<br />setLocs(4,8);<br />setPicDown();<br />}<br />charDir=2;<br />}<br />};<br />bool enemyContact()<br />{<br />if(enemy[(yLoc*10)+xLoc]==1) return true;<br />else return false;<br />};<br />void drawMainMenu()<br />{<br />bool Con = false;<br />bool New = false;<br />bool Opt = false;<br />bool Exi = false;<br />bool FaDe = false;<br />int fadeInt = 0;<br />if(mainMenuOn)<br />{<br />mainMenuBack = load_bitmap( &quot;mainmenu.bmp&quot;, NULL);<br />mainMenuExit = load_bitmap( &quot;mainmenuexit.bmp&quot;, NULL);<br />mainMenuOptions = load_bitmap( &quot;mainmenuoptions.bmp&quot;, NULL);<br />mainMenuNewGame = load_bitmap( &quot;mainmenunewgame.bmp&quot;, NULL);<br />mainMenuContinue = load_bitmap( &quot;mainmenucontinue.bmp&quot;, NULL);<br />}<br />while(mainMenuOn)<br />{<br />if(!mouse_b&amp;1 &amp;&amp; lastLoopMouseDown)mouse1release=true;<br />draw_sprite(Buffer, mainMenuBack, 0, 0);<br />if(mouse_x&lt;295 &amp;&amp; mouse_x&gt;267 &amp;&amp; mouse_y&lt;359 &amp;&amp; mouse_y&gt;335 &amp;&amp; !Con &amp;&amp; !New &amp;&amp; !Opt)<br />{<br />if(mouse_b&amp;1){Exi=true;}<br />else{draw_sprite(Buffer, mainMenuExit, 265, 333);}<br />if(!mouse_b&amp;1 &amp;&amp; Exi) {mainMenuOn=false;Quit=true;}<br />}<br />else if(mouse_x&lt;268 &amp;&amp; mouse_x&gt;218 &amp;&amp; mouse_y&lt;292 &amp;&amp; mouse_y&gt;269 &amp;&amp; !Con &amp;&amp; !New &amp;&amp; !Exi)<br />{<br />if(mouse_b&amp;1){Opt=true;}<br />else{draw_sprite(Buffer, mainMenuOptions, 216, 267);}<br />}<br />else if(mouse_x&lt;228 &amp;&amp; mouse_x&gt;171 &amp;&amp; mouse_y&lt;233 &amp;&amp; mouse_y&gt;209 &amp;&amp; !Con &amp;&amp; !Exi &amp;&amp; !Opt)<br />{<br />if(mouse_b&amp;1){New=true;}<br />else{draw_sprite(Buffer, mainMenuNewGame, 169, 208);}<br />if(!mouse_b&amp;1 &amp;&amp; New) {mainMenuOn=false;setLvl(0, 1);menuToggle=false;loading=true;if(loading)draw_sprite(scre<br />en, loadingScreen, 0, 0);}<br />}<br />else if(mouse_x&lt;196 &amp;&amp; mouse_x&gt;134 &amp;&amp; mouse_y&lt;169 &amp;&amp; mouse_y&gt;143 &amp;&amp; !Exi &amp;&amp; !New &amp;&amp; !Opt)<br />{<br />if(mouse_b&amp;1){Con=true;}<br />else{draw_sprite(Buffer, mainMenuContinue, 134, 143);}<br />if(!mouse_b&amp;1 &amp;&amp; Con)<br />{<br />FaDe = true;<br />menuToggle=false;<br />}<br />}<br />else if(!mouse_b&amp;1) {Exi=false;Opt=false;New=false;Con=false;}<br />if(Exi)draw_sprite(Buffer, mainMenuExit, 266, 334);<br />if(Opt)draw_sprite(Buffer, mainMenuOptions, 217, 268);<br />if(New)draw_sprite(Buffer, mainMenuNewGame, 170, 209);<br />if(Con)draw_sprite(Buffer, mainMenuContinue, 135, 144);</p><p>if(fadeInt&lt;253 &amp;&amp; FaDe)fadeInt+=3;<br />if(fadeInt&gt;=253)mainMenuOn=false;<br />mouse1release=false;<br />if(mouse_b&amp;1) lastLoopMouseDown=true;<br />else lastLoopMouseDown=false;<br />draw_sprite(Buffer, theMouse, mouse_x, mouse_y);</p><p>rectfill(blackscreen, 0, 0, SCREEN_W, SCREEN_H, makecol(0, 0, 0));<br />set_trans_blender(0, 0, 0, fadeInt);<br />draw_trans_sprite(Buffer, blackscreen, 0, 0);</p><p>draw_sprite(screen, Buffer, 0, 0);<br />}</p><p>};<br />void toggleMenu()<br />{<br />if(!menuToggle &amp;&amp; menuBtnPress)<br />{<br />menuToggle = true;<br />}<br />else if(menuToggle &amp;&amp; menuBtnPress)<br />{<br />menuToggle = false;<br />}<br />menuBtnPress = false;<br />};<br />void battle(int enemy)<br />{<br />menuBtnPress = true;<br />bool battleOn = true;<br />bool fight_start = false;<br />int char_pan = -320;<br />int enemy_pan = 640;<br />fight_bg = load_bitmap( &quot;fight_bg.bmp&quot;, NULL);<br />char_up_fight = load_bitmap( &quot;char_up_fight.bmp&quot;, NULL);<br />enemy_fight = load_bitmap( &quot;fjortis.bmp&quot;, NULL);<br />while(battleOn)<br />{<br />if(key[KEY_ESC])<br />{<br />toggleMenu();<br />}<br />else menuBtnPress = true;<br />if(key[KEY_S] &amp;&amp; !menuToggle)<br />{<br />battleOn=false;<br />}<br />draw_sprite(Buffer, fight_bg, 0, 0);</p><p>if(Quit) battleOn=false;<br />draw_sprite(Buffer, char_up_fight, char_pan, 0);<br />draw_sprite(Buffer, enemy_fight, enemy_pan, 0);</p><p>if(char_pan&lt;0 &amp;&amp; !menuToggle)char_pan++;<br />if(enemy_pan&gt;320 &amp;&amp; !menuToggle)enemy_pan--;<br />//else if(char_pan==0) drawFightMenu(300,350);</p><p>drawMenu();<br />drawMainMenu();<br />draw_sprite(screen, Buffer, 0, 0);<br />}<br />destroy_bitmap(fight_bg);<br />destroy_bitmap(char_up_fight);<br />destroy_bitmap(enemy_fight);<br />};</p><p>int frames = 0;<br />int FPS = 0;<br />void fps()<br />{<br />FPS = frames;<br />frames=0;<br />};</p><p>void increeseXloc()<br />{<br />if(xLoc*64==xPic &amp;&amp; xLoc&lt;9 &amp;&amp; data[((yLoc+1)*10)+(xLoc+1)]==0)<br />{<br />xLoc++;<br />if(rand()%50 == 1)<br />battle(1);<br />}<br />};<br />void increeseYloc(){<br />if(yLoc*48==yPic &amp;&amp; yLoc&lt;8 &amp;&amp; data[(yLoc+2)*10+xLoc]==0)<br />{<br />yLoc++;<br />if(rand()%50 == 1)<br />battle(1);<br />}<br />};<br />void decreeseXloc()<br />{<br />if(xLoc*64==xPic &amp;&amp; xLoc&gt;0 &amp;&amp; data[(yLoc+1)*10+(xLoc-1)]==0)<br />{<br />xLoc--;<br />if(rand()%50 == 1)<br />battle(1);<br />}<br />};<br />void decreeseYloc()<br />{<br />if(yLoc*48==yPic &amp;&amp; yLoc&gt;-1 &amp;&amp; data[(yLoc)*10+xLoc]==0)<br />{<br />yLoc--;<br />if(rand()%50 == 1)<br />battle(1);<br />}<br />};<br />int main()<br />{<br />int intKeyPress = 0;</p><p>bool BtnUp = true;</p><p>menuToggle = false;<br />menuBtnPress = false;</p><p>if (allegro_init() != 0)<br />return 1;<br />install_keyboard();<br />install_mouse();<br />set_color_depth(32);</p><p>if (set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0) {<br />if (set_gfx_mode(GFX_SAFE, 640, 480, 0, 0) != 0) {<br />set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);<br />allegro_message(&quot;Unable to set any graphic mode\n%s\n&quot;, allegro_error);<br />return 1;<br />}<br />}<br />set_window_title(&quot;FINAL FAMILY&quot;);<br />set_palette(desktop_palette);</p><p>loadingScreen = load_bitmap(&quot;load.bmp&quot;, NULL);<br />if(loading)draw_sprite(screen, loadingScreen, 0, 0);</p><p>char_up = load_bitmap(&quot;char_up.bmp&quot;, NULL);<br />char_down = load_bitmap(&quot;char_down.bmp&quot;, NULL);<br />char_left = load_bitmap(&quot;char_left.bmp&quot;, NULL);<br />char_right = load_bitmap(&quot;char_right.bmp&quot;, NULL);</p><p>blackscreen = create_bitmap(SCREEN_W, SCREEN_H);</p><p>theMouse = load_bitmap(&quot;mouse.bmp&quot;, NULL);</p><p>setLvl(0, 1);</p><p>Buffer = create_bitmap(640, 480);</p><p>int dir = 3;</p><p>install_int(fps, 1000);<br />install_int(moveChar, 3);</p><p>srand(time(NULL));</p><p>while(!Quit)<br />{<br />frames++;</p><p>if(loading)draw_sprite(screen, loadingScreen, 0, 0);<br />if(!mouse_b&amp;1 &amp;&amp; lastLoopMouseDown)mouse1release=true;</p><p>drawMainMenu();</p><p>draw_sprite(Buffer, Bakgrund, 0, 0);</p><p>//moveChar();</p><p>if(xLoc==4 &amp;&amp; yLoc==-1 &amp;&amp; yPic==(48*-1) &amp;&amp; level==1 &amp;&amp; enterLvl) setLvl(1, 2);<br />if(xLoc==4 &amp;&amp; yLoc== 8 &amp;&amp; yPic==(48*8) &amp;&amp; level==2 &amp;&amp; enterLvl) setLvl(2, 1);</p><p>if(xLoc!=0 &amp;&amp; xLoc!=9 &amp;&amp; yLoc!=-1 &amp;&amp; yLoc!=8) if(resting) enterLvl = true;</p><p>if(charDir==1){draw_sprite(Buffer, char_left, xPic, yPic);}<br />else if(charDir==2){draw_sprite(Buffer, char_up, xPic, yPic);}<br />else if(charDir==3){draw_sprite(Buffer, char_right, xPic, yPic);}<br />else if(charDir==4){draw_sprite(Buffer, char_down, xPic, yPic);}<br />else {draw_sprite(Buffer, char_down, xPic, yPic);}<br />textprintf_ex(Buffer, font, 10, 10, makecol(255, 255, 255), 1, &quot;FPS: %d&quot;, FPS);</p><p>if(enemyContact()&amp;&amp;resting) textout_ex(Buffer, font, &quot;CONTACT!&quot;, 10, 30, makecol(0, 0, 0), -1);</p><p>drawMenu();</p><p>acquire_screen();<br />draw_sprite(screen, Buffer, 0, 0);<br />release_screen();</p><p>if(key[KEY_A] &amp;&amp; !menuToggle)<br />{<br />battle(1);<br />}<br />if(key[KEY_ESC])<br />{<br />toggleMenu();<br />}<br />else menuBtnPress = true;</p><p>if(key[KEY_LEFT] &amp;&amp; !menuToggle)<br />{<br />if(resting)<br />{<br />decreeseXloc();<br />charDir=1;<br />BtnUp = false;<br />}<br />}<br />else if(key[KEY_RIGHT] &amp;&amp; !menuToggle)<br />{<br />if(resting)<br />{<br />increeseXloc();<br />charDir=3;<br />BtnUp = false;<br />}<br />}<br />else if(key[KEY_UP] &amp;&amp; !menuToggle)<br />{<br />if(resting)<br />{<br />decreeseYloc();<br />charDir=2;<br />BtnUp = false;<br />}<br />}<br />else if(key[KEY_DOWN] &amp;&amp; !menuToggle)<br />{<br />if(resting)<br />{<br />increeseYloc();<br />charDir=4;<br />BtnUp = false;<br />}<br />}<br />else if(resting){ BtnUp = true; }<br />mouse1release=false;<br />if(mouse_b&amp;1) lastLoopMouseDown=true;<br />else lastLoopMouseDown=false;<br />loading = false;<br />}<br />return 0;<br />}<br />END_OF_MAIN();</p><p>//Pundus
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Pontus Wallberg)</author>
		<pubDate>Thu, 04 May 2006 20:52:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1)  Say you have an array of bitmaps for the character:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>walking<span class="k2">[</span>FRAMES<span class="k2">]</span><span class="k2">;</span>
<span class="k1">float</span> walkingcount<span class="k2">;</span>
<span class="k1">const</span> <span class="k1">float</span> animation_speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">5</span><span class="k2">;</span>
<span class="k1">int</span> walkingframe<span class="k2">;</span>

<span class="c">//each time the character moves forward:</span>
walkingcount <span class="k3">+</span><span class="k3">=</span> animation_speed<span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>walkingcount <span class="k3">&gt;</span><span class="k3">=</span> FRAMES<span class="k2">)</span> walkingcount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
walkingframe <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>walkingcount<span class="k2">)</span><span class="k2">;</span>

<span class="c">//when drawing:</span>
<a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>somebuffer, walking<span class="k2">[</span>walkingframe<span class="k2">]</span>, x, y<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

2)  I didn&#39;t look at the code (use the [CODE] [/CODE] tags!), but a quick and simple HP bar would be something like:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">const</span> <span class="k1">int</span> barlength <span class="k3">=</span> <span class="n">123</span><span class="k2">;</span>
<span class="k1">const</span> <span class="k1">int</span> barheight <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>
<span class="k1">float</span> HP, MAX_HP<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a><span class="k2">(</span>somebitmap, <span class="n">0</span>, <span class="n">0</span>, barlength, barheight, somecolor<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>somebitmap, <span class="n">0</span>, <span class="n">0</span>, <span class="k1">int</span><span class="k2">(</span>HP <span class="k3">/</span> MAX_HP<span class="k2">)</span> <span class="k3">*</span> barlength, barheight, somecolor<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kdevil)</author>
		<pubDate>Thu, 04 May 2006 21:23:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And what about editing your post to use the code tag?</p><p><a href="http://www.allegro.cc/mockup.html">HTML Mockup Code</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (umperio)</author>
		<pubDate>Thu, 04 May 2006 21:23:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
HTML Mockup Code
</p></div></div><p>

As a nitpicker, I have to say that the forums don&#39;t use HTML! <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Faerber)</author>
		<pubDate>Thu, 04 May 2006 21:49:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, I didn&#39;t know about the code tags, this is my first post on allegro.</p><p>I just want to ask something about kdevils answer on the first question.</p><p>Ok say that I make that array, how do declare the array to the diffrent Bitmaps, I mean where in the code do should I load the the diffrent Bitmaps? And  also should I make 4 diffrents arrays for each UP,DOWN,LEFT,RIGTH key?</p><p>Thx for the answer man and I will use the code tags next time.</p><p>//Pundus
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Pontus Wallberg)</author>
		<pubDate>Fri, 05 May 2006 00:35:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I will use the code tags next time.
</p></div></div><p>

You can still edit your first post and use the code tags now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (umperio)</author>
		<pubDate>Fri, 05 May 2006 00:39:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Its says that its to big if i put it between code tags, max is 64 kb and the my post i 110 kb with the code tags. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Pontus Wallberg)</author>
		<pubDate>Fri, 05 May 2006 01:11:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe attach the source file instead?</p><p>And to answer your latest question, you can use a multidimensional array... so like, frames[LEFT][0], frames[LEFT][1], etc... maybe that&#39;s what you want? You might do that for each action, like walkframes[LEFT][0], and punchframes[LEFT][0].
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mokkan)</author>
		<pubDate>Fri, 05 May 2006 01:17:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, you could use multidimensional arrays.  As for loading the bitmaps:
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//instead of char_right = load_bitmap("char_right.bmp", NULL);</span>
walking<span class="k2">[</span>RIGHT<span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"char_right0.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
walking<span class="k2">[</span>RIGHT<span class="k2">]</span><span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"char_right1.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
walking<span class="k2">[</span>RIGHT<span class="k2">]</span><span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"char_right2.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="c">//etc...</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kdevil)</author>
		<pubDate>Fri, 05 May 2006 02:28:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ick, that sounds like a lot of maintenance to me.  I use a sprite class that has a BITMAP for a picture containning all the character motions and one BITMAP that is used for storing the single image.  Every time I change where I&#39;m grabbing from off the set-of-pictures-bitmap, I update the single-motion bitmap.  This way, outside of the class, I only have to worry about the single-motion bitmap (and I don&#39;t really have to worry about that either, considering the class takes care of drawing itself too).  This isn&#39;t a new method or anything. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Onewing)</author>
		<pubDate>Fri, 05 May 2006 02:36:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>True, my example certainly isn&#39;t the best way to deal with sprites.  I&#39;d instead use a datafile, a sprite class like you said, or something else that requires less &quot;copy &amp; paste&quot;, but as a simple example it works well enough.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kdevil)</author>
		<pubDate>Fri, 05 May 2006 03:41:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Some things I picked up from your code...</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> rs <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="k1">while</span><span class="k2">(</span>rs<span class="k3">&lt;</span><span class="k3">=</span><span class="n">100</span><span class="k2">)</span>
<span class="k2">{</span>
data<span class="k2">[</span>rs<span class="k2">]</span><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
rs<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

This is the same as:</p><p><span class="source-code"><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> rs <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> rs <span class="k3">&lt;</span> <span class="n">100</span><span class="k2">;</span> rs<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> data<span class="k2">[</span>rs<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></span></p><p>Also, your version will crash when rs == 100. You only declared data as an array of 100 ints, which is data[0..99].</p><p>This applies to your resetEnemyData() function as well.</p><p>Your setLvl() function is extremely inelegant. I can&#39;t suggest a better method, since I&#39;m not sure what you&#39;re doing, and the code is too messy (especially without indentation) for me to bother deciphering it. But, with 35 lines in a row of data[##] = 1;, you really need to look at finding a better way.</p><p>I also noticed that your main() function is 140 lines long.  You should break it up into smaller sections, such as setup routines, input routines, output routines.  Then group related functions together in their own files and link them together rather than having one huge source file.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Fri, 05 May 2006 04:37:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello again guys!</p><p>I really appreciate all the help you have gave me. I have just one more question, I&#39;m going to make it possible to attack the enemies when they pop up. Should I make a class for the enemies, where I declare the HP, Strength, Level, Hitpower? I just one some pointers where to begin, it always the hardest. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><p>//Pundus
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Pontus Wallberg)</author>
		<pubDate>Fri, 05 May 2006 21:43:26 +0000</pubDate>
	</item>
</rss>
