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')