Tuesday, January 31, 2006

Internship



I started yesterday an internship in a great agency in Central London.
Is like a dream for me, after working for 2 years in the tourist industry as a Duty Manager in a hotel (two minutes walk from the agency!) at last I can be the whole day in front of a computer and getting paid for it!
As Confusius said:
Find a job you love and you will never work a day of your life.
The place is cool, colleagues are cool, lots of books about everything... is just great!
At the moment I am working as a Graphic Designer but during the internship I will do a bit of everything and get experience.
Less time for my own stuff but I think I will manage it.

Salut!

Friday, January 27, 2006

No more university for me!

Last year I started studying a Master Degree in Digital Media here in London. I meet cool people and had great lessons with great lecturers.
The modules I took are:
- New Media Management, where I learnt a lot about how to deal with a project from its pre-production to its post-production, managing all the resources including people and technologies.
- E-Solutions and Digital Media Applications, full of new stuff related to the new media field from different perspectives; this subject made think for a moment that Flash is not that great... good job that was only for a moment!
- 3D animation for multimedia, funny that made me respect a lot Alias Maya but at the same time let me a bit scared and excited about all this 3D world, scared of the software (Maya) as is really big! BTW, my last project is available from: http://overloadstudios.co.uk/ewa/whiskas.zip and of course, is Maya integrated with Flash
- Principles of Digital Media, today I handed in my last project, was about Flash and its usability and accessibility issues; apart from that was nice to know where the pixels are coming from (binary) RGB colours and other stuff; a bit of Director (didn't like it though...), Photoshop, etc
- Principles of Game Design, my favourite, creating Methods (functions) using Flash OOP, history of the games (online, console, mobile...) was just great! that's why all the stuff in this blog so far is about games
- Digital Video Production, for a moment I regreted I took this module and not Designing for the web (Dreamweaver, CSS and stuff), but when I managed to understand Adobe Premiere Pro, I started filming everywhere! ask the people at the London MMUG... nice experience, the main actor of my short film was always calling me "Spielberg" (I think Juan Sanches was more excited than me!)

Well, now just the last bit, the final Digital Project that I did already! but I haven't done the disertation that goes with it. I have untill May to hand it in.
What a good time I had!

Thanks classmates, teachers and specially the Senior Lecturer of the course Ms. E. Moschini!

Salut!

Thursday, January 26, 2006

My games in gotoandplay.it

After some months I sent two of my games to the crew at gotoAndPlay.it, two days ago they added them into the games section of their website!
Im happy because of that but not that happy with the results...
If my games were not that well accepted in newgrounds, I think in gotoAndPlay they did even worse!
but come on, nobody is perfect! hehe
Links
Bird Flu [exterminating]
Bird Flu [vaccinating]
Anyway, if not many people like my games, I DO!
taking into account I made them in one week each, while working as a Duty Manager in a hotel and studying my Degree, I am very proud of them! :)

Salut!

Monday, January 23, 2006

NeoFlashers - en Español

NeoFlashers

The Spanish speaking community of RIA's developers NeoFlashers.org is about to opens its doors.
It took a year to the organizers to complete the phase 1 of this project; with the creation of the logo by loopKamel, the emoticons by MoyArt and the PHPBB skin by Infected-FX this great community has lots of potential.
If you speak spanish (or want to learn it...) and are interested in the New Media, you should keep an eye on http://neoflashers.org/foro/.
Bear in mind that at the moment only the forums are working, however very soon we will have the homepage with loads of tutorials, news and many more cool stuff!

Well done guys!
keep on the good work

Saturday, January 21, 2006

Bird Flu Games

Last year I did a couple of games about the Bird Flu, the first one is Birds Flu [vaccinating]
and the main difference between this and the second one is that this one is more Birds friendly, for people who like Birds and don't want to hurt them


And for the people that don't care too much about the birds, Birds Flu [exterminating]. For some people is better not to take risks...


