<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Rope Physics</title>
		<link>http://www.allegro.cc/forums/view/588302</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 02 Nov 2006 06:20:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This problem seems to be a doozy.</p><p>Does anyone know of any good rope physics tutorials (other than NeHe)?</p><p>I have the following code, but I&#39;m not getting any swinging motion like a pendulum:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;math.h&gt;</span></td></tr><tr><td class="number">3</td><td><span class="k1">bool</span> up, down, left, right<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">class</span> rope<span class="k2">{</span></td></tr><tr><td class="number">6</td><td>public:</td></tr><tr><td class="number">7</td><td>  <span class="k1">class</span> joint<span class="k2">{</span></td></tr><tr><td class="number">8</td><td>  public:</td></tr><tr><td class="number">9</td><td>    <span class="k1">float</span> x1,y1,x2,y2<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    <span class="k1">float</span> velX,velY<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  <span class="k2">}</span>joint<span class="k2">[</span><span class="n">40</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>  <span class="k1">float</span> seg_length<span class="k2">;</span>     <span class="c">//length of segments between joints</span></td></tr><tr><td class="number">14</td><td>  <span class="k1">float</span> air_resistance<span class="k2">;</span> <span class="c">//air resistance [negating factor on gravity {9.8}]</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">float</span> damping<span class="k2">;</span>        <span class="c">//self-explanitory</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">float</span> speed<span class="k2">;</span>          <span class="c">//didn't know what else to name this</span></td></tr><tr><td class="number">17</td><td>  </td></tr><tr><td class="number">18</td><td>  <span class="k1">void</span> deploy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//initializes the rope</span></td></tr><tr><td class="number">19</td><td>  <span class="k1">void</span> update<span class="k2">(</span><span class="k1">bool</span>, <span class="k1">bool</span>, <span class="k1">bool</span>, <span class="k1">bool</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//called every game-cycle</span></td></tr><tr><td class="number">20</td><td>  <span class="k1">void</span> draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k2">}</span>rope<span class="k2">[</span><span class="n">20</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td><span class="k1">void</span> rope::deploy<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>  seg_length<span class="k3">=</span><span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>  air_resistance<span class="k3">=</span><span class="n">0</span>.<span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  damping<span class="k3">=</span>.<span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>  speed<span class="k3">=</span><span class="n">0</span>.<span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>  <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">40</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">30</td><td>    joint<span class="k3">&lt;</span>i&gt;.x1<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span><span class="k2">;</span> joint<span class="k3">&lt;</span>i&gt;.y1<span class="k3">=</span>i<span class="k3">*</span>seg_length<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    joint<span class="k3">&lt;</span>i&gt;.x2<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span><span class="k2">;</span> joint<span class="k3">&lt;</span>i&gt;.y2<span class="k3">=</span>i<span class="k3">*</span>seg_length<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    joint<span class="k3">&lt;</span>i&gt;.velX<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> joint<span class="k3">&lt;</span>i&gt;.velY<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">34</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td><span class="k1">void</span> rope::update<span class="k2">(</span><span class="k1">bool</span> up, <span class="k1">bool</span> down, <span class="k1">bool</span> left, <span class="k1">bool</span> right<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>  <span class="k1">if</span> <span class="k2">(</span>left<span class="k2">)</span></td></tr><tr><td class="number">38</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">39</td><td>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x1--<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">41</td><td>  <span class="k1">if</span> <span class="k2">(</span>right<span class="k2">)</span></td></tr><tr><td class="number">42</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">43</td><td>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x1<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>  </td></tr><tr><td class="number">44</td><td>  <span class="k2">}</span>  </td></tr><tr><td class="number">45</td><td>  <span class="k1">if</span> <span class="k2">(</span>up<span class="k2">)</span></td></tr><tr><td class="number">46</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">47</td><td>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y1--<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">49</td><td>  <span class="k1">if</span> <span class="k2">(</span>down<span class="k2">)</span></td></tr><tr><td class="number">50</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">51</td><td>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y1<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>  </td></tr><tr><td class="number">52</td><td>  <span class="k2">}</span>    </td></tr><tr><td class="number">53</td><td>  </td></tr><tr><td class="number">54</td><td>  <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">40</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">55</td><td>    <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">56</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">57</td><td>      <span class="k1">float</span> vx1<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.x1-joint<span class="k3">&lt;</span>i&gt;.x1<span class="k2">;</span>          <span class="c">//vector 1: diffrence between x's</span></td></tr><tr><td class="number">58</td><td>      <span class="k1">float</span> vy1<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.y1-joint<span class="k3">&lt;</span>i&gt;.y1<span class="k2">;</span>          <span class="c">//vector 1: diffrence between y's</span></td></tr><tr><td class="number">59</td><td>      <span class="k1">int</span> vm1<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_83.html" target="_blank">ceil</a><span class="k2">(</span>vx1<span class="k3">*</span>vx1<span class="k3">+</span>vy1<span class="k3">*</span>vy1<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    <span class="c">//vector 1: magnitude</span></td></tr><tr><td class="number">60</td><td>      <span class="k1">int</span> ve1<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>vm1-<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>seg_length<span class="k3">/</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>            <span class="c">//vector 1: extention</span></td></tr><tr><td class="number">61</td><td>      </td></tr><tr><td class="number">62</td><td>      <span class="k1">float</span> vx2<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.x1-joint<span class="k3">&lt;</span>i&gt;.x1<span class="k2">;</span>          <span class="c">//vector 2: diffrence between x's</span></td></tr><tr><td class="number">63</td><td>      <span class="k1">float</span> vy2<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.y1-joint<span class="k3">&lt;</span>i&gt;.y1<span class="k2">;</span>          <span class="c">//vector 2: diffrence between y's</span></td></tr><tr><td class="number">64</td><td>      <span class="k1">int</span> vm2<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_83.html" target="_blank">ceil</a><span class="k2">(</span>vx2<span class="k3">*</span>vx2<span class="k3">+</span>vy2<span class="k3">*</span>vy2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    <span class="c">//vector 2: magnitude</span></td></tr><tr><td class="number">65</td><td>      <span class="k1">int</span> ve2<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>vm2- <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>seg_length<span class="k2">;</span>           <span class="c">//vector 2: extention</span></td></tr><tr><td class="number">66</td><td>      </td></tr><tr><td class="number">67</td><td>      <span class="k1">float</span> vx<span class="k3">=</span><span class="k2">(</span>vx1<span class="k3">/</span>vm1<span class="k3">*</span>ve1<span class="k2">)</span><span class="k3">+</span><span class="k2">(</span>vx2<span class="k3">/</span>vm2<span class="k3">*</span>ve2<span class="k2">)</span><span class="k2">;</span>                    <span class="c">//x's reactant</span></td></tr><tr><td class="number">68</td><td>      <span class="k1">float</span> vy<span class="k3">=</span><span class="k2">(</span>vy1<span class="k3">/</span>vm1<span class="k3">*</span>ve1<span class="k2">)</span><span class="k3">+</span><span class="k2">(</span>vy2<span class="k3">/</span>vm2<span class="k3">*</span>ve2<span class="k2">)</span><span class="k3">+</span><span class="n">9</span>.<span class="n">8</span><span class="k2">;</span> <span class="c">//y's reactant</span></td></tr><tr><td class="number">69</td><td>      </td></tr><tr><td class="number">70</td><td>      joint<span class="k3">&lt;</span>i&gt;.velX<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.velX<span class="k3">*</span>damping<span class="k3">+</span><span class="k2">(</span>vx<span class="k3">*</span>speed<span class="k2">)</span><span class="k2">;</span> <span class="c">//set velocity x accordingly</span></td></tr><tr><td class="number">71</td><td>      joint<span class="k3">&lt;</span>i&gt;.velY<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.velY<span class="k3">*</span>damping<span class="k3">+</span><span class="k2">(</span>vy<span class="k3">*</span>speed<span class="k2">)</span><span class="k2">;</span> <span class="c">//set velocity y accordingly</span></td></tr><tr><td class="number">72</td><td>      joint<span class="k3">&lt;</span>i&gt;.x2<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.x1<span class="k3">+</span>joint<span class="k3">&lt;</span>i&gt;.velX<span class="k2">;</span>          <span class="c">//buffer x</span></td></tr><tr><td class="number">73</td><td>      joint<span class="k3">&lt;</span>i&gt;.y2<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.y1<span class="k3">+</span>joint<span class="k3">&lt;</span>i&gt;.velY<span class="k2">;</span>          <span class="c">//buffer y</span></td></tr><tr><td class="number">74</td><td>      joint<span class="k3">&lt;</span>i&gt;.x1<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.x2<span class="k2">;</span>                          <span class="c">//copy buffer to physical</span></td></tr><tr><td class="number">75</td><td>      joint<span class="k3">&lt;</span>i&gt;.y1<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.y2<span class="k2">;</span>                          <span class="c">//copy buffer to physical</span></td></tr><tr><td class="number">76</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">77</td><td>  <span class="k2">}</span>           </td></tr><tr><td class="number">78</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>&#160;</td></tr><tr><td class="number">80</td><td><span class="k1">void</span> rope::draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">81</td><td>  <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">40</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>    </td></tr><tr><td class="number">82</td><td>    <span class="c">//draw joint and lines between</span></td></tr><tr><td class="number">83</td><td>    <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">84</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">85</td><td>      <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.x1, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.y1, <span class="n">2</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span>  </td></tr><tr><td class="number">86</td><td>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">87</td><td>      <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.x1, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.y1, <span class="n">2</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span>i<span class="k3">*</span><span class="n">2</span>,i<span class="k3">*</span><span class="n">2</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">88</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">89</td><td>    <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">90</td><td>    <span class="k2">{</span>  </td></tr><tr><td class="number">91</td><td>      <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.x1, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.y1,<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.x1, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.y1, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span>i<span class="k3">*</span><span class="n">2</span>,i<span class="k3">*</span><span class="n">2</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">92</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">93</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">94</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td>&#160;</td></tr><tr><td class="number">96</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">97</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">98</td><td>&#160;</td></tr><tr><td class="number">99</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">100</td><td>  init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer <span class="k3">=</span> NULL<span class="k2">;</span> </td></tr><tr><td class="number">102</td><td>  buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>  </td></tr><tr><td class="number">104</td><td>  </td></tr><tr><td class="number">105</td><td>  rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.deploy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>        </td></tr><tr><td class="number">107</td><td>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">108</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">109</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_U<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">110</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">111</td><td>      <span class="c">//rope[0].update();         </span></td></tr><tr><td class="number">112</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">113</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_D<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">114</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">115</td><td>      rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.deploy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>      </td></tr><tr><td class="number">116</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">117</td><td>    </td></tr><tr><td class="number">118</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">119</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">120</td><td>      left <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>    <span class="k2">}</span>    </td></tr><tr><td class="number">122</td><td>&#160;</td></tr><tr><td class="number">123</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">124</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">125</td><td>      right <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">126</td><td>    <span class="k2">}</span>   </td></tr><tr><td class="number">127</td><td>    </td></tr><tr><td class="number">128</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">129</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">130</td><td>      up <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>    <span class="k2">}</span>    </td></tr><tr><td class="number">132</td><td>&#160;</td></tr><tr><td class="number">133</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">134</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">135</td><td>      down <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">136</td><td>    <span class="k2">}</span>          </td></tr><tr><td class="number">137</td><td>    </td></tr><tr><td class="number">138</td><td>    rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.update<span class="k2">(</span>up, down, left, right<span class="k2">)</span><span class="k2">;</span>           </td></tr><tr><td class="number">139</td><td>    rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.draw<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">140</td><td>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span><span class="c">//Draw the buffer to the screen</span></td></tr><tr><td class="number">141</td><td>    <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span> <span class="c">// Clear the contents of the buffer bitmap</span></td></tr><tr><td class="number">142</td><td>    left <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">143</td><td>    right <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">144</td><td>    up <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">145</td><td>    down <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">146</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">147</td><td>&#160;</td></tr><tr><td class="number">148</td><td>  deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">149</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">150</td><td><span class="k2">}</span></td></tr><tr><td class="number">151</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">152</td><td>&#160;</td></tr><tr><td class="number">153</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">154</td><td>  <span class="k1">int</span> depth, res<span class="k2">;</span></td></tr><tr><td class="number">155</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">156</td><td>  depth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/desktop_color_depth" target="_blank"><span class="a">desktop_color_depth</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">157</td><td>  <span class="k1">if</span> <span class="k2">(</span>depth <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> depth <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span></td></tr><tr><td class="number">158</td><td>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>depth<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">159</td><td>  res <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">160</td><td>  <span class="k1">if</span> <span class="k2">(</span>res <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">161</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">162</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">163</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">164</td><td>&#160;</td></tr><tr><td class="number">165</td><td>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">166</td><td>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">167</td><td>  <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">168</td><td>  <span class="c">/* add other initializations here */</span></td></tr><tr><td class="number">169</td><td>    </td></tr><tr><td class="number">170</td><td><span class="k2">}</span></td></tr><tr><td class="number">171</td><td>&#160;</td></tr><tr><td class="number">172</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">173</td><td>  <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">174</td><td>  <span class="c">/* add other deinitializations here */</span></td></tr><tr><td class="number">175</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

