diff --git a/A1.xml.real b/A1.xml.real index bdd26ed..c8c309b 100644 --- a/A1.xml.real +++ b/A1.xml.real @@ -54,16 +54,10 @@ - - - - - - diff --git a/Makefile b/Makefile index c7fc09e..f2692bf 100644 --- a/Makefile +++ b/Makefile @@ -91,7 +91,7 @@ setup-nds: nds: make -C n-echo - zip -r $(NPKG) n-echo/n-echo.nds n-echo/n-echo.ds.gba n-echo/A*.xml.real n-echo/N_ECHO_README + zip -r $(NPKG) n-echo/n-echo.nds n-echo/n-echo.ds.gba n-echo/apps n-echo/N_ECHO_README upload: package package-mac nds $(UPLOAD) 'Linux (32) binary + xml stages - $(VERSION) (revision $(REVISION))' $(PKGPREFIX)lin32.zip diff --git a/echo_character.cpp b/echo_character.cpp index 48c4361..803fb21 100644 --- a/echo_character.cpp +++ b/echo_character.cpp @@ -57,7 +57,7 @@ #define SPEED_FALL_FROM_SKY 0.15f #else //various character speeds - #define SPEED_STEP 0.12f + #define SPEED_STEP 0.07f #define SPEED_RUN 0.25f #define SPEED_FALL 0.50f #define SPEED_LAUNCH 0.30f @@ -142,6 +142,14 @@ void echo_char::start_step() } } +void echo_char::toggle_run() +{ + if(speed == SPEED_RUN) + start_step(); + else + start_run(); +} + void echo_char::init(grid * g1) { start = grid1 = g1; @@ -253,19 +261,23 @@ void echo_char::step() vector3f pos2 = i2->pos; if(!paused) { - dist_traveled += speed; + dist_traveled += speed * 2; //inflate it a little dist_traveled_cyclic += speed * 180; - if(dist_traveled_cyclic > 720) + if(dist_traveled_cyclic > 360) { dist_traveled -= 4; - dist_traveled_cyclic -= 720; + dist_traveled_cyclic -= 360; } dist = pos1.dist(pos2); - if((dist_traveled > 0.5f && dist_traveled <= 1) - || (dist_traveled > 2.5f && dist_traveled <= 3)) + if(dist_traveled > 0.5f && dist_traveled <= 1) + { + grid1per -= (1 + 1 * echo_cos(90 * dist_traveled - 22.5f)) * speed / dist; //step thru it + grid2per += (1 + 1 * echo_cos(90 * dist_traveled - 22.5f)) * speed / dist; + } + else if(dist_traveled > 2.5f && dist_traveled <= 3) { - grid1per -= (1 + 0.75f * echo_cos(360 * dist_traveled)) * speed / dist; //step thru it - grid2per += (1 + 0.75f * echo_cos(360 * dist_traveled)) * speed / dist; + grid1per -= (1 + 1 * echo_cos(90 * dist_traveled + 67.5f)) * speed / dist; //step thru it + grid2per += (1 + 1 * echo_cos(90 * dist_traveled + 67.5f)) * speed / dist; } else { @@ -342,15 +354,16 @@ void echo_char::draw(float x, float y, float z) if(main_grid) { gfx_translatef(0, grid2->vert_shift(main_per), 0); - joints.rshoulder_swing = -20 * echo_cos(dist_traveled_cyclic / 2); - joints.lshoulder_swing = 20 * echo_cos(dist_traveled_cyclic / 2); - joints.rarm_bend = -10 * echo_cos(dist_traveled_cyclic / 2) - 20; - joints.larm_bend = 10 * echo_cos(dist_traveled_cyclic / 2) - 20; - joints.rthigh_lift = -45 * echo_cos(dist_traveled_cyclic / 2); - joints.lthigh_lift = 45 * echo_cos(dist_traveled_cyclic / 2); + joints.rshoulder_swing = -20 * echo_cos(dist_traveled_cyclic); + joints.lshoulder_swing = 20 * echo_cos(dist_traveled_cyclic); + joints.rarm_bend = -10 * echo_cos(dist_traveled_cyclic) - 20; + joints.larm_bend = 10 * echo_cos(dist_traveled_cyclic) - 20; + joints.rthigh_lift = -45 * echo_cos(dist_traveled_cyclic); + joints.lthigh_lift = 45 * echo_cos(dist_traveled_cyclic); #define LEG_BEND_MAX 30 + //* if(dist_traveled > 1 && dist_traveled <= 1.5f) joints.rleg_bend = LEG_BEND_MAX * echo_cos(dist_traveled * 180 + 180); else if(dist_traveled > 3.0f || dist_traveled <= 1) @@ -363,6 +376,7 @@ void echo_char::draw(float x, float y, float z) joints.lleg_bend = LEG_BEND_MAX * echo_sin(dist_traveled * 45 - 90); else joints.lleg_bend = 0; + // */ } if(grid1 && grid2) { diff --git a/echo_character.h b/echo_character.h index 2b740e4..5d2aa6a 100644 --- a/echo_character.h +++ b/echo_character.h @@ -84,6 +84,8 @@ class echo_char //change speed to walking if we can void start_step(); + void toggle_run(); + //pause or unpause void toggle_pause(); //is this character paused? diff --git a/echo_ns.cpp b/echo_ns.cpp index 171c21c..6f41e28 100644 --- a/echo_ns.cpp +++ b/echo_ns.cpp @@ -165,6 +165,10 @@ namespace echo_ns { main_char->start_step(); } + void toggle_run() + { + main_char->toggle_run(); + } void add_static_grid(static_grid* sg) { diff --git a/echo_ns.h b/echo_ns.h index 2328b8c..a89696b 100644 --- a/echo_ns.h +++ b/echo_ns.h @@ -56,6 +56,7 @@ namespace echo_ns void start_run(); //change speed to walking if we can void start_step(); + void toggle_run(); void add_static_grid(static_grid* sg); void remove_static_grid(static_grid* sg); diff --git a/echo_prefs.cpp b/echo_prefs.cpp index 003c242..b2347e1 100644 --- a/echo_prefs.cpp +++ b/echo_prefs.cpp @@ -21,6 +21,11 @@ #include #include #include +#ifdef ECHO_NDS + #include +#else + #include +#endif #ifdef ECHO_NDS #ifndef __ECHO_NDS_PREFS__ @@ -36,11 +41,11 @@ *document = new TiXmlDocument(PREFS_FILE); return((*document)->LoadFile() ? WIN : FAIL); } - int get_hand(TiXmlDocument* document, enum HAND* handedness) + int get_hand(TiXmlDocument* document, HAND* handedness) { if(document) { - TiXmlElement* root = document->Root(); + TiXmlElement* root = document->RootElement(); if(root) { const char* hand_str = root->Attribute(HAND_ATTR_NAME); @@ -61,11 +66,11 @@ } return(FAIL); } - int set_hand(TiXmlDocument* document, enum HAND handedness) + int set_hand(TiXmlDocument* document, HAND handedness) { if(document) { - TiXmlElement* root = document->Root(); + TiXmlElement* root = document->RootElement(); if(root) { root->SetAttribute(HAND_ATTR_NAME, handedness == LEFT_HAND ? HAND_LEFT_VALUE : HAND_RIGHT_VALUE); @@ -74,7 +79,7 @@ } return(FAIL); } - int close_prefs(TiXmlDocument* doocument) + int close_prefs(TiXmlDocument* document) { if(document->SaveFile(PREFS_FILE) == FALSE) return(FAIL); diff --git a/echo_prefs.h b/echo_prefs.h index eb0427d..cae2c4f 100644 --- a/echo_prefs.h +++ b/echo_prefs.h @@ -18,13 +18,18 @@ */ #include +#ifdef ECHO_NDS + #include +#else + #include +#endif #ifdef ECHO_NDS - enum { LEFT_HAND, RIGHT_HAND } HAND; + enum HAND { LEFT_HAND, RIGHT_HAND }; int open_prefs(TiXmlDocument** document); - int get_hand(TiXmlDocument* document, enum HAND* handedness); - int set_hand(TiXmlDocument* document, enum HAND handedness); + int get_hand(TiXmlDocument* document, HAND* handedness); + int set_hand(TiXmlDocument* document, HAND handedness); int close_prefs(TiXmlDocument* document); #endif diff --git a/main.cpp b/main.cpp index fc5d7ba..1e9c319 100644 --- a/main.cpp +++ b/main.cpp @@ -45,6 +45,8 @@ #define _STDCALL_SUPPORTED #ifdef ECHO_NDS + #include + #include #include #include @@ -86,6 +88,7 @@ #define START_BG DISPLAY_BG0_ACTIVE #define DEBUG_BG DISPLAY_BG3_ACTIVE #else + #include #ifdef ECHO_PC #ifdef ECHO_OSX //OS X #include @@ -148,6 +151,8 @@ static const uint32 basic_modes = MODE_0_2D | DISPLAY_BG_EXT_PALETTE; //the temp address of the counter (holds number of goals) static char counter[32]; + //what are the directional buttons? defaults to right-scheme + static int left_key = KEY_LEFT, right_key = KEY_RIGHT, up_key = KEY_UP, down_key = KEY_DOWN, b_key = KEY_B; #else #ifdef ECHO_PC //ID of the window @@ -190,10 +195,6 @@ static vector3f real_angle(0, 0, 0); //the current directory static echo_files* files = NULL; -#ifdef ECHO_NDS - static int left, right, up, down; -#endif - //--METHODS #ifdef ECHO_NDS @@ -221,6 +222,9 @@ static echo_files* files = NULL; static void update_num_goals(); //update console2 with status static void update_char_state(); + + //tries to refresh the handedness + static void refresh_hand(TiXmlDocument* doc); #elif ECHO_PC //mouse event, calls pressed or handles releases. static void mouse(int button, int state, int x, int y); @@ -263,35 +267,22 @@ int main(int argc, char **argv) #ifdef ECHO_NDS //initialize the file system fatInitDefault(); + //get the files + files = get_files("/apps/n-echo"); + //initialize the screens + init(argc, argv, 255, 191); + ECHO_PRINT("trying to load prefs...\n"); TiXmlDocument* doc = NULL; - if(open_pref(&doc) == WIN) + if(open_prefs(&doc) == WIN) { - HAND* hand = NULL; - if(get_hand(doc, hand) == WIN) - { - if(*hand == RIGHT_HAND) - { - left = KEY_LEFT; - right = KEY_RIGHT; - up = KEY_UP; - down = KEY_DOWN; - } - else - { - left = KEY_Y; - right = KEY_A; - up = KEY_X; - down = KEY_B; - } - } - close_pref(doc); + ECHO_PRINT("loaded prefs...\n"); + refresh_hand(doc); + close_prefs(doc); } + else + ECHO_PRINT("couldn't load prefs!\n"); - //get the files - files = get_files("/app/nds"); - //initialize the screens - init(argc, argv, 255, 191); //load the menu load(NULL); //infinite loop @@ -386,6 +377,36 @@ int main(int argc, char **argv) return(1); } +#ifdef ECHO_NDS +void refresh_hand(TiXmlDocument* doc) +{ + HAND* hand = NULL; + if(get_hand(doc, hand) == WIN) + { + if(*hand == RIGHT_HAND) + { + ECHO_PRINT("right handed\n"); + left_key = KEY_LEFT; + right_key = KEY_RIGHT; + up_key = KEY_UP; + down_key = KEY_DOWN; + b_key = KEY_B; + } + else + { + ECHO_PRINT("left handed\n"); + left_key = KEY_Y; + right_key = KEY_A; + up_key = KEY_X; + down_key = KEY_B; + b_key = KEY_DOWN; + } + } + else + ECHO_PRINT("couldn't get handedness!"); +} +#endif + static void load(const char* fname) { //load stage @@ -1024,9 +1045,9 @@ static void display() file_start = 0; } } - if(((key & KEY_DOWN) || (key & KEY_B)) && file_index < files->num_files - 1) + if((key & down_key) && file_index < files->num_files - 1) file_index++; - if(((key & KEY_UP) || (key & KEY_X)) && file_index > 0) + if((key & up_key) && file_index > 0) file_index--; file_start = file_index - 21; if(file_start < 0) @@ -1036,10 +1057,10 @@ static void display() { if((key & KEY_L) || (key & KEY_R)) start_or_pause(); - if(key & right) right(); - if(key & left) left(); - if(key & down) down(); - if(key & up) up(); + if(key & right_key) right(); + if(key & left_key) left(); + if(key & down_key) down(); + if(key & up_key) up(); } if(key & KEY_START) { @@ -1141,6 +1162,8 @@ static void display() echo_ns::start_run(); else if(key == 'w' || key == 'W') echo_ns::start_step(); + else if(key == 't' || key == 'T') + echo_ns::toggle_run(); else if(key == 's' || key == 'S') ECHO_PRINT("speed: %f\n", echo_ns::get_speed()); else if(key == 'a' || key == 'A')