diff --git a/modules/SACT/sprite.c b/modules/SACT/sprite.c index 656c56c..90b732e 100644 --- a/modules/SACT/sprite.c +++ b/modules/SACT/sprite.c @@ -363,10 +363,8 @@ int sp_set_move(int wNum, int wX, int wY) { sp->move.to.x = wX - sact.origin.x; sp->move.to.y = wY - sact.origin.y; - if (sp->move.time == 0) { - sp->move.time = -1; + if (!sp->move.time && !sp->move.speed) sp->move.speed = 100; - } sp->cur = sp->loc; @@ -382,17 +380,18 @@ int sp_set_movetime(int wNum, int wTime) { sp_assert_no(wNum); sact.sp[wNum]->move.time = wTime * 10; + sact.sp[wNum]->move.speed = 0; return OK; } // スプライト移動速度の設定 -int sp_set_movespeed(int wNum, int wTime) { +int sp_set_movespeed(int wNum, int wSpeed) { sp_assert_no(wNum); - if (wTime == 0) wTime = 1; + if (wSpeed == 0) wSpeed = 1; - sact.sp[wNum]->move.speed = wTime ; - sact.sp[wNum]->move.time = -1; + sact.sp[wNum]->move.speed = wSpeed; + sact.sp[wNum]->move.time = 0; return OK; } diff --git a/modules/SACT/sprite_move.c b/modules/SACT/sprite_move.c index f8a1785..be3b0c9 100644 --- a/modules/SACT/sprite_move.c +++ b/modules/SACT/sprite_move.c @@ -64,7 +64,8 @@ static void move_drain(sprite_t *sp) { sact.teventremovelist = slist_append(sact.teventremovelist, sp); sp->move.moving = FALSE; - sp->move.time = 0; // 移動時間の初期化 + if (sp->move.speed > 0) + sp->move.time = 0; } // SP_MOVE の timer event callback @@ -114,15 +115,18 @@ static int move_cb(sprite_t *sp, agsevent_t *e) { void spev_move_setup(void* data, void* userdata) { sprite_t *sp = (sprite_t *)data; - // 非表示のものは移動しない(いいのかな) - if (!sp->show) return; + // Hidden sprite just moves to its final location. + if (!sp->show) { + sp->cur = sp->loc = sp->move.to; + return; + } // move 開始時刻の記録 sp->move.starttime = sact.movestarttime; sp->move.moving = TRUE; // MOVE_SPEED で設定した場合は、移動量を考慮して移動時間を決定 - if (sp->move.time == -1) { + if (sp->move.speed > 0) { // speed から timeへ int dx = sp->move.to.x - sp->loc.x; int dy = sp->move.to.y - sp->loc.y; @@ -155,7 +159,7 @@ void spev_move_waitend(sprite_t *sp, int dx, int dy, int time) { sp->move.to.x = dx; sp->move.to.y = dy; sp->move.speed = time; - sp->move.time = -1; + sp->move.time = 0; sact.movelist = slist_append(sact.movelist, sp); sact.movestarttime = get_high_counter(SYSTEMCOUNTER_MSEC);