By the way, this code is an edited version from the code on this thread:<br /><a href="http://www.allegro.cc/forums/thread/574094">http://www.allegro.cc/forums/thread/574094</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (optimusp)</author>
		<pubDate>Wed, 01 Nov 2006 04:15:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
pendulum
</p></div></div><p>
pendulum physics is about one of (in my book) hardest problems to solve.  A bunch of pendulums on end will take too much CPU time and is a bad way to do a rope.</p><p>But on the other hand I&#39;ve never actually solved it.  So I have no idea what I&#39;m talking about.</p><p>For a walk-through on the pendulum math, read its wikipedia page:<br /><a href="http://en.wikipedia.org/wiki/Pendulum_%28mathematics%29">http://en.wikipedia.org/wiki/Pendulum_%28mathematics%29</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Wed, 01 Nov 2006 06:53:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
pendulum physics is about one of (in my book) hardest problems to solve. A bunch of pendulums on end will take too much CPU time and is a bad way to do a rope.
</p></div></div><p>

Naw, it&#39;s easy.  This is what verlet integration excels at.  Google for Chris Heckers physics tutorials.</p><p>Edit; wow that&#39;s almost exactly what I said in the other thread.  Weird.  I&#39;m wasting WAAAY to much time on here.... <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (nonnus29)</author>
		<pubDate>Wed, 01 Nov 2006 08:25:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The <a href="http://www.teknikus.dk/tj/gdc2001.htm">Advanced Character Physics</a> article covers what you&#39;d want -- a rope can be modeled nicely as a line of particles connected by distance constraints.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Zaphos)</author>
		<pubDate>Wed, 01 Nov 2006 10:36:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank&#039;s guys. I&#039;m using that exact article you just mentioned. I&#039;ve been reading over it the past couple hours and I&#039;ll try to implement it now.</p><p>Here is what I have prior to implementing the math from that article. Very basic stuff, but some neat effects. I&#039;m using Dev-C++. You can just post this into a new project, and it should compile:</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;allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">   3</span><span class="k1">bool</span> up, down, left, right<span class="k2">;</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="k1">class</span> rope<span class="k2">{</span>
