tag:blogger.com,1999:blog-59123939216265939842024-03-18T21:36:36.114-07:00Simian SoftwerksUnknownnoreply@blogger.comBlogger14125tag:blogger.com,1999:blog-5912393921626593984.post-87007965547881014442007-08-01T02:31:00.001-07:002007-08-01T02:35:43.372-07:00DOOMSTICK 3D!What appears to be our most sucessful project has just been finished~!!<br /><br />Updates and Editor source will come shortly.<br /><br />Uploaded are the src and the bin.<br /><a href="http://www.brankenonline.com/Doomstick/Doomstick.7z">Game</a><br /><a href="http://www.brankenonline.com/Doomstick/DoomstickSRC.7z">Source</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-77975477550341040712007-07-24T11:44:00.000-07:002007-07-24T11:51:45.417-07:00Progress on the First Person ShooterHey there! Just a little progress report on our first person shooter.<br /><br />This is the program so far:<br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit62CQk67JgEigkJAQKOo2uxpXQcBRRRsJbBYJt4U6Dq7g-ni4dWqFPl-pML8YO05EjWYDaS84pFYK1-10LTS46bLA3Zo3OQj92o6XIo7pu2gbxR2576nK9X61kibVY8fcHjKxWah0O2dK/s1600-h/Screenshot1.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit62CQk67JgEigkJAQKOo2uxpXQcBRRRsJbBYJt4U6Dq7g-ni4dWqFPl-pML8YO05EjWYDaS84pFYK1-10LTS46bLA3Zo3OQj92o6XIo7pu2gbxR2576nK9X61kibVY8fcHjKxWah0O2dK/s320/Screenshot1.jpg" alt="" id="BLOGGER_PHOTO_ID_5090836988863046130" border="0" /></a><span style="font-size:78%;">Tiled ground, loaded from a file, of course.</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIOcwwe6RHWIMOqzlxXEHOjDypnisvxhjIjtESY_K7_rQuA3wBYpFGuor0vqudzfZRHanPIZG6CYl38T-l2QnWzwn5rSci6Kg-7FC2oacC9YoDrreZi-d0vmQXK1sHWFFX8y2BsvuAX_4Y/s1600-h/Screenshot2.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIOcwwe6RHWIMOqzlxXEHOjDypnisvxhjIjtESY_K7_rQuA3wBYpFGuor0vqudzfZRHanPIZG6CYl38T-l2QnWzwn5rSci6Kg-7FC2oacC9YoDrreZi-d0vmQXK1sHWFFX8y2BsvuAX_4Y/s320/Screenshot2.jpg" alt="" id="BLOGGER_PHOTO_ID_5090837053287555586" border="0" /></a><span style="font-size:78%;">Objects in the game will be nothing more than billboards.</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsebgvIkT7ud1sLxqKXYb8HuTiPn5crdwPOcKX2BoTDdEW3w2THIPmP9RrRVbAiI5lvJcOiNeO9ZRcaCK0wQG-K_BEaq4PwNQoe6pBtGXMtzGtEHn8bMkKJTDRcdDg9XEItp0lgoy7zM3z/s1600-h/Screenshot3.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsebgvIkT7ud1sLxqKXYb8HuTiPn5crdwPOcKX2BoTDdEW3w2THIPmP9RrRVbAiI5lvJcOiNeO9ZRcaCK0wQG-K_BEaq4PwNQoe6pBtGXMtzGtEHn8bMkKJTDRcdDg9XEItp0lgoy7zM3z/s320/Screenshot3.jpg" alt="" id="BLOGGER_PHOTO_ID_5090837182136574482" border="0" /></a><span style="font-size:78%;">Collision with these objects have already been done.</span><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-1757448608440989452007-07-17T21:39:00.000-07:002007-07-17T22:05:09.454-07:00Camera, Input, GUI (II)<strong>Raster Position</strong><br />The OpenGL raster position refers to the drawing position relative to window coordinates for pixel and bitmap write operations. The raster position can be specified by using the function glRasterPos2d() (or glRasterPos2f(), glRasterPos2i(), glRasterPos2s(), etc. for that matter).<br /><br />The glRasterPos2d function takes in 2 parameters (x,y).<br />This specifies the raster position.<br /><br />Thus, by calling 'glRasterPos2d(200,100)', any bitmap or pixel drawings will be position at the point (200,100).<br /><br /><br />The function glWindowPos() accomplishes the same thing as glRasterPos2d(). However, it's values are neither transformed by the current modelview and projection matrices, nor by the viewport-to-window transform.<br /><br />The modified project can be found: <a href="http://www.brankenonline.com/gdev_spacesimulator.zip">http://www.brankenonline.com/gdev_spacesimulator.zip</a>Israel Chuahttp://www.blogger.com/profile/02041072574017679852noreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-65835107689585375162007-07-14T08:17:00.000-07:002007-07-14T08:19:03.141-07:00Assignment 2 - First MilestoneThis is the revised version of our Technical Design Document. The source code and the program will be uploaded shortly. We apologize for the mix up, the previous post was made wrongly and is an error on our part.<br /><br />The document contains all aspects of the game we intend to create. Any changes in the future will be reflected in this document, it will also be updated regularly, depending on the need.<br /><a id="downloadhref" href="http://www.megaupload.com/?d=E2YX84RK" target="_blank"><br />http://www.brankenonline.com/Boomstick.doc</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-69911802087194063172007-07-10T19:33:00.000-07:002007-07-10T22:58:22.743-07:00Camera, Input, Gui<span style="FONT-WEIGHT: bold">Studying the Gimbal Lock</span><span style="FONT-WEIGHT: bold"><br /></span><span style="font-size:+0;">The gimbal lock is pretty obvious in the following examples.<br />First, the camera is rotated so that is yaw is 90 degrees.<br /><br /></span><a href="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/daijoisshit1.jpg" target="_blank"><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" height="240" src="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/daijoisshit1.jpg" width="320" align="middle" border="0" /></a><br /><br />Next by shifting the pitch, the camera starts turning clockwise.<br /><br /><a href="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/daijoisshit2.jpg" target="_blank"><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" height="240" src="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/daijoisshit2.jpg" width="320" align="middle" border="0" /></a><br /><br />But wait.. shifting its roll also causes it to turn on clockwise in the same way it turned like when I shifted the pitch.<br /><br /><a href="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/daijoisshit3.jpg" target="_blank"><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" height="240" src="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/daijoisshit3.jpg" width="320" align="middle" border="0" /></a><br /><br />Thus, this is the infamous gimbal lock!<br /><br /><span style="FONT-WEIGHT: bold">Quaternion Camera<br /></span>Alright then, let's try doing the same thing to a camera operated using quaternions.<br /><br />Alright then notice that I rotate the quaternion camera in the same way as I did previously with the euler camera,<br /><br /><a href="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/weed1.jpg" target="_blank"><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" height="240" src="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/weed1.jpg" width="320" align="middle" border="0" /></a><br /><br />Now I'll give it a little Pitch, already it is moving in a different way.<br /><br /><a href="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/weed2.jpg" target="_blank"><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" height="240" src="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/weed2.jpg" width="320" align="middle" border="0" /></a><br /><br />Finally, I'll move it a little on the Roll.<br /><br /><a href="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/weed3.jpg" target="_blank"><img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" height="240" src="http://i2.photobucket.com/albums/y33/F4LL3NAnG3L/weed3.jpg" width="320" align="middle" border="0" /></a><br /><br />Comparing both cameras, it's imperative that the quaternion camera has solved the issue of the Gimbal Lock, as observed it the euler camera.<br /><br /><strong>PICKING & ZOOMING</strong><br />Here is the assignment on Picking & Zooming.<br /><br />You can download it here: <a href="http://www.brankenonline.com/spacesimulator.net.zip">http://www.brankenonline.com/spacesimulator.net.zip</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-9298886509902801382007-05-30T22:57:00.000-07:002007-05-30T23:20:10.955-07:00Bugzilla First Time Experience<div align="center"><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5fbOlXuzBgWd4ZkLKeltEXuhyEQsMSfSlI32RGv34hxC_iRpJYmit5eY0L9vyK7Ep8Nn6Na_ytEIKbvSts7G0-zfKYZWAeiOQfy7ll_VeCkPI5CWL86Mj0gx83a8bCUXxT4Jxpr9iR7FP/s1600-h/Registered+Bug.jpg"><img id="BLOGGER_PHOTO_ID_5070600405802740242" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5fbOlXuzBgWd4ZkLKeltEXuhyEQsMSfSlI32RGv34hxC_iRpJYmit5eY0L9vyK7Ep8Nn6Na_ytEIKbvSts7G0-zfKYZWAeiOQfy7ll_VeCkPI5CWL86Mj0gx83a8bCUXxT4Jxpr9iR7FP/s320/Registered+Bug.jpg" border="0" /></a></div><br /><p></p><br /><p align="justify">For our Bugzilla E learning assignment, we had to create bug reports and learn about resolving and managing these reports.</p><br /><p align="justify">First, each of us created 2 reports of a bug. Then, we each assigned each other's bugs to ourselves. Bryan was in charge of creating screenshots of the bug. We pretended to fix some of each other's bugs, and created a report of all the bugs, as a bar and pie chart. <img id="BLOGGER_PHOTO_ID_5070600633436006962" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio6cTKOeG3xNYW5z68gO_ZZ6wNC_yaM3CWPHoeK4zuRqtYyprki97fiD04z-FKifbIfuRUxWKuoJ6ai8WBaRmgJ_0POvQ4eZtS9khnhtBTjqByLIw5k_7IvYf8vh4ExNrQXbzXUnWXRMN4/s320/Status+Report.png" border="0" /></p><br /><p align="center">Bar Chart Report<img id="BLOGGER_PHOTO_ID_5070600474522216994" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-QRhmMWZv5ySkHZOnaN5qBNB_PP9X3mizzu9s-WEw7cBpRW9ENqZMwzGkN_oZ4gHh-bmxj-mKQg8BsNQNT4m6iGM4X9Y1kNBetNTxiawn8USU4FWq6UoWTa85Wc5LbVvU_Dupw87MkPcQ/s320/Assignee+Report.png" border="0" /></p><br /><p align="center"><br />Pie Chart Report </p><br /><p align="justify">To view the names our bugs, view the screenshot below. To get to this screen on IE, register on Bugzilla, and when logged in, click on Reports. Then, click on search list of bugs. Then, enter Status as all, product as '_test product', and the keyword is 'Simian Softwerks'.</p><img id="BLOGGER_PHOTO_ID_5070605685689942178" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhli5bfNM2n4w1HTbfCikI68KVbY8WzwBBgUh-Nm4MGzNL5gybCGT0YO_PPXfs2_-IRQLud2c1KaiqBTxQ1env52199Olvp86gAKCJWjL8U0b3r2UaS-4L8e2KYYiiZXEza6qT_zYdmqUw/s320/buglist.bmp" border="0" /><br /><p align="justify"></p><br /><p align="justify"></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-82479232323393930982007-05-24T20:52:00.000-07:002007-05-24T20:53:12.237-07:00THE AMAZING AND LONG AWAITED... TOWERS OF HANOI!after spending the last 12 hours in sheer panic and rush, we bring to you... the fully featured version of the TOWERS... of HANOI!!!<br /><br />Here are some screeenshots of our game:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjkbY65Izn5le4fdnb5ipmir1HeDtblBUbJ0-M1bZubqeDwzogHnbEr7vilYYysnCrUbIX4nJtMNtyCJY-K27q4EhP8vSmkUgofp9qPgroGbzqneJ2vt7fzTXqTEmcD2-zzkazOuRlh1ii/s1600-h/Hanoi1.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjkbY65Izn5le4fdnb5ipmir1HeDtblBUbJ0-M1bZubqeDwzogHnbEr7vilYYysnCrUbIX4nJtMNtyCJY-K27q4EhP8vSmkUgofp9qPgroGbzqneJ2vt7fzTXqTEmcD2-zzkazOuRlh1ii/s320/Hanoi1.jpg" alt="" id="BLOGGER_PHOTO_ID_5068339659572177314" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh80LngDL0ZHaBQ_t5_lzOxepG3y6K4ydvvZASgkHdo67fLW5lyMy7JTmjWCZOQrUwGn9xv0BdzeqrUDB0x9w8E6mOcRw_8eX7BRlM6fIe8VmzswQqmSZMfXEdS6anfdPTzynpryfDyL29t/s1600-h/Hanoi2.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh80LngDL0ZHaBQ_t5_lzOxepG3y6K4ydvvZASgkHdo67fLW5lyMy7JTmjWCZOQrUwGn9xv0BdzeqrUDB0x9w8E6mOcRw_8eX7BRlM6fIe8VmzswQqmSZMfXEdS6anfdPTzynpryfDyL29t/s320/Hanoi2.jpg" alt="" id="BLOGGER_PHOTO_ID_5068339749766490546" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxBbyObFwiDo2m-8sLo4o4PXD9xE97ZU7P8nC_fRglMsYNtQQgEenq17bAYt3WfsutIDBGVXVAYQGxcLd4L-rectNbS0rK9MHZCyETgvHxl5kmOhWhmUSKK_41UCOFC68W20o0lLaZi302/s1600-h/Hanoi3.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxBbyObFwiDo2m-8sLo4o4PXD9xE97ZU7P8nC_fRglMsYNtQQgEenq17bAYt3WfsutIDBGVXVAYQGxcLd4L-rectNbS0rK9MHZCyETgvHxl5kmOhWhmUSKK_41UCOFC68W20o0lLaZi302/s320/Hanoi3.jpg" alt="" id="BLOGGER_PHOTO_ID_5068339822780934594" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT4cHC9oB1ZTmZMAwkXEAdey_PejvtPZFUspco6796XW38UEnpwnZYLUf4ffx9n8tiNVXnlFLn_geiq2z3l2CBTzp_V9l3f02PGZsmGaPNsG2Y2axQchXG4lq68Wlaj-dw0BYR7VixIZcY/s1600-h/Hanoi4.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT4cHC9oB1ZTmZMAwkXEAdey_PejvtPZFUspco6796XW38UEnpwnZYLUf4ffx9n8tiNVXnlFLn_geiq2z3l2CBTzp_V9l3f02PGZsmGaPNsG2Y2axQchXG4lq68Wlaj-dw0BYR7VixIZcY/s320/Hanoi4.jpg" alt="" id="BLOGGER_PHOTO_ID_5068339900090345938" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuySGsHLQeSPzRTd6-nd-R-3hO3XcJZgyWd6c1Ck2U7Tj6ltgLejyon-be9nHCc_eqUuNCBQzw_FE27Zi8tM6E1D1nAPCFFnn_EWFEhyphenhyphen5PH6Kqk7QDv3OSxvKv9shOKo_OAjfOtKonsqyE/s1600-h/Hanoi5.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuySGsHLQeSPzRTd6-nd-R-3hO3XcJZgyWd6c1Ck2U7Tj6ltgLejyon-be9nHCc_eqUuNCBQzw_FE27Zi8tM6E1D1nAPCFFnn_EWFEhyphenhyphen5PH6Kqk7QDv3OSxvKv9shOKo_OAjfOtKonsqyE/s320/Hanoi5.jpg" alt="" id="BLOGGER_PHOTO_ID_5068339981694724578" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCaFRLeIAYT1G_j5CXgGn7oNahyYRteIpd3V55jhFMUQxresiezuYdVQd48naB5PP8Qv0-Lh8hic2XIhI0B581SoP_IJbngL-BdyxMYr_1OsCXQrfza_BpgpJE4DEMtd0CSNCZO6vQN9D8/s1600-h/Hanoi6.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCaFRLeIAYT1G_j5CXgGn7oNahyYRteIpd3V55jhFMUQxresiezuYdVQd48naB5PP8Qv0-Lh8hic2XIhI0B581SoP_IJbngL-BdyxMYr_1OsCXQrfza_BpgpJE4DEMtd0CSNCZO6vQN9D8/s320/Hanoi6.jpg" alt="" id="BLOGGER_PHOTO_ID_5068340071889037810" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs_-2Ieuuv4CXtQhZ04ZTctDweNh6cxJjiq8v4m7m1-8TdWXdfZFi4nmnJ4NJkbAu_RAGE0hOjcwglp6E7aEYbKDvV4AItBUC9kUi59EEQ4h5eYDeHriu17IGBZH3Iz6o0WuuMxaq8C7c8/s1600-h/Hanoi7.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs_-2Ieuuv4CXtQhZ04ZTctDweNh6cxJjiq8v4m7m1-8TdWXdfZFi4nmnJ4NJkbAu_RAGE0hOjcwglp6E7aEYbKDvV4AItBUC9kUi59EEQ4h5eYDeHriu17IGBZH3Iz6o0WuuMxaq8C7c8/s320/Hanoi7.jpg" alt="" id="BLOGGER_PHOTO_ID_5068340140608514562" border="0" /></a>and finally, here is the url to get the source for our game!<br /><br /><a href="http://www.brankenonline.com/Hanoi.7z">http://www.brankenonline.com/Hanoi.7z</a><br /><br />You will require 7Zip or Winrar to unzip the archive :P<br />We hope you enjoy our game as much as we dreaded making it. haha. have fun.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-41220751702590245592007-05-22T20:44:00.000-07:002007-05-22T20:55:57.042-07:00Design Patterns with Unit Test ++Here is our code for today's assignment:<br /><br /><a href="http://www.brankenonline.com/gdev_unittest.zip">http://www.brankenonline.com/gdev_unittest.zip</a><br /><br />Hopefully, we've got it right.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-55794395450842672962007-05-16T03:42:00.000-07:002007-05-16T03:54:17.846-07:00Ducky Kitty AdventuresFirst of all here is our code:<br /><br /><a href="http://www.brankenonline.com/gdev_duckykitty_adventure.zip">http://www.brankenonline.com/gdev_duckykitty_adventure.zip</a><br /><br />And here is the UML diagram of the code, enjoy :D<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvNS6-0GMwLwHN_JCxGhTMpAIuAeuOV_WEhMqZJIegG3K9K-1oZkMkN3KeeetGGKhTgMq0m6GAjnAJJzal5uwswsrlEC-fvFv9Q1SIQm3_p6IwlBKi3SLM-2RdV3-KH_3Gl7FyoAQmtXBV/s1600-h/ChartThing.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvNS6-0GMwLwHN_JCxGhTMpAIuAeuOV_WEhMqZJIegG3K9K-1oZkMkN3KeeetGGKhTgMq0m6GAjnAJJzal5uwswsrlEC-fvFv9Q1SIQm3_p6IwlBKi3SLM-2RdV3-KH_3Gl7FyoAQmtXBV/s320/ChartThing.jpg" alt="" id="BLOGGER_PHOTO_ID_5065107731041675570" border="0" /></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-25600155386534166242007-05-08T21:50:00.000-07:002007-05-08T21:55:44.696-07:00Lab 4: Singleton & Abstract ClassesThis is our Lab 4 Exercise on Singleton and Abstract Classes:<br /><a href="http://www.brankenonline.com/gdev_abstract_factory_and_singletons.zip">Lab 4 Exercise</a><br /><br />Enjoy!Israel Chuahttp://www.blogger.com/profile/02041072574017679852noreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-30168193148140833812007-05-04T06:53:00.000-07:002007-05-04T07:04:47.992-07:00STL: Assignment 2This is our assignment integrating the previous abstract class assignment with STL. The only loop used is in file loading, enjoy ;)<br /><br /><a href="http://www.brankenonline.com/gdev_abstract_classes2.zip">http://www.brankenonline.com/gdev_abstract_classes2.zip</a>Brainy Boyhttp://www.blogger.com/profile/07249456889549453545noreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-75258308231555238922007-04-27T02:37:00.000-07:002007-05-08T21:57:13.223-07:00Iterative Game DevelopmentThis article is adapted from <a href="http://www.gamasutra.com/features/20050720/gold_01.shtml">http://www.gamasutra.com/features/20050720/gold_01.shtml</a>.<br /><br /><strong>Introduction</strong><br />During the course of game development, most objects rarely get written once. Often we have to revisit them to fix bugs, add/remove features and for optimization. Thus, this article provides a practical method and an effective schedule to ensure your game is completed or otherwise a not-so-wonderful releasable version.<br /><br /><strong>Milestones</strong><br />They keep track how much our game is completed.<br />They mark the completion of important game features.<br />They are the sub-goals we have to achieve at given deadlines.<br /><br />Therefore:<br /> - We must work towards milestones<br /> - Milestones MUST NOT be unrealistic, even if it will benefit alot financially or ease expenses.<br />It is also important to include visible/audible progress in our milestones. We must be able to see/hear the progress we have made (or at least to show it to the management) although it is usually not the case.<br /><br /><strong>Visiblity and Completeness go together.<br /></strong><br />It is also essential to build working versions frequently, weekly if not daily. However, it is recommended that we show the previous working versions to management if they ask for it, rather than the current version. It is important to show progress and it is necessary to upgrade or rewrite the current code to give another release with significant improvements. In other words, BE AHEAD OF TIME.<br /><br /><strong>Delivery: Pre-Production</strong><br />We will require some things before we jump into coding.<br />1. Create a comprehensive design of the game<br /> - characters (if any)<br /> - storyline (if any)<br /> - situations<br /> - rules<br /><br />2. Create a big list of all classes that would be used in the game<br />Divide the list into 3 main categories:<br /> - Core -> the most fundamental, critical, foundational<br /> - Required -> features that define the game, make it playable Core & Required would make a game releasable with minimal features, but not exactly fun<br /> - Desired -> features that would make a game great but not essential<br /><br /><strong>Object Functionality: 4 Levels</strong><br /> - Null version -> initial version. May be compiled but not doing anything useful<br /> - Base version -> shows some functionality, used to show the object's basic behaviour<br /> - Nominal version -> fully implemented, visually accepted, commercially viable<br /> - Optimal version -> ultimate version, state-of-the-art<br /><br /><strong>Definitions:</strong><br />An application is defined as of release quality if and only if its required features are at the nominal level.<br /><br />An application is referred to as complete if and only if its desired features are at the optimal level.<br /><br /><strong>Iterative Delivery: Ordering using priorities and levels</strong><br /> - Create null implementation of each object, starting from core than required than to desired.It then should be able to build and run, just without any features implemented.<br /> - Now go back to the core tasks and start writing nominal implementations, then the required.The game should then be releasable. Subsequently, write the nominal implementations for the desired.<br /> - Repeat the sweep from core to desired, writing the optimal implementations till we're done or stopped by external factors<br /><br />Basically it means this:<br />Null Implementation: CORE -> REQUIRED -> DESIRED<br />Base & Nominal Implementation: CORE -> REQUIRED -> DESIRED<br />Optimal Implementation: CORE -> REQUIRED -> DESIRED<br /><br /><strong>Scheduling</strong><br />Firstly, we have to provide a definition of a 'good enough' game in order to measure our progress. With the iterated delivery method, we'll solve several problems that will arise such as miscalculating the amount of time needed till delivery. This method will ensure that time will be allocated for code revision and improvision.<br /><br />As defined in Gamasutra:<br /><strong>The time scheduled for a task is the sum of the times for the null, base, nominal and optimal levels.</strong>Israel Chuahttp://www.blogger.com/profile/02041072574017679852noreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-16789137398901803592007-04-25T10:08:00.001-07:002007-04-27T03:19:05.316-07:00Developer Diary: Prince of Persia 3<p class="MsoNormal" style="TEXT-INDENT: 0.5in; TEXT-ALIGN: justify"><?xml:namespace prefix = o /><o:p></o:p>The Prince of Persia 3 is the climax of the Sands of Time videogames. We will be covering several aspects of the game, including Artistic Direction, Characters and Storyline, Animation and AI, Speed Kill system and Free Form Fighting, and Sound and Music.</p><div style="TEXT-ALIGN: justify"><strong></strong></div><p class="MsoBodyText" style="TEXT-ALIGN: justify"><strong>Artistic Direction</strong></p><p class="MsoBodyText" style="TEXT-ALIGN: justify">In artistic direction, the developers chose an outdoor environment and wanted to invoke 3 main feelings. The first is immersion, and in order to do so, they used real life references to create the Prince’s homeland in <?xml:namespace prefix = st1 /><st1:city st="on"><st1:place st="on">Babylon</st1:place></st1:city>. The pre production phase (drawing and concept art) was done in Ubisoft, <st1:city st="on"><st1:place st="on">Casablanca</st1:place></st1:city>. The higher areas of the city are prosperous, compared to the lower areas which are more like slums. The prince will visit interior areas, and experience day and night phases in the game. The second feeling is freedom and unlike previous games, the player is no longer confined to long narrow corridors, for example, the player will traverse rooftops to see the Prince’s enemies and objectives. The third feeling is Vertigo. The player will traverse rooftops with the prince’s acrobatics skills, making him the predator. To emphasize this, they used dark gradients for the low city ground areas of <st1:city st="on"><st1:place st="on">Babylon</st1:place></st1:city>, and light gradients for the roof areas. Another example of vertigo is seen at the <st1:place st="on"><st1:placetype st="on">tower</st1:placetype> of <st1:placename st="on">Babylon</st1:placename></st1:place>, where the player will climb up from the outside. </p><p class="MsoBodyText" style="TEXT-ALIGN: justify"><strong>Characters and Storyline</strong></p><div style="TEXT-ALIGN: justify"></div><p class="MsoBodyText" style="TEXT-ALIGN: justify"><span style="font-size:0;"></span>In the game’s Characters and Storyline, they talked about how the prince was the epic hero, and will be struck by the sands of time to transform into the Dark Prince. The Dark Prince intends to assist the prince in reclaiming his throne. The Prince’s friend, Kaileena, acts as a narrator, while Farah, a popular character from past games, will return in the Prince of Persia 3.</p><div style="TEXT-ALIGN: justify"></div><p class="MsoBodyText" style="TEXT-ALIGN: justify"><strong>Animation</strong></p><p class="MsoBodyText" style="TEXT-ALIGN: justify">In animation, the Prince of Persia series is known for its great animation quality, and this iteration of it is no exception. For AI, the programmers intended to make the prince’s foes challenging, but rewarding to defeat. They wanted to break away from the generic enemy types of other games, and wanted different personalities for each character. For example, they created the Sandgate system, where enemies could call for reinforcements.</p><div style="TEXT-ALIGN: justify"></div><p class="MsoBodyText" style="TEXT-ALIGN: justify"><strong>Speed Kill System</strong></p><p class="MsoBodyText" style="TEXT-ALIGN: justify">Innovations like the Speed Kill System were implemented in The Prince of Persia 3. Using well timed button presses, the prince could sneak up on and kill his foe instantly. They used an acrobatic approach to the system, which required strategy to analyze the situation. They also gave the player a choice between fighting and using speed kills. In the free form fighting system, the dark prince uses the dagger of time and chains to perform finishing moves.</p><div style="TEXT-ALIGN: justify"></div><p class="MsoBodyText" style="TEXT-ALIGN: justify"><strong>Sound and Music</strong></p><p class="MsoBodyText" style="TEXT-ALIGN: justify">In sound and music, they wanted to evoke the feeling of a town ravaged by war, to immerse the gamer and to give a true <st1:place st="on">Hollywood</st1:place> soundtrack. The princes have a duality. The Prince has a more orchestral soundtrack, while the dark prince has a more synthetic soundtrack.</p>Brainy Boyhttp://www.blogger.com/profile/07249456889549453545noreply@blogger.com0tag:blogger.com,1999:blog-5912393921626593984.post-37557707692272814192007-04-24T21:05:00.000-07:002007-04-25T05:40:52.927-07:00Abstract Classes and Virtual Functions<span style="font-size:85%;">As quoted from IBM developer's website, the definition of an abstract class is as follows:<span style="font-weight: bold;"> "An </span><span style="font-weight: bold;" class="italic">abstract class</span><span style="font-weight: bold;"> is a class that is designed to be specifically used as a base class. An abstract class contains at least one </span><a style="font-weight: bold;" id="idx1185" name="idx1185"></a><span style="font-weight: bold;" class="italic">pure virtual function</span><span style="font-weight: bold;">."</span></span><br /><br /><span style="font-weight: bold;"><u>My definition and benefits of abstract classes</u></span><br />An abstract class is used as a guideline and lays down a set of rules that a game engine should constrain itself to. Abstract classes is used to standardize code in a game engine making tasks less complicated and more efficient. In my opinion, I feel that abstract classes are a key role in engines be it game engines or program frameworks. By setting a standard, the programmer saves time by not having the need to recode class structures or overloading function parameters.<br /><br /><span style="font-weight: bold;"><u>My definition and benefits of virtual functions</u></span><br />From my understanding, virtual functions are defined by an inherited class. These functions are declared, but not defined in the base/abstract class, but can be used to access variables in the abstract level, via the inherited class. These functions must also be defined by the inherited class in order for the class to function normally. Additionally, virtual functions can be used without definition in the abstract level, although a definition <span style="font-weight: bold;">must</span> be provided in the inherited class for this to function.<br /><br /><span style="font-weight: bold;"><u>Advantages and Application of abstract classes and virtual functions</u></span><br />With the above knowledge of abstract classes and virtual functions, it is relatively easy to see the advantage of applying the abstract structure to a game engine or software framework.<br /><br />One of the advantages would be decreasing the number of parameters in a function of the inherited class. Say, I have the declaration of the base class as such:<br /><br /><span style="font-weight: bold;">Example abstract class</span><br /><span style="font-family:courier new;">class Sentient</span><br /><span style="font-family:courier new;">{</span><br /><span style="font-family:courier new;">public:</span><br /><span style="font-family:courier new;"> int hp;</span><br /><span style="font-family:courier new;"> int mp;</span><br /><span style="font-family:courier new;"> int attack_power;</span><br /><span style="font-family:courier new;"> int damage;</span><br /><span style="font-family:courier new;">public:</span><br /><span style="font-family:courier new;"> virtual void Attack(Sentient &Target);</span><br /><span style="font-family:courier new;">};</span><span style="font-family:courier new;"></span><br /><br /><span style="font-weight: bold;">Advantage 1: Less parameters</span><br />The first advantage of having an abstract class can be seen from the virtual function: <span style="font-family:courier new;">virtual void Attack(Sentient Target);</span> Notice that the function only needs to take in 1 parameter, which is basically an object of type Sentient, itself. Knowing that there are 4 standard parameters defined in the base class, (<span style="font-family:courier new;">hp</span>, <span style="font-family:courier new;">mp</span>, <span style="font-family:courier new;">attack_power</span> and <span style="font-family:courier new;">damage</span>) we can conclude that any class inherited from <span style="font-family:courier new;">Sentient</span> can be specified in this parameter, because they already have the basic requirements of the base class, having inherited from it after all, this in turn reduces the number of parameters required in a class, and makes programming more efficient and time-saving.<br /><br /><span style="font-weight: bold;">Advantage 2: 1 definition for each function<br /><span style="font-size:85%;">The problem</span><br /></span>Another advantage of abstract classes is that any class inherited from an abstract class can be specified in the Attack class, giving us no need to overload the Attack function. If we had <span style="font-weight: bold;">NOT</span> used abstract classes and instead defined 2 different classes, <span style="font-family:courier new;">human</span> and <span style="font-family:courier new;">demon</span>, we would have to overload the Attack function to take in different parameters, after all humans can attack demons and can sometimes attack other humans too, right? These may not be a problem if we only have 2 different classes, but imagine a world with over 100 different kinds of monsters and enermies. We would have to overload the Attack function once for every imaginable creature.<br /><br /><span style="font-size:85%;"><span style="font-weight: bold;">The solution</span></span><br />By using abstract classes, all we need to do is write the Attack function once, and any class inherited from the base class can be fitted into the parameter specified in the base class's function.<br /><br /><span style="font-weight: bold;">Advantage 3: Different definitions for virtual functions</span><br />Finally, note that Attack is a virtual functions. As different monsters attack in different ways, using a virtual function will surely furfill our needs. For example, a <span style="font-family:courier new;">human</span> class inheriting from a <span style="font-family:courier new;">Sentient</span> class could use the factor <span style="font-family:courier new;">damage</span> but not the factor <span style="font-family:courier new;">attack_power</span> when attacking, but a monster class could use both the <span style="font-family:courier new;">attack_power</span> factor and the <span style="font-family:courier new;">damage</span> factor. This gives us a wide range of options, and makes our game more intuitive.<br /><br /><span style="font-weight: bold;"><u>Summary</u></span><br />The joys of abstract classes are limitless and to summarize this article, I feel that the use of abstract classes will benefit game engine design and is highly useful to large-scaled games where many entities can exist.<br /><br /><u style="font-weight: bold;">The Assignment</u><br />Here is the assignment that was requested from the lesson, it can be downloaded from: <a href="http://simian.brankenonline.com/uploads/gdev_abstract_classes.zip">http://simian.brankenonline.com/uploads/gdev_abstract_classes.zip</a>.<br /><br /><span style="font-size:78%;"><span style="font-weight: bold; font-style: italic;">Resources:</span><br />http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.xlcpp8a.doc/language/ref/cplr142.htm<br />http://en.wikipedia.org/wiki/Abstract_class<br /></span>Unknownnoreply@blogger.com0