Something weird happened, last year when I showed the games to my friends in different forums, at work, university... they liked the second one best, but when I submitted them few days ago to newGrounds, the online gamers considered the second one to be the worst one!
http://www.newgrounds.com/portal/view/290034
http://www.newgrounds.com/portal/view/290218
With those reviews I think my days in newGrounds as a game developer have finished.
This only showes me that there are different markets out there, one is the ocasional gamers like most of us, and the other is the "hardcore" gamers; they are not my market though...
Anyway, some reviews are really useful and Im learning a lot from them, as I am not a gamer myself, I didn't know what the gamers were expecting, now at least I have a clue! hehe

salut

Thursday, January 19, 2006

Interstellar Storm

The story of this game goes back to 2002, when my friend Yacsha started developing the grandfather of this game... we worked together on the game, but after these years we forgot about it.
In 2005, I found the .fla and made some changes, different graphics, different options... and 3 days ago, I put it in newgrounds.
Good and bad feedback tell me, gamers want more!



The scoretable doesn't work from newgrounds but from my website it does:
http://overloadstudios.co.uk/birdflu/nave.html

Sunday, January 15, 2006

Slippery Pong

Another game. This of practising AS2 is leaving me lots of games!


http://overloadstudios.co.uk/birdflu/slipperyPong.html

still not too convinced by the colours though... but are different and that's why I like them.

cheers!

Thursday, January 12, 2006

Pawel and the Teutonic Castle

Vertical shooter style but with a completely different engine (actionscript).
Same hero, Pawel, this time in his fight against the Teutonic Knights

Pawel and the Teutonic Castle

http://overloadstudios.co.uk/birdflu/Pawel.html

Salut!

Wednesday, January 11, 2006

Pawel and the Flying Dragons

After finishing the Vertical Shooter tutorial, I continued adding things to the game and this is what I have so far:

http://overloadstudios.co.uk/birdflu/dragons.html

Hope you like it! if any comments, please don't hesitate to contact me.

Monday, January 09, 2006

Creating a Vertical Shooter (Part III)

Pawel shoots arrows, moves and there is a beautifull background, but Pawel is shooting to an empty sky!
We need the dragons.
Again, as we did with the arrow, background, etc. we need to draw our dragons, I drew mine first using Freehand and then pasted into flash.




