r79 - in trunk/src: . objects
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Feb 1 08:33:04 EST 2005
Author: jonas
Date: 2005-02-01 08:33:04 -0500 (Tue, 01 Feb 2005)
New Revision: 79
Modified:
trunk/src/characters_common.cpp
trunk/src/characters_common.h
trunk/src/events.cpp
trunk/src/events.h
trunk/src/objects/erik.cpp
trunk/src/objects/fang.cpp
trunk/src/objects/olaf.cpp
trunk/src/objects/scorch.cpp
trunk/src/objects/water.cpp
trunk/src/objects/zombie.cpp
trunk/src/players_common.cpp
Log:
Changed the horizontal speed management to be similar to the vertical:
- Introduced a horizontal inert mass
- Introduced a constant horizontal air resistance
- Removed all occurencies of Speed modifiers, increased/decreased the
maximal horizonzal speed instead
- simplified (or removed) Speed/Run events
- tweaked ?\209?\155ome speed settings for zombies and olaf (small)
Modified: trunk/src/characters_common.cpp
===================================================================
--- trunk/src/characters_common.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/characters_common.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -16,7 +16,6 @@
hspeed(0),
speed(0),
gravity(900),
- speedmod(100),
Dgrav(0),
im_die(NULL),
dense_types(NOTHING),
@@ -86,8 +85,8 @@
Hit Character::move(Uint16 dt, bool check) {
SDL_Rect dest=pos;
- dest.x+=Sint16((hspeed*speedmod*dt)/100000);
- dest.y+=Sint16((speed*speedmod*dt)/100000);
+ dest.x+=Sint16((hspeed*dt)/1000);
+ dest.y+=Sint16((speed*dt)/1000);
Hit hit=checkMove(dest,check);
Modified: trunk/src/characters_common.h
===================================================================
--- trunk/src/characters_common.h 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/characters_common.h 2005-02-01 13:33:04 UTC (rev 79)
@@ -9,6 +9,7 @@
#define V_KRIT 1000
#define T_GRAV_EFFECT 10
#define T_AI_EFFECT 20
+#define SPEED_STEP 10
//Character states
//facing: either left or right (not left)
@@ -60,11 +61,11 @@
}
//@}
//@{
- void applySpeedMod(Uint16 speedm) {
- speedmod=Uint16(speedmod*speedm/100);
+ Uint16 addMaxSpeed(Sint16 dmax) {
+ return maxspeedx=max(0,maxspeedx+dmax);
}
- void setSpeedMod(Uint16 speedm) {
- speedmod=speedm;
+ Uint16 setMaxSpeed(Uint16 maxs) {
+ return maxspeedx=maxs;
}
//@}
//@{
@@ -165,8 +166,6 @@
Sint16 speed;
//current gravity
Sint16 gravity;
- //current speedmod
- Uint16 speedmod;
//temporary attributes
Sint16 Dgrav;
//Die animation
Modified: trunk/src/events.cpp
===================================================================
--- trunk/src/events.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/events.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -124,37 +124,32 @@
CEvent::cancel();
}
-ESpeed::ESpeed(Character* chr, Uint16 length, Sint16 avspeed, Sint16 ahspeed, Uint16 edelay, Uint32 switchstate, Mix_Chunk* esound, Animation* runanim, bool delanim):
- CAnimEvent(chr,length,edelay,switchstate,esound,runanim,delanim),
- vspeed(avspeed),
- hspeed(ahspeed) { }
-void ESpeed::start() {
- charowner->addSpeed(vspeed);
- charowner->addHSpeed(hspeed);
- CAnimEvent::start();
-}
-void ESpeed::end() {
- if (started) charowner->addHSpeed(-hspeed);
- CAnimEvent::end();
-}
-void ESpeed::cancel() {
- if (started) charowner->addHSpeed(-hspeed);
- CAnimEvent::cancel();
-}
-
-ERun::ERun(Character* chr, Uint16 length, Sint16 inispeed, Sint16 ahspeed, Uint16 edelay, Uint32 switchstate, Mix_Chunk* esound, Animation* runanim, bool delanim):
- ESpeed(chr,length,0,ahspeed,edelay,(switchstate|STATE_PRESS_LR),esound,runanim,delanim),
- ispeed(inispeed),
+ERun::ERun(Character* chr, Uint16 length, Sint16 edmax, Uint16 edelay, Uint32 switchstate, Mix_Chunk* esound, Animation* runanim, bool delanim):
+ CAnimEvent(chr,length,edelay,(switchstate|STATE_PRESS_LR),esound,runanim,delanim),
+ dmax(edmax),
t_reset(0) {
charowner->setState(STATE_RUN);
- charowner->addHSpeed(ispeed);
}
ERun::~ERun() {
charowner->unsetState(STATE_RUN);
- charowner->addHSpeed(-ispeed);
owner->clearEvents();
}
+void ERun::start() {
+ charowner->addMaxSpeed(dmax);
+ CAnimEvent::start();
+}
+
+void ERun::end() {
+ if (started) charowner->addMaxSpeed(-dmax);
+ CAnimEvent::end();
+}
+
+void ERun::cancel() {
+ if (started) charowner->addMaxSpeed(-dmax);
+ CAnimEvent::cancel();
+}
+
void ERun::reset() {
t_reset=0;
}
@@ -164,7 +159,7 @@
if (t_reset>100) {
evstate=EV_CANCEL;
} else {
- evstate=ESpeed::update(dt);
+ evstate=CAnimEvent::update(dt);
}
return evstate;
}
Modified: trunk/src/events.h
===================================================================
--- trunk/src/events.h 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/events.h 2005-02-01 13:33:04 UTC (rev 79)
@@ -113,43 +113,28 @@
Uint16 mask;
};
-/** \brief Speed modification event
-
- Modifies the vertical and/or the horizontal speed.
-*/
-class ESpeed : public CAnimEvent {
- public:
- /// \param avspeed Vertical speed to be add when the event starts
- /// \param ahspeed Horizontal speed to be add when the event starts
- ESpeed(Character* chr, Uint16 length, Sint16 avspeed, Sint16 ahspeed=0, Uint16 edelay=0,
- Uint32 switchstate=0, Mix_Chunk* esound=NULL, Animation* runanim=NULL, bool delanim=false);
- virtual void start();
- virtual void end();
- virtual void cancel();
- protected:
- Sint16 vspeed;
- Sint16 hspeed;
-};
-
/** \brief Delayed (accelerated) run event
A special speed event that increases the horizontal speed after a while,
has to be constantly maintained using reset().
*/
-class ERun : public ESpeed {
+class ERun : public CAnimEvent {
public:
/// Adds the initial speed
/// \param inispeed Initial horizontal speed to be added
/// \param ahspeed Horizontal speed to be added when the event starts
- ERun(Character* chr, Uint16 length, Sint16 inispeed, Sint16 ahspeed, Uint16 edelay=0,
+ ERun(Character* chr, Uint16 length, Sint16 edmax, Uint16 edelay=0,
Uint32 switchstate=0, Mix_Chunk* esound=NULL, Animation* runanim=NULL, bool delanim=false);
virtual ~ERun();
/// Forces the event to continue
+ virtual void start();
+ virtual void end();
+ virtual void cancel();
virtual void reset();
/// If the event wasn't forced to continue it will shortly end
virtual Uint16 update(Uint16 dt);
protected:
- Sint16 ispeed;
+ Sint16 dmax;
Sint16 t_reset;
};
Modified: trunk/src/objects/erik.cpp
===================================================================
--- trunk/src/objects/erik.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/objects/erik.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -46,10 +46,12 @@
if (state&STATE_ACT_2) {
} else if (state&STATE_ACT_1) {
setState(STATE_ACT_2);
- setEvent(new ESpeed(this,DE_JUMP,jump2,0,0,0,au_jump));
+ addSpeed(jump2);
+ setEvent(new CAnimEvent(this,DE_JUMP,0,0,au_jump));
} else {
setState(STATE_ACT_1);
- setEvent(new ESpeed(this,DE_JUMP,jump));
+ addSpeed(jump);
+ setEvent(new CAnimEvent(this,DE_JUMP));
}
}
@@ -61,15 +63,11 @@
if (state&STATE_RUN) cancelEvent();
return;
}
- dense_types|=OTYPE_MONSTER;
if (state&STATE_RUN) {
+ dense_types|=OTYPE_MONSTER;
if (state&STATE_FALL) cancelEvent();
- } else if (state&STATE_MLEFT) {
- sfxeng->playWAV(au_run);
- setEvent(new ERun(this,10000,Sint16(-1/2*maxspeedx),-maxspeedx,500,ESTATE_ABORT,au_run));
- } else if (state&STATE_MRIGHT) {
- sfxeng->playWAV(au_run);
- setEvent(new ERun(this,10000,Sint16(1/2*maxspeedx),maxspeedx,500,ESTATE_ABORT,au_run));
+ } else if (state&(STATE_MLEFT|STATE_MRIGHT)) {
+ setEvent(new ERun(this,10000,maxspeedx,500,ESTATE_ABORT,au_run));
}
}
Modified: trunk/src/objects/fang.cpp
===================================================================
--- trunk/src/objects/fang.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/objects/fang.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -48,6 +48,10 @@
}
void Fang::fall(Uint16 dt) {
+ if (!getState(STATE_MRIGHT|STATE_MLEFT)) {
+ if (!getState(STATE_FALL)) hspeed*=0.9;
+ else hspeed*=0.96;
+ }
Dgrav+=dt;
if (Dgrav>T_GRAV_EFFECT) {
if (state&STATE_FALL) {
@@ -74,15 +78,20 @@
unsetState(STATE_LEFT);
unsetState(STATE_CLIMB_L);
setState(STATE_ACT_1);
- setEvent(new ESpeed(this,T_JUMPOFF,V_JUMPOFF,Sint16(maxspeedx*1.5),0,0,au_jump));
+ addSpeed(V_JUMPOFF);
+ addHSpeed(maxspeedx);
+ setEvent(new CAnimEvent(this,T_JUMPOFF,0,0,au_jump));
} else if (state&STATE_CLIMB_R) {
setState(STATE_LEFT);
unsetState(STATE_CLIMB_R);
setState(STATE_ACT_1);
- setEvent(new ESpeed(this,T_JUMPOFF,V_JUMPOFF,Sint16(-maxspeedx*1.5),0,0,au_jump));
+ addSpeed(V_JUMPOFF);
+ addHSpeed(-maxspeedx);
+ setEvent(new CAnimEvent(this,T_JUMPOFF,0,0,au_jump));
} else if ((!(state&STATE_FALL)) && (!(state&STATE_ACT_1))){
setState(STATE_ACT_1);
- setEvent(new ESpeed(this,DE_JUMP,V_JUMP,0,0,0,au_jump));
+ addSpeed(V_JUMP);
+ setEvent(new CAnimEvent(this,DE_JUMP,0,0,au_jump));
}
}
Modified: trunk/src/objects/olaf.cpp
===================================================================
--- trunk/src/objects/olaf.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/objects/olaf.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -124,11 +124,11 @@
//as we don't fall most states are off anyway
unsetState(STATE_SHIELD);
setState(STATE_SMALL);
- maxspeedx/=4;
+ addMaxSpeed(-200);
} else {
sfxeng->playWAV(au_big);
unsetState(STATE_SMALL);
- maxspeedx*=4;
+ addMaxSpeed(200);
}
return true;
} else return false;
@@ -174,12 +174,17 @@
//Fart
} else {
setState(STATE_ACT_1);
- setEvent(new ESpeed(this,DE_JUMP,fart,0,0,0,au_fart));
+ addSpeed(fart);
+ setEvent(new CAnimEvent(this,DE_JUMP,0,0,au_fart));
}
}
}
void Olaf::fall(Uint16 dt) {
+ if (!getState(STATE_MRIGHT|STATE_MLEFT)) {
+ if (!getState(STATE_FALL)) hspeed*=0.9;
+ else hspeed*=0.96;
+ }
Dgrav+=dt;
if (Dgrav>T_GRAV_EFFECT) {
if (state&STATE_FALL) {
Modified: trunk/src/objects/scorch.cpp
===================================================================
--- trunk/src/objects/scorch.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/objects/scorch.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -35,6 +35,10 @@
}
void Scorch::fall(Uint16 dt) {
+ if (!getState(STATE_MRIGHT|STATE_MLEFT)) {
+ if (!getState(STATE_FALL)) hspeed*=0.9;
+ else hspeed*=0.96;
+ }
Dgrav+=dt;
if (Dgrav>T_GRAV_EFFECT) {
if (state&STATE_FALL) {
@@ -65,12 +69,14 @@
setState(STATE_ACT_1);
setState(STATE_ACT_2);
unsetState(STATE_GLIDE);
- setEvent(new ESpeed(this,DE_WING,V_FLY,0,0,0,au_tired));
+ addSpeed(V_FLY);
+ setEvent(new CAnimEvent(this,DE_WING,0,0,au_tired));
//Use Wings
} else {
setState(STATE_ACT_1);
left_wings--;
- setEvent(new ESpeed(this,DE_WING,V_FLY,0,0,0,au_swing));
+ addSpeed(V_FLY);
+ setEvent(new CAnimEvent(this,DE_WING,0,0,au_swing));
}
}
Modified: trunk/src/objects/water.cpp
===================================================================
--- trunk/src/objects/water.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/objects/water.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -19,7 +19,7 @@
if(Character* ptr = dynamic_cast<Character*>(obj)) {
sfxeng->playWAV(au_water);
ptr->setState(STATE_WATER);
- ptr->applySpeedMod(50);
+ ptr->addMaxSpeed(-200);
ptr->hit(DIR_ALL,weapon);
}
}
@@ -27,7 +27,7 @@
void Water::leave(Object* obj) {
if(Character* ptr = dynamic_cast<Character*>(obj)) {
sfxeng->playWAV(au_water);
- ptr->applySpeedMod(200);
+ ptr->addMaxSpeed(200);
ptr->unsetState(STATE_WATER);
}
}
Modified: trunk/src/objects/zombie.cpp
===================================================================
--- trunk/src/objects/zombie.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/objects/zombie.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -14,7 +14,7 @@
Monster(imagename,xcord,ycord,mname),
au_attack(sndcache->loadWAV("clang.wav")),
T_Attack_Bite(1500) {
- maxspeedx=100;
+ maxspeedx=80;
im_left=new Animation(imgcache->loadImage("olaf1_left.bmp"),2,1000);
im_right=new Animation(imgcache->loadImage("olaf1_right.bmp"),2,1000);
weapon=Weapon(-1,W_STRIKE);
@@ -26,14 +26,14 @@
}
void Zombie::idle(Uint16 dt) {
- hspeed=0;
Character::idle(dt);
runAI(dt);
}
void Zombie::ai_left(Uint16 dt) {
SDL_Rect oldpos=pos;
- hspeed-=maxspeedx;
+ if ((hspeed-SPEED_STEP)>maxspeedx) hspeed-=SPEED_STEP;
+ else if (hspeed>(-maxspeedx)) hspeed=-maxspeedx;
Hit hit=move(dt,true);
if (hit.touch&enemy_types) {
move(dt);
@@ -52,7 +52,8 @@
void Zombie::ai_right(Uint16 dt) {
SDL_Rect oldpos=pos;
- hspeed+=maxspeedx;
+ if ((hspeed+SPEED_STEP)<maxspeedx) hspeed+=SPEED_STEP;
+ else if (hspeed<maxspeedx) hspeed=maxspeedx;
Hit hit=move(dt,true);
if (hit.touch&enemy_types) {
move(dt);
Modified: trunk/src/players_common.cpp
===================================================================
--- trunk/src/players_common.cpp 2005-01-31 19:16:29 UTC (rev 78)
+++ trunk/src/players_common.cpp 2005-02-01 13:33:04 UTC (rev 79)
@@ -199,32 +199,24 @@
void Player::in_right(Sint16 dt) {
if (dt < 0) {
- if (state&STATE_MRIGHT) {
- unsetState(STATE_MRIGHT);
- hspeed-=maxspeedx;
- }
+ unsetState(STATE_MRIGHT);
return;
}
unsetState(STATE_LEFT);
- if (!(state&STATE_MRIGHT)) {
- hspeed+=maxspeedx;
- setState(STATE_MRIGHT);
- }
+ setState(STATE_MRIGHT);
+ if ((hspeed+SPEED_STEP)<maxspeedx) hspeed+=SPEED_STEP;
+ else if (hspeed<maxspeedx) hspeed=maxspeedx;
}
void Player::in_left(Sint16 dt) {
if (dt < 0) {
- if (state&STATE_MLEFT) {
- unsetState(STATE_MLEFT);
- hspeed+=maxspeedx;
- }
+ unsetState(STATE_MLEFT);
return;
}
setState(STATE_LEFT);
- if (!(state&STATE_MLEFT)) {
- hspeed-=maxspeedx;
- setState(STATE_MLEFT);
- }
+ setState(STATE_MLEFT);
+ if ((hspeed-SPEED_STEP)>(-maxspeedx)) hspeed-=SPEED_STEP;
+ else if (hspeed>(-maxspeedx)) hspeed=-maxspeedx;
}
void Player::in_up(Sint16) { }
void Player::in_down(Sint16) { }
@@ -236,6 +228,10 @@
}
void Player::fall(Uint16 dt) {
+ if (!getState(STATE_MRIGHT|STATE_MLEFT)) {
+ if (!getState(STATE_FALL)) hspeed*=0.9;
+ else hspeed*=0.96;
+ }
Character::fall(dt);
}
@@ -358,8 +354,15 @@
case W_TOUCH: {
//TODO: play animations (make new Event for this)
if (direction&(DIR_UP|DIR_DOWN)) sfxeng->playWAV(aud_hit);
- if (direction&DIR_LEFT) setEvent(new ESpeed(this,TSTRIKE,-200,-400,0,ESTATE_BUSY,aud_hit));
- else setEvent(new ESpeed(this,TSTRIKE,-200,400,0,ESTATE_BUSY,aud_hit));
+ if (direction&DIR_LEFT) {
+ addSpeed(-200);
+ addHSpeed(-400);
+ setEvent(new CAnimEvent(this,TSTRIKE,0,ESTATE_BUSY,aud_hit));
+ } else {
+ addSpeed(-200);
+ addHSpeed(400);
+ setEvent(new CAnimEvent(this,TSTRIKE,0,ESTATE_BUSY,aud_hit));
+ }
break;
}
case W_WATER: {
More information about the lostpenguins-commits
mailing list