Blog
Pull Up Flash

While the brilliant project Ruffle continues to be developed (specifically for ActionScript 3), we decided to try to make it a little easier to play Flash games, at least on the computer. While there are solutions to download older browsers and/or older versions of Flash, there is one solution that is still supported by Adobe. To boot, it also doesn't split your web browsing experience across browsers. That solution is to download the flash file and open it in Flash Player for desktop. The problem is that this process is tedious...

So, we decided to automate it to make it possible with the click of a button! We created Pull Up Flash. Pull Up Flash allows you to click to open flash content in Flash Player. This means, you can start playing Bloons Tower Defense 4 from Game 103 with a click of a button from the game page. Pull Up Flash works in all Chromium-based browsers (Chrome, Edge, Opera, Brave, Vivaldi, etc.) and Firefox. You simply need to install the program and get the extension. More details are available on pullupflash.com, but we hope you enjoy!

Here is a video showing Pull Up Flash in action:



Show all 0 Comments
Ruffle

We are exited to announce the implementation of Ruffle on Game 103. Ruffle is a tool that automatically transforms Flash content into content that can be run without Flash. With Flash being discontinued at the end of 2020, this means running Flash content, which includes lots of Game 103 games, will be harder than ever. With Ruffle, Game 103's library will still be easily accessible. To use it now, simply click "Play in HTML5 (Beta)" under Options on any Flash game page.

Ruffle is still in the works. At the time of writing, most older games work as Ruffle has implemented a significant portion of ActionScript 1 and ActionScript 2. So if you find a game that doesn't seem to work, be sure to go back to playing it in Flash for now. We eagerly await further progress on this fantastic project!

Check out their website here: https://ruffle.rs.

0 Comments
New Game - Cocoa Town
We’ve released a new game called Cocoa Town! In it, you play as Cocoa as he delivers ice cream to the houses in the town. Angry tennis balls will chase you if you get too close and you’ll lose if you get hit by them too many times. You can use power-ups to avoid them. Also, every time you play the game, the town has a new layout!

You can play Cocoa Town here: https://game103.net/game/cocoatown

In addition, with the money you earn from delivering ice cream, you can buy items for your dog house. These include fully-readable books like Peter Pan and The Jungle Book, TVs you can watch YouTube videos on, speakers you can use to play music files, picture frames that you can display your pictures in, newspapers you can use to embed Twitter feeds, computers you can use to browse and search the web, and more!

The game is HTML5 meaning it will work on standard mobile browsers. However, while the gameplay itself works in all major browsers, Chrome and Safari have trouble correctly displaying some of the items in the house as of the writing of this post. Firefox displays everything correctly as it does not have the bugs that Chrome and Safari do.
0 Comments
Offline Play Available
As of today, all of Game 103 (including games!) can now be used offline on supported devices (given you have already visited the page you want to access). Any page you visit while online will be cached on your device. Then, if you try to access the page while offline, the cached version will be displayed to you. This works with games too! So, if you play a game online, you'll be able to access the game again offline. I hope you enjoy this new feature!
0 Comments
Moving to Game 103 template
Recently, the Game 103 blog has moved on to the Game 103 main site. It now shares the same template as all the other pages! We've been making a few updates here and there too. For starters, the navigation bar now contains links straight to the most popular games of various categories. In addition, all the source code for Game 103 is now available on GitHub! We hope this helps you with your site. We've also been adding some HTML5 games to the site to try to increase our support for mobile devices. Enjoy!
0 Comments
Duck in a Truck Available on Android
Duck in a Truck is finally available on Android. You can get it here. I hope you enjoy!
0 Comments
Secure Connection to Game 103
Game 103 has recently transitioned to use https for a secure connection. This means that no one can change the information being sent between your computer and Game 103 while it is in transit. Every page has been updated to use https. Additionally, all Game 103 games have been updated to connect securely over https. Some games not made by Game 103 on the site use http to fetch data, so this may result in mixed content warnings on the pages for these games. I hope you feel comfortable accessing Game 103-made content securely.
0 Comments
Social Media Daily Game and Characters Page
A new feature has been added that will post a link to a somewhat random game every morning on Facebook and Twitter. A game can not be the daily game game again until twenty days after it was game of the day, and there is a slightly higher chance that a Game 103 game will get to be the game of the day than other games. Be sure to like Game 103 on Facebook and follow Game 103 on Twitter if you have not already!

In addition to this, a page describing the stories behind many of the Game 103 characters has been added to the site as well. This is intended to be a fun page where you can learn about your favorite Game 103 characters. You can see the page here: http://game103.net/characters.

Thanks for you support,

James
0 Comments
Social Media
Game 103 is now on Facebook, Google+, and Twitter. Check us out!

https://www.facebook.com/game103
https://twitter.com/game103games
https://plus.google.com/118102629374144138740
0 Comments
New Administrator for Game 103
Game 103 is happy to announce a new valuable addition. For many years, I (James) have been the only one working on Game 103. However, as of today, my fiancée, Kasey, has been granted access to add games and videos to Game 103!
0 Comments
Site Changes
Game 103 has had some minor improvements since mid-2014, but mostly just content has been added over the past couple years. That is why I am very happy to have released a much updated version of the site yesterday. This version of the site includes shorter urls for pages, redesigned game, video, games, videos, and resources pages, and some other minor changes on the front end and new game, video, and resource databases on the backend. Check out the changes at game103.net if you get a chance!
0 Comments
Recursion in SQL and a MySQL Workaround using PHP

Recursive SQL


A substantial drawback of MySQL is its inability to use recursive queries. These queries are very useful when you have data stored in a hierarchical structure such that each element in the table also has a parent (except for the root element). A recursive SQL query would allow you to select an element and all of its descendants. This feature comes in handy in situations such as creating a navigation pane for a website. The pages of a website can be organized into a tree like structure. If a developer wanted a user to be able to navigate to any descendant of the current page in the tree representing the website, all descendants could easily be found with a recursive SQL query.

