summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/koopatlas/mapdata.h11
-rw-r--r--src/koopatlas/pathmanager.cpp217
-rw-r--r--src/koopatlas/pathmanager.h2
-rw-r--r--src/koopatlas/player.h181
4 files changed, 106 insertions, 305 deletions
diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h
index 70c31ee..a0df0dc 100644
--- a/src/koopatlas/mapdata.h
+++ b/src/koopatlas/mapdata.h
@@ -112,6 +112,15 @@ struct dKPPath_s {
ALWAYS_AVAILABLE = 3
};
+ enum Animation {
+ WALK = 0, WALK_SAND = 1, WALK_SNOW = 2, WALK_WATER = 3,
+ JUMP = 4, JUMP_SAND = 5, JUMP_SNOW = 6, JUMP_WATER = 7,
+ LADDER = 8, LADDER_LEFT = 9, LADDER_RIGHT = 10, FALL = 11,
+ SWIM = 12, RUN = 13, PIPE = 14, DOOR = 15,
+ TJUMPED = 16, ENTER_CAVE = 17, LEAVE_CAVE = 18, INVISIBLE = 19,
+ MAX_ANIM = 20
+ };
+
dKPNode_s *start, *end;
dKPLayer_s *tileLayer, *doodadLayer;
@@ -119,7 +128,7 @@ struct dKPPath_s {
u8 isSecret;
u8 _padding[2];
float speed;
- int animation;
+ Animation animation;
void setLayerAlpha(u8 alpha);
};
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index d329c6d..a80c2b4 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -7,6 +7,7 @@
void dWMPathManager_c::setup() {
isMoving = false;
isJumping = false;
+ scaleAnimProgress = -1;
timer = 0.0;
currentPath = 0;
reverseThroughPath = false;
@@ -373,131 +374,88 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) {
// hang_walk_l = 65,
// hang_walk_r = 66,
- SpammyReport("h\n");
- player->rot.y = direction;
- player->hasSound = false;
- player->hasEffect = false;
- moveSpeed = 3.0f;
-
- switch (path->animation) {
-
- // Running
- case 0:
- player->startAnimation(run, 2.0, 10.0, 0.0);
- player->hasSound = true;
- player->soundName = SE_PLY_FOOTNOTE_DIRT;
- break;
- case 1:
- player->startAnimation(run, 2.0, 10.0, 0.0);
- player->hasSound = true;
- player->hasEffect = true;
- player->soundName = SE_PLY_FOOTNOTE_CS_SAND;
- player->effectName = "Wm_mr_foot_sand";
- break;
- case 2:
- player->startAnimation(run, 2.0, 10.0, 0.0);
- player->hasSound = true;
- player->hasEffect = true;
- player->soundName = SE_PLY_FOOTNOTE_CS_SNOW;
- player->effectName = "Wm_mr_foot_snow";
- break;
- case 3:
- player->startAnimation(run, 2.0, 10.0, 0.0);
- player->hasSound = true;
- player->hasEffect = true;
- player->soundName = SE_PLY_FOOTNOTE_CS_WATER;
- player->effectName = "Wm_mr_foot_water";
- break;
+ static const struct {
+ PlayerAnim anim;
+ float animParam1, animParam2;
+ s16 forceRotation;
+ float forceSpeed;
+ SFX repeatSound, initialSound;
+ const char *repeatEffect, *initialEffect;
+ } Animations[] = {
+ // Walking
+ {run,2.0f,10.0f, -1,-1.0f, SE_PLY_FOOTNOTE_DIRT,SE_NULL, 0,0},
+ {run,2.0f,10.0f, -1,-1.0f, SE_PLY_FOOTNOTE_CS_SAND,SE_NULL, "Wm_mr_foot_sand",0},
+ {run,2.0f,10.0f, -1,-1.0f, SE_PLY_FOOTNOTE_CS_SNOW,SE_NULL, "Wm_mr_foot_snow",0},
+ {run,2.0f,10.0f, -1,-1.0f, SE_PLY_FOOTNOTE_CS_WATER,SE_NULL, "Wm_mr_foot_water",0},
// Jumping
- case 4:
- player->startAnimation(jump, 1.0, 1.0, 0.0);
- MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
- isJumping = true;
- moveSpeed = 2.5f;
- break;
- case 5:
- player->startAnimation(jump, 1.0, 10.0, 0.0);
- MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
- isJumping = true;
- moveSpeed = 2.5f;
- break;
- case 6:
- player->startAnimation(jump, 1.0, 10.0, 0.0);
- MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
- isJumping = true;
- moveSpeed = 2.5f;
- break;
- case 7:
- player->startAnimation(jump, 1.0, 10.0, 0.0);
- MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1);
- isJumping = true;
- SpawnEffect("Wm_mr_waterwave_out", 0, &player->pos, 0, &player->scale);
- moveSpeed = 2.0f;
- break;
-
- // Climbing
- case 8:
- player->startAnimation(pea_plant, 1.2, 10.0, 0.0);
- player->rot.y = 0x8000;
- player->hasSound = true;
- player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB;
- moveSpeed = 1.5f;
- break;
- case 9:
- player->startAnimation(tree_climb, 1.2, 10.0, 0.0);
- player->rot.y = 0xC000;
- player->hasSound = true;
- player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB;
- moveSpeed = 1.5f;
- break;
- case 10:
- player->startAnimation(tree_climb, 1.2, 10.0, 0.0);
- player->rot.y = 0x4000;
- player->hasSound = true;
- player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB;
- moveSpeed = 1.5f;
- break;
-
- // Others
- case 12:
- player->startAnimation(swim_wait, 1.2, 10.0, 0.0);
- player->hasSound = true;
- player->hasEffect = true;
- player->soundName = SE_PLY_SWIM;
- player->effectName = "Wm_mr_waterswim";
- moveSpeed = 2.0f;
- break;
- case 13:
- player->startAnimation(b_dash2, 3.0, 10.0, 0.0);
- player->hasSound = true;
- player->soundName = SE_PLY_FOOTNOTE_DIRT;
- moveSpeed = 5.0f;
- break;
- case 14:
- player->startAnimation(wait, 2.0, 10.0, 0.0);
- player->rot.y = 0x0000;
- MapSoundPlayer(SoundRelatedClass, SE_PLY_DOKAN_IN_OUT, 1);
- moveSpeed = 1.0f;
- break;
- case 15:
- player->startAnimation(wait, 2.0, 10.0, 0.0);
- player->rot.y = 0x8000;
- MapSoundPlayer(SoundRelatedClass, SE_OBJ_DOOR_OPEN, 1);
- moveSpeed = 0.2f;
- break;
- case 16:
- player->startAnimation(Tjumped, 2.0, 0.0, 0.0);
- break;
- default:
- SpammyReport("No animtaion?!");
- player->startAnimation(run, 2.0, 10.0, 0.0);
- player->hasSound = true;
- player->soundName = SE_PLY_FOOTNOTE_DIRT;
- break;
+ {jump,1.0f,1.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,0},
+ {jump,1.0f,10.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,0},
+ {jump,1.0f,10.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,0},
+ {jump,1.0f,10.0f, -1,2.5f, SE_NULL,SE_PLY_JUMP, 0,"Wm_mr_waterwave_out"},
+
+ // Ladder up, left, right
+ {pea_plant,1.2f,10.0f, 0x8000,1.5f, SE_PLY_FOOTNOTE_CS_ROCK_CLIMB,SE_NULL, 0,0},
+ {tree_climb,1.2f,10.0f, 0xC000,1.5f, SE_PLY_FOOTNOTE_CS_ROCK_CLIMB,SE_NULL, 0,0},
+ {tree_climb,1.2f,10.0f, 0x4000,1.5f, SE_PLY_FOOTNOTE_CS_ROCK_CLIMB,SE_NULL, 0,0},
+ // Fall (default?)
+ {run,2.0f,10.0f, -1,-1.0f, SE_PLY_FOOTNOTE_DIRT,SE_NULL, 0,0},
+
+ // Swim
+ {swim_wait,1.2f,10.0f, -1,2.0f, SE_PLY_SWIM,SE_NULL, "Wm_mr_waterswim",0},
+ // Run
+ {b_dash2,3.0f,10.0f, -1,5.0f, SE_PLY_FOOTNOTE_DIRT,SE_NULL, 0,0},
+ // Pipe
+ {wait,2.0f,10.0f, 0x8000,1.0f, SE_NULL,SE_PLY_DOKAN_IN_OUT, 0,0},
+ // Door
+ {wait,2.0f,10.0f, 0x8000,0.2f, SE_NULL,SE_OBJ_DOOR_OPEN, 0,0},
+
+ // TJumped
+ {Tjumped,2.0f,0.0f, -1,-1.0f, SE_NULL,SE_NULL, 0,0},
+
+ // Enter/leave cave, these are handled specially
+ {run,1.0f,10.0f, -1,1.0f, SE_NULL,SE_NULL, 0,0},
+ {run,1.0f,10.0f, -1,1.0f, SE_NULL,SE_NULL, 0,0},
+
+ // Invisible, this is handled specially
+ {wait,2.0f,10.0f, -1,1.0f, SE_NULL,SE_NULL, 0,0},
+ };
+
+ isJumping = (path->animation >= dKPPath_s::JUMP && path->animation <= dKPPath_s::JUMP_WATER);
+
+ if (path->animation == dKPPath_s::ENTER_CAVE || path->animation == dKPPath_s::LEAVE_CAVE) {
+ scaleAnimProgress = 60;
+ if (path->animation == dKPPath_s::LEAVE_CAVE)
+ player->scale = (Vec){0.0f,0.0f,0.0f};
}
-
- SpammyReport("i\n");
+
+ player->visible = (path->animation != dKPPath_s::INVISIBLE);
+
+ int id = (path->animation < dKPPath_s::MAX_ANIM) ? 0 : (int)path->animation;
+
+ player->startAnimation(Animations[id].anim, Animations[id].animParam1, Animations[id].animParam2, 0.0f);
+
+ player->rot.y = (Animations[id].forceRotation >= 0) ? Animations[id].forceRotation : direction;
+ moveSpeed = (Animations[id].forceSpeed >= 0.0f) ? Animations[id].forceSpeed : 3.0f;
+
+ if (Animations[id].repeatEffect) {
+ player->hasEffect = true;
+ player->effectName = Animations[id].repeatEffect;
+ } else {
+ player->hasEffect = false;
+ }
+
+ if (Animations[id].repeatSound != SE_NULL) {
+ player->hasSound = true;
+ player->soundName = Animations[id].repeatSound;
+ } else {
+ player->hasSound = false;
+ }
+
+ if (Animations[id].initialEffect)
+ SpawnEffect(Animations[id].initialEffect, 0, &player->pos, 0, &player->scale);
+ if (Animations[id].initialSound != SE_NULL)
+ MapSoundPlayer(SoundRelatedClass, Animations[id].initialSound, 1);
}
void dWMPathManager_c::moveThroughPath() {
@@ -506,12 +464,23 @@ void dWMPathManager_c::moveThroughPath() {
from = reverseThroughPath ? currentPath->end : currentPath->start;
to = reverseThroughPath ? currentPath->start : currentPath->end;
+ daWMPlayer_c *player = daWMPlayer_c::instance;
+
+
+ if (scaleAnimProgress >= 0) {
+ float soFar = scaleAnimProgress * (1.6f / 60.0f);
+ float sc = (currentPath->animation == dKPPath_s::ENTER_CAVE) ? (1.6f - soFar) : soFar;
+ player->scale.x = player->scale.y = player->scale.z = sc;
+
+ scaleAnimProgress--;
+ return;
+ }
+
+
Vec move = (Vec){to->x - from->x, to->y - from->y, 0};
VECNormalize(&move, &move);
VECScale(&move, &move, moveSpeed);
- daWMPlayer_c *player = daWMPlayer_c::instance;
-
if (isJumping) {
float ys = (float)from->y;
float ye = (float)to->y;
diff --git a/src/koopatlas/pathmanager.h b/src/koopatlas/pathmanager.h
index e010aa4..d22168b 100644
--- a/src/koopatlas/pathmanager.h
+++ b/src/koopatlas/pathmanager.h
@@ -35,6 +35,8 @@ class dWMPathManager_c {
bool isJumping;
float moveSpeed;
+ int scaleAnimProgress;
+
dKPPath_s *currentPath;
bool reverseThroughPath; // direction we are going through the path
diff --git a/src/koopatlas/player.h b/src/koopatlas/player.h
index 6fbbf5a..d553afb 100644
--- a/src/koopatlas/player.h
+++ b/src/koopatlas/player.h
@@ -3,186 +3,7 @@
#include "koopatlas/core.h"
#include "poweruphax.h"
-
-enum PlayerAnim {
- wait = 0,
- walk = 1,
- run = 2,
- b_dash = 3,
- b_dash2 = 4,
- jump = 5,
- jump2 = 6,
- jumped = 7,
- Tjmp_c_1 = 8,
- Tjmp_c_2 = 9,
- Tjumped = 10,
- roll_jump = 11,
- Tjump2 = 12,
- mame_jump2 = 13,
- turn = 14,
- turned = 15,
- hipsr = 16,
- hipat = 17,
- hiped = 18,
- hip_to_stoop = 19,
- stoop = 20,
- stoop_start = 21,
- slip = 22,
- sliped = 23,
- slip_to_stoop = 24,
- carry_wait = 25,
- carry_walk = 26,
- carry_throw = 27,
- Rcarry_wait = 28,
- wsld = 29,
- fire_at = 30,
- swim_fire_at = 31,
- swim_fire_at2 = 32,
- star_roll = 33,
- P_swim = 34,
- swim = 35,
- swim_wait = 36,
- swim_throw = 37,
- swim_walk = 38,
- swim_standing = 39,
- paddle_1 = 40,
- paddle_2 = 41,
- paddle_carry = 42,
- tree_start = 43,
- tree_wait = 44,
- tree_climb = 45,
- tree_pose = 46,
- monkey_start = 47,
- monkey_wait_r = 48,
- monkey_wait_l = 49,
- monkey_r_to_l = 50,
- monkey_l_to_r = 51,
- net_wait = 52,
- net_walk1 = 53,
- net_walk2 = 54,
- net_attack = 55,
- pea_plant = 56,
- pea_plant_st = 57,
- pea_plant_wait = 58,
- wall_wait = 59,
- wall_walk_l = 60,
- wall_walk_r = 61,
- hang_start = 62,
- hang_up = 63,
- hang_wait = 64,
- hang_walk_l = 65,
- hang_walk_r = 66,
- w_jump1 = 67,
- w_jump2 = 68,
- RTjumped = 69,
- jump_hang = 70,
- spin_st = 71,
- spin_end = 72,
- spin_low_st = 73,
- spin_low_ed = 74,
- spin_jump2 = 75,
- spin_jump_end = 76,
- damF = 77,
- damB = 78,
- dowF = 79,
- dowB = 80,
- firejmp = 81,
- e_shock = 82,
- dead = 83,
- dead_pose = 84,
- Rtree_start = 85,
- Rtree_wait = 86,
- Rtree_pose = 87,
- goal_jump = 88,
- goal_jump_ed = 89,
- goal_puton_capA = 90,
- goal_puton_capB = 91,
- goal_puton_capC = 92,
- PL_Rgoal_puton_cap = 93,
- P_Rgoal_puton_cap = 94,
- goal_puton_capF = 95,
- waitB = 96,
- eat_out = 97,
- eat_success = 98,
- eat_fail = 99,
- eat_successB = 100,
- eat_successC = 101,
- Seat = 102,
- Seat_out = 103,
- Seat_success = 104,
- Seat_fail = 105,
- Seat_successB = 106,
- Seat_successC = 107,
- carryP_start = 108,
- carryP_wait = 109,
- carryP_walk = 110,
- carryP_throw = 111,
- carryP_waitR = 112,
- ride_on = 113,
- Fjump = 114,
- waitC = 115,
- set_to_wait = 116,
- star_rollB = 117,
- Sjump = 118,
- Sjump2 = 119,
- Sjumped = 120,
- get_down = 121,
- turnB = 122,
- turnedB = 123,
- ice_slipF = 124,
- ice_slipB = 125,
- rope_swing = 126,
- shoot = 127,
- shoot_slip = 128,
- shoot_slip_end = 129,
- low_walk_start = 130,
- low_walk = 131,
- swim_pipe = 132,
- door_walk = 133,
- PL_spin_jump = 134,
- waitL = 135,
- waitR = 136,
- fire_at2 = 137,
- blow_up = 138,
- P_slip = 139,
- P_slip_jump = 140,
- P_slip_jump2 = 141,
- FjumpB = 142,
- stamp = 143,
- waitRB = 144,
- waitLB = 145,
- waitR3 = 146,
- waitL3 = 147,
- boss_key_get = 148,
- balloon_wait = 149,
- slope_waitL = 150,
- slope_waitR = 151,
- slope_waitL2 = 152,
- slope_waitR2 = 153,
- carryP_waitLB = 154,
- carryP_waitRB = 155,
- carry_waitL = 156,
- carry_waitR = 157,
- spin_jump3 = 158,
- ride_wait = 159,
- P_paddle_1 = 160,
- P_paddle_2 = 161,
- poseL = 162,
- poseR = 163,
- gorl_wait = 164,
- dm_notice = 165,
- dm_noti_wait = 166,
- dm_surprise = 167,
- dm_surp_wait = 168,
- wait_select = 169,
- course_in = 170,
- waitD = 171,
- waitE = 172,
- dm_escort = 173,
- dm_glad = 174,
- ending_wait = 175,
- coin_comp = 176
-};
+#include <playeranim.h>
class daWMPlayer_c : public dActor_c {