<span class="number">   6</span>public:
<span class="number">   7</span>  <span class="k1">class</span> joint<span class="k2">{</span>
<span class="number">   8</span>  public:
<span class="number">   9</span>    <span class="k1">float</span> x1,y1,x2,y2<span class="k2">;</span>
<span class="number">  10</span>    <span class="k1">float</span> velX,velY<span class="k2">;</span>
<span class="number">  11</span>    
<span class="number">  12</span>  <span class="k2">}</span>joint<span class="k2">[</span><span class="n">100</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  13</span>  
<span class="number">  14</span>  <span class="k1">float</span> real_length<span class="k2">;</span>
<span class="number">  15</span>  <span class="k1">float</span> seg_length<span class="k2">;</span>     <span class="c">//length of segments between joints</span>
<span class="number">  16</span>  <span class="k1">float</span> air_resistance<span class="k2">;</span> <span class="c">//air resistance [negating factor on gravity {9.8}]</span>
<span class="number">  17</span>  <span class="k1">float</span> damping<span class="k2">;</span>        <span class="c">//self-explanitory</span>
<span class="number">  18</span>  <span class="k1">float</span> speed<span class="k2">;</span>          <span class="c">//didn't know what else to name this</span>
<span class="number">  19</span>  <span class="k1">float</span> gravity<span class="k2">;</span>
<span class="number">  20</span>  <span class="k1">bool</span> gravity_on<span class="k2">;</span>
<span class="number">  21</span>  
<span class="number">  22</span>  <span class="k1">void</span> deploy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//initializes the rope</span>
<span class="number">  23</span>  <span class="k1">void</span> update<span class="k2">(</span><span class="k1">bool</span>, <span class="k1">bool</span>, <span class="k1">bool</span>, <span class="k1">bool</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//called every game-cycle</span>
<span class="number">  24</span>  <span class="k1">void</span> draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span><span class="k2">}</span>rope<span class="k2">[</span><span class="n">20</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="k1">void</span> rope::deploy<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  28</span>  seg_length<span class="k3">=</span><span class="n">5</span><span class="k2">;</span>
<span class="number">  29</span>  air_resistance<span class="k3">=</span><span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  30</span>  damping<span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  31</span>  speed<span class="k3">=</span> .<span class="n">41</span><span class="k2">;</span>
<span class="number">  32</span>  gravity <span class="k3">=</span> .<span class="n">0</span><span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">100</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">  35</span>    joint<span class="k3">&lt;</span>i&gt;.x1<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> <span class="k2">(</span>i<span class="k3">*</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span> joint<span class="k3">&lt;</span>i&gt;.y1<span class="k3">=</span>i<span class="k3">*</span>seg_length<span class="k2">;</span>
<span class="number">  36</span>    joint<span class="k3">&lt;</span>i&gt;.x2<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> <span class="k2">(</span>i<span class="k3">*</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span> joint<span class="k3">&lt;</span>i&gt;.y2<span class="k3">=</span>i<span class="k3">*</span>seg_length<span class="k2">;</span>
<span class="number">  37</span>    joint<span class="k3">&lt;</span>i&gt;.velX<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> joint<span class="k3">&lt;</span>i&gt;.velY<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  38</span>  <span class="k2">}</span>
<span class="number">  39</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  40</span>
<span class="number">  41</span><span class="k1">void</span> rope::update<span class="k2">(</span><span class="k1">bool</span> up, <span class="k1">bool</span> down, <span class="k1">bool</span> left, <span class="k1">bool</span> right<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  42</span>  <span class="k1">if</span> <span class="k2">(</span>left<span class="k2">)</span>
<span class="number">  43</span>  <span class="k2">{</span>
<span class="number">  44</span>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x1--<span class="k2">;</span>
<span class="number">  45</span>  <span class="k2">}</span>
<span class="number">  46</span>  <span class="k1">if</span> <span class="k2">(</span>right<span class="k2">)</span>
<span class="number">  47</span>  <span class="k2">{</span>
<span class="number">  48</span>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x1<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>  
<span class="number">  49</span>  <span class="k2">}</span>  
<span class="number">  50</span>  <span class="k1">if</span> <span class="k2">(</span>up<span class="k2">)</span>
<span class="number">  51</span>  <span class="k2">{</span>
<span class="number">  52</span>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y1--<span class="k2">;</span>
<span class="number">  53</span>  <span class="k2">}</span>
<span class="number">  54</span>  <span class="k1">if</span> <span class="k2">(</span>down<span class="k2">)</span>
<span class="number">  55</span>  <span class="k2">{</span>
<span class="number">  56</span>    joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y1<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>  
<span class="number">  57</span>  <span class="k2">}</span>    
<span class="number">  58</span>  
<span class="number">  59</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">100</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">  60</span>    <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  61</span>    <span class="k2">{</span>
<span class="number">  62</span>      <span class="k1">float</span> vx1<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.x1-joint<span class="k3">&lt;</span>i&gt;.x1<span class="k2">;</span>          <span class="c">//vector 1: diffrence between x's</span>
<span class="number">  63</span>      <span class="k1">float</span> vy1<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.y1-joint<span class="k3">&lt;</span>i&gt;.y1<span class="k2">;</span>          <span class="c">//vector 1: diffrence between y's</span>
<span class="number">  64</span>      <span class="k1">int</span> vm1<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_83.html" target="_blank">ceil</a><span class="k2">(</span>vx1<span class="k3">*</span>vx1<span class="k3">+</span>vy1<span class="k3">*</span>vy1<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    <span class="c">//vector 1: magnitude</span>
<span class="number">  65</span>      <span class="k1">int</span> ve1<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>vm1-<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>seg_length<span class="k3">/</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>            <span class="c">//vector 1: extention</span>
<span class="number">  66</span>      
<span class="number">  67</span>      <span class="k1">float</span> vx2<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.x1-joint<span class="k3">&lt;</span>i&gt;.x1<span class="k2">;</span>          <span class="c">//vector 2: diffrence between x's</span>
<span class="number">  68</span>      <span class="k1">float</span> vy2<span class="k3">=</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.y1-joint<span class="k3">&lt;</span>i&gt;.y1<span class="k2">;</span>          <span class="c">//vector 2: diffrence between y's</span>
<span class="number">  69</span>      <span class="k1">int</span> vm2<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_83.html" target="_blank">ceil</a><span class="k2">(</span>vx2<span class="k3">*</span>vx2<span class="k3">+</span>vy2<span class="k3">*</span>vy2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    <span class="c">//vector 2: magnitude</span>
<span class="number">  70</span>      <span class="k1">int</span> ve2<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>vm2- <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>seg_length<span class="k2">;</span>           <span class="c">//vector 2: extention</span>
<span class="number">  71</span>      
<span class="number">  72</span>      <span class="k1">float</span> vx <span class="k3">=</span> <span class="k2">(</span>vx1 <span class="k3">/</span> vm1 <span class="k3">*</span> ve1<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>vx2 <span class="k3">/</span> vm2 <span class="k3">*</span> ve2<span class="k2">)</span><span class="k2">;</span>                    <span class="c">//x's reactant</span>
<span class="number">  73</span>      <span class="k1">float</span> vy <span class="k3">=</span> <span class="k2">(</span>vy1 <span class="k3">/</span> vm1 <span class="k3">*</span> ve1<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>vy2 <span class="k3">/</span> vm2 <span class="k3">*</span> ve2<span class="k2">)</span> <span class="k3">+</span> gravity<span class="k2">;</span> <span class="c">//y's reactant</span>
<span class="number">  74</span>      
<span class="number">  75</span>      joint<span class="k3">&lt;</span>i&gt;.velX <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.velX <span class="k3">*</span> damping <span class="k3">+</span> <span class="k2">(</span>vx <span class="k3">*</span> speed<span class="k2">)</span><span class="k2">;</span> <span class="c">//set velocity x accordingly</span>
<span class="number">  76</span>      joint<span class="k3">&lt;</span>i&gt;.velY <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.velY <span class="k3">*</span> damping <span class="k3">+</span> <span class="k2">(</span>vy <span class="k3">*</span> speed<span class="k2">)</span><span class="k2">;</span> <span class="c">//set velocity y accordingly</span>
<span class="number">  77</span>      joint<span class="k3">&lt;</span>i&gt;.x2 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.x1 <span class="k3">+</span> joint<span class="k3">&lt;</span>i&gt;.velX<span class="k2">;</span>          <span class="c">//buffer x</span>
<span class="number">  78</span>      joint<span class="k3">&lt;</span>i&gt;.y2 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.y1 <span class="k3">+</span> joint<span class="k3">&lt;</span>i&gt;.velY<span class="k2">;</span>          <span class="c">//buffer y</span>
<span class="number">  79</span>      joint<span class="k3">&lt;</span>i&gt;.x1 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.x2<span class="k2">;</span>                          <span class="c">//copy buffer to physical</span>
<span class="number">  80</span>      joint<span class="k3">&lt;</span>i&gt;.y1 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.y2<span class="k2">;</span>                          <span class="c">//copy buffer to physical</span>
<span class="number">  81</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  82</span>  
<span class="number">  83</span>      <span class="k1">float</span> vx1<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.x1<span class="k2">;</span>          <span class="c">//vector 1: diffrence between x's</span>
<span class="number">  84</span>      <span class="k1">float</span> vy1<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.y1<span class="k2">;</span>          <span class="c">//vector 1: diffrence between y's</span>
<span class="number">  85</span>      <span class="k1">int</span> vm1<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_83.html" target="_blank">ceil</a><span class="k2">(</span>vx1<span class="k3">*</span>vx1<span class="k3">+</span>vy1<span class="k3">*</span>vy1<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    <span class="c">//vector 1: magnitude</span>
<span class="number">  86</span>      <span class="k1">int</span> ve1<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>vm1-<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>seg_length<span class="k3">/</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>            <span class="c">//vector 1: extention</span>
<span class="number">  87</span>      
<span class="number">  88</span>      <span class="k1">float</span> vx2<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.x1<span class="k2">;</span>          <span class="c">//vector 2: diffrence between x's</span>
<span class="number">  89</span>      <span class="k1">float</span> vy2<span class="k3">=</span>joint<span class="k3">&lt;</span>i&gt;.y1<span class="k2">;</span>          <span class="c">//vector 2: diffrence between y's</span>
<span class="number">  90</span>      <span class="k1">int</span> vm2<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_83.html" target="_blank">ceil</a><span class="k2">(</span>vx2<span class="k3">*</span>vx2<span class="k3">+</span>vy2<span class="k3">*</span>vy2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    <span class="c">//vector 2: magnitude</span>
<span class="number">  91</span>      <span class="k1">int</span> ve2<span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>vm2- <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>seg_length<span class="k2">;</span>           <span class="c">//vector 2: extention</span>
<span class="number">  92</span>      
<span class="number">  93</span>      <span class="k1">float</span> vx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>                    <span class="c">//x's reactant</span>
<span class="number">  94</span>      <span class="k1">float</span> vy <span class="k3">=</span> gravity<span class="k2">;</span> <span class="c">//y's reactant</span>
<span class="number">  95</span>      
<span class="number">  96</span>      joint<span class="k3">&lt;</span>i&gt;.velX <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.velX <span class="k3">*</span> damping<span class="k3">+</span><span class="k2">(</span>vx <span class="k3">*</span> speed<span class="k2">)</span><span class="k2">;</span> <span class="c">//set velocity x accordingly</span>
<span class="number">  97</span>      joint<span class="k3">&lt;</span>i&gt;.velY <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.velY <span class="k3">-</span> gravity<span class="k2">;</span> <span class="c">//set velocity y accordingly</span>
<span class="number">  98</span>
<span class="number">  99</span>      joint<span class="k3">&lt;</span>i&gt;.x2 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.x1<span class="k3">+</span>joint<span class="k3">&lt;</span>i&gt;.velX<span class="k2">;</span>          <span class="c">//buffer x</span>
<span class="number"> 100</span>      joint<span class="k3">&lt;</span>i&gt;.y2 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.y1 <span class="k3">-</span> joint<span class="k3">&lt;</span>i&gt;.velY<span class="k2">;</span>          <span class="c">//buffer y</span>
<span class="number"> 101</span>      joint<span class="k3">&lt;</span>i&gt;.x1 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.x2<span class="k2">;</span>                          <span class="c">//copy buffer to physical</span>
<span class="number"> 102</span>      joint<span class="k3">&lt;</span>i&gt;.y1 <span class="k3">=</span> joint<span class="k3">&lt;</span>i&gt;.y2<span class="k2">;</span>                          <span class="c">//copy buffer to physical    </span>
<span class="number"> 103</span>    <span class="k2">}</span>
<span class="number"> 104</span>      <span class="k1">if</span> <span class="k2">(</span>joint<span class="k3">&lt;</span>i&gt;.y1 <span class="k3">&gt;</span> <span class="k2">(</span>SCREEN_H-50<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 105</span>        joint<span class="k3">&lt;</span>i&gt;.velY <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>joint<span class="k3">&lt;</span>i&gt;.velY<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">1</span> <span class="k3">-</span> damping<span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 106</span>        joint<span class="k3">&lt;</span>i&gt;.y2 <span class="k3">=</span> SCREEN_H-50<span class="k2">;</span>
<span class="number"> 107</span>        joint<span class="k3">&lt;</span>i&gt;.y1 <span class="k3">=</span> SCREEN_H-50<span class="k2">;</span>   
<span class="number"> 108</span>      <span class="k2">}</span>  
<span class="number"> 109</span>  <span class="k2">}</span>           
<span class="number"> 110</span>
<span class="number"> 111</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_G<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 112</span>  <span class="k2">{</span>
<span class="number"> 113</span>    <span class="k1">if</span> <span class="k2">(</span>gravity_on<span class="k2">)</span>
<span class="number"> 114</span>    <span class="k2">{</span>
<span class="number"> 115</span>      gravity_on <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span> 
<span class="number"> 116</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 117</span>      gravity_on <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 118</span>    <span class="k2">}</span>
<span class="number"> 119</span>  <span class="k2">}</span>
<span class="number"> 120</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 121</span>
<span class="number"> 122</span><span class="k1">void</span> rope::draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 123</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">100</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"> 124</span>    <span class="c">//draw joint and lines between</span>
<span class="number"> 125</span>    <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> 
<span class="number"> 126</span>    <span class="k2">{</span>
<span class="number"> 127</span>      <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.x1, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.y1, <span class="n">2</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span>  
<span class="number"> 128</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 129</span>      <span class="c">//circlefill(buffer, (int)joint&lt;i&gt;.x1, (int)joint&lt;i&gt;.y1, 2, makecol(i*2,i*2,255));   </span>
<span class="number"> 130</span>    <span class="k2">}</span>
<span class="number"> 131</span>    <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 132</span>    <span class="k2">{</span>  
<span class="number"> 133</span>      <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.x1, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k3">&lt;</span>i&gt;.y1,<span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.x1, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>joint<span class="k2">[</span>i-1<span class="k2">]</span>.y1, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span>i<span class="k3">*</span><span class="n">2</span>,i<span class="k3">*</span><span class="n">2</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>      <span class="k1">this</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.real_length <span class="k3">=</span> <span class="k1">this</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.real_length <span class="k3">+</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span>joint<span class="k3">&lt;</span>i&gt;.x1 <span class="k3">-</span> joint<span class="k2">[</span>i-1<span class="k2">]</span>.x1, <span class="n">2</span><span class="k2">)</span> <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span>joint<span class="k3">&lt;</span>i&gt;.y1 <span class="k3">-</span> joint<span class="k2">[</span>i-1<span class="k2">]</span>.y1, <span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>    <span class="k2">}</span>
<span class="number"> 136</span>  <span class="k2">}</span>
<span class="number"> 137</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, SCREEN_H-10, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">100</span>, <span class="n">200</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"y1: %f"</span>, joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, SCREEN_H-20, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">100</span>, <span class="n">200</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"velY: %f"</span>, joint<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.velY<span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 139</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, SCREEN_H-30, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">100</span>, <span class="n">200</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"y1: %f"</span>, <span class="k1">this</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.real_length<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>  <span class="k1">this</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.real_length <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 141</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 142</span>
<span class="number"> 143</span><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 144</span><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 145</span>
<span class="number"> 146</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 147</span>  init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer <span class="k3">=</span> NULL<span class="k2">;</span> 
<span class="number"> 149</span>  <a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a> <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 150</span>  buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>  
<span class="number"> 152</span>  
<span class="number"> 153</span>  rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.deploy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>        
<span class="number"> 155</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 156</span>  <span class="k2">{</span>
<span class="number"> 157</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_U<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 158</span>    <span class="k2">{</span>
<span class="number"> 159</span>      <span class="c">//rope[0].update();         </span>
<span class="number"> 160</span>    <span class="k2">}</span>
<span class="number"> 161</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_D<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 162</span>    <span class="k2">{</span>
<span class="number"> 163</span>      rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.deploy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>      
<span class="number"> 164</span>    <span class="k2">}</span>
<span class="number"> 165</span>    
<span class="number"> 166</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 167</span>    <span class="k2">{</span>
<span class="number"> 168</span>      left <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 169</span>    <span class="k2">}</span>    
<span class="number"> 170</span>
<span class="number"> 171</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 172</span>    <span class="k2">{</span>
<span class="number"> 173</span>      right <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 174</span>    <span class="k2">}</span>   
<span class="number"> 175</span>    
<span class="number"> 176</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 177</span>    <span class="k2">{</span>
<span class="number"> 178</span>      up <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 179</span>    <span class="k2">}</span>    
<span class="number"> 180</span>
<span class="number"> 181</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 182</span>    <span class="k2">{</span>
<span class="number"> 183</span>      down <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 184</span>    <span class="k2">}</span>          
<span class="number"> 185</span>    
<span class="number"> 186</span>    rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.update<span class="k2">(</span>up, down, left, right<span class="k2">)</span><span class="k2">;</span>           
<span class="number"> 187</span>    
<span class="number"> 188</span>    
<span class="number"> 189</span>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> <span class="n">50</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">100</span>,<span class="n">100</span>,<span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    <span class="c">//ground</span>
<span class="number"> 190</span>    rope<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.draw<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span><span class="c">//Draw the buffer to the screen</span>
<span class="number"> 192</span>    <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span> <span class="c">// Clear the contents of the buffer bitmap</span>
<span class="number"> 193</span>    left <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 194</span>    right <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 195</span>    up <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 196</span>    down <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 197</span>  <span class="k2">}</span>
<span class="number"> 198</span>
<span class="number"> 199</span>  deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 201</span><span class="k2">}</span>
<span class="number"> 202</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 203</span>
<span class="number"> 204</span><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 205</span>  <span class="k1">int</span> depth, res<span class="k2">;</span>
<span class="number"> 206</span>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 207</span>  depth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/desktop_color_depth" target="_blank"><span class="a">desktop_color_depth</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>  <span class="k1">if</span> <span class="k2">(</span>depth <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> depth <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>
<span class="number"> 209</span>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>depth<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 210</span>  res <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>  <span class="k1">if</span> <span class="k2">(</span>res <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 212</span>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>  <span class="k2">}</span>
<span class="number"> 215</span>
<span class="number"> 216</span>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 217</span>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>  <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>  <span class="c">/* add other initializations here */</span>
<span class="number"> 220</span>
<span class="number"> 221</span><span class="k2">}</span>
<span class="number"> 222</span>
<span class="number"> 223</span><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 224</span>  <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>  <span class="c">/* add other deinitializations here */</span>
<span class="number"> 226</span><span class="k2">}</span>
</div></div><p>

I&#039;ll post again with a zip file once I&#039;ve gotten the rigid body stuff implemented.</p><p>BTW:</p><p>I&#039;d like to thank X-G for this wonderful [url <a href="http://awiki.tomasu.org/bin/view/Main/Vector3D#xgl_vector_h]Vector">http://awiki.tomasu.org/bin/view/Main/Vector3D#xgl_vector_h]Vector</a> Library[/url]. It&#039;s proved to be very useful so far.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (optimusp)</author>
		<pubDate>Wed, 01 Nov 2006 11:33:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i calculated gravity to within .05m/s^2 using a pendulum once. kinda cool. </p><p>anyways back to the question. what&#39;s the application? Its really good to cheat with physics and i want to know how much we can cheat.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Goalie Ca)</author>
		<pubDate>Wed, 01 Nov 2006 15:15:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What you need to do is allow any joint to be moved, this will allow you pull the rope from any point, including the last one to mimic swinging, or if on a joint half way down you could make it look as though the rope is tied to something and just out of reach of the player.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Wed, 01 Nov 2006 19:52:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Update:</p><p>I&#39;ve got a semi-working model. It&#39;s certainly mimics rope realistically, but I&#39;m going to put some more accurate math behind it. You can adjust the number of joints and length in the code if you like. </p><p><a href="http://www.findur.com/rope3.zip">http://www.findur.com/rope3.zip</a></p><p>This code can also be used for rigid body collisions. That&#39;s what I&#39;ll be working on next. Hopefully I&#39;ll have another update for you soon.</p><p>Thanks for the help guys.</p><p>Edit: By the way, a pre-compiled exe is included. Use the arrow keys to move the lead joint. Use the &quot;U&quot; key to constrain the lead joint to a fixed position (this will allow you to see the swinging in full effect).</p><p>Edit: Added a better build.</p><p>If you mess with the number of joints and the segment length, you&#39;ll notice that there is a lot of &quot;spingyness&quot;. I&#39;m trying to correct this. Or at the very least, make it something that&#39;s adjustable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (optimusp)</author>
		<pubDate>Thu, 02 Nov 2006 05:34:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>looks cool!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Thu, 02 Nov 2006 05:52:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks.</p><p>After I get it going, I&#39;m going to use it to build and accurate 3d human body representation. Then I&#39;ll use a genetically modified neural network to teach it how to walk.</p><p>If <i>that</i> goes well, then I&#39;ll start to move into other more complicated maneuvers. </p><p>This is all for my senior Computer Science project. And I&#39;m still a sophomore!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (optimusp)</author>
		<pubDate>Thu, 02 Nov 2006 06:20:22 +0000</pubDate>
	</item>
</rss>