Given the following structure for an SQL database,
CREATE TABLE category ( id int NOT NULL, parent_id int NOT NULL, name varchar(20) NOT NULL
)
Here is an example of a recursive SQL query:
WITH children(id, parent_id, name) AS ( SELECT * FROM category WHERE category.id = 1 UNION ALL SELECT ca.id, ca.parent_id, ca.name FROM children ch, category ca WHERE ca.parent_id = ch.id
)
SELECT * FROM children;
Let's first walk through this code. Our database already has a table named 'category.' In this table, there exists entries about different categories that our site uses. (For example, on a games site like Game 103, one day, I might want to have subcategories and even sub-sub categories for games. To fetch all subcategories for Arcade games, I would use a recursive query like the one above [If I didn't use MySQL]). Each entry in the category table has its own id and the id of its parent (except for the root category which has no parent).
WITH RECURSIVE children(id, parent_id, name) AS (
The first line of code creates a temporary table called 'children' with the columns id, parent_id, and name (these are the same columns as the category table).
SELECT *
FROM category
WHERE category.id = 1
This is the initial select where we select the root category that we want for our recursive query (note: this does not have to be the root of the whole hierarchical tree, just the category that we want all descendants of in this particular query). In the case above, our root category for this query has an id of 1. After this query has run, our 'children' table has one row with the same information as the row in our 'category' table with an id of 1.
UNION ALL
SELECT ca.id, ca.parent_id, ca.name
FROM children ch, category ca
WHERE ca.parent_id = ch.id
This is where the fun begins. Here we are taking the union of the select statement that we did above with the select statement that we will do below. (For those of you who don't know what a union is, it just combines the two results and throws out duplicates). Our new select statement will select all entries from our current 'children' table joined with the 'category' table where the entry in the 'category' table has a parent_id equal to the id of the entry that is already in the 'children' table. This will select all of the direct children of the single root entry in the 'children' table and put them in the 'children' table as well.

Let's look at how this works in a little more detail. "FROM children ch, category ca" does a join (Cartesian product) of the temporary 'children' table that we are still constructing and category table. This means in our joined table that every row in the 'category' table will be combined with the each row in the 'children' table. Since there is only one row in the 'children' table right now (our root), each row in the 'category' table will just be matched with this row from the 'children' table. In a true Cartesian product, what was just described would be our result. However, the where clause alters our result. The where clause tells us to only include those rows such that have the parent_id of what is in the 'children' table (only the root right now). Thus, we have selected the direct children of the root element, and these entries have been added to the 'children' table.

You may think we are done! However, now we have new elements in our children table, and our recursive query now knows it must run the code
UNION ALL
SELECT ca.id, ca.parent_id, ca.name
FROM children ch, category ca
WHERE ca.parent_id = ch.id
again. However, this time, more results will be included in our output, since we are not just looking for the children of our root, but also the children of our children (since our children table now includes both our root and its direct children). The join will be done again and include all rows that have a parent_id of any of the items in the children table - thus adding the grandchildren of the original root to the table (the direct children will be added again, but ignored since SQL works on set logic and sets ignore duplicates). The next time the code runs, the great-children will be added to the children table. This same process will be repeated (hence the recursion) until there are no more descendants of the original root left to add. Want to see it in action? Here is an SQL Fiddle that will show how this all works.

http://sqlfiddle.com/#!3/68948a/1

Ordering Recursive SQL


If you ran the code above in the SQL fiddle, you may have noticed that the order that the items are returned in is the order in which they were added to the children table. However, if you are trying to design a navigation system for your website, this order wouldn't be too terribly helpful, as a subcategory for 'games' would be returned after the 'videos' category is returned. This can be fixed through a slightly more complex algorithm.

Here is the SQL code for this algorithm in SQL server:
CREATE VIEW children_no_order(id, parent_id, name, num, rowC) AS
WITH children_simple(id, parent_id, name, num, rowC) AS ( SELECT *,0, (ROW_NUMBER() OVER (ORDER BY category.id)) FROM category WHERE category.id = 1 UNION ALL SELECT ca.id, ca.parent_id, ca.name, num+1, (ROW_NUMBER() OVER (ORDER BY ca.id)) FROM children_simple ch, category ca WHERE ca.parent_id = ch.id ) SELECT * FROM children_simple;
WITH children(id, parent_id, name, num, orderNum, weight, staticCount) AS ( SELECT *, 0, CONVERT(float,(ROW_NUMBER() OVER (ORDER BY category.id))), POWER(((SELECT max(rowC) FROM children_no_order)+1)/1.0,((SELECT max(num) FROM children_no_order)-1)/1.0), (SELECT max(rowC) from children_no_order)+1 FROM category WHERE category.id = 1 UNION ALL SELECT ca.id, ca.parent_id, ca.name, num+1, (orderNum+(ROW_NUMBER() OVER (ORDER BY ca.id)*weight)), weight/staticCount, staticCount FROM children ch, category ca WHERE ca.parent_id = ch.id
)
SELECT * FROM children ORDER BY orderNum;
Let's look at this code a little in further detail. The first part of the code is essentially the same as above. We are creating a view of the recursive query we ran earlier and calling this view 'children_no_order.' The real purpose for creating such a view is that this view keeps track of which loop trough the code each entry was added to the table (variable named num which increases on each iteration), and this view keeps track of the order each entry would have been selected (variable named rowC called by the built in SQL SERVER ROW__NUMBER() function). Thinking in terms of a tree, this allows us to pinpoint each entry horizontally (which child it is of its parent) and vertically (what level the entry is on the tree [e.g. child, grandchild, great-grandchild, etc]).

This information is used for the information that we really want which comes in the next query. Let us look at this code.
WITH children(id, parent_id, name, num, orderNum, weight, staticCount) AS (
Our recursive table now has more columns. Like the view we just looked at, num keeps track of the iteration of the loop in which the entry was added to the children table. orderNum is what we use to find the correct order of the entries, weight is what we will multiply the ROW_NUMBER() by in each iteration (this variable weights the value of row_number; we will explain this a little later) staticCount is simply the maximum number of children any entry has in the tree (the width of the tree). This is obtained by finding the maximum rowC from the view we created.

Before we go any further, now is a good time to explain the algorithm we are using to obtain the desired order. For each entry we obtain, we will create an orderNum. This number will be the entry's parent orderNum plus the entry's row_number multiplied by the weight variable. At each increment, we divide the weight variable by staticCount. The initial weight is the width of the tree + 1 obtained by (SELECT max(rowC) FROM children_no_order)+1 to the power of the height of the tree - 1 obtained by (SELECT max(num) FROM children_no_order)-1. Our goal is to convert the order number for each entry to a number base [width of the tree + 1]. We use base width of the tree + 1 to ensure that any multiplication factor will not effect the previous 'digit' (term in the form multiplication factor * [tree_width+1] ^ current weight) in our number that has already been set. The first entries selected (direct children) represent the first 'digit' in our base [width+1] number. So, these will be raised to the highest power (the height of the tree - 1 is the smallest number that will allow for enough 'digits'). We will then divide our weight by staticCount, so in the next iteration we get the next 'digit' needed for out number (this will be added to the number above: direct children of the root will only have one 'digit' entered - the highest 'digit'. Only the deepest elements in the tree will have values for all 'digits'). The multiplication factor we use for each 'digit' is simply the ROW_ORDER that it was obtained in (The maximum number this can be is the width of the tree [this is why we used width of tree + 1 as our base]). Using this algorithm, all the subcategories of a category will come before the next category. This maintains true all the way down our tree, so our order is correct in the end.

For example, consider the following tree representation of data in our table.


Our base will be 3, since the maximum number of children any element has + 1 is 3. Our height is 3 (assuming a tree with just the root is of height 0), so height - 1 = 2. Calculating the weights for each entry we get.


Thus, ordering by orderNum, we will get

Everything
    Games
         Game 1
         Game 2
     Videos
          Video 1
               Video 1 Deleted Scenes

- the correct order. (You may notice that we are actually doing a pre-order traversal of the tree).

Now, let's analyze some of the code to see how this algorithm is implemented.
SELECT *, 0, CONVERT(float,(ROW_NUMBER() OVER (ORDER BY category.id))), POWER(((SELECT max(rowC) FROM children_no_order)+1)/1.0,((SELECT max(num) FROM children_no_order)-1)/1.0), (SELECT max(rowC) from children_no_order)+1
In this line, we are getting all the initial values as described above. Conversion to float and /1.0 are used to provide more space before this initial calculation runs into an arithmetic overflow error.

The only other line different from the simple recursive query is
SELECT ca.id, ca.parent_id, ca.name, num+1, (orderNum+(ROW_NUMBER() OVER (ORDER BY ca.id)*weight)), weight/staticCount, staticCount
Here, num + 1 simply increments the depth on each level. (orderNum+(ROW_NUMBER() OVER (ORDER BY ca.id)*weight)) is what calculates the orderNum for the current entry. We use the previous orderNum (parent's 'digits') plus a new digit we obtain by multiplying the order that this entry was selected by the current weight. We then divide weight by staticCount, so the exponent in the expression that initially began as (width+1)^(height-1) is one less for the next entry, and thus a new digit can be added. We also pass on staticCount, so the child knows what to divide by as well.

The rest of the recursive query is the same as above. However, this time, at the end, we order by order_num with the following line.
SELECT * FROM children ORDER BY orderNum;
Want to play with this query or see it in action? Check out the following SQL Fiddle:

http://sqlfiddle.com/#!6/c4d8c/6

MySQL Alternative: Using PHP to simulate SQL recursion


Now that you are a recursive SQL expert, we must move away from the topic as it is not supported in MySQL. However, with a little PHP, we can emulate recursion.

Let's first consider the code equivalent of the non-order specific query.
$finalIds = array();
$tempIds = array($id);
while(count($tempIds) > 0) {
 $currentId = $tempIds[0];
 array_push($finalIds, $currentId);
 $IdsQuery = mysql_query("SELECT * FROM category WHERE parent_id = '$currentId'");
 while ($rows = mysql_fetch_array($IdsQuery)):
  array_push($tempIds, $rows['id']);
 endwhile;
 array_shift($tempIds);
}
Here we already know the id of our root element for our query, and it is stored in a variable called $id. We have arrays called $tempIds and $finalIds. $tempIds begins with only containing the $id variable while $finalIds is empty. Our algorithm is as follows: while $tempIds still has elements, add the current element to $finalIds then get all the children from the first element ($tempIds[0]) and add them to $tempIds. Then, remove the first element from $tempIds. This algorithm will go through and keep adding children to $tempIds and $finalIds until no elements have any children left to add, and $tempIds is empty. Thus all necessary ids will be in $finalIds.

We can then cast our finalIds array into a format that we can use in an SQL query by using
$sqlFinalIds = "(" . implode(",",$finalIds) . ")";
Now we can run the sqlQuery
$finalQuery = mysql_query("SELECT * FROM categories WHERE id IN $sqlFinalIds");
Now, one can iterate through $finalQuery to find all necessary rows. However, if we want the same kind of order as the ordered SQL recursion query that is necessary for situations such as navigation, the change to the algorithm is less complicated. What we need to do is have all the children of element considered before the next element. This can be done by editing our original loop slightly.
while(count($tempIds) > 0) {
 $currentId = $tempIds[0];
 array_push($finalIds, $currentId);
 $IdsQuery = mysql_query("SELECT * FROM category WHERE parent_id = '$currentId'");
 while ($rows = mysql_fetch_array($IdsQuery)):
  array_splice($tempIds, 1, 0, $rows['id']);
 endwhile;
 array_shift($tempIds);
}
The only line we changed was
array_splice($tempIds, 1, 0, $rows['id']);
This means that an element's children will be placed next in queue to be looked at by our loop, since we have placed the elements child at position 1. It can be noted that this will cause children to be in reverse order of how they were fetched in the SQL query when considered, since the final item in the while loop will be at position 1 (previous terms will be shifted back). If it is necessary for this order to be maintained, a simple change can be made.
while(count($tempIds) > 0) {
 $currentId = $tempIds[0];
 array_push($finalIds, $currentId);
 $IdsQuery = mysql_query("SELECT * FROM category WHERE parent_id = '$currentId'");
 $i = 1;
 while ($rows = mysql_fetch_array($IdsQuery)):
  array_splice($tempIds, $i, 0, $rows['id']);
  $i ++;
 endwhile;
 array_shift($tempIds);
}
Here, instead of always inserting at position 1, we insert at position i. The first child will be inserted into $tempIds at position 1, but the second will be inserted at position 2, 3rd - 3, and so on.

Now $finalIds will contain the ids of the elements in the order we want for getting the navigation to look correct. When we call $finalQuery, we can now add a ORDER BY clause (Note we will also need another variable, this is the same as $sqlFinalIds without the parentheses), so our new line becomes:
$sqlOrderIds = implode(",",$finalIds);
$finalQuery = mysql_query("SELECT * FROM category
WHERE id IN $sqlFinalIds
ORDER BY FIELD(id, $sqlOrderIds)");
Note: FIELD is supported by MySQL, but may not be by other databases.

Then you can iterate through that query with a while($rows = mysql_fetch_array($finalQuery) loop such as
while ($rows = mysql_fetch_array($finalQuery)): echo $rows['name'];
endwhile;
The only element that this query currently lacks is information about depth for each entry on a tree which would be nice to format a navigation bar nicely.

This can be done fairly easily as well. We can add two more arrays that keep track of the parent level for each element. $tempLevels starts out with 0 as its only value since the root element in our query has a level of 0 (you can change this to 1 if you prefer), and $finalLevels is empty just like $finalIds.
$finalLevels = array();
$tempLevels = array(0);
Updating the main loop we get:
while(count($tempIds) > 0) {
 $currentId = $tempIds[0];
 array_push($finalIds, $currentId);
 array_push($finalLevels, $tempLevels[0]);
 $IdsQuery = mysql_query("SELECT * FROM category WHERE parent_id = '$currentId'");
 $i = 1;
 while ($rows = mysql_fetch_array($IdsQuery)):
  array_splice($tempIds, $i, 0, $rows['id']);
  array_splice($tempLevels, $i, 0, $tempLevels[0]+1);
  $i ++;
 endwhile;
 array_shift($tempIds);
 array_shift($tempLevels);
}
Now $finalLevels will contain the correct level for each element at the same index as the element's index in the $finalIds array. The name and level for a category could be accessed by the following code.
while ($rows = mysql_fetch_array($finalQuery)): echo $rows['name']; $key = array_search($rows['id'],$finalIds); echo $finalLevels[$key];
endwhile;
Here, we find the index of the id we are looking at in $finalIds and then echo the level that is stored in the $finalLevels array under that same index.

Well that was a lot! I Hope it helps you on your project!

Please comment if you find any mistakes!

Thanks and God Bless,

James Grams
Show all 0 Comments
Game 103 Accounts
You can now have an account on Game 103!

Visit http://game103.net/register.php to sign up for an account. Once you have an account, you will be able to add games to your favorites by clicking the 'Add to favorites' button on a game page. You can then rearrange your favorite games on your page, and, if you like, share your page with others!

Enjoy the site!

James Grams
0 Comments
Remove Spaces Before or After a Phrase in Python
It has been a while since I last posted, but here is a quick programming tip. You may come across a situation where you want to remove the spaces before or after a phrase. However, you cannot simply replace all spaces, because then the phrase will be mashed together. So, here is a trick to remove only the spaces before or after the word in python.
string = " Welcome to Game 103 "
#This will remove the spaces before 'Welcome'
while string[0] == " ": string = string[1:]
#This will remove the spaces after '103'
while string[-1] == " ": string = string[:-1]
This code simply keeps shortening string until it finds a character that is not a space.

Enjoy the site,
James Grams
0 Comments
Update and a quick tip
Game 103 has not experienced any major updates recently, but I have been adding games slowly but surely. Each game page now has a section for similar games. Here's a quick programming tip. To append a string in php, you can use ".=".

for example,
$var = "hello";
$var .= ", how are you?";
now, $var = "hello, how are you?"

Enjoy the site,
James Grams
0 Comments
Beating Trampoline Chickadee
Level 3 is hard, but possible!


2 Comments
Game Categories
The Games page on Game 103 now has categories to help you find games easier! Check it out here:

http://game103.net/games.php

Enjoy!

James Grams
0 Comments
New Game - Trampoline Chickadee
I made a short three-level flash game over the past two days named Trampoline Chickadee. Here's the link to the game on Game 103.

http://game103.net/game.php?urlid=trampolinechickadee

You have to bounce on the trampolines and avoid the bees.

Enjoy!
2 Comments
WMode for embedding flash
Sometimes when embedding flash games that websites distribute, the games won't load or you may get an error message. A very likely cause for this is that you don't have wmode set to direct in your embed code.

For example:
<embed src = "movie.swf" width="750" height="600">
may not work.
If this is the case try adding wmode="direct" to the embed code,
<embed src = "movie.swf" width="750" height="600" wmode="direct">
Hope this helps you all!
James Grams
0 Comments
iFrame alternative for Navigation Bars for SEO
I've been researching search engine optimization for Game 103 recently, and it seems that iFrame links are not as good as links built into the page. However, it can be a hassle to keep navigation updated without an iFrame. The alternative? Using server includes.

On your html pages, you can use this tag:
<!--#include virtual="/navbar.html"-->
In the case above, navbar.html is stored at the root directory of the website. You can add to the path if your navbar is located somewhere else.

On your php pages, you can use this tag:
<?php include 'navbar.html';?>
If the php page you are editing is not in the same folder as your navigation bar you'll have to navigate there. This is a little different with php than in html. You can use this code:
<?php $path = $_SERVER['DOCUMENT_ROOT'];
$path .= "navbar.html";include_once($path);?>
This navigates to the root and then to the navigation bar.

Here's some links to articles that I read to get the includes working on my site.

http://www.htmlgoodies.com/beyond/webmaster/article.php/3473341

http://www.w3schools.com/php/php_includes.asp

http://css-tricks.com/php-include-from-root/

James Grams
Show all 1 Comments
Duck in a Truck Released!
Duck in a Truck is out on iOS! Follow the link below to check it out!

https://itunes.apple.com/us/app/duck-in-a-truck/id907135188?mt=8

Check out the gameplay trailer below!

0 Comments
Exporting vectors in Flash Pro
Drawings in flash are naturally vectors, but in Flash Pro CS6, there appears to be  no option to publish vectors.

To publish vectors, click file > export > export image. Then save the file with a .eps extension instead of .swf or another image type .eps is a vector file and allows for smooth scaling.

You can also change the extension in the publish settings menu.

Hope this helps,

James Grams
0 Comments
Site Update
I have been updating Game 103 a lot recently. Here's a list of some of the imporvements that have been added.

1. Mobile Apps pages - Pages for the Game 103 iOS Apps
2. Video page - Right now this only has Game 103 videos, but I hope to add more soon.
3. Site search - Search Game 103 directly from the homepage
4. Full embed links to Game 103 games - The Game 103 Games pages have embed links on them, so you can put the full game on your site.
6. New Games on Homepage - The homepage now shows the most recently added games

Thanks for coming to Game 103,

James Grams
0 Comments
Adding and Removing Many Similar Movie Clips at the Same Time
Adding lots of movie clips at once is useful in flash in you want to generate multiple objects such as scenery, enemies, etc. This can be done with a for loop.

First, set the ActionScript Linkage in your library for the movie clip that you want to add multiple times. For me, this linkage is "Raindrop."
for(i = 0;i < 25;i++) { //add the movie clip to the object //object is what the movie clip will be added under - this can be Stage at the highest level object.addChildAt(new Raindrop(),i);
}
To delete the movie clips you can use this code:
for(i = 0;i < 25;i++) { //get the unnamed movie clip with getChildAt //this parameter is 0, not i, because as one instance is deleted, the child numbers bump down. var temp:DisplayObject = object.getChildAt(0); //set the movieClip to null temp = null; //remove the movie clip object.removeChildAt(0);
}
This is good for adding and deleting, but what if you want to have these movie clips do something? Well you can do that to by creating an .as class. My .as class is named "RaindropClass." I have the Raindrop movieclip as a parameter, along with some other information that will be utilized in the code that makes the raindrop fall.

To start out you'll want to make an array to keep track of your objects
var rainDrops = new Array();
for(i = 0;i < 25;i++) { drop = new Raindrop(); object.addChildAt(drop,i); raindrop = new RaindropClass(drop,startX,startY,fallSpeed); //add this raindrop to the raindrops array rainDrops.push(raindrop);
}
Then, to remove the raindrop objects you'll want to add this code in addition to the code above (the code above removes the movie clips, this removes the objects)
for each(var r:Raindrop in rainDrops) { r.remove(); r = null;
}
As for RaindropClass, the code could be as simple as this:
package { import flash.display.MovieClip; import flash.events.Event; public class RaindropClass { private var drop:MovieClip; private var startX:Number; private var startY:Number; private var fallSpeed:Number; public function Raindrop(drop:MovieClip,startX:Number,startY:Number,fallSpeed:Number) {   this.drop = drop;   this.startX = startX;   this.startY = startY;   //set the raindrops start x and y   this.drop.x = startX;   this.drop.y = startY;   this.fallSpeed = fallSpeed;   //begin the fall function with enter frame event listener   this.drop.addEventListener(Event.ENTER_FRAME,fall); } public function fall(event:Event) {   this.drop.y = this.drop.y + this.fallSpeed;   this.fallSpeed = this.fallSpeed + 0.5;   if(this.drop.y >= 1000) {    this.drop.y = this.startY;    this.fallSpeed = 0;   } }
}
James Grams
0 Comments
Helpful links for publishing and developing Adobe Air apps for the iOS app store
Listed below are some links that have helped me test and eventually get my app on the iOS app store. I used Flash Pro cs6 on Windows to develop my app, and it turns out the only thing that a mac was needed for was submitting the actual app.

This page walks you through the process step by step.

http://help.adobe.com/en_US/flex/mobileapps/WS064a3073e805330f6c6abf312e7545f65e-8000.html#WSe4e4b720da9dedb5-27e02e9a12ee20e4a60-7fff

 As stated in the tutorial above, you need to use OpenSSL on a pc for a few things. If you get an error about a configuration or random file, these links can help you out.

Random state
http://stackoverflow.com/questions/12507277/how-to-fix-unable-to-write-random-state-in-openssl

Configuration
http://www.weatherimagery.com/blog/windows-cant-open-config-file-usrlocalsslopenssl-cnf/


In order to silence your iOS apps sounds when the user puts the phone on silent, check out this article:

http://blogs.adobe.com/airodynamics/2012/07/17/silencing-audio-on-ios-with-ambient-audio-playback-mode/

To silence playing music when your app opens, check out this native extension:

https://github.com/freshplanet/ANE-Background-Music

Milkman Games has some great Native Extensions for your app. Two that I used were the Game Center and iAds extensions. Tutorials on these can be found here.

Game Center
http://www.adobe.com/devnet/air/articles/gamecenter-ane-ios.html


iAds
http://www.adobe.com/devnet/air/articles/iad-ane-ios.html

Finally, remember to include good-looking icons, launch images, and make sure the display name displays well on an iOS device. (names that are too long will not show up). This article covers some things that have already been covered, but it takes you through the final submission.

http://www.adobe.com/devnet/flash/articles/app_store_guide.html

A note about the above article: You do NOT need to unzip the ipa file, you can simply upload it. To open application loader on a mac, open application loader, click xcode on the top menu bar, click open developer tool, and then click Application Loader. From there just upload your .ipa file! You may get a warning about image sizes, but this is not an issue.

(Here's some more info on launch images - http://help.adobe.com/en_US/air/build/WS901d38e593cd1bac1e63e3d129907d2886-8000.html, also to add a launch image, all you need to do is go to File - Air for iOS settings - and add the launch image to the included files list!)

James Grams
Show all 0 Comments
New iOS App in Production
Thanks for supporting Lamb in a Pram! Just wanted to let you know that the next app, Duck in a Truck is in production! I'll let you know more as time goes on, but for now, here's a picture!

Duck in a Truck

Also, if you have any suggestions for Lamb in a Pram, let me know so that I can consider them for future updates! Thanks!

James Grams
0 Comments
Lamb in a Pram Lite Release
Lamb in a Pram Lite has been released on iOS! It is much like Lamb in a Pram, but it has fewer items in the store and advertisements. However, it is free! Here's the link:

https://itunes.apple.com/us/app/lamb-in-a-pram-lite/id898885941?mt=8

Thanks and Enjoy!

James Grams
0 Comments
Common Libraries in Flash Pro
Many times when creating a game, you will want to use sound effects. Well, Flash (I know cs6 for certain) has common libraries with sound effects built in. In Flash, just click "Window", then "Common Libraries," then "Sounds." Here you will find sound effects that you can use in your game!

Also, the common library contains buttons and input elements that can help you in your game!

Thanks for reading!

James Grams
0 Comments
Jumping in as3
Jumping is a mechanic present in many video games. However, it takes some knowledge in physics to understand how it works. When an object jumps, it begins with maximum velocity moving away from the ground. the velocity decreases until the the object stops (reaches 0 velocity) and begins to fall faster and faster (begins negatives velocity).

Let's take a look at how to implement this jumping mechanic in as3:
//add the listener that allows the object we need to jump //(jumpingObject) to move on enter frame
//note: jumpingObject is a moving
jumpingObject.addEventListener(Event.ENTER_FRAME, jumpFunction);
//jumpSpeed variable that begins the velocity at its maximum value
var jumpSpeed:Number = 10;
//function for jumping
function jumpFunction(event:Event) {
 if(jumpSpeed >= -10) {
  //move the object up (then down) at a changing rate by decreasing the jumpSpeed
  jumpingObject.y = jumpingObject.y - jumpSpeed;
  jumpSpeed --;
 }
 else {
  //reset the jumpSpeed for the next jump
  jumpSpeed = 10;
 }
}
In other news, Lamb in a Pram Lite will be coming out soon. Thanks for reading!
0 Comments
Tip for never duplicating random values
Hi all, here's a programming tip for when you want to make some random values but never want the random values to repeat themselves.

Say that you want two random values, but you want to make sure that they are different. Well in php, you can do that with a simple while loop. Check out the code below:
$firstNumber = rand(0,10);
$secondNumber = $firstNumber;
while($secondNumber == $firstNumber) { $secondNumber = rand(0,10);
}
With this code, the variable secondNumber is set to equal firstNumber, and a new random value will be generated for secondNumber until it is not the same as firstNumber. This can be useful if you want to make sure that all information you display is unique!

In other news, an update for Lamb in a Pram will be coming soon. This will include 8 new items, the ability to change pram color, and a few bug fixes.

Also, a limited lite version of Lamb in a Pram will be coming out for free!

Enjoy!

James Grams
Show all 0 Comments
Tip - For loops in Flash
When creating games in flash using actionscript, often times you want to move many objects at once, or test collision detection for many objects at once. While you could tell each Movie Clip to move with code similar to:
movieClip1.x = movieClip1.x + 5;
movieClip2.x = movieClip2.x + 5;
movieClip3.x = movieClip3.x + 5;
movieClip4.x = movieClip4.x + 5;
movieClip5.x = movieClip5.x + 5;
It would be a lot easier, neater, and easier to change in the future if you used a for loop. To start, create an array and add each movie clip that you want to move into the array. This can be done with the following code:
var movieClipsArray:Array = new Array(movieClip1,movieClip2,movieClip3,movieClip4,movieClip5);
Now, when you want to move all the movie clips you can simply type:
for(var i:Number = 0;i movieClipsArray[i].x = movieClipsArray[i].x + 5;
}
This code goes through each item in the array and tells it to move to the right. Now, if you wanted to change the distance each movie clip moved, you would only have to change one number, and if you wanted to add more movie clips that move, you would simply add the movie clip name to the list when you create the array.

Hope this helps you all out there,

James Grams
Show all 0 Comments
Lamb in a Pram Released!
Lamb in a Pram is out! Here is the link to the iTunes Store where you can download the game

https://itunes.apple.com/us/app/lamb-in-a-pram/id894750816?mt=8



Enjoy!


0 Comments
Lamb in a Pram
Thanks for visiting the Game 103 Blog! I have decided to get this blog up and running again to provide an easier way to provide updates and also to give out some tips that I have learned throughout the years in game design and programming.

As the site states, the Game 103 app, Lamb in a Pram, should be released very soon. If you have an iOS device, be sure to check it out! You will find some gameplay footage below.


If any of you out there are looking to design games or programs, here is a quick tip - Be sure to keep a to-do list of what you need to do. That way, you will not forget anything when the time comes to publish your game or program.

Thanks again,

James Grams

Show all 0 Comments
Rec Room
Game 103 has added a new Rec room! Theres a chat there and some card games for you to enjoy! A new logo might be out soon, depends if I can come up with a good one. Enjoy the Site!
0 Comments
Memory Road and Minigame of the Moment!
It's been a long time since the last post, and it's also been a long time since Game 103 started. almost two years now! Remember the old template, and the releases of all the downloadable games? The old Game 103 logo with all the downloadable games characters? Now it's all flash. Not many of you will remember those days, because Game 103 hadn't its break out yet. That came with the addition of Bloons Tower Defense 3. But enough with the old onto the new. There's a new section of the website called Minigame of the Moment. Every now and then Game 103 will make a new minigame and post it on that page! It gets updated quite frequently and there's already been 5! Well if you want to see more you're gonna have to check it out! There's a link on the home page so it'll be easy to see! Enjoy!
0 Comments
Music 103
Game 103 has a new section called Music 103. It contains songs that I've written! So far I only have 2 songs up but they both have a flash music player, an mp3 for download, and piano music. You have to be a member to get to Music 103 though. I'll probably do some more work on this during fall break. But until then, enjoy it for now!
0 Comments
New Game!!!!

Wow, it's been a while since we released Bee RPG, but we have a brand new game, all finished. We might get sponsorship for this game, so we're not gonna release it until we get the message back from the sponsors. You may be wondering what the game is? Maybe this screen shot will explain it.
0 Comments
Finally a good site
I am finally done with all site renovations. I wanted to write a little paragraph comparing the old Game 103 to the present Game 103.

From the original Chat, Game Central, and Video, to the new studios and store. The old default template, and the new one which took weeks to add. The original extras such as email, to the new portal. The days which we got 5 views, to now where we get an average of 3000. I used to be blind on all coding, now I can code most anything needed for my site. And from months of no members, to almost a new member every day. All these things I would have never worked on without your support.

So, in conclusion, We can now just add games and videos, and are done with new sections, etc. Thanks to all who've been such a support since Game 103 strated over a year ago, we hope you keep on visiting us for many years to come.

Thank You,
James Grams, President of Game 103
0 Comments
New Stuff, Been a while since I posted!
Well a lot of stuff has happened to Game 103, even though you probably have not noticed it. This is because we have been working on flash Games. We got a flash porgram, and are very excited, and have a release coming out soon, the full version of the beta release, Age of Bunnies 2! We have also completely finished the new template :)!!!!! Now all that's left is finishing adding it to the games pages, and finishing the member's area :(. This is gonna take a while. Well Enjoy the Site!
2 Comments
New Template!
We have started adding the new template pages, to view them, just click the link on the top of the home page. It is not official yet, If it turns our people prefer the other template, we'll stick with that! But we will most likely offer both either turn out! Anyway just wanted to let you know! Enjoy!
0 Comments
2009 Brings New a New Game 103
Game 103 has already realeased two changing items. First off, Gadgets 103 now has seperate pages, and secondly, We have made the Videos on Video 103 not have the logos of video companies, as we hosted them ourselves.

New Layout!
Game 103 has come out with a simaler, but our design, layout. It is not certain that it will be used yet. We will let you know soon!
0 Comments
Merry Christmas

Game 103 would like to wish you are Merry Christmas. Our theme, which includes and alternate Game 103 logo, will be up until December 27th. We will most likely not be editing the site or responding to emails on Christmas Day. Thanks, and have a Merry Christmas!


0 Comments
Free Members Pages
Yes it is here, Anyone can now sign up for membership free. Although it is not full Membership, you receive access to Game 103 Games, Members Page, Members Chat, and PSP 103. To receive Membership it is $15. Enjoy this new feature!
0 Comments
Members Section Now Safer than Ever
Game 103 has added a new security feature to all Members Sections. What we have done is protected the entire Members Directory, so if some one by any chance "guesses" the URL of the page, they will not be allowed access. we hope this new feature makes your feel safer than ever, Enjoy Game 103!
0 Comments
Happy Thanksgiving with Web Hosting
Happy Thanksgiving everyone! We have added a holiday theme that will be on until December 1st. Also Game 103 Web Hosting has added a quick upload where you can upload you site directly from Web Hosting! Enjoy this new feature, and Happy Thanksgiving!
0 Comments
Job Offers
At the Moment, Game 103 has the following jobs available

Records and Customer Manager
Job Description
Records Poll Data
Receives and Replies to Contact Us forms
Records Creation Dates of New Pages (Games, Videos, and Major Members, and Non-Members Pages Only)
Requirements
Pass a Game 103 General Knowledge Exam in 5 Minutes (5 Questions) (Exam will be emailed to you upon
application)
If you are interested in this job please email a Records and Customer Manager request to james@game103.net
0 Comments
Happy Halloween
We have changed the Game 103 Homepage template for Halloween! We will change the templeate back to its original blue on November 2nd. Thanks, From Game 103, Happy Halloween!
0 Comments
Sparetime- games and memberships
Sparetime.co.nr is getting a new membership section with the help of game103!!! Also, we are getting more games all the time!!! The most recent new game is bloons tower defence 3!!!
0 Comments
Thank You gift!
Game 103 has gone up greatly in popularity! In October we have had our Site viewed 7323 times so far!

So as our thanks, WE WILL GIVE AWAY FREE LIFETIME MEMBERSHIPS TO THE FIRST 5 PEOPLE TO WRITE ON CHAT 103 AS OF 4:05 EATERN TIME TO WRITE ON CHAT 103!
0 Comments
Game 103 Layout
We have changed the Game 103 homepege look. Basically we have centered it, and made it neater as well! Also to all our Member's, we have updated Member's Page, and given it a nice new look too! Enjoy Game 103!
0 Comments
Store 103/Game Central Update

We will soon delete its full versions of the games off Game Central. What will happen when you click on, say Pilot Rescue. You will be taken to a page. On the page it will have Free Demo Download, A buy button to buy the full version, and poll, html code for the demo, and controls. Flash Fishy will still be free although. We hope to be able to make the games free again in the near future. We will do this as soon as Game 103's income picks up. Thank You.
0 Comments
Sparetime.co.nr
Sparetime.co.nr is now a partner with game103.net. Sparetime has lts of games, videos, news and forecasts, and comic strips. It is updated regularly. Please check out sparetime.

thank you,
President of Sparetime
1 Comments
New Logo
We now have two official logos - A small one that fits its way to most places on the site, and a large on which we are finding a place for.
Small



Large



0 Comments
Game 103 Polls
We have slightly changed our Video and Games Pages formats. They now all have polls with a custom design meant to match with Game 103! Enjoy
0 Comments
Member's Widgets
All Member's of Game 103, can now add widgets to their Member's Page! We will be adding some more soon, but for now, just click on the widgets link on your Member's Page, and Enjoy!
0 Comments
New Look
Game 103 has a new look! Most of you probabaly already seen this, but those who haven't, please check it out!
0 Comments
Personilized Member's Page
From now on Game 103 will have a personilized Member's page, for every Member.  When you first log in, you will be directed to a page that says your name, username, and days until your account expires, but after you go to another page and back to Member's Page, it will not be there anymore! Enjoy
0 Comments
Games and Check Up
Hi everyone, nothing that new on the site, just a few games. So this post is just checking up, and feel free to comment!
1 Comments
Find Us!
Here is a post of what search engines, what keywords, and what position Game 103 is Placed!

1. Google: Search-Game 103, 1st

2. Yahoo: Search-Game 103, 1st

3. AOL: Search-Game 103, 1st

4. Lycos: Search-Game 103, 1st

5. Dogpile: Search-Game 103, 1st

Thank You, Enjoy!
0 Comments
Sites 103
Hi Everyone, As you've seen, we've added quite a lot of new games lately, but besides that, nothing new. But, We now will be adding a new feature! It will be Member's Only, and be called Sites 103! It is simalar to Links in concept, but quite more advanced, On the sites page, there will be iFrames of all the Member's who signed up for this service. Also before the iFrame there will be the title, a description, and a sitemap (optional). I should have this ready soon! Enjoy Game 103!
0 Comments
Whats Up
Wow, it's been a while since I've posted! But a lot has happened with the Site! Firstly, i have made a game called Yoshi Yahoo! It's pretty fun, you should try it! Secondly, I have made ALL of my games free to the public on Game Central, Pretty Cool! Then I have added some more Games and Videos! Thanks, Enjoy the Site
0 Comments
So, *puff*, So, *puff*, Close, *collapse*
I have benn working at this site like MAD! OK, lets tell you what we've done.
  1. Game Central, I have added catorgories and also dogfight, free rider, and line rider, you should check it out!!!!!
  2. Merchandise 103, A non-members Page (hooray!) this is a place where you can buy all of Game 103 Developments Games! Non-Members Can too!!!!!! It also has some nice screenshots! pretty cool!!!!!
  3. Gift cards are redeemable at Register, sorry, not Merchandise yet, but we hope to do this!
  4. Services you already know, it's pretty nice!
  5. Downloads, a great section, with itunes, IE, Safari, hypercam and more to download!
  6. My Games page will have shorter my games until Game 103 gets a sufficient income, I'm sorry about this, but we can not afford this with Web Hosting and other fees, but the full versions can be purchased at Merchandise 103!
  7. PSP 103 has been updated with system updates and games demos, pretty cool!
  8. And we have domains availible at Web Hosting
  9. Finally, iPony will not be offering Email at this time, maybe in the future.

So, now you know what I've been working on, and as my little trademark, Enjoy!

0 Comments
How Far?
Where we are!
We have the services page up (took me forever) but it's up!
Note: WE WILL NOT GO FORWARD WITH THE SAMPLE MY GAMES PAGE, JUST A GAME ORDER PAGE, with that, I haven't made the page, but designed the cover and have all the CDs and Cases
Haven't done gadgets and info yet
We have the Web Hosting Yahoo! Thing
And iPony doesn't e-mail yet
Well thats where we are, IF YOU KNOW ANYWHERE YOU CAN PURCHASE CARDS LIKE GIFT CARDS WITH YOUR DESIGN ON IT, PLEASE TELL ME!!!!!!!!!!!!
0 Comments
Mass Addition System
Hey Everyone, I'd like to tell you about the addition plan! It's gonna be big so bear with me!

  1. Gift Cards, the Register Page will have a gift card redeem section, where if you buy a gift card, you can just enter you card number, instead of using paypal!
  2. The Sample My Games Page, if you don't know about it, beneath membership there is a My Games page which has the games I made on it. I will be cutting short some of the games, to give non members a preview of the games I made!
  3. Gadgets and Info Page, This Page will include a news reel, wheather, sports updates, world clocks and links to news sites!
  4. Services Page, this is one of the main updates, This will have all types of services that people can find to use, what I mean by services is you can look up a good local restuarant, or car wash, etc. Everything on the page is something people reccommend. We will try to not put big chain organizations, but more so small, nice places.
  5. The order my games page, If you don't want to buy membership, but are interested in my games, you can use the order my games feature! It will be a link off the sample my games page, where you can order a CD, if you are a member but want the CD, don't woory, theres a link on the regular my games page too!
  6. Web hosting Domains, We will add an iFrame of Yahoo Domain Registration on the Web Hosting Page, So You can Purchase Your Own Domain!
  7. Finally, iPony will be offering E-Mail

Wow! Thats alot, I'm gonna be very busy, please be patient with me, thanks enjoy!

0 Comments
.com imporovement system
Well, you probabaly recall me saying it would be .org, which it is. But after just one week, out of the blue, .com gets cancelled, so .org will probabaly get cancelled and i'll buy .com, thanks
0 Comments
iPony Release
IT'S OUT! What can I say, it's great! Visit it at http://i-pony.org/ it has all the features in the post below, enjoy!
0 Comments
iPony
Hi Everyone! I hope you're enjoying Club Penguin! But sadly, the Club Penguin Section Will not be updated. The Good News is Our New Site called iPony, which very soon will be availible at
i-pony.com. It has a connections page where, you can find people's names, and their usernames on the games we have there! So you can meet up with friends, or make new friends with othe iPony Users! We have three multiplayer games on iPony so far. and they are; Adventure Quest, Club Penguin, and Webkinz. I'll post when it's online!

Thanks,
James Grams
President and Owner
0 Comments
Club Penguin!
You Can Now Play Club Penguin, and Do more Club Penguin Things, on the new Section of my Site! Game Pony! At pony.game103.net! we have a club penguin chat room, and Club Penguin Its Self! Check It Out, O, and I Added Super Smash Flash to the Game Central Page! Enjoy!

James
President of Game 103
0 Comments
Web Hosting
Game 103 Now Offers Web Hosting! All You Have to do is login with your account and go to web Hosting! Then fill out the form and I'll Set Up Your Account! Your Site Will Be yoursite.game103.net! Then Using the Account You Signed Up With, Login to Filezilla how the Web Hosting Page Tells You to and Your Done! I hope you enjoy this feature!
1 Comments
James the Space Zebra
I have time for one last Post Before the Beach and here it is!

I have Added a New game called James the Space Zebra! It's Pretty Fun, you should shoud try it out on the My Games Page. I hope to soon add James the Pirate Zebra, but since it is a New Release, It mmey be a While before I can add it, andy Enjoy!



Thanks,
James Grams
President and Owner
0 Comments
Beach!
Tommorow, I'm Going to the Beach!
But, I just wanted You to know, If I'm not publishing Posts or editing the othe Site, I have'nt forgotten You! I'm just having fun at the Beach, and will Update when I get back in a Week!

Thanks,
James Grams
President and Owner
0 Comments
Pliot Rescue Again
Well, I worked on the The Game alot today and finished it!
It's Great with all the features, it's on the My Games Page, I hope you Enjoy it,

Thanks,
James Grams
President and Owner
0 Comments
Pilot Rescue Release
Hey Everyone!
This Post is to Say I'm Releasing Pilot Rescue, but without a title page, and only three levels. The Reason I'm doing this, is because I'm going to the beach for a week, and I wanted some people to play it. Anyway, the short one has all the fetures the full one will have, just doesn't take as long to Complete. But, It is a pretty cool game, probabaly one of My Best Yet!
Enjoy the new Game!

James Grams
President and Owner
0 Comments
Games and Videos
This Post is so you can Comment on what games and videos are your favorites, and what ones you'd like me to put on the site!

Thanks,
James Grams
President and Owner
0 Comments
Membership
If you've been on my site, you've probabaly noticed the Membership Feature, this post will tell you what pages there are behind that login system! First off, there's the Members Page, which is like the Home Page, but with Updates on Member Pages! Next there is a Members Only Chat Room! There are two pages with Downloads, they are My Games (the Games I created myself!), and PSP files with saves to download on it. Then one of the best features, the Game 103 Store! Finally there is the Contacts Page, with all the Workers E-Mails and My Phone, (which is kept private so we don't get spammed)! Oh, and Members get an E-Mail account @game103.net, Well hope that helps you out!

Enjoy the Site!
James Grams
President and Owner
0 Comments
Welcome
Welcome to the Game 103 Blog!
This will give all the information you need to know about Game 103. So, lets get started with some starter information. My name is James, and I created Game 103, and My goal for the Site, is to have just a little bit of everything in it. For Example, We have a few games, a Few videos, two Chat Room, Downloads, and a Store! Anyway the Purpose of this blog is to get your opinion on the Site! I will put on here posts like, whats your favorite game? and Any suggestions on what you'd like to see?
Well I hope you enjoy my Blog and Website, and by the Way, its URL is posted on the side, I hope you Enjoy it!

James Grams
President and Owner
0 Comments