At the moment it will be a still image, although we can make a little animation of its wings.
We don't need instances of our dragon on the stage but we need it in the library as a movieclip.
Open the library and right click on the dragons movieclip to open the linkage properties window, tick Export for Actionscript and leave the identifier as default (dragon).
Now the actionscript.
The first three new things to be added are the variables:
var dragons:Number = 3;
var i:Number = 0;
var score:Number = 0;
dragons is the number of dragons we will have on the stage.
The variable i is a bit difficult to explain as is going to help us in more than one thing, i.e. to give a specific name to each dragon.
score is to store our score, we can add a dinamic text box on the stage with variable name score so we now how good we are killing dragons.
We need to add two functions, one to initialize the dragons and another one to update them.
function initDragons() {
for (i; i<dragons; i++) {
attachMovie("dragon", "dragon"+i, i);
dragon = _root["dragon"+i];
updateDragons(dragon);
dragon.onEnterFrame = function() {
if (this.hitTest(arrows)) {
score += 5;
trace(score);
arrowActive = false;
removeMovieClip(arrows);
updateDragons(this);
}
if (this._x>0) {
this._x -= this.velo;
} else {
updateDragons(this);
}
};
}
}
initDragons();
function updateDragons(which) {
which.gotoAndStop(random(4));
which._x = random(100)+530;
which._y = random(80)+20;
which.velo = random(10)+2;
}
In the function initDragons() , we start with the loop for (i; i<dragons; i++), usually this sort of loops look the same, with a variable to initialize the loop, the condition to loop and the incrementation of the variable value after each loop iteration.
when the value of i is less than the number of dragons, we will attach an instance of our movieclip dragon with this script:
attachMovie("dragon", "dragon"+i, i)
The new name of this instance is "dragon"+i, the value of i is incrementing, so the first one will be called dragon0, the second dragon1 and because we set dragons number as 3, the last instance will be dragon2 finishing the loop.
To make our life easier, we will set a variable to store the name of each dragon, dragon = _root["dragon"+i];
To update the dragons that have been just created, we need to call the function updateDragons(dragon) explained later on.
dragon.onEnterFrame = function() on real time, each intance of the dragons will:
if (this.hitTest(arrows)) check if the arrows hit them, and if it happens,
score += 5; the score will be increased by 5
trace(score); the output window will show us the score
arrowActive = false; the arrow is not active
removeMovieClip(arrows); the arrow will be removed
updateDragons(this); we will update the dragons intance
if (this._x>0) {
this._x -= this.velo;
} else {
updateDragons(this);
}
if the dragon is on the stage, its x position is bigger than zero, it will move horizontally (x axis), if not (when reaches the end of the stage) the dragon will be updated.
initDragons(); we call the function that just declared.
We declare the function to update the dragons, function updateDragons(which)
The x position of the dragon will be randomly chosen, which._x = random(100)+530;
the same with the y position, which._y = random(80)+20;
and the speed the dragon will have, is chosen randomly aswell, which.velo = random(10)+2;
random(number) means that flash will take randomly a number between zero and the number in the brackets, if you want this number to be bigger than zero, then add another number, i.e. random(80)+20 is a number between 20 and 100.
Done! we have a Vertical Shooter game!
updating the script we have:
//---- variables ----
var steps:Number = 5;
var spriteX:Number = 265;
var spriteY:Number = 265;
var speed:Number = 25;
var arrowActive:Boolean = false;
var dragons:Number = 3;
var i:Number = 0;
var score:Number = 0;
//---- properties ----
knight.swapDepths(10);
//---- functions ----
function checkKeys() {
if (Key.isDown(Key.RIGHT) && spriteX<510) {
spriteX += steps;
knight.legs.play();
} else if (Key.isDown(Key.LEFT) && spriteX>40) {
spriteX -= steps;
knight.legs.play();
}
if (Key.isDown(Key.UP) && arrowActive == false) {
knight.arms.play();
attachMovie("arrow", "arrows", 8);
arrows._x = spriteX;
arrows._y = spriteY+50;
//arrowActive = true
}
}
function updatePawel() {
knight._x = spriteX;
knight._y = spriteY;
}
function updateArrow() {
if (arrowActive == true) {
arrows._y -= speed;
}
if (arrows._y<-10) {
arrowActive = false;
removeMovieClip(arrows);
}
}
function initDragons() {
for (i; i<dragons; i++) {
attachMovie("dragon", "dragon"+i, i);
dragon = _root["dragon"+i];
updateDragons(dragon);
dragon.onEnterFrame = function() {
if (this.hitTest(arrows)) {
score += 5;
trace(score);
arrowActive = false;
removeMovieClip(arrows);
updateDragons(this);
}
if (this._x>0) {
this._x -= this.velo;
} else {
updateDragons(this);
}
};
}
}
initDragons();
function updateDragons(which) {
which._x = random(100)+530;
which._y = random(80)+20;
which.velo = random(10)+2;
}
this.onEnterFrame = function() {
checkKeys();
updatePawel();
updateArrow();
};
Adding a couple of things, you can have something similar to this.

No .fla as is better for you to learn if you read the tutorial and practice everything yourself.
If any questions, don't hesitate to contact me.

Salut!

Saturday, January 07, 2006

Creating a Vertical Shooter (Part II)

Now we are able to move our sprite but is "in the air" so we need to add a background and as is not shooting anything yet, we will add the arrows.
To add a background is easy as you already know for sure. Just add another layer in the main timeline and draw your background (I drew mine in Freehand and pasted it into Flash); is good to name the different layers so you know where the things are.



