#include #include "talloc.h" #include "sv.h" /* ** main entry */ int main() { gamePlay( MODE_PAL, 320, 240 ); // in PAL reframe to 256 in height } Font* fontB = NULL; u_char* label = NULL;//"Joyeuse Saint Valentin"; u_char* name = NULL;//"David"; void initGlobal() { u_char* src = (u_char*)TEXT; u_char* ptr = src; int len; fontB = createFont( FONTB, define_fontB ); len = 0; while ( *ptr && *ptr != '\n' && *ptr != '\r' ) { ptr++; len++; } label = (u_char*)malloc(len+1); memcpy( label, src, len ); label[len] = 0; while( *ptr == '\n' || *ptr == '\r' ) ptr++; src = ptr; len = 0; while ( *ptr && *ptr != '\n' && *ptr != '\r' ) { ptr++; len++; } name = (u_char*)malloc(len+1); memcpy( name, src, len ); name[len] = 0; } void removeGlobal() { releaseFont( fontB ); fontB = NULL; free( name ); free( label ); } // // fonctions called by the automation // GsBG* back1 = NULL; GsBG* back2 = NULL; GsBG* back3 = NULL; Sprite* heart = NULL; int r; int v; int b; int count; Text text; int len, pos; int offset; int X, Y, DX, DY; int changeStep( int step ) { if ( step == 0 ) { initGlobal(); return 1; } if ( step == -1 ) { removeGlobal(); return -1; } switch( step ) { case 1 : r = 0; v = 0; b = 0; setBackground( r,v,b ); back1 = addBGBitmap(HEART, -4, 0, 1, 5, BACK ); back2 = addBGBitmap(HEART, ELIPSE, A_B(7,5), 1, 5, BACK ); back3 = addBGBitmap(HEART, 0, 4, 1, 5, BACK ); count = 0; return 1; case 2 : count = 0; heart = addSprite( 64, 64, HEART ); changeSpriteLocation( heart, 200, 0 ); enableRotationScaling( heart, 1 ); return 2; case 3 : text = addText( fontB, "", 0, 20, LAYOUT2 ); len = strlen( label ); pos = 0; offset = 0; return 3; case 4 : // enableRotationScalingText(text,1); X = 200; Y = 0; DX = -4; DY = 4; pos = 0; removeBG( back3 ); removeBG( back1 ); return 4; case 5 : X-=24; Y+=8; return 5; case 6 : removeText( text ); text = NULL; count = 10; return 6; case 7 : count = 0; return 7; case 8 : { int w, h; text = addText( fontB, name, 0, 0, LAYOUT5 ); w = getTextWidth(text); h = getTextHeight(text); setTextLocation( text, (320 - w)/2, (240-h)/2 ); count = 0; return 8; } case 9 : removeText( text ); text = NULL; removeSprite( heart ); heart = NULL; removeBG( back2 ); noBackground(); return 1; case 10 : removeBG( back3 ); removeBG( back2 ); removeBG( back1 ); noBackground(); return 0; case 11 : removeSprite( heart ); heart = NULL; return 10; case 12 : removeText( text ); text = NULL; return 11; case 13 : if ( text ) removeText( text ); text = NULL; removeSprite( heart ); heart = NULL; removeBG( back2 ); noBackground(); return 0; } return step; } int performStep( int step, u_int Left, u_int Right ) { switch( step ) { // 0 global initialization // 1 main screen initialisation case 1 : if ( Left == PADselect ) return 10; r = (r+1)%256; v = (v+3)%256; b = (v+7)%256; setBackground( r,v,b ); count++; if ( count == 50*1 ) return 2; // 10 secondes break; case 2 : if ( Left == PADselect ) return 11; r = (r+1)%256; v = (v+3)%256; b = (v+7)%256; setBackground( r,v,b ); count++; if ( count%20 < 10 ) { changeSpriteScale( heart, (count%20)+10, (count%20)+10 ); } else { changeSpriteScale( heart, 20-(count%10), 20-(count%10) ); } if ( count == 50*1 ) return 3; // 1 secondes break; case 3 : if ( Left == PADselect ) return 12; r = (r+1)%256; v = (v+3)%256; b = (v+7)%256; setBackground( r,v,b ); count++; if ( count%20 < 10 ) { changeSpriteScale( heart, (count%20)+10, (count%20)+10 ); } else { changeSpriteScale( heart, 20-(count%10), 20-(count%10) ); } if ( pos < len && !offset ) { u_char buf[ 100 ]; int l1 = getTextWidth(text); int l2; pos++; memcpy( buf, label, pos ); buf[pos] = 0; text = changeText( text, buf ); l2 = getTextWidth(text); offset = l2 - l1; setTextLocation( text, 200 - l2 + offset ,20 ); } else if ( offset ) { offset--; setTextLocation( text, 200 - getTextWidth(text) + offset ,20 ); } else { return 4; } break; case 4 : if ( Left == PADselect ) return 13; r = (r+1)%256; v = (v+3)%256; b = (v+7)%256; setBackground( r,v,b ); count++; if ( count%20 < 10 ) { changeSpriteScale( heart, (count%20)+10, (count%20)+10 ); } else { changeSpriteScale( heart, 20-(count%10), 20-(count%10) ); } pos++; changeSpriteRotation( heart, pos%360 ); { if ( X+DX<64 && DX < 0 ) DX = -DX; if ( X+DX>256 && DX > 0 ) DX = -DX; if ( Y+DY<64 && DY < 0 ) DY = -DY; if ( Y+DY>176 && DY > 0 ) DY = -DY; Y += DY; X += DX; changeSpriteLocation( heart, X, Y ); } if ( pos == 50*10 ) return 5; // 10 secondes break; case 5 : if ( Left == PADselect ) return 13; r = (r+1)%256; v = (v+3)%256; b = (v+7)%256; setBackground( r,v,b ); count++; if ( pos%360 ) { pos++; changeSpriteRotation( heart, pos%360 ); } else if ( X > 0 || Y > 0 ) { if ( X > 0 ) X-=2; if ( X < 0 ) X = 0; if ( Y > 0 ) Y-=2; if ( Y < 0 ) Y = 0; changeSpriteLocation( heart, X+24, Y-8 ); } if ( pos%360 || X || Y || count%20 ) { if ( count%20 < 10 ) { changeSpriteScale( heart, (count%20)+10, (count%20)+10 ); } else { changeSpriteScale( heart, 20-(count%10), 20-(count%10) ); } } else { return 6; } break; case 6 : if ( Left == PADselect ) return 13; r = (r+1)%256; v = (v+3)%256; b = (v+7)%256; setBackground( r,v,b ); count++; if ( count < 45 ) { changeSpriteScale( heart, count, count ); } else { return 7; } break; case 7: if ( Left == PADselect ) return 13; count++; if ( count == 25 ) return 8; // 0,5 seconde break; case 8: if ( Left == PADselect ) return 13; count++; if ( count == 50*10 ) return 9; // 10 seconde break; } return step; } void putElementsOn( int layout , GsOT* ot ) { }