super-tux-commit Mailing List for Super Tux (Page 102)
Brought to you by:
wkendrick
You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
(94) |
Apr
(500) |
May
(531) |
Jun
(196) |
Jul
(224) |
Aug
(193) |
Sep
(117) |
Oct
(115) |
Nov
(319) |
Dec
(97) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(19) |
Feb
|
Mar
(105) |
Apr
(41) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(6) |
2007 |
Jan
(1) |
Feb
(2) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(2) |
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(4) |
Jul
|
Aug
|
Sep
(7) |
Oct
(12) |
Nov
(26) |
Dec
(39) |
2009 |
Jan
(6) |
Feb
(15) |
Mar
(10) |
Apr
(25) |
May
(29) |
Jun
(21) |
Jul
(26) |
Aug
(8) |
Sep
(3) |
Oct
|
Nov
|
Dec
(10) |
2010 |
Jan
(5) |
Feb
(5) |
Mar
(2) |
Apr
|
May
(5) |
Jun
|
Jul
(1) |
Aug
(2) |
Sep
(2) |
Oct
(2) |
Nov
|
Dec
|
From: Tobias Gl??er <to...@us...> - 2004-03-27 00:05:49
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29056/src Added Files: mousecursor.cpp mousecursor.h Log Message: C++ port of Ricarod Cruz's menu-handling code patch. --- NEW FILE: mousecursor.h --- /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ // by Ricardo Cruz <ri...@ae...> #ifndef SUPERTUX_MOUSECURSOR_H #define SUPERTUX_MOUSECURSOR_H #include <string> #include "timer.h" #include "texture.h" #define MC_FRAME_PERIOD 800 // in ms #define MC_STATES_NB 3 enum { MC_NORMAL, MC_CLICK, MC_LINK }; class MouseCursor { public: MouseCursor(std::string cursor_file, int frames); ~MouseCursor(); int state(); void set_state(int nstate); void draw(int x, int y); private: int cur_state; int cur_frame, tot_frames; texture_type cursor; timer_type timer; }; #endif /*SUPERTUX_MOUSECURSOR_H*/ --- NEW FILE: mousecursor.cpp --- /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ // by Ricardo Cruz <ri...@ae...> #include "screen.h" #include "mousecursor.h" MouseCursor::MouseCursor(std::string cursor_file, int frames) { texture_load(&cursor,cursor_file.c_str(),USE_ALPHA); cur_state = MC_NORMAL; cur_frame = 0; tot_frames = frames; timer_init(&timer, false); timer_start(&timer,MC_FRAME_PERIOD); SDL_ShowCursor(SDL_DISABLE); } MouseCursor::~MouseCursor() { texture_free(&cursor); SDL_ShowCursor(SDL_ENABLE); } int MouseCursor::state() { return cur_state; } void MouseCursor::set_state(int nstate) { cur_state = nstate; } void MouseCursor::draw(int x, int y) { int w,h; w = cursor.w / tot_frames; h = cursor.h / MC_STATES_NB; if(timer_get_left(&timer) < 0 && tot_frames > 1) { cur_frame++; if(cur_frame++ >= tot_frames) cur_frame = 0; timer_start(&timer,MC_FRAME_PERIOD); } texture_draw_part(&cursor, w*cur_frame, h*cur_state , x, y, w, h); } |
From: Ingo R. <gr...@us...> - 2004-03-27 00:05:13
|
Update of /cvsroot/super-tux/supertux/data/images/tilesets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28932 Modified Files: supertux.stgt Added Files: bonus2-d.png Log Message: - added new deactivated bonus box --- NEW FILE: bonus2-d.png --- (This appears to be a binary file; contents omitted.) Index: supertux.stgt =================================================================== RCS file: /cvsroot/super-tux/supertux/data/images/tilesets/supertux.stgt,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- supertux.stgt 26 Mar 2004 23:45:12 -0000 1.6 +++ supertux.stgt 26 Mar 2004 23:54:11 -0000 1.7 @@ -294,7 +294,7 @@ (tile (id 84) (solid #t) - (images "box-empty.png")) + (images "bonus2-d.png")) (tile (id 85) (images "cloud-00.png")) |
From: Tobias Gl??er <to...@us...> - 2004-03-27 00:04:34
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28694/src Modified Files: Makefile.am badguy.cpp badguy.h collision.cpp collision.h gameloop.cpp leveleditor.cpp particlesystem.cpp player.cpp type.h Log Message: merged bad_guy patch from Matze Braun. (recycling Ricardo's stalactite patch and added mrbomb). Index: collision.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/collision.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- collision.h 22 Mar 2004 15:47:31 -0000 1.4 +++ collision.h 26 Mar 2004 23:53:31 -0000 1.5 @@ -19,10 +19,15 @@ { CO_BULLET, CO_BADGUY, - CO_BSOD, CO_PLAYER }; +enum CollisionType { + COLLISION_NORMAL, + COLLISION_BUMP, + COLLISION_SQUICH +}; + bool rectcollision(base_type* one, base_type* two); bool rectcollision_offset(base_type* one, base_type* two, float off_x, float off_y); void collision_swept_object_map(base_type* old, base_type* current); Index: Makefile.am =================================================================== RCS file: /cvsroot/super-tux/supertux/src/Makefile.am,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- Makefile.am 24 Mar 2004 22:08:29 -0000 1.12 +++ Makefile.am 26 Mar 2004 23:53:31 -0000 1.13 @@ -1,6 +1,6 @@ bin_PROGRAMS = supertux -supertux_SOURCES = badguy.cpp badguy.h bitmask.cpp bitmask.h button.cpp button.h collision.cpp collision.h configfile.cpp configfile.h defines.h gameloop.cpp gameloop.h globals.cpp globals.h high_scores.cpp high_scores.h intro.cpp intro.h level.cpp level.h leveleditor.cpp leveleditor.h lispreader.cpp lispreader.h menu.cpp menu.h particlesystem.cpp particlesystem.h physic.cpp physic.h player.cpp player.h scene.cpp scene.h screen.cpp screen.h setup.cpp setup.h sound.cpp sound.h special.cpp special.h supertux.cpp supertux.h text.cpp text.h texture.cpp texture.h timer.cpp timer.h title.cpp title.h type.cpp type.h world.cpp world.h worldmap.cpp worldmap.h tile.h tile.cpp +supertux_SOURCES = badguy.cpp badguy.h bitmask.cpp bitmask.h button.cpp button.h collision.cpp collision.h configfile.cpp configfile.h defines.h gameloop.cpp gameloop.h globals.cpp globals.h high_scores.cpp high_scores.h intro.cpp intro.h level.cpp level.h leveleditor.cpp leveleditor.h lispreader.cpp lispreader.h menu.cpp menu.h particlesystem.cpp particlesystem.h physic.cpp physic.h player.cpp player.h scene.cpp scene.h screen.cpp screen.h setup.cpp setup.h sound.cpp sound.h special.cpp special.h supertux.cpp supertux.h text.cpp text.h texture.cpp texture.h timer.cpp timer.h title.cpp title.h type.cpp type.h world.cpp world.h worldmap.cpp worldmap.h tile.h tile.cpp mousecursor.cpp mousecursor.h # EOF # noinst_HEADERS = Index: collision.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/collision.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- collision.cpp 25 Mar 2004 18:52:34 -0000 1.7 +++ collision.cpp 26 Mar 2004 23:53:31 -0000 1.8 @@ -250,10 +250,9 @@ // We have detected a collision and now call the collision // functions of the collided objects. if (tux.previous_base.y < tux.base.y && - tux.previous_base.y + tux.previous_base.height < bad_guys[i].base.y + bad_guys[i].base.height/2 && - bad_guys[i].kind != BAD_MONEY && bad_guys[i].mode != HELD) + tux.previous_base.y + tux.previous_base.height < bad_guys[i].base.y + bad_guys[i].base.height/2) { - bad_guys[i].collision(&tux, CO_PLAYER); + bad_guys[i].collision(&tux, CO_PLAYER, COLLISION_SQUICH); } else { Index: badguy.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/badguy.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- badguy.h 25 Mar 2004 11:36:05 -0000 1.15 +++ badguy.h 26 Mar 2004 23:53:31 -0000 1.16 @@ -22,10 +22,18 @@ #include "collision.h" /* Enemy modes: */ -#define NORMAL 0 -#define FLAT 1 -#define KICK 2 -#define HELD 3 +enum { + NORMAL=0, + FLAT, + KICK, + HELD, + + BOMB_TICKING, + BOMB_EXPLODE, + + STALACTITE_SHAKING, + STALACTITE_FALL +}; extern texture_type img_bsod_squished_left; extern texture_type img_bsod_squished_right; @@ -41,12 +49,19 @@ extern texture_type img_laptop_right[3]; extern texture_type img_money_left[2]; extern texture_type img_money_right[2]; +extern texture_type img_mrbomb_left[4]; +extern texture_type img_mrbomb_right[4]; +extern texture_type img_stalactite; +extern texture_type img_stalactite_broken; /* Bad guy kinds: */ enum BadGuyKind { BAD_BSOD, BAD_LAPTOP, - BAD_MONEY + BAD_MONEY, + BAD_MRBOMB, + BAD_BOMB, + BAD_STALACTITE }; BadGuyKind badguykind_from_string(const std::string& str); @@ -65,6 +80,8 @@ : kind(BAD_BSOD), x(0), y(0) {} }; +class Player; + /* Badguy type: */ class BadGuy { @@ -85,6 +102,13 @@ void action(); void draw(); + void collision(void* p_c_object, int c_object, + CollisionType type = COLLISION_NORMAL); + + private: + void fall(); + void remove_me(); + void action_bsod(); void draw_bsod(); @@ -94,7 +118,19 @@ void action_money(); void draw_money(); - void collision(void* p_c_object, int c_object); + void action_bomb(); + void draw_bomb(); + + void action_mrbomb(); + void draw_mrbomb(); + + void action_stalactite(); + void draw_stalactite(); + + void make_player_jump(Player* player); + void check_horizontal_bump(bool checkcliff = false); + void bump(); + void squich(Player* player); }; #endif /*SUPERTUX_BADGUY_H*/ Index: particlesystem.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/particlesystem.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- particlesystem.cpp 24 Mar 2004 22:24:38 -0000 1.1 +++ particlesystem.cpp 26 Mar 2004 23:53:31 -0000 1.2 @@ -82,7 +82,10 @@ particle->layer = i % 2; int snowsize = rand() % 3; particle->texture = &snowimages[snowsize]; - particle->speed = 0.01 + snowsize/50.0 + (rand()%(int)gravity/15.0); + do { + particle->speed = snowsize/60.0 + (float(rand()%10)/300.0); + } while(particle->speed < 0.01); + particle->speed *= gravity; particles.push_back(particle); } @@ -111,13 +114,13 @@ { texture_load(&cloudimage, datadir + "/images/shared/cloud.png", USE_ALPHA); - virtual_width = 5000.0; + virtual_width = 2000.0; // create some random clouds for(size_t i=0; i<15; ++i) { CloudParticle* particle = new CloudParticle; particle->x = rand() % int(virtual_width); - particle->y = rand() % int((float) screen->h * 0.3333); + particle->y = rand() % int(virtual_height); particle->layer = 0; particle->texture = &cloudimage; particle->speed = -float(250 + rand() % 200) / 1000.0; Index: leveleditor.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/leveleditor.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- leveleditor.cpp 25 Mar 2004 11:36:05 -0000 1.19 +++ leveleditor.cpp 26 Mar 2004 23:53:31 -0000 1.20 @@ -90,7 +90,7 @@ static int le_frame; static texture_type le_selection; static int done; -static char le_current_tile; +static unsigned int le_current_tile; static bool le_mouse_pressed[2]; static button_type le_save_level_bt; static button_type le_test_level_bt; @@ -382,7 +382,7 @@ le_level_changed = false; le_current_level = NULL; - le_current_tile = '.'; + le_current_tile = 0; le_mouse_pressed[LEFT] = false; le_mouse_pressed[RIGHT] = false; @@ -1086,7 +1086,7 @@ } button_event(&le_rubber_bt,&event); if(button_get_state(&le_rubber_bt) == BUTTON_CLICKED) - le_current_tile = '.'; + le_current_tile = 0; button_event(&le_select_mode_one_bt,&event); if(button_get_state(&le_select_mode_one_bt) == BUTTON_CLICKED) le_selection_mode = CURSOR; Index: player.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/player.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- player.cpp 25 Mar 2004 18:52:34 -0000 1.15 +++ player.cpp 26 Mar 2004 23:53:31 -0000 1.16 @@ -164,7 +164,7 @@ base.x += base.xm * frame_ratio; base.y += base.ym * frame_ratio; - + collision_swept_object_map(&old_base,&base); keep_in_bounds(); @@ -190,11 +190,9 @@ } } base.ym = physic_get_velocity(&vphysic); - } else { - /* Land: */ if (base.ym > 0) Index: badguy.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/badguy.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- badguy.cpp 25 Mar 2004 11:36:05 -0000 1.13 +++ badguy.cpp 26 Mar 2004 23:53:31 -0000 1.14 @@ -30,6 +30,10 @@ texture_type img_laptop_right[3]; texture_type img_money_left[2]; texture_type img_money_right[2]; +texture_type img_mrbomb_left[4]; +texture_type img_mrbomb_right[4]; +texture_type img_stalactite; +texture_type img_stalactite_broken; BadGuyKind badguykind_from_string(const std::string& str) { @@ -39,6 +43,10 @@ return BAD_LAPTOP; else if (str == "bsod") return BAD_BSOD; + else if (str == "mrbomb") + return BAD_MRBOMB; + else if (str == "stalactite") + return BAD_STALACTITE; else { printf("Couldn't convert badguy: %s\n", str.c_str()); @@ -59,6 +67,12 @@ case BAD_BSOD: return "bsod"; break; + case BAD_MRBOMB: + return "mrbomb"; + break; + case BAD_STALACTITE: + return "stalactite"; + break; default: return "bsod"; } @@ -74,13 +88,20 @@ kind = kind_; base.x = x; base.y = y; - base.xm = 1.3; + base.xm = -1.3; base.ym = 4.8; old_base = base; dir = LEFT; seen = false; timer_init(&timer, true); physic_init(&physic); + + if(kind == BAD_BOMB) { + timer_start(&timer, 1000); + mode = BOMB_TICKING; + // hack so that the bomb doesn't hurt until it expldes... + dying = DYING_SQUISHED; + } } void BadGuy::action_bsod() @@ -91,10 +112,7 @@ if (dying == DYING_NOT || dying == DYING_FALLING) { - if (dir == RIGHT) - base.x = base.x + base.xm * frame_ratio; - else if (dir == LEFT) - base.x = base.x - base.xm * frame_ratio; + base.x += base.xm * frame_ratio; } /* Move vertically: */ @@ -102,61 +120,21 @@ if (dying != DYING_FALLING) collision_swept_object_map(&old_base,&base); - if (base.y > screen->h) - bad_guys.erase(static_cast<std::vector<BadGuy>::iterator>(this)); - /* Bump into things horizontally: */ - if (!dying) - { - if (issolid( base.x, (int) base.y + 16)) - { - dir = RIGHT; - } - else if (issolid( base.x + base.width, (int) base.y + 16)) - { - dir = LEFT; - } - } - - /* Fall if we get off the ground: */ - if (dying != DYING_FALLING) - { - if (!issolid(base.x+16, base.y + 32)) - { - if(!physic_is_set(&physic)) - { - physic_set_state(&physic,PH_VT); - physic_set_start_vy(&physic,2.); - } + check_horizontal_bump(); - base.ym = physic_get_velocity(&physic); - } - else - { - /* Land: */ + fall(); - if (base.ym > 0) - { - base.y = (int)(base.y / 32) * 32; - base.ym = 0; - } - physic_init(&physic); - } - } - else + // Handle dying timer: + if (dying == DYING_SQUISHED) { - if(!physic_is_set(&physic)) - { - physic_set_state(&physic,PH_VT); - physic_set_start_vy(&physic,2.); - } - base.ym = physic_get_velocity(&physic); + /* Remove it if time's up: */ + if(!timer_check(&timer)) { + remove_me(); + return; + } } - - // BadGuy fall below the ground - if (base.y > screen->h) - bad_guys.erase(static_cast<std::vector<BadGuy>::iterator>(this)); } void BadGuy::action_laptop() @@ -167,10 +145,7 @@ if (dying == DYING_NOT || dying == DYING_FALLING) { - if (dir == RIGHT) - base.x = base.x + base.xm * frame_ratio; - else if (dir == LEFT) - base.x = base.x - base.xm * frame_ratio; + base.x += base.xm * frame_ratio; } } else if (mode == HELD) @@ -214,37 +189,79 @@ if (dying != DYING_FALLING) collision_swept_object_map(&old_base,&base); - if (base.y > screen->h) - bad_guys.erase(static_cast<std::vector<BadGuy>::iterator>(this)); - /* Bump into things horizontally: */ - /* Bump into things horizontally: */ if (!dying) { int changed = dir; - if (issolid( base.x, (int) base.y + 16)) - { - dir = RIGHT; - } - else if (issolid( base.x + base.width, (int) base.y + 16)) - { - dir = LEFT; - } + check_horizontal_bump(); if(mode == KICK && changed != dir) { - /* handle stereo sound */ - /* FIXME: In theory a badguy object doesn't know anything about player objects */ - if (tux.base.x > base.x) + /* handle stereo sound (number 10 should be tweaked...)*/ + if (base.x < scroll_x - 10) play_sound(sounds[SND_RICOCHET], SOUND_LEFT_SPEAKER); - else if (tux.base.x < base.x) + else if (base.x > scroll_x + 10) play_sound(sounds[SND_RICOCHET], SOUND_RIGHT_SPEAKER); else play_sound(sounds[SND_RICOCHET], SOUND_CENTER_SPEAKER); } + } + + fall(); + + /* Handle mode timer: */ + if (mode == FLAT && mode != HELD) + { + if(!timer_check(&timer)) + { + mode = NORMAL; + base.xm = 4; + } + } + else if (mode == KICK) + { + timer_check(&timer); + } +} +void BadGuy::check_horizontal_bump(bool checkcliff) +{ + if (dir == LEFT && issolid( base.x, (int) base.y + 16)) + { + dir = RIGHT; + base.xm = -base.xm; + return; + } + if (dir == RIGHT && issolid( base.x + base.width, (int) base.y + 16)) + { + dir = LEFT; + base.xm = -base.xm; + return; + } + + // don't check for cliffs when we're falling + if(!checkcliff) + return; + + if(dir == LEFT && !issolid(base.x, (int) base.y + base.height + 16)) + { + printf("Cliffcol left\n"); + dir = RIGHT; + base.xm = -base.xm; + return; } + if(dir == RIGHT && !issolid(base.x + base.width, + (int) base.y + base.height + 16)) + { + printf("Cliffcol right\n"); + dir = LEFT; + base.xm = -base.xm; + return; + } +} +void BadGuy::fall() +{ /* Fall if we get off the ground: */ if (dying != DYING_FALLING) { @@ -276,12 +293,29 @@ else { if(!physic_is_set(&physic)) - { + { physic_set_state(&physic,PH_VT); physic_set_start_vy(&physic,0.); } base.ym = physic_get_velocity(&physic); } + + // BadGuy fall below the ground + if (base.y > screen->h) { + remove_me(); + return; + } +} + +void BadGuy::remove_me() +{ + std::vector<BadGuy>::iterator i; + for(i = bad_guys.begin(); i != bad_guys.end(); ++i) { + if( & (*i) == this) { + bad_guys.erase(i); + return; + } + } } void BadGuy::action_money() @@ -292,8 +326,10 @@ if (dying != DYING_FALLING) collision_swept_object_map(&old_base,&base); - if (base.y > screen->h) - bad_guys.erase(static_cast<std::vector<BadGuy>::iterator>(this)); + if (base.y > screen->h) { + remove_me(); + return; + } if(physic_get_state(&physic) == -1) { @@ -303,19 +339,21 @@ if (dying != DYING_FALLING) { + if(issolid(base.x, base.y + 32)) { physic_set_state(&physic,PH_VT); physic_set_start_vy(&physic,6.); base.ym = physic_get_velocity(&physic); } + /* // matze: is this code needed? else if(issolid(base.x, base.y)) - { /* This works, but isn't the best solution imagineable */ + { // This works, but isn't the best solution imagineable physic_set_state(&physic,PH_VT); physic_set_start_vy(&physic,0.); base.ym = physic_get_velocity(&physic); ++base.y; - } + }*/ else { base.ym = physic_get_velocity(&physic); @@ -332,6 +370,65 @@ } } +void BadGuy::action_mrbomb() +{ + if(mode == NORMAL) { + base.x += base.xm * frame_ratio; + } + + /* Move vertically: */ + base.y += base.ym * frame_ratio; + + if (dying != DYING_FALLING) + collision_swept_object_map(&old_base,&base); + + check_horizontal_bump(true); + fall(); +} + +void BadGuy::action_bomb() +{ + // eventually fall down + base.y += base.ym * frame_ratio; + collision_swept_object_map(&old_base,&base); + fall(); + + if(!timer_check(&timer)) { + if(mode == BOMB_TICKING) { + mode = BOMB_EXPLODE; + dying = DYING_NOT; // now the bomb hurts + timer_start(&timer, 1000); + } else if(mode == BOMB_EXPLODE) { + remove_me(); + return; + } + } +} + +void BadGuy::action_stalactite() +{ + if(mode == NORMAL) { + if(tux.base.x + 32 > base.x - 40 && tux.base.x < base.x + 32 + 40) { + timer_start(&timer, 800); + mode = STALACTITE_SHAKING; + } + } if(mode == STALACTITE_SHAKING) { + base.x = old_base.x + (rand() % 6) - 3; // TODO this could be done nicer... + if(!timer_check(&timer)) { + mode = STALACTITE_FALL; + } + } else if(mode == STALACTITE_FALL) { + base.y += base.ym * frame_ratio; + /* Destroy if collides land */ + if(issolid(base.x+16, base.y+32)) + { + timer_start(&timer, 3000); + dying = DYING_SQUISHED; + mode = FLAT; + } + } +} + void BadGuy::action() { @@ -344,41 +441,32 @@ break; case BAD_LAPTOP: - action_bsod(); + action_laptop(); break; case BAD_MONEY: action_money(); break; - } - } - /* Handle mode timer: */ - if (mode == FLAT && mode != HELD) - { - if(!timer_check(&timer)) - { - mode = NORMAL; - base.xm = 4; - } - } - else if (mode == KICK) - { - timer_check(&timer); - } + case BAD_MRBOMB: + action_mrbomb(); + break; + + case BAD_BOMB: + action_bomb(); + break; - // Handle dying timer: - if (dying == DYING_SQUISHED) - { - /* Remove it if time's up: */ - if(!timer_check(&timer)) - bad_guys.erase(static_cast<std::vector<BadGuy>::iterator>(this)); + case BAD_STALACTITE: + action_stalactite(); + break; + + } } // Remove if it's far off the screen: if (base.x < scroll_x - OFFSCREEN_DISTANCE) { - bad_guys.erase(static_cast<std::vector<BadGuy>::iterator>(this)); + remove_me(); return; } else /* !seen */ @@ -392,154 +480,103 @@ void BadGuy::draw_bsod() { - /* --- BLUE SCREEN OF DEATH MONSTER: --- */ - if (dying == DYING_NOT) - { - /* Alive: */ - if (dir == LEFT) - { - texture_draw(&img_bsod_left[(global_frame_counter / 5) % 4], - base.x - scroll_x, - base.y); - } - else - { - texture_draw(&img_bsod_right[(global_frame_counter / 5) % 4], - base.x - scroll_x, - base.y); - } - } - else if (dying == DYING_FALLING) - { - /* Falling: */ + texture_type* texture = 0; + float y = base.y; + if(dying == DYING_NOT) { + size_t frame = (global_frame_counter / 5) % 4; + texture = (dir == LEFT) ? &img_bsod_left[frame] : &img_bsod_right[frame]; + } else if(dying == DYING_FALLING) { + texture = (dir == LEFT) ? &img_bsod_falling_left : &img_bsod_falling_right; + } else if(dying == DYING_SQUISHED) { + texture = (dir == LEFT) + ? &img_bsod_squished_left : &img_bsod_squished_right; + y += 24; + } + + texture_draw(texture, base.x - scroll_x, y); +} - if (dir == LEFT) - { - texture_draw(&img_bsod_falling_left, - base.x - scroll_x, - base.y); - } +void +BadGuy::draw_laptop() +{ + texture_type* texture; + size_t frame = (global_frame_counter / 5) % 3; + + if(dying == DYING_NOT) { + if(mode == NORMAL) { + if(dir == LEFT) + texture = &img_laptop_left[frame]; else - { - texture_draw(&img_bsod_falling_right, - base.x - scroll_x, - base.y); - } + texture = &img_laptop_right[frame]; + } else { + texture = (dir == LEFT) ? &img_laptop_flat_left : &img_laptop_flat_right; } - else if (dying == DYING_SQUISHED) - { - /* Dying - Squished: */ + } else { + texture = (dir == LEFT) + ? &img_laptop_falling_left : &img_laptop_falling_right; + } - if (dir == LEFT) - { - texture_draw(&img_bsod_squished_left, - base.x - scroll_x, - base.y + 24); - } - else - { - texture_draw(&img_bsod_squished_right, - base.x - scroll_x, - base.y + 24); - } - } + texture_draw(texture, base.x - scroll_x, base.y); } -void BadGuy::draw_laptop() +void +BadGuy::draw_money() { - /* --- LAPTOP MONSTER: --- */ - if (dying == DYING_NOT) - { - /* Alive: */ + texture_type* texture; + size_t frame = (base.ym != 300) ? 0 : 1; - if (mode == NORMAL) - { - /* Not flat: */ - if (dir == LEFT) - { - texture_draw(&img_laptop_left[(global_frame_counter / 5) % 3], - base.x - scroll_x, - base.y); - } - else - { - texture_draw(&img_laptop_right[(global_frame_counter / 5) % 3], - base.x - scroll_x, - base.y); - } - } - else - { - /* Flat: */ + if(tux.base.x + tux.base.width < base.x) { + texture = &img_money_left[frame]; + } else { + texture = &img_money_right[frame]; + } - if (dir == LEFT) - { - texture_draw(&img_laptop_flat_left, - base.x - scroll_x, - base.y); - } - else - { - texture_draw(&img_laptop_flat_right, - base.x - scroll_x, - base.y); - } - } - } - else if (dying == DYING_FALLING) - { - /* Falling: */ + texture_draw(texture, base.x - scroll_x, base.y); +} + +void +BadGuy::draw_mrbomb() +{ + texture_type* texture; + size_t frame = (global_frame_counter/5) % 4; - if (dir == LEFT) - { - texture_draw(&img_laptop_falling_left, - base.x - scroll_x, - base.y); - } - else - { - texture_draw(&img_laptop_falling_right, - base.x - scroll_x, - base.y); - } - } + if(dir == LEFT) + texture = &img_mrbomb_left[frame]; + else + texture = &img_mrbomb_right[frame]; + + texture_draw(texture, base.x - scroll_x, base.y); } -void BadGuy::draw_money() +void +BadGuy::draw_bomb() { - if (base.ym != 300 /* > -16*/) - { - if (dir == LEFT) - { - texture_draw(&img_money_left[0], - base.x - scroll_x, - base.y); - } - else - { - texture_draw(&img_money_right[0], - base.x - scroll_x, - base.y); - } - } + texture_type* texture; + + // TODO add real bomb graphics + if(mode == BOMB_TICKING) { + texture = &img_bsod_squished_right; + } else { + texture = &img_bsod_squished_left; + } + + texture_draw(texture, base.x - scroll_x, base.y); +} + +void +BadGuy::draw_stalactite() +{ + texture_type* texture; + if(mode != FLAT) + texture = &img_stalactite; else - { - if (dir == LEFT) - { - texture_draw(&img_money_left[1], - base.x - scroll_x, - base.y); - } - else - { - texture_draw(&img_money_right[1], - base.x - scroll_x, - base.y); - } - } + texture = &img_stalactite_broken; + + texture_draw(texture, base.x - scroll_x, base.y); } -void BadGuy::draw() +void +BadGuy::draw() { // Don't try to draw stuff that is outside of the screen if (base.x > scroll_x - 32 && @@ -559,22 +596,120 @@ draw_money(); break; - default: - puts("Unknown badguy type"); + case BAD_MRBOMB: + draw_mrbomb(); + break; + + case BAD_BOMB: + draw_bomb(); + break; + + case BAD_STALACTITE: + draw_stalactite(); break; } } } void -BadGuy::collision(void *p_c_object, int c_object) +BadGuy::bump() +{ + if(kind == BAD_BSOD || kind == BAD_LAPTOP || kind == BAD_BOMB) { + dying = DYING_FALLING; + base.ym = -8; + play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER); + } +} + +void +BadGuy::make_player_jump(Player* player) +{ + physic_set_state(&player->vphysic,PH_VT); + physic_set_start_vy(&player->vphysic,2.); + player->base.y = base.y - player->base.height - 1; +} + +void +BadGuy::squich(Player* player) +{ + if(kind == BAD_MRBOMB) { + // mrbomb transforms into a bomb now + add_bad_guy(base.x, base.y, BAD_BOMB); + + make_player_jump(player); + add_score(base.x - scroll_x, base.y, 50 * score_multiplier); + play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER); + score_multiplier++; + + remove_me(); + return; + + } else if(kind == BAD_BSOD) { + dying = DYING_SQUISHED; + timer_start(&timer,4000); + + make_player_jump(player); + + add_score(base.x - scroll_x, base.y, 50 * score_multiplier); + play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER); + score_multiplier++; + return; + + } else if (kind == BAD_LAPTOP) { + if (mode == NORMAL || mode == KICK) + { + /* Flatten! */ + play_sound(sounds[SND_STOMP], SOUND_CENTER_SPEAKER); + mode = FLAT; + base.xm = 4; + + timer_start(&timer, 4000); + } else if (mode == FLAT) { + /* Kick! */ + play_sound(sounds[SND_KICK], SOUND_CENTER_SPEAKER); + + if (player->base.x < base.x + (base.width/2)) + dir = RIGHT; + else + dir = LEFT; + + base.xm = 5; + mode = KICK; + + timer_start(&timer,5000); + } + + make_player_jump(player); + + add_score(base.x - scroll_x, + base.y, + 25 * score_multiplier); + score_multiplier++; + return; + } +} + +void +BadGuy::collision(void *p_c_object, int c_object, CollisionType type) { BadGuy* pbad_c = NULL; - Player* pplayer_c = NULL; + + if(type == COLLISION_BUMP) { + bump(); + return; + } + if(type == COLLISION_SQUICH) { + Player* player = static_cast<Player*>(p_c_object); + squich(player); + return; + } switch (c_object) { case CO_BULLET: + if(kind == BAD_BOMB || kind == BAD_STALACTITE) + return; + dying = DYING_FALLING; base.ym = -8; @@ -619,72 +754,7 @@ pbad_c->base.y, 100); } break; - - case CO_PLAYER: - pplayer_c = static_cast<Player*>(p_c_object); - if(kind != BAD_MONEY) - { - if (kind == BAD_BSOD) - { - dying = DYING_SQUISHED; - timer_start(&timer,4000); - physic_set_state(&pplayer_c->vphysic,PH_VT); - physic_set_start_vy(&pplayer_c->vphysic,2.); - pplayer_c->base.y = base.y - pplayer_c->base.height - 1; - - add_score(base.x - scroll_x, base.y, - 50 * score_multiplier); - - play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER); - } - else if (kind == BAD_LAPTOP) - { - - if (mode == NORMAL || mode == KICK) - { - /* Flatten! */ - - play_sound(sounds[SND_STOMP], SOUND_CENTER_SPEAKER); - mode = FLAT; - base.xm = 4; - - timer_start(&timer,10000); - - physic_set_state(&pplayer_c->vphysic,PH_VT); - physic_set_start_vy(&pplayer_c->vphysic,2.); - pplayer_c->base.y = base.y - pplayer_c->base.height - 1; - } - else if (mode == FLAT) - { - /* Kick! */ - play_sound(sounds[SND_KICK], SOUND_CENTER_SPEAKER); - - if (pplayer_c->base.x < base.x + (base.width/2)) - dir = RIGHT; - else - dir = LEFT; - - base.xm = 5; - mode = KICK; - - timer_start(&timer,5000); - } - - physic_set_state(&pplayer_c->vphysic,PH_VT); - physic_set_start_vy(&pplayer_c->vphysic,2.); - pplayer_c->base.y = base.y - pplayer_c->base.height - 1; - - add_score(base.x - scroll_x, - base.y, - 25 * score_multiplier); - - /* play_sound(sounds[SND_SQUISH]); */ - } - score_multiplier++; - } - break; } - } // EOF // Index: type.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/type.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- type.h 23 Mar 2004 17:25:15 -0000 1.12 +++ type.h 26 Mar 2004 23:53:31 -0000 1.13 @@ -27,6 +27,7 @@ float height; }; + struct string_list_type { int num_items; Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- gameloop.cpp 25 Mar 2004 19:02:04 -0000 1.31 +++ gameloop.cpp 26 Mar 2004 23:53:31 -0000 1.32 @@ -110,7 +110,6 @@ void activate_particle_systems(void) { - printf("PSys: %s\n", current_level.particle_system.c_str()); if(current_level.particle_system == "clouds") { particle_systems.push_back(new CloudParticleSystem); @@ -1145,7 +1144,21 @@ "/images/shared/bag-right-1.png", USE_ALPHA); + /* Mr. Bomb */ + for(int i=0; i<4; ++i) { + char num[4]; + snprintf(num, 4, "%d", i); + texture_load(&img_mrbomb_left[i], + datadir + "/images/shared/mrbomb-left-" + num + ".png", USE_ALPHA); + texture_load(&img_mrbomb_right[i], + datadir + "/images/shared/mrbomb-right-" + num + ".png", USE_ALPHA); + } + /* stalactite */ + texture_load(&img_stalactite, + datadir + "/images/shared/stalactite.png", USE_ALPHA); + texture_load(&img_stalactite_broken, + datadir + "/images/shared/stalactite-broken.png", USE_ALPHA); /* Upgrades: */ @@ -1272,6 +1285,14 @@ texture_free(&img_money_right[i]); } + for(i = 0; i < 4; i++) { + texture_free(&img_mrbomb_left[i]); + texture_free(&img_mrbomb_right[i]); + } + + texture_free(&img_stalactite); + texture_free(&img_stalactite_broken); + texture_free(&img_box_full); texture_free(&img_box_empty); @@ -1625,13 +1646,7 @@ if (bad_guys[i].base.x >= x - 32 && bad_guys[i].base.x <= x + 32 && bad_guys[i].base.y >= y - 16 && bad_guys[i].base.y <= y + 16) { - if (bad_guys[i].kind == BAD_BSOD || - bad_guys[i].kind == BAD_LAPTOP) - { - bad_guys[i].dying = DYING_FALLING; - bad_guys[i].base.ym = -8; - play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER); - } + bad_guys[i].collision(&tux, CO_PLAYER, COLLISION_BUMP); } } |
From: Tobias Gl??er <to...@us...> - 2004-03-27 00:02:41
|
Update of /cvsroot/super-tux/supertux/data/images/shared In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28378/data/images/shared Added Files: mrbomb-left-0.png mrbomb-left-1.png mrbomb-left-2.png mrbomb-left-3.png mrbomb-right-0.png mrbomb-right-1.png mrbomb-right-2.png mrbomb-right-3.png stalactite-broken.png stalactite.png Log Message: initial --- NEW FILE: stalactite-broken.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-left-0.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-left-1.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-left-2.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: stalactite.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-left-3.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-right-2.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-right-3.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-right-0.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: mrbomb-right-1.png --- (This appears to be a binary file; contents omitted.) |
From: Ingo R. <gr...@us...> - 2004-03-26 23:56:19
|
Update of /cvsroot/super-tux/supertux/data/images/tilesets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27270 Modified Files: supertux.stgt Added Files: bonus2-1.png bonus2-2.png bonus2-3.png bonus2-4.png bonus2-5.png Log Message: - added new bonus block Index: supertux.stgt =================================================================== RCS file: /cvsroot/super-tux/supertux/data/images/tilesets/supertux.stgt,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- supertux.stgt 26 Mar 2004 22:30:21 -0000 1.5 +++ supertux.stgt 26 Mar 2004 23:45:12 -0000 1.6 @@ -82,7 +82,19 @@ (solid #f)) (tile (id 26) - (images "bonus1.png") + (images "bonus2-1.png" + "bonus2-2.png" + "bonus2-3.png" + "bonus2-4.png" + "bonus2-5.png" + "bonus2-4.png" + "bonus2-3.png" + "bonus2-2.png" + "bonus2-1.png" + "bonus2-1.png" + "bonus2-1.png" + ) + (anim-speed 50) (solid #t) (fullbox #t) (next-tile 84) --- NEW FILE: bonus2-5.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: bonus2-4.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: bonus2-1.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: bonus2-3.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: bonus2-2.png --- (This appears to be a binary file; contents omitted.) |
From: Tobias Gl??er <to...@us...> - 2004-03-26 23:30:36
|
Update of /cvsroot/super-tux/supertux/data/levels/default In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22356/data/levels/default Modified Files: level4.stl Log Message: particle_system changed to clouds Index: level4.stl =================================================================== RCS file: /cvsroot/super-tux/supertux/data/levels/default/level4.stl,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- level4.stl 26 Mar 2004 19:03:38 -0000 1.2 +++ level4.stl 26 Mar 2004 23:19:34 -0000 1.3 @@ -11,7 +11,7 @@ (bkgd_blue 140) (time 190) (gravity 10.0) - (particle_system "") + (particle_system "clouds") (theme "antarctica") (interactive-tm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 77 83 102 104 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
From: Ingo R. <gr...@us...> - 2004-03-26 22:41:23
|
Update of /cvsroot/super-tux/supertux/data/images/tilesets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12303 Modified Files: supertux.stgt Log Message: - added more bricks Index: supertux.stgt =================================================================== RCS file: /cvsroot/super-tux/supertux/data/images/tilesets/supertux.stgt,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- supertux.stgt 25 Mar 2004 16:38:46 -0000 1.4 +++ supertux.stgt 26 Mar 2004 22:30:21 -0000 1.5 @@ -202,9 +202,9 @@ (tile (id 62) (images "block11.png") (solid #t)) - ; (tile (id 63) - ; (images "backgroundtile1.png") - ; (solid #t)) + (tile (id 63) + (images "backgroundtile1.png") + (solid #t)) (tile (id 64) (images "grey.png") (solid #t)) @@ -246,16 +246,15 @@ (images "waves-0.png" "waves-1.png" "waves-2.png") (anim-speed 25)) + ;; Normal brick (tile (id 77) (images "brick0.png") (brick #t) - (data 1) (next-tile 0) (solid #t)) (tile (id 78) (images "brick1.png") (brick #t) - (data 1) (next-tile 0) (solid #t)) @@ -317,4 +316,21 @@ (fullbox #t) (data 3) (next-tile 84)) + + ;; Brick with bonus content + (tile (id 104) + (images "brick0.png") + (brick #t) + (data 1) + (next-tile 84) + (solid #t)) + + ;; Brick with bonus content + (tile (id 105) + (images "brick1.png") + (brick #t) + (data 1) + (next-tile 84) + (solid #t)) + ) \ No newline at end of file |
From: Tobias Gl??er <to...@us...> - 2004-03-26 22:19:14
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7931/src Modified Files: title.cpp Log Message: tux isn't jumping like on drugs anymore in the demo Index: title.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/title.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- title.cpp 26 Mar 2004 21:39:45 -0000 1.12 +++ title.cpp 26 Mar 2004 22:08:12 -0000 1.13 @@ -78,6 +78,9 @@ string_list_type level_subsets; st_subset subset; level_subsets = dsubdirs("/levels", "info"); + timer_type random_timer; + timer_init(&random_timer, true); + bool walking = true; Player titletux; titletux.init(); st_pause_ticks_init(); @@ -88,7 +91,7 @@ activate_particle_systems(); /* Lower the gravity that tux doesn't jump to hectically through the demo */ gravity = 5; - + /* Reset menu variables */ menu_reset(); Menu::set_current(main_menu); @@ -115,17 +118,18 @@ load_hs(); update_time = st_get_ticks(); - + timer_start(&random_timer, rand() % 2000 + 2000); + while (!done && !quit) { - + /* Calculate the movement-factor */ frame_ratio = ((double)(update_time-last_update_time))/((double)FRAME_RATE); if(frame_ratio > 1.5) /* Quick hack to correct the unprecise CPU clocks a little bit. */ frame_ratio = 1.5 + (frame_ratio - 1.5) * 0.85; /* Lower the frame_ratio that Tux doesn't jump to hectically throught the demo. */ frame_ratio /= 2; - + /* Handle events: */ while (SDL_PollEvent(&event)) @@ -164,7 +168,7 @@ menuaction = MENU_ACTION_HIT; } } - + /* Draw the background: */ draw_background(); @@ -195,17 +199,30 @@ global_frame_counter++; titletux.key_event(SDLK_RIGHT,DOWN); - titletux.key_event(SDLK_UP,DOWN); - if(current_level.width * 32 - 320 < titletux.base.x) - { - titletux.base.x = 160; - scroll_x = 0; - } + if(timer_check(&random_timer)) + { + if(walking) + titletux.key_event(SDLK_UP,UP); + else + titletux.key_event(SDLK_UP,DOWN); + } + else + { + timer_start(&random_timer, rand() % 3000 + 3000); + walking = !walking; + } + + if(current_level.width * 32 - 320 < titletux.base.x) + { + titletux.base.x = 160; + scroll_x = 0; + } + titletux.action(); titletux.draw(); - + /* DEMO end */ /* Draw the high score: */ @@ -319,13 +336,13 @@ { process_save_load_game_menu(false); } - + flipscreen(); /* Set the time of the last update and the time of the current update */ last_update_time = update_time; update_time = st_get_ticks(); - + /* Pause: */ frame++; SDL_Delay(25); |
From: Tobias Gl??er <to...@us...> - 2004-03-26 21:50:47
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1264/src Modified Files: title.cpp Log Message: quick fix for bug introduced by the last commit Index: title.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/title.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- title.cpp 26 Mar 2004 21:24:03 -0000 1.11 +++ title.cpp 26 Mar 2004 21:39:45 -0000 1.12 @@ -39,6 +39,9 @@ #include "player.h" #include "math.h" +void loadshared(void); +void activate_particle_systems(void); + static texture_type bkg_title, img_choose_subset, anim1, anim2; static SDL_Event event; static SDLKey key; @@ -66,8 +69,6 @@ texture_draw(&anim2, 560, 270); } -void loadshared(void); -void activate_particle_systems(void); /* --- TITLE SCREEN --- */ int title(void) @@ -332,7 +333,6 @@ } /* Free surfaces: */ - level_free(¤t_level); texture_free(&bkg_title); texture_free(&anim1); texture_free(&anim2); |
From: Tobias Gl??er <to...@us...> - 2004-03-26 21:35:06
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29895/src Modified Files: title.cpp Log Message: added demo to make SuperTux looking nice from the start ;) Index: title.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/title.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- title.cpp 24 Mar 2004 13:52:34 -0000 1.10 +++ title.cpp 26 Mar 2004 21:24:03 -0000 1.11 @@ -35,11 +35,16 @@ #include "level.h" #include "gameloop.h" #include "leveleditor.h" +#include "scene.h" +#include "player.h" +#include "math.h" static texture_type bkg_title, img_choose_subset, anim1, anim2; static SDL_Event event; static SDLKey key; -static int quit, frame, pict, i; +static int frame, pict, i; +static unsigned int last_update_time; +static unsigned int update_time; void display_credits(); @@ -61,6 +66,8 @@ texture_draw(&anim2, 560, 270); } +void loadshared(void); +void activate_particle_systems(void); /* --- TITLE SCREEN --- */ int title(void) @@ -70,7 +77,17 @@ string_list_type level_subsets; st_subset subset; level_subsets = dsubdirs("/levels", "info"); + Player titletux; + titletux.init(); + st_pause_ticks_init(); + st_pause_ticks_stop(); + level_load(¤t_level, (datadir + "/levels/misc/menu.stl").c_str()); + loadshared(); + activate_particle_systems(); + /* Lower the gravity that tux doesn't jump to hectically through the demo */ + gravity = 5; + /* Reset menu variables */ menu_reset(); Menu::set_current(main_menu); @@ -94,11 +111,20 @@ /* Draw the title background: */ texture_draw_bg(&bkg_title); - load_hs(); + update_time = st_get_ticks(); + while (!done && !quit) { + + /* Calculate the movement-factor */ + frame_ratio = ((double)(update_time-last_update_time))/((double)FRAME_RATE); + if(frame_ratio > 1.5) /* Quick hack to correct the unprecise CPU clocks a little bit. */ + frame_ratio = 1.5 + (frame_ratio - 1.5) * 0.85; + /* Lower the frame_ratio that Tux doesn't jump to hectically throught the demo. */ + frame_ratio /= 2; + /* Handle events: */ while (SDL_PollEvent(&event)) @@ -137,16 +163,57 @@ menuaction = MENU_ACTION_HIT; } } - + /* Draw the background: */ draw_background(); + /* DEMO begin */ + /* update particle systems */ + std::vector<ParticleSystem*>::iterator p; + for(p = particle_systems.begin(); p != particle_systems.end(); ++p) + { + (*p)->simulate(frame_ratio); + } + + /* Draw particle systems (background) */ + for(p = particle_systems.begin(); p != particle_systems.end(); ++p) + { + (*p)->draw(scroll_x, 0, 0); + } + + /* Draw interactive tiles: */ + + for (int y = 0; y < 15; ++y) + { + for (int x = 0; x < 21; ++x) + { + drawshape(32*x - fmodf(scroll_x, 32), y * 32, + current_level.ia_tiles[(int)y][(int)x + (int)(scroll_x / 32)]); + } + } + + global_frame_counter++; + titletux.key_event(SDLK_RIGHT,DOWN); + titletux.key_event(SDLK_UP,DOWN); + + if(current_level.width * 32 - 320 < titletux.base.x) + { + titletux.base.x = 160; + scroll_x = 0; + } + + titletux.action(); + titletux.draw(); + + /* DEMO end */ + /* Draw the high score: */ sprintf(str, "High score: %d", hs_score); text_drawf(&gold_text, str, 0, -40, A_HMIDDLE, A_BOTTOM, 1); sprintf(str, "by %s", hs_name); text_drawf(&gold_text, str, 0, -20, A_HMIDDLE, A_BOTTOM, 1); + /* Don't draw menu, if quit is true */ if(show_menu && !quit) menu_process_current(); @@ -251,16 +318,21 @@ { process_save_load_game_menu(false); } - + flipscreen(); + /* Set the time of the last update and the time of the current update */ + last_update_time = update_time; + update_time = st_get_ticks(); + /* Pause: */ frame++; - SDL_Delay(50); + SDL_Delay(25); } /* Free surfaces: */ + level_free(¤t_level); texture_free(&bkg_title); texture_free(&anim1); texture_free(&anim2); |
From: Tobias Gl??er <to...@us...> - 2004-03-26 21:31:43
|
Update of /cvsroot/super-tux/supertux/data/levels/misc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29163/data/levels/misc Added Files: menu.stl Log Message: demo level created by Ingo Ruhnke --- NEW FILE: menu.stl --- ;; Generated by Windstille Editor (supertux-level (version 1) (name "Hello World") (width 500) (height 15) (background "arctis.png") (music "Mortimers_chipdisko.mod") (bkgd_red 150) (bkgd_green 200) (bkgd_blue 255) (time 500) (gravity 10) (particle_system "snow") (theme "antarctica") (interactive-tm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 78 78 78 78 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 0 0 0 0 0 0 0 0 0 40 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 36 36 36 36 36 36 36 36 36 36 13 14 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 26 28 26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 28 28 28 28 28 28 28 28 28 28 29 0 0 0 27 28 28 28 28 28 28 28 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 36 36 36 36 36 36 36 10 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 26 28 28 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 8 8 9 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 36 36 36 36 36 10 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 14 14 14 14 15 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 14 14 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 29 0 0 0 0 0 0 0 0 27 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 33 33 33 33 33 33 33 33 33 33 33 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 41 36 10 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 11 11 11 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 11 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 28 28 28 28 28 28 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 26 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 37 37 37 37 37 37 37 37 37 37 37 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 36 10 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 8 22 11 11 11 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 28 28 28 29 0 0 0 0 0 0 0 0 0 7 8 8 22 11 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 41 41 41 41 41 41 41 41 41 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 36 10 11 12 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 26 0 0 0 26 0 0 0 0 0 0 0 0 0 77 83 83 77 77 102 102 77 77 103 103 77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 14 14 14 23 11 11 11 11 21 8 8 8 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 28 28 29 0 0 0 0 0 0 0 0 0 0 0 13 14 14 23 11 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 8 8 8 9 7 8 8 8 8 9 13 14 14 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 33 33 33 33 33 33 33 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 32 33 0 0 0 34 33 33 33 33 33 33 33 33 33 33 33 33 32 33 33 33 33 33 33 33 33 33 33 33 32 33 33 33 33 33 33 33 33 33 33 32 33 33 33 33 33 33 33 33 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 36 10 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 11 11 11 11 11 11 11 11 20 14 14 14 14 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 28 28 28 28 28 29 0 0 0 0 0 0 0 0 0 0 0 10 11 11 11 11 11 21 8 8 8 8 8 8 8 8 8 9 0 0 0 0 0 0 0 0 0 0 0 0 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 14 14 14 14 14 15 13 14 14 14 14 15 10 11 11 12 7 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 33 33 33 33 33 33 33 33 35 37 37 37 37 37 37 37 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 35 37 37 39 0 26 0 35 37 37 37 37 37 37 37 37 37 37 37 39 35 37 37 37 37 37 37 37 37 37 37 39 35 37 37 37 37 37 37 37 37 37 39 35 37 37 37 37 37 37 37 37 39 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 27 36 10 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 22 11 11 11 11 11 11 11 11 11 11 11 11 11 21 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 27 28 28 28 28 28 28 28 29 8 8 8 8 8 8 8 8 8 8 8 22 11 19 11 11 11 20 14 14 14 14 14 14 14 14 14 15 0 0 0 0 0 0 0 0 0 0 0 0 10 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 21 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 7 9 7 8 9 7 8 8 8 8 8 8 8 10 11 11 11 11 11 12 10 11 11 11 11 12 10 11 11 12 13 15 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 59 60 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 33 33 34 34 34 34 34 35 39 34 33 33 33 33 33 33 33 33 34 33 33 33 33 33 33 33 33 34 33 33 33 33 33 33 33 33 35 37 37 37 37 37 37 37 39 40 41 41 41 41 41 41 41 42 34 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 35 37 40 41 36 43 0 0 0 38 36 36 36 36 41 41 41 41 41 41 41 42 38 36 36 36 36 36 36 36 36 36 36 43 38 36 36 36 36 36 36 36 36 36 43 38 36 36 36 36 36 36 36 36 43 35 37 37 39 35 37 37 37 37 37 37 37 37 37 37 37 36 10 11 21 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 23 11 11 11 11 11 11 11 11 11 11 11 11 11 20 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 23 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 21 8 8 8 8 8 8 8 8 8 8 8 8 22 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 20 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 15 13 15 13 14 15 13 14 14 14 14 14 14 14 10 11 11 11 11 11 12 10 11 11 11 11 12 10 11 11 12 10 12 13 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 15 27 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 35 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 39 35 37 37 37 37 36 43 35 37 37 37 37 37 37 37 39 35 37 37 37 37 37 37 37 39 35 37 37 37 37 37 37 37 39 40 41 41 41 41 41 41 41 42 0 0 0 0 0 0 0 0 0 35 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 39 40 41 0 0 38 43 0 0 0 38 36 36 36 42 0 0 0 0 0 0 0 0 40 41 41 41 41 41 41 41 41 41 41 42 38 36 36 36 36 36 36 36 36 36 43 38 36 36 36 36 36 36 36 36 43 40 41 41 42 40 36 36 36 36 36 36 36 36 36 36 36 36 10 11 20 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 23 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 20 14 14 14 14 14 14 14 14 14 14 14 14 23 11 11 19 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 10 12 10 11 12 10 11 11 11 11 11 11 11 10 11 11 11 11 11 12 10 11 11 11 11 12 10 11 11 12 10 12 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 43 38 36 36 36 36 36 43 40 41 41 41 41 41 41 41 42 40 41 41 41 41 41 41 41 42 40 41 41 41 41 41 41 41 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 42 0 0 0 0 38 43 33 33 33 38 36 36 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 41 41 41 41 41 41 41 42 38 36 36 36 36 36 36 36 36 43 0 0 0 0 0 40 36 36 36 36 36 36 36 36 36 36 36 10 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 10 12 10 11 12 10 11 11 11 11 11 11 11 10 11 11 11 11 11 12 10 11 11 11 11 12 10 11 11 12 10 12 10 11 11 11 11 11 11 11 11 19 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 43 38 36 36 36 36 36 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 36 37 37 37 36 36 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 41 41 41 41 41 41 41 41 42 0 0 0 0 0 0 40 36 36 36 36 36 36 36 36 36 36 ) (background-tm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) (foreground-tm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0... [truncated message content] |
From: Tobias Gl??er <to...@us...> - 2004-03-26 21:30:44
|
Update of /cvsroot/super-tux/supertux/data/levels/misc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28956/data/levels/misc Log Message: Directory /cvsroot/super-tux/supertux/data/levels/misc added to the repository |
From: Ingo R. <gr...@us...> - 2004-03-26 15:28:28
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17866 Modified Files: lispreader.cpp Log Message: - added some error checking, so that we get more usefull error messages than asserts Index: lispreader.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/lispreader.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- lispreader.cpp 25 Mar 2004 11:36:05 -0000 1.10 +++ lispreader.cpp 26 Mar 2004 15:17:10 -0000 1.11 @@ -26,7 +26,7 @@ #include <ctype.h> #include <stdlib.h> #include <string.h> - +#include "setup.h" #include "lispreader.h" #define TOKEN_ERROR -1 @@ -1041,6 +1041,8 @@ lisp_object_t* obj = search_for (name); if (obj) { + if (!lisp_integer_p(lisp_car(obj))) + st_abort("LispReader expected type integer at token: ", name); *i = lisp_integer(lisp_car(obj)); return true; } @@ -1066,6 +1068,8 @@ lisp_object_t* obj = search_for (name); if (obj) { + if (!lisp_real_p(lisp_car(obj)) && !lisp_integer_p(lisp_car(obj))) + st_abort("LispReader expected type real at token: ", name); *f = lisp_real(lisp_car(obj)); return true; } @@ -1080,6 +1084,8 @@ { while(!lisp_nil_p(obj)) { + if (!lisp_string_p(lisp_car(obj))) + st_abort("LispReader expected type string at token: ", name); vec->push_back(lisp_string(lisp_car(obj))); obj = lisp_cdr(obj); } @@ -1096,6 +1102,8 @@ { while(!lisp_nil_p(obj)) { + if (!lisp_integer_p(lisp_car(obj))) + st_abort("LispReader expected type integer at token: ", name); vec->push_back(lisp_integer(lisp_car(obj))); obj = lisp_cdr(obj); } @@ -1126,7 +1134,8 @@ lisp_object_t* obj = search_for (name); if (obj) { - + if (!lisp_string_p(lisp_car(obj))) + st_abort("LispReader expected type string at token: ", name); *str = lisp_string(lisp_car(obj)); return true; } @@ -1139,6 +1148,8 @@ lisp_object_t* obj = search_for (name); if (obj) { + if (!lisp_boolean_p(lisp_car(obj))) + st_abort("LispReader expected type bool at token: ", name); *b = lisp_boolean(lisp_car(obj)); return true; } |
From: Ingo R. <gr...@us...> - 2004-03-26 03:59:12
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5428 Modified Files: worldmap.cpp Log Message: - fixed file extension Index: worldmap.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/worldmap.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- worldmap.cpp 24 Mar 2004 16:12:51 -0000 1.15 +++ worldmap.cpp 25 Mar 2004 16:31:19 -0000 1.16 @@ -34,7 +34,7 @@ TileManager::TileManager() { - std::string stwt_filename = datadir + "images/worldmap/antarctica.scm"; + std::string stwt_filename = datadir + "images/worldmap/antarctica.stwt"; lisp_object_t* root_obj = lisp_read_from_file(stwt_filename); if (!root_obj) |
From: Ingo R. <gr...@us...> - 2004-03-26 02:44:13
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9843 Modified Files: level.cpp worldmap.cpp Log Message: - cleanup in the worldmap - fixed duplicate badguy bug Index: level.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- level.cpp 25 Mar 2004 12:15:47 -0000 1.18 +++ level.cpp 25 Mar 2004 16:50:13 -0000 1.19 @@ -553,6 +553,8 @@ plevel->theme.clear(); plevel->song_title.clear(); plevel->bkgd_image.clear(); + + plevel->badguy_data.clear(); } /* Load graphics: */ Index: worldmap.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/worldmap.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- worldmap.cpp 25 Mar 2004 16:31:19 -0000 1.16 +++ worldmap.cpp 25 Mar 2004 16:50:13 -0000 1.17 @@ -260,8 +260,8 @@ Level level; LispReader reader(lisp_cdr(element)); reader.read_string("name", &level.name); - reader.read_int("x-pos", &level.x); - reader.read_int("y-pos", &level.y); + reader.read_int("x", &level.x); + reader.read_int("y", &level.y); levels.push_back(level); } @@ -420,9 +420,11 @@ gameloop(const_cast<char*>((datadir + "levels/default/" + i->name).c_str()), 1, ST_GL_LOAD_LEVEL_FILE); play_music(song, 1); - break; + return; } } + std::cout << "Nothing to enter at: " + << tux->get_tile_pos().x << ", " << tux->get_tile_pos().y << std::endl; } else { |
From: Ingo R. <gr...@us...> - 2004-03-25 19:20:51
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7623 Modified Files: level.cpp Log Message: - fixed levelend (well, maybe more of an workaround Index: level.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- level.cpp 25 Mar 2004 16:50:13 -0000 1.19 +++ level.cpp 25 Mar 2004 19:10:00 -0000 1.20 @@ -434,19 +434,10 @@ /* Set the global gravity to the latest loaded level's gravity */ gravity = plevel->gravity; - /* Mark the end position of this level! - Is a bit wrong here thought * / - - for (y = 0; y < 15; ++y) - { - for (x = 0; x < plevel->width; ++x) - { - if(plevel->tiles[y][x] == '|') - { - if(x*32 > endpos) - endpos = x*32; - } - } - }*/ + // Mark the end position of this level! + // FIXME: -10 is a rather random value, we still need some kind of + // real levelend gola + endpos = 32*(plevel->width-10); fclose(fi); return 0; |
From: Ingo R. <gr...@us...> - 2004-03-25 19:12:54
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5911 Modified Files: gameloop.cpp Log Message: - moved a few int's inside the for-loops - replaced a old '.' with 0 Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- gameloop.cpp 25 Mar 2004 19:01:35 -0000 1.30 +++ gameloop.cpp 25 Mar 2004 19:02:04 -0000 1.31 @@ -1415,9 +1415,6 @@ return TileManager::instance()->get(shape(x, y)); } -/* Is is ground? */ - - bool issolid(float x, float y) { Tile* tile = TileManager::instance()->get @@ -1623,7 +1620,7 @@ void trybumpbadguy(float x, float y) { /* Bad guys: */ - for (unsigned int i; i = 0; i < bad_guys.size(); i++) + for (unsigned int i = 0; i < bad_guys.size(); i++) { if (bad_guys[i].base.x >= x - 32 && bad_guys[i].base.x <= x + 32 && bad_guys[i].base.y >= y - 16 && bad_guys[i].base.y <= y + 16) |
From: Ingo R. <gr...@us...> - 2004-03-25 19:12:25
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5871 Modified Files: gameloop.cpp Log Message: - moved a few int's inside the for-loops - replaced a old '.' with 0 Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- gameloop.cpp 25 Mar 2004 12:15:47 -0000 1.29 +++ gameloop.cpp 25 Mar 2004 19:01:35 -0000 1.30 @@ -1405,7 +1405,7 @@ c = current_level.ia_tiles[yy][xx]; } else - c = '.'; + c = 0; return(c); } @@ -1559,7 +1559,6 @@ /* Empty a box: */ - void tryemptybox(float x, float y, int col_side) { Tile* tile = gettile(x,y); @@ -1567,13 +1566,11 @@ return; // according to the collision side, set the upgrade direction - if(col_side == LEFT) col_side = RIGHT; else col_side = LEFT; - // FIXME: Content of boxes must be handled otherwise switch(tile->data) { case 1: //'A': /* Box with a distro! */ @@ -1582,6 +1579,7 @@ score = score + SCORE_DISTRO; distros++; break; + case 2: // 'B': /* Add an upgrade! */ if (tux.size == SMALL) /* Tux is small, add mints! */ add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_MINTS); @@ -1589,6 +1587,7 @@ add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_COFFEE); play_sound(sounds[SND_UPGRADE], SOUND_CENTER_SPEAKER); break; + case 3:// '!': /* Add a golden herring */ add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_HERRING); break; @@ -1600,9 +1599,7 @@ level_change(¤t_level,x, y, TM_IA, tile->next_tile); } - /* Try to grab a distro: */ - void trygrabdistro(float x, float y, int bounciness) { Tile* tile = gettile(x, y); @@ -1623,13 +1620,10 @@ } /* Try to bump a bad guy from below: */ - void trybumpbadguy(float x, float y) { - unsigned int i; - /* Bad guys: */ - for (i = 0; i < bad_guys.size(); i++) + for (unsigned int i; i = 0; i < bad_guys.size(); i++) { if (bad_guys[i].base.x >= x - 32 && bad_guys[i].base.x <= x + 32 && bad_guys[i].base.y >= y - 16 && bad_guys[i].base.y <= y + 16) @@ -1646,7 +1640,7 @@ /* Upgrades: */ - for (i = 0; i < upgrades.size(); i++) + for (unsigned int i = 0; i < upgrades.size(); i++) { if (upgrades[i].base.height == 32 && upgrades[i].base.x >= x - 32 && upgrades[i].base.x <= x + 32 && @@ -1755,7 +1749,6 @@ if (fi == NULL) { fprintf(stderr, "Warning: I could not open the slot file "); - } else { |
From: Ingo R. <gr...@us...> - 2004-03-25 19:03:24
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3771 Modified Files: collision.cpp player.cpp Log Message: - fixed brick-bug (or maybe not, they still behave a bit weird - moved some int's into the for-loops to reduce variable recycling Index: player.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/player.cpp,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- player.cpp 25 Mar 2004 11:07:02 -0000 1.14 +++ player.cpp 25 Mar 2004 18:52:34 -0000 1.15 @@ -242,13 +242,13 @@ if(size == SMALL) { Tile* tile = gettile(base.x, base.y); - Tile* tile2 = gettile(base.x + 31, base.y); /* Get a distro from a brick? */ if (tile->brick) { add_bouncy_distro((((int)base.x) / 32) * 32, ((int)base.y / 32) * 32); + if (counting_distros == false) { counting_distros = true; @@ -262,7 +262,11 @@ score = score + SCORE_DISTRO; distros++; } - else if (tile2->brick) + } + else + { + Tile* tile2 = gettile(base.x + 31, base.y); + if (tile2->brick) { add_bouncy_distro((((int)base.x + 31) / 32) * 32, Index: collision.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/collision.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- collision.cpp 24 Mar 2004 17:41:04 -0000 1.6 +++ collision.cpp 25 Mar 2004 18:52:34 -0000 1.7 @@ -33,10 +33,8 @@ bool collision_object_map(base_type* pbase) { - int v,h,i; - - v = (int)pbase->height / 16; - h = (int)pbase->width / 16; + int v = (int)pbase->height / 16; + int h = (int)pbase->width / 16; if(issolid(pbase->x + 1, pbase->y + 1) || issolid(pbase->x + pbase->width -1, pbase->y + 1) || @@ -44,24 +42,24 @@ issolid(pbase->x + pbase->width -1, pbase->y + pbase->height - 1)) return true; - for(i = 1; i < h; ++i) + for(int i = 1; i < h; ++i) { if(issolid(pbase->x + i*16,pbase->y + 1)) return true; } - for(i = 1; i < h; ++i) + for(int i = 1; i < h; ++i) { if( issolid(pbase->x + i*16,pbase->y + pbase->height - 1)) return true; } - for(i = 1; i < v; ++i) + for(int i = 1; i < v; ++i) { if( issolid(pbase->x + 1, pbase->y + i*16)) return true; } - for(i = 1; i < v; ++i) + for(int i = 1; i < v; ++i) { if( issolid(pbase->x + pbase->width - 1, pbase->y + i*16)) return true; @@ -75,7 +73,6 @@ { int steps; /* Used to speed up the collision tests, by stepping every 16pixels in the path. */ int h; - float i; float lpath; /* Holds the longest path, which is either in X or Y direction. */ float xd,yd; /* Hold the smallest steps in X and Y directions. */ float temp, xt, yt; /* Temporary variable. */ @@ -138,7 +135,7 @@ old->x += xd; old->y += yd; - for(i = 0; i <= lpath; old->x += xd, old->y += yd, ++i) + for(float i = 0; i <= lpath; old->x += xd, old->y += yd, ++i) { if(steps > 0) { @@ -206,18 +203,17 @@ void collision_handler() { - unsigned int i,j; - - /* CO_BULLET & CO_BADGUY check */ - for(i = 0; i < bullets.size(); ++i) + // CO_BULLET & CO_BADGUY check + for(unsigned int i = 0; i < bullets.size(); ++i) { - for(j = 0; j < bad_guys.size(); ++j) + for(unsigned int j = 0; j < bad_guys.size(); ++j) { if(bad_guys[j].dying == DYING_NOT) { if(rectcollision(&bullets[i].base,&bad_guys[j].base)) { - /* We have detected a collision and now call the collision functions of the collided objects. */ + // We have detected a collision and now call the + // collision functions of the collided objects. bullet_collision(&bullets[i], CO_BADGUY); bad_guys[j].collision(&bullets[i], CO_BULLET); } @@ -226,17 +222,18 @@ } /* CO_BADGUY & CO_BADGUY check */ - for(i = 0; i < bad_guys.size(); ++i) + for(unsigned int i = 0; i < bad_guys.size(); ++i) { if(bad_guys[i].dying == DYING_NOT) { - for(j = i+1; j < bad_guys.size(); ++j) + for(unsigned int j = i+1; j < bad_guys.size(); ++j) { if(j != i && !bad_guys[j].dying) { if(rectcollision(&bad_guys[i].base, &bad_guys[j].base)) { - /* We have detected a collision and now call the collision functions of the collided objects. */ + // We have detected a collision and now call the + // collision functions of the collided objects. bad_guys[j].collision(&bad_guys[i], CO_BADGUY); bad_guys[i].collision(&bad_guys[j], CO_BADGUY); } @@ -245,14 +242,13 @@ } } - - - /* CO_BADGUY & CO_PLAYER check */ - for(i = 0; i < bad_guys.size(); ++i) + // CO_BADGUY & CO_PLAYER check + for(unsigned int i = 0; i < bad_guys.size(); ++i) { if(bad_guys[i].dying == DYING_NOT && rectcollision_offset(&bad_guys[i].base,&tux.base,0,0)) { - /* We have detected a collision and now call the collision functions of the collided objects. */ + // We have detected a collision and now call the collision + // functions of the collided objects. if (tux.previous_base.y < tux.base.y && tux.previous_base.y + tux.previous_base.height < bad_guys[i].base.y + bad_guys[i].base.height/2 && bad_guys[i].kind != BAD_MONEY && bad_guys[i].mode != HELD) @@ -266,12 +262,13 @@ } } - /* CO_UPGRADE & CO_PLAYER check */ - for(i = 0; i < upgrades.size(); ++i) + // CO_UPGRADE & CO_PLAYER check + for(unsigned int i = 0; i < upgrades.size(); ++i) { if(rectcollision(&upgrades[i].base,&tux.base)) { - /* We have detected a collision and now call the collision functions of the collided objects. */ + // We have detected a collision and now call the collision + // functions of the collided objects. upgrade_collision(&upgrades[i], &tux, CO_PLAYER); } } |
From: Tobias Gl??er <to...@us...> - 2004-03-25 16:49:36
|
Update of /cvsroot/super-tux/supertux/data/images/tilesets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7407/data/images/tilesets Modified Files: supertux.stgt Log Message: fixed some "solids" to be non-solid Index: supertux.stgt =================================================================== RCS file: /cvsroot/super-tux/supertux/data/images/tilesets/supertux.stgt,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- supertux.stgt 25 Mar 2004 10:26:59 -0000 1.3 +++ supertux.stgt 25 Mar 2004 16:38:46 -0000 1.4 @@ -53,14 +53,11 @@ (images "snow9.png") (solid #t)) (tile (id 16) - (images "snow10.png") - (solid #t)) + (images "snow10.png")) (tile (id 17) - (images "snow11.png") - (solid #t)) + (images "snow11.png")) (tile (id 18) - (images "snow12.png") - (solid #t)) + (images "snow12.png")) (tile (id 19) (images "snow13.png") (solid #t)) |
From: Ingo R. <gr...@us...> - 2004-03-25 16:38:17
|
Update of /cvsroot/super-tux/supertux/data/images/worldmap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4783 Added Files: antarctica.stwt Removed Files: antarctica.scm Log Message: - fixed syntax --- antarctica.scm DELETED --- --- NEW FILE: antarctica.stwt --- ;; (tile (id INT) ;; (directions TOP RIGHT DOWN LEFT) ;; (supertux-worldmap-tiles (tile (id 0) (image "ground.png") (north #f) (south #f) (east #f) (west #f) (stop #f)) (tile (id 1) (image "road_h.png") (north #f) (south #f) (west #t) (east #t) (stop #f)) (tile (id 2) (image "road_v.png") (north #t) (south #t) (west #f) (east #f) (stop #f)) (tile (id 3) (image "road_ws.png") (north #f) (south #t) (west #t) (east #f) (stop #t)) (tile (id 4) (image "road_cross.png") (north #t) (south #t) (west #t) (east #t) (stop #t)) (tile (id 5) (image "road_e.png") (north #f) (south #f) (west #f) (east #t) (stop #t)) (tile (id 6) (image "road_h_stop.png") (north #f) (south #f) (west #t) (east #t) (stop #t)) (tile (id 7) (image "road_v_stop.png") (north #t) (south #t) (west #f) (east #f) (stop #t)) ) ;; EOF ;; |
From: Ingo R. <gr...@us...> - 2004-03-25 12:26:34
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17841 Modified Files: gameloop.cpp level.cpp Log Message: - cleaned up the way badguys are handled Index: level.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- level.cpp 25 Mar 2004 12:02:46 -0000 1.17 +++ level.cpp 25 Mar 2004 12:15:47 -0000 1.18 @@ -322,9 +322,6 @@ { std::map<char, int> transtable; transtable['.'] = 0; - transtable['0'] = 1000; - transtable['1'] = 1001; - transtable['2'] = 1002; transtable['x'] = 104; transtable['X'] = 77; transtable['y'] = 78; @@ -363,13 +360,29 @@ transtable['\\'] = 81; transtable['&'] = 75; + int x = 0; + int y = 0; for(std::vector<int>::iterator i = ia_tm.begin(); i != ia_tm.end(); ++i) { - std::map<char, int>::iterator j = transtable.find(*i); - if (j != transtable.end()) - *i = j->second; + if (*i == '0' || *i == '1' || *i == '2') + { + plevel->badguy_data.push_back(BadGuyData(static_cast<BadGuyKind>(*i-'0'), + x*32, y*32)); + *i = 0; + } else - printf("Error: conversion will fail, unsupported char: '%c' (%d)\n", *i, *i); + { + std::map<char, int>::iterator j = transtable.find(*i); + if (j != transtable.end()) + *i = j->second; + else + printf("Error: conversion will fail, unsupported char: '%c' (%d)\n", *i, *i); + } + ++x; + if (x >= plevel->width) { + x = 0; + ++y; + } } } } Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- gameloop.cpp 25 Mar 2004 11:36:05 -0000 1.28 +++ gameloop.cpp 25 Mar 2004 12:15:47 -0000 1.29 @@ -100,28 +100,12 @@ void activate_bad_guys(void) { - // Activate badguys the new style for (std::vector<BadGuyData>::iterator i = current_level.badguy_data.begin(); i != current_level.badguy_data.end(); ++i) { add_bad_guy(i->x, i->y, i->kind); } - - // FIXME: should be removed; - // Activate bad guys the old style - for (int y = 0; y < 15; y++) - { - for (int x = 0; x < current_level.width; x++) - { - if (current_level.ia_tiles[y][x] >= 1000 && current_level.ia_tiles[y][x] <= 1010) - { - add_bad_guy(x * 32, y * 32, - static_cast<BadGuyKind>(current_level.ia_tiles[y][x] - 1000)); - current_level.ia_tiles[y][x] = 0; - } - } - } } void activate_particle_systems(void) |
From: Ingo R. <gr...@us...> - 2004-03-25 12:13:42
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15768 Modified Files: level.cpp Log Message: bye, bye dn_tm Index: level.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- level.cpp 25 Mar 2004 11:36:05 -0000 1.16 +++ level.cpp 25 Mar 2004 12:02:46 -0000 1.17 @@ -269,7 +269,6 @@ } vector<int> ia_tm; - vector<int> dn_tm; vector<int> bg_tm; vector<int> fg_tm; @@ -295,7 +294,6 @@ if (!reader.read_int_vector("interactive-tm", &ia_tm)) reader.read_int_vector("tilemap", &ia_tm); - reader.read_int_vector("dynamic-tm", &dn_tm); reader.read_int_vector("foreground-tm", &fg_tm); { @@ -397,18 +395,6 @@ } i = j = 0; - for(vector<int>::iterator it = dn_tm.begin(); it != dn_tm.end(); ++it, ++i) - { - - plevel->dn_tiles[j][i] = (*it); - if(i == plevel->width - 1) - { - i = -1; - ++j; - } - } - - i = j = 0; for(vector<int>::iterator it = bg_tm.begin(); it != bg_tm.end(); ++it, ++i) { |
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10704 Modified Files: badguy.cpp badguy.h gameloop.cpp level.cpp level.h leveleditor.cpp lispreader.cpp lispreader.h Log Message: - added alternative (more flexible) way to define badguys in a level Index: lispreader.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/lispreader.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- lispreader.h 22 Mar 2004 15:25:15 -0000 1.7 +++ lispreader.h 25 Mar 2004 11:36:05 -0000 1.8 @@ -176,6 +176,7 @@ bool read_int (const char* name, int* i); bool read_float (const char* name, float* f); bool read_bool (const char* name, bool* b); + bool read_lisp (const char* name, lisp_object_t** b); }; /** */ Index: level.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- level.h 24 Mar 2004 22:23:48 -0000 1.14 +++ level.h 25 Mar 2004 11:36:05 -0000 1.15 @@ -15,6 +15,7 @@ #include <string> #include "texture.h" +#include "badguy.h" #include "lispreader.h" /* This type holds meta-information about a level-subset. */ @@ -40,8 +41,22 @@ #define LEVEL_NAME_MAX 20 -struct st_level + +enum { + TM_BG, + TM_IA, + TM_DN, + TM_FG + }; + +extern texture_type img_bkgd; +extern texture_type img_bkgd_tile[2][4]; +extern texture_type img_solid[4]; +extern texture_type img_brick[2]; + +class st_level { + public: std::string name; std::string theme; std::string song_title; @@ -57,16 +72,10 @@ int bkgd_blue; int width; float gravity; -}; - -enum { - TM_BG, - TM_IA, - TM_DN, - TM_FG - }; -extern texture_type img_bkgd, img_bkgd_tile[2][4], img_solid[4], img_brick[2]; + std::vector<BadGuyData> badguy_data; + public: +}; void level_default (st_level* plevel); int level_load (st_level* plevel, const char * subset, int level); Index: badguy.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/badguy.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- badguy.h 24 Mar 2004 22:01:08 -0000 1.14 +++ badguy.h 25 Mar 2004 11:36:05 -0000 1.15 @@ -49,6 +49,22 @@ BAD_MONEY }; +BadGuyKind badguykind_from_string(const std::string& str); +std::string badguykind_to_string(BadGuyKind kind); + +struct BadGuyData +{ + BadGuyKind kind; + int x; + int y; + + BadGuyData(BadGuyKind kind_, int x_, int y_) + : kind(kind_), x(x_), y(y_) {} + + BadGuyData() + : kind(BAD_BSOD), x(0), y(0) {} +}; + /* Badguy type: */ class BadGuy { Index: badguy.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/badguy.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- badguy.cpp 24 Mar 2004 22:10:28 -0000 1.12 +++ badguy.cpp 25 Mar 2004 11:36:05 -0000 1.13 @@ -31,6 +31,39 @@ texture_type img_money_left[2]; texture_type img_money_right[2]; +BadGuyKind badguykind_from_string(const std::string& str) +{ + if (str == "money") + return BAD_MONEY; + else if (str == "laptop") + return BAD_LAPTOP; + else if (str == "bsod") + return BAD_BSOD; + else + { + printf("Couldn't convert badguy: %s\n", str.c_str()); + return BAD_BSOD; + } +} + +std::string badguykind_to_string(BadGuyKind kind) +{ + switch(kind) + { + case BAD_MONEY: + return "money"; + break; + case BAD_LAPTOP: + return "laptop"; + break; + case BAD_BSOD: + return "bsod"; + break; + default: + return "bsod"; + } +} + void BadGuy::init(float x, float y, BadGuyKind kind_) { Index: level.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- level.cpp 25 Mar 2004 11:07:02 -0000 1.15 +++ level.cpp 25 Mar 2004 11:36:05 -0000 1.16 @@ -298,6 +298,27 @@ reader.read_int_vector("dynamic-tm", &dn_tm); reader.read_int_vector("foreground-tm", &fg_tm); + { + lisp_object_t* cur = 0; + if (reader.read_lisp("objects", &cur)) + { + while (!lisp_nil_p(cur)) + { + lisp_object_t* data = lisp_car(cur); + + BadGuyData bg_data; + bg_data.kind = badguykind_from_string(lisp_symbol(lisp_car(data))); + LispReader reader(lisp_cdr(data)); + reader.read_int("x", &bg_data.x); + reader.read_int("y", &bg_data.y); + + plevel->badguy_data.push_back(bg_data); + + cur = lisp_cdr(cur); + } + } + } + // Convert old levels to the new tile numbers if (version == 0) { Index: leveleditor.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/leveleditor.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- leveleditor.cpp 24 Mar 2004 22:23:48 -0000 1.18 +++ leveleditor.cpp 25 Mar 2004 11:36:05 -0000 1.19 @@ -597,7 +597,7 @@ void apply_level_settings_menu() { - int i,y,j; + int i; i = false; le_current_level->name = level_settings_menu->item[2].input; Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- gameloop.cpp 25 Mar 2004 11:07:02 -0000 1.27 +++ gameloop.cpp 25 Mar 2004 11:36:05 -0000 1.28 @@ -100,12 +100,19 @@ void activate_bad_guys(void) { - int x,y; + // Activate badguys the new style + for (std::vector<BadGuyData>::iterator i = current_level.badguy_data.begin(); + i != current_level.badguy_data.end(); + ++i) + { + add_bad_guy(i->x, i->y, i->kind); + } - /* Activate bad guys: */ - for (y = 0; y < 15; y++) + // FIXME: should be removed; + // Activate bad guys the old style + for (int y = 0; y < 15; y++) { - for (x = 0; x < current_level.width; x++) + for (int x = 0; x < current_level.width; x++) { if (current_level.ia_tiles[y][x] >= 1000 && current_level.ia_tiles[y][x] <= 1010) { Index: lispreader.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/lispreader.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- lispreader.cpp 22 Mar 2004 15:25:15 -0000 1.9 +++ lispreader.cpp 25 Mar 2004 11:36:05 -0000 1.10 @@ -1048,6 +1048,19 @@ } bool +LispReader::read_lisp(const char* name, lisp_object_t** b) +{ + lisp_object_t* obj = search_for (name); + if (obj) + { + *b = obj; + return true; + } + else + return false; +} + +bool LispReader::read_float (const char* name, float* f) { lisp_object_t* obj = search_for (name); |
From: Ingo R. <gr...@us...> - 2004-03-25 11:18:04
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4821 Modified Files: gameloop.cpp level.cpp player.cpp tile.cpp Log Message: - fixed badguys a little bit Index: player.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/player.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- player.cpp 25 Mar 2004 02:27:45 -0000 1.13 +++ player.cpp 25 Mar 2004 11:07:02 -0000 1.14 @@ -173,8 +173,6 @@ if (!dying) { - - if( !on_ground()) { if(under_solid()) @@ -243,9 +241,10 @@ if(size == SMALL) { + Tile* tile = gettile(base.x, base.y); + Tile* tile2 = gettile(base.x + 31, base.y); /* Get a distro from a brick? */ - if (gettile(base.x, base.y)->brick || - gettile(base.x, base.y)->brick) + if (tile->brick) { add_bouncy_distro((((int)base.x) / 32) * 32, @@ -257,15 +256,14 @@ } if (distro_counter <= 0) - level_change(¤t_level,base.x,base.y - 1, TM_IA, 'a'); + level_change(¤t_level,base.x,base.y - 1, TM_IA, tile->next_tile); play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); score = score + SCORE_DISTRO; distros++; } - else if (gettile(base.x+ 31, base.y)->brick || - gettile(base.x+ 31, base.y)->brick) - { + else if (tile2->brick) + { add_bouncy_distro((((int)base.x + 31) / 32) * 32, ((int)base.y / 32) * 32); @@ -276,7 +274,7 @@ } if (distro_counter <= 0) - level_change(¤t_level,base.x+ 31, base.y, TM_IA, 'a'); + level_change(¤t_level,base.x+ 31, base.y, TM_IA, tile2->next_tile); play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); score = score + SCORE_DISTRO; Index: level.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- level.cpp 25 Mar 2004 10:26:07 -0000 1.14 +++ level.cpp 25 Mar 2004 11:07:02 -0000 1.15 @@ -303,13 +303,13 @@ { std::map<char, int> transtable; transtable['.'] = 0; - transtable['0'] = 0; - transtable['1'] = 1; - transtable['2'] = 2; - transtable['x'] = 77; + transtable['0'] = 1000; + transtable['1'] = 1001; + transtable['2'] = 1002; + transtable['x'] = 104; transtable['X'] = 77; transtable['y'] = 78; - transtable['Y'] = 78; + transtable['Y'] = 105; transtable['A'] = 83; transtable['B'] = 102; transtable['!'] = 103; Index: tile.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/tile.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- tile.cpp 25 Mar 2004 10:26:07 -0000 1.4 +++ tile.cpp 25 Mar 2004 11:07:02 -0000 1.5 @@ -53,16 +53,16 @@ LispReader reader(lisp_cdr(element)); assert(reader.read_int("id", &tile->id)); - reader.read_bool("solid", &tile->solid); - reader.read_bool("brick", &tile->brick); - reader.read_bool("ice", &tile->ice); - reader.read_bool("fullbox", &tile->fullbox); - reader.read_bool("distro", &tile->distro); - reader.read_int("data", (int*)&tile->data); - reader.read_int("alpha", (int*)&tile->alpha); - reader.read_int("anim-speed", &tile->anim_speed); + reader.read_bool("solid", &tile->solid); + reader.read_bool("brick", &tile->brick); + reader.read_bool("ice", &tile->ice); + reader.read_bool("fullbox", &tile->fullbox); + reader.read_bool("distro", &tile->distro); + reader.read_int("data", (int*)&tile->data); + reader.read_int("alpha", (int*)&tile->alpha); + reader.read_int("anim-speed", &tile->anim_speed); reader.read_int("next-tile", &tile->next_tile); - reader.read_int("next-tile2", &tile->next_tile2); + reader.read_int("next-tile2", &tile->next_tile2); reader.read_string_vector("images", &tile->filenames); for(std::vector<std::string>::iterator it = tile->filenames.begin(); Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- gameloop.cpp 25 Mar 2004 10:26:07 -0000 1.26 +++ gameloop.cpp 25 Mar 2004 11:07:02 -0000 1.27 @@ -103,15 +103,15 @@ int x,y; /* Activate bad guys: */ - for (y = 0; y < 15; y++) { for (x = 0; x < current_level.width; x++) { - if (current_level.dn_tiles[y][x] >= '0' && current_level.dn_tiles[y][x] <= '9') + if (current_level.ia_tiles[y][x] >= 1000 && current_level.ia_tiles[y][x] <= 1010) { - add_bad_guy(x * 32, y * 32, static_cast<BadGuyKind>(current_level.dn_tiles[y][x] - '0')); - current_level.dn_tiles[y][x] = 0; + add_bad_guy(x * 32, y * 32, + static_cast<BadGuyKind>(current_level.ia_tiles[y][x] - 1000)); + current_level.ia_tiles[y][x] = 0; } } } |