The arrow can be drawn in Flash as well (I used Photoshop to draw mine). The arrow should be a movieclip and we should leave it in the library, not on the stage.
Open the library and right click the arrow movieclip so you can open the Linkage Properties panel, if you tick in linkage options Export for Actionscript by default the identifier will be arrow, so leave it like that.
We will add to the script a couple of variables, one to declare the speed of our arrow and another to allow us to shoot one arrow at a time and we need a function to update our arrow.
Now the script look like:
//---- variables ----
var steps:Number = 5;
var spriteX:Number = 265;
var spriteY:Number = 265;
var speed:Number = 25;
var arrowActive:Boolean = false;
//---- functions ----
function checkKeys() {
if (Key.isDown(Key.RIGHT) && spriteX<510) {
spriteX -= steps;
knight.legs.play();
}
if (Key.isDown(Key.UP) && arrowActive == false) {
knight.arms.play();
attachMovie("arrow", "arrows", 8);
arrows._x = spriteX;
arrows._y = spriteY+50;
arrowActive = true
}
}
function updatePawel() {
knight._x = spriteX;
knight._y = spriteY;
}
function updateArrow() {
if (arrowActive == true) {
arrows._y -= speed;
}
if (arrows._y<-10) { arrowActive = false; removeMovieClip(arrows); } } this.onEnterFrame = function() { checkKeys(); updatePawel(); updateArrow(); };
If we test our movie, there are a couple of weird things going on.
The first thing is, the arrows are coming from the back of Pawel, so there is a problem with the "depths". And the second problem is that the arrow is active and moving before the animation of the arms is running!
Let's see first the new things in our script and then let's fix the problems.
var speed:Number = 25; var arrowActive:Boolean = false;
As said before, speed is the number of pixels our arrow will move and in arrowActive we are declaring the boolean value of this variable, as is false means that the arrow has not been shot.
if (Key.isDown(Key.UP) && arrowActive == false) { knight.arms.play(); attachMovie("arrow", "arrows", 8); arrows._x = spriteX; arrows._y = spriteY+50; arrowActive = true }
We have added another conditional, arrowActive. If it is false, the knight will move the arms, an instance of the movieclip arrow will be attached, the name of this new instance is arrows and the depth (how close to you is this object related to the other objects on the stage) is 8, so is on top of every object with a lower depth.
That's why our hero seems to be behind the arrow!
By default, the depth is 0 (zero).
function updateArrow() { if (arrowActive == true) { arrows._y -= speed; } if (arrows._y<-10) { arrowActive = false; removeMovieClip(arrows); } }
This function is telling flash that if the arrow is active, the arrow will have the speed before declared (25) and if the arrow's Y position is lower than -10 (outside of the stage), the arrow will not be active and the instance of the movieclip arrow will be removed.
this.onEnterFrame = function() { checkKeys(); updatePawel(); updateArrow(); };
In real time, flash will be checking the situation of the arrows.
Now let's fix the bugs.
We need to change the depth of our hero adding this line to our script:
knight.swapDepths(10);
And to activate the arrow in the right time, we will edit our arms movieclip.



When the hero is about to shoot the arrow (in the animation) we added the following script:
_root.arrowActive = true;
Where _root is the main timeline, so this code aplies to the variable declared in the main timeline and is activating the arrow.
So far, the latest version of the script is:
//---- variables ----
var steps:Number = 5;
var spriteX:Number = 265;
var spriteY:Number = 265;
var speed:Number = 25;
var arrowActive:Boolean = false;
//---- properties ----
knight.swapDepths(10);
//---- functions ----
function checkKeys() {
if (Key.isDown(Key.RIGHT) && spriteX<510)>40) {
spriteX -= steps;
knight.legs.play();
}
if (Key.isDown(Key.UP)&& arrowActive == false) {
knight.arms.play();
attachMovie("arrow", "arrows", 8);
arrows._x = spriteX;
arrows._y = spriteY+50;
//arrowActive = true
}
}
function updatePawel() {
knight._x = spriteX;
knight._y = spriteY;
}
function updateArrow() {
if (arrowActive == true) {
arrows._y -= speed;
}
if (arrows._y<-10) { arrowActive = false; removeMovieClip(arrows); } } this.onEnterFrame = function() { checkKeys(); updatePawel(); updateArrow(); };
As we are activating the arrows in the arms animation, we are leaving //arrowActive = true as a comment only (everything written after "//" in the same line is a comment).
Watch the sample here.

