LS_Dracon Posted September 1, 2009 Share Posted September 1, 2009 (edited) Don't want to flood the tread with my wip sprites, but this animation was hard to do. Jaffar animation from the intro, all frames is here. Poor Jaffar, all he wants is some fun times with the princess. I think if he buy flowers the thing could be more easy. He not make sucess with women, The problem is women aren't atracted by guys with pink clothes. Edited September 1, 2009 by LS_Dracon Quote Link to comment Share on other sites More sharing options...
Thomas Jentzsch Posted September 1, 2009 Share Posted September 1, 2009 Jaffar animation from the intro, all frames is here. Poor Jaffar, all he wants is some fun times with the princess. I think if he buy flowers the thing could be more easy. He not make sucess with women, The problem is women aren't atracted by guys with pink clothes. This looks gorgeous. I wonder how you create those animations? Any tools you use? Maybe you could describe and even illustrate the process with an example animation? Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 1, 2009 Share Posted September 1, 2009 (edited) Sure. I don't like to copy, personally I preffer draw from scratch, but I'm trying to be most precise as possible. The trick I created now and it's very usefull, is a kind of axis under the sprites, this axis help me to move the pixels better. The process is - Run the game under DosBox emu, them recorder the screen as avi, then cut the sprites and paste into a bmp, clean background using photoshop and finally, using ms paint (for pixel drawing you don't need better) I draw frame by frame. You see I did the animation by steps, first I did the walking animation, then save each sprite as gif and create the animated gif, this is very usefull to know how the animation is going. I do some fixes, then create another animated gif to see if everthing is ok. Looks complicated but for me it's easy, I do this since end of 90's so I'm very familiar whit this process. Here's the example of Jaffar "sprite sheet" (all sprites in one image). Also you notice how many resolution I lost PS: this image contain the hourglass sprite too. Edited September 1, 2009 by LS_Dracon Quote Link to comment Share on other sites More sharing options...
Thomas Jentzsch Posted September 1, 2009 Share Posted September 1, 2009 So no autoscaling tools. How long do you need for each frame of an animation? On average. Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 1, 2009 Share Posted September 1, 2009 About 3 minutes per frame... I think all these frames I did in 2 hours. 1 hour yesterday (walking and stand pose), 1 today (the others). Like I said, when animated, I need retouch some pixels. Jaffar turn animation was the most hard do finish. I tried to scale down the sprites (the perfect value is 35%) but for me, this not help much, because first I need "clean" the scaled down sprite, removing wrong pixels, then convert to 2600 style. Is way faster for me already start on 2600 style from scratch, I think (and by the feedbacks), the result is good. Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 3, 2009 Share Posted September 3, 2009 (edited) One frame from jump animation require 12 pixels wide. There's no way to fit in 8 pixels, with good results. My suggestion is use 2x wide sprite only for this frame. Below you can check how it looks. The first sprite is original, red area is the over pixels. Second sprite is double wide. It lost resolution, but the frame is displayed very fast and I think there's no problem (hell it's Atari 2600). Another possibility, to use a missile, I think double wide is the best solution. The code is something like (on jumping code) : lda #0 ldx #5 ;Frame to be scaled cpx FrameNo ;Assuming there will be an animation frame counter, is frame number 5? bne SetSize ;No, A = 0, set to NUSIZ0 txa ;Set double wide (x = 5 = 00000101) SetSize sta NUSIZ0 Edited September 3, 2009 by LS_Dracon Quote Link to comment Share on other sites More sharing options...
GroovyBee Posted September 3, 2009 Share Posted September 3, 2009 One frame from jump animation require 12 pixels wide. There's no way to fit in 8 pixels, with good results. How about creating an animation showing both frames inserted into the jump sequence? Its difficult to visualise how it looks with the sprite on its own. Quote Link to comment Share on other sites More sharing options...
Thomas Jentzsch Posted September 4, 2009 Share Posted September 4, 2009 Or we could use two sprites and flicker if the other sprite is needed in the same row too? Quote Link to comment Share on other sites More sharing options...
cd-w Posted September 4, 2009 Share Posted September 4, 2009 (edited) One frame from jump animation require 12 pixels wide. There's no way to fit in 8 pixels, with good results. I anticipated this in the PoP kernel and so it draws a missile sprite on every line. The size of the missile can be modified (1, 2, 4, or 8 pixels wide) and the position shifted (up to 8 pixels in left or right) on each line. I previously used this technique to draw the bells in Hunchy 2, and it is described in this thread. I was intending to use this to extend the player and to draw the players sword. Chris Edited September 4, 2009 by cd-w Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 4, 2009 Share Posted September 4, 2009 I thought about possibility o use missile, but I did'n know your kernel support variable missile size. For this sprite the missile must be positioned in back of the player, because an impossible 1 bit combination if displayed in front (see the yellow pixels). Assuming the missile is always positioned in front. Quote Link to comment Share on other sites More sharing options...
cd-w Posted September 4, 2009 Share Posted September 4, 2009 For this sprite the missile must be positioned in back of the player, because an impossible 1 bit combination if displayed in front (see the yellow pixels). Assuming the missile is always positioned in front. I would prefer to use the missile rather than making the player double-width if possible. Unfortunately in your example there are several 3-pixel blocks at the back of the player that can't be displayed using the missile. The missile can only be resized to 1,2,4,or 8 pixels wide, so some reworking will be required. Incidentally, the sprites that you have posted are looking amazing! Chris Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 4, 2009 Share Posted September 4, 2009 (edited) The missile can only be resized to 1,2,4,or 8 pixels wide, so some reworking will be required. I know. I have plans to create one bin to test animation, and convert sprites to binnary. This kind of problem will be solved then. Here's how I can fix the problem in this sprite : PS: Chris, the kernel support ball object? Edited September 4, 2009 by LS_Dracon Quote Link to comment Share on other sites More sharing options...
Thomas Jentzsch Posted September 5, 2009 Share Posted September 5, 2009 Here's how I can fix the problem in this sprite : That might work. PS: Chris, the kernel support ball object? Even if, the ball would have to share color with the background graphics. Quote Link to comment Share on other sites More sharing options...
potatohead Posted September 5, 2009 Share Posted September 5, 2009 Thanks for sharing how you do the animation. That was really cool. Quote Link to comment Share on other sites More sharing options...
cd-w Posted September 5, 2009 Share Posted September 5, 2009 I know. I have plans to create one bin to test animation, and convert sprites to binary. This kind of problem will be solved then. Here's how I can fix the problem in this sprite That looks good. Having binary versions of the sprite animations will be very useful for putting them into the game. One of the main issues that I can see is ensuring that the jump distances are correct. PS: Chris, the kernel support ball object? The kernel does support the ball object, but only for switching on/off, not varying the size. I'm going to have another look at the kernel soon and see if any further optimisations are possible. Chris Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 5, 2009 Share Posted September 5, 2009 I asked about ball because I think to use this object as falling bricks. If ball is already used for the doors/gates, the flicker is required. Is not required changes in sizes, just an option for HMBL. Quote Link to comment Share on other sites More sharing options...
roland p Posted September 5, 2009 Share Posted September 5, 2009 The sprites look really good. I wonder how the main character will look in motion. I hope the animation will add some sense of extra resolution. Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 7, 2009 Share Posted September 7, 2009 (edited) Yesterday, when I get the first guardian sprites, I discovered one amazing thing : This game is like stop motion animation! Is hard to explan, let me try.... I'm not talking about how the animation frames was created. I'm talking about global timer for the animation and position changes. Let uses the example of Pitfall. If you press left or right the character obviously run. The animation and speed are the same. Let's say, if you press the button, the character run faster. A good programmer will bost up the timer for animation, to keep animation and speed synchronized. Here's the point! I have 2 distinct things : Animation and motion speed. Don't care the animation timer, if I change the speed, the animation keeps the same. The character will run far, but the animation will looks the same. On PoP there's not a motion speed! The position changes by animation frames, and it's uses a global timer. I notice the guardian changes the animation frames at exactly same time of the flames in torch. And the prince moves under this rule too. It's a trick created by Jordan Mechner to give a illusion of a movie. And this is the reason that PoP looks like a movie! Here's a graphical example of what I'm trying to say. You see Jaffar walking in two rows. There's 2 frames of animation (legs in, legs out). The first row is like a common game motion, every "game" frame the character moves 4 pixels, don't care what animation frame the character is. On second frame, he moves 4 pixels to right, but still in the first animation frame. On the second row display how the characters moves in prince of persia. Note like the first row, Jaffar start in point A (white line) and finish on point B (yellow line) and in both is needed 4 frames to reach point B. The "speed" are the same. But in this row, Jaffar only moves when the animation frame is changed. And in every changes, he "jump" 8 pixels, instead 4 like the first row. And in PoP this happen under a global timer rule. All characters, animation and position, changes at exactly same timer. Dude it's Stop Motion animation! Hats off for Jordan Mechner! So you think it's bad, because there's is a brocken fluence. But it's masked by the huge number of animation frames, turning the motion smooth. Every frame must have own X & Y coordinates. I have plans to test it, but let me finish the sprites, first. Edited September 7, 2009 by LS_Dracon Quote Link to comment Share on other sites More sharing options...
cd-w Posted September 7, 2009 Share Posted September 7, 2009 On PoP there's not a motion speed! The position changes by animation frames, and it's uses a global timer. I notice the guardian changes the animation frames at exactly same time of the flames in torch. And the prince moves under this rule too. It's a trick created by Jordan Mechner to give a illusion of a movie. And this is the reason that PoP looks like a movie! Yes, when you move the player you are basically selecting a sequence of animation frames to be played. These frames will continue until the end of the animation unless further input is received. Only certain sequences can be "interrupted" by further input, e.g. clinging onto an edge when falling. It is a nice way of doing things, but requires a lot more art effort than a normal game! Incidentally, I've begin to look at the PoP code again - it has been several years since I touched it and I've mostly forgotten how it works. I think I'll probably rewrite the kernel as I've learned a lot more about 2600 optimisation since I wrote it. Chris Quote Link to comment Share on other sites More sharing options...
roland p Posted September 7, 2009 Share Posted September 7, 2009 @LS_Dracon, So more work for you then. You have to define the positions of the sprites as well as how they look, right? Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 7, 2009 Share Posted September 7, 2009 (edited) Chris, the gravity also run under this rule. I've made a quick AVI demonstrate better what I'm trying to say. Note the prince animation and position is changed at sime time of the torch animation, using global timer. I don't know exactly the timer, but let's say every 5 tv frames, you change the animation and position, freeze the screen in 4 frames, then change the animation frame and position again. 5 frames / 60 = 12 frames per second, the game frame rate. Roland, yes! But I'm thinking how to implement this. I figure using 1 byte to send the X and Y coordinate, left nibble for X and right nibble for Y, I have 15 options for position shifting, enough. The problem is I need change between negative or positive (lef/right, up/down). I could set 1 byte for this, but reduce the position shift for at maximun 7 pixels. I need to see if there's an animation that move more than 7 pixels per frame (falling are the faster one I think), if not, I can use this. (The sprites are smaller than original, this means less pixels range to be movimented also). As all the changes happen at same time, is not required an individual timer for each object, turning the things a bit easier. Chris I could do this job if you want. Or... synchronized the animation and speed like a normal game, but the game will lost the "stop motion" looking. Edit : 1 byte per frame, if the run animation uses 6 frames, I need 6 bytes to move the character. It's a reasonable rom usage. I think I'll not require more than 150 bytes for all characters animation. PoPteste.zip Edited September 7, 2009 by LS_Dracon Quote Link to comment Share on other sites More sharing options...
cd-w Posted September 7, 2009 Share Posted September 7, 2009 Chris I could do this job if you want. Or... synchronized the animation and speed like a normal game, but the game will lost the "stop motion" looking. I think I understand what you are saying - I would like to keep the stop-motion feel if this is possible. At the moment the PoP code has a byte for each animation frame defined as follows: Bits 0-1 - X Offset Bits 2-3 - Y Offset Bits 4-5 - Frame Delay Bit 6 - Reverse Direction (Vertical) Bit 7 - Reverse Direction (Horizontal) This allows an offset of up to 2 pixels horizontally or vertically on each frame. However, as this data will be stored in ROM, this could easily be expanded to several bytes to give a greater range of offsets. Feel free to write the code for doing the animation if you like. I'm currently only looking at the kernel and mapping code. Chris Quote Link to comment Share on other sites More sharing options...
LS_Dracon Posted September 7, 2009 Share Posted September 7, 2009 (edited) In my discover, we don't need the frame delay, as everthing run at same timer %CXXX CYYY C = coordenates, 0 for positive, 1 for negative Ex: 0001 1010 = Move the player 1 pixels right, and 2 pixels to up. 1011 0000 = Move the player 3 pixels to left, and no vertical movement. Yes, I will like to do, let me finish the sprite drawing first Edited September 7, 2009 by LS_Dracon Quote Link to comment Share on other sites More sharing options...
cd-w Posted September 7, 2009 Share Posted September 7, 2009 (edited) In my discover, we don't need the frame delay, as everthing run at same timer %CXXX CYYY C = coordenates, 0 for positive, 1 for negative Ex: 0001 1010 = Move the player 1 pixels right, and 2 pixels to up. 1011 0000 = Move the player 3 pixels to left, and no vertical movement. Yes, I will like to do, let me finish the sprite drawing first This looks good to me - you are making great progress on the sprites! Incidentally, I'm curious which country are you based in - I'm guessing French-Canadian, or somewhere in South America (e.g. Brazil) but I could be wrong Chris Edited September 7, 2009 by cd-w Quote Link to comment Share on other sites More sharing options...
Thomas Jentzsch Posted September 7, 2009 Share Posted September 7, 2009 Here's a graphical example of what I'm trying to say. You see Jaffar walking in two rows. There's 2 frames of animation (legs in, legs out). The first row is like a common game motion, every "game" frame the character moves 4 pixels, don't care what animation frame the character is. On second frame, he moves 4 pixels to right, but still in the first animation frame. I agree, this looks much better. Else it would look like he is doing a "Moonwalk". I never noticed the overall syncing before, but your explanation makes complete sense. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.