Next part of this tutorial, coming soon.

Friday, January 06, 2006

Creating a Vertical Shooter (Part I)

Vertical shooters are also known as Fixed Shooter.
A fixed shooter has players only able to control their two-dimensional position on the screen and sometimes the direction they are facing*
*Wikipedia
So, we will create a game using our super hero Pawel to kill dragons that are coming from one side of the screen.
Let's start.
- We need a sprite to make it walk, in this case I use a movieclip of Pawel and as he is a knight, the instance name is knight


On another layer, in the first frame of our timeline we need the following actionscript:
//---- variables ----
var steps:Number = 5;
var spriteX:Number = 265;
var spriteY:Number = 265;
//---- functions ----
function checkKeys() {
if (Key.isDown(Key.RIGHT)) {
spriteX += steps;
} else if (Key.isDown(Key.LEFT)) {
spriteX -= steps;
}
}
function updatePawel() {
knight._x = spriteX;
knight._y = spriteY;
}
this.onEnterFrame = function() {
checkKeys();
updatePawel();
};
Ok, our hero is moving from side to side on the screen but, can still move even outside of the stage!
we can animate the legs and the arms so it will look better and it will add the option of throwing arrows (we don't have arrows yet).


If we edit our movieclip, should have 3 layers; The arms and legs will be movieclips (inside of our movieclip Pawel) and will have their respective instance names.
So, let's update our script (first frame of the main timeline):
//---- variables ----
var steps:Number = 5;
var spriteX:Number = 265;
var spriteY:Number = 265;
//---- functions ----
function checkKeys() {
if (Key.isDown(Key.RIGHT) && spriteX<510) {
spriteX += steps;
knight.legs.play();
} else if (Key.isDown(Key.LEFT) && spriteX>40) {
spriteX -= steps;
knight.legs.play();
}
if (Key.isDown(Key.UP)) {
knight.arms.play();
}
}
function updatePawel() {
knight._x = spriteX;
knight._y = spriteY;
}
this.onEnterFrame = function() {
checkKeys();
updatePawel();
};

First we declare the variables, steps are the number of pixels our hero will move, spriteX and spriteY will help us to give value to the X and Y position of our hero.
The first function checks if we are pressing the keys that are making our hero to do things;
if (Key.isDown(Key.RIGHT) && spriteX<510){
spriteX += steps;
knight.legs.play();
}
means that only if we press the Right arrowKey and our hero is not outside of the stage, our hero will move to the right (remember, steps = 5 pixels) and the legs animation will play.
else if (Key.isDown(Key.LEFT) && spriteX>40) {
spriteX -= steps;
knight.legs.play();
}
same as above but in this case the conditional is if the Left arrowKey of our keyboard is pressed and the hero is not outside of the stage, the hero will move to the left by 5 pixels and the legs movieclip will play.
if (Key.isDown(Key.UP)) {
knight.arms.play();
}
If we press the Up arrowKey on our keyboard, the animation in our arms movieclip will play.
function updatePawel() {
knight._x = spriteX;
knight._y = spriteY;
}
This function is to telling flash that our hero will take the X and Y values of the variables spriteX and spriteY to change our heros position.
this.onEnterFrame = function() {
checkKeys();
updatePawel();
};
On real time, flash will be checking if we are pressing the keys or if our hero is moving.
Check the swf here

Next part of this "tutorial" coming soon

salut!

Thursday, January 05, 2006

La Cucaracha - The Game

Again an old .fla was the inspiration for this game; the best way of learning is practising and as I am learning Actionscript 2, changing the script of that old .fla was a good fun...
Hope you like it!
any comment, critics & suggestions are very welcomed!

LaCucaracha - The Game

http://overloadstudios.co.uk/birdflu/laCucaracha.html

Tuesday, January 03, 2006

Happy 2006

After almost a year I set up this blog for the first time, changing this and that and leaving it broken... I took again the keyboard and
here we go again!
Prosperous new year to everybody!

and because I like images... a dragon from my last game:



Salut!