// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
#include <config.h>
#include <typeinfo>
#include "sprite/sprite.hpp"
#include "sector.hpp"
#include "resources.hpp"
-#include "video/screen.hpp"
#include "statistics.hpp"
#include "game_session.hpp"
#include "object/tilemap.hpp"
#include "object/bullet.hpp"
#include "trigger/trigger_base.hpp"
#include "control/joystickkeyboardcontroller.hpp"
-#include "scripting/wrapper_util.hpp"
+#include "scripting/squirrel_util.hpp"
#include "main.hpp"
#include "platform.hpp"
#include "badguy/badguy.hpp"
if(body != NULL)
body->draw(context, pos, layer-3);
if(arms != NULL)
- arms->draw(context, pos, layer);
+ arms->draw(context, pos, layer+10);
if(feet != NULL)
feet->draw(context, pos, layer-2);
}
}
void
-Player::set_bonus(const std::string& bonustype)
+Player::add_bonus(const std::string& bonustype)
{
if(bonustype == "grow")
- set_bonus(GROWUP_BONUS);
+ add_bonus(GROWUP_BONUS);
else if(bonustype == "fireflower")
- set_bonus(FIRE_BONUS);
+ add_bonus(FIRE_BONUS);
else if(bonustype == "iceflower")
- set_bonus(ICE_BONUS);
+ add_bonus(ICE_BONUS);
else if(bonustype == "none")
- set_bonus(NO_BONUS);
+ add_bonus(NO_BONUS);
std::ostringstream msg;
}
void
-Player::set_bonus(BonusType type, bool animate)
+Player::add_bonus(BonusType type, bool animate)
{
- if(player_status->bonus >= type)
+ // always ignore NO_BONUS
+ if (type == NO_BONUS) {
return;
-
+ }
+
+ // ignore GROWUP_BONUS if we're already big
+ if (type == GROWUP_BONUS) {
+ if (player_status->bonus == GROWUP_BONUS) return;
+ if (player_status->bonus == FIRE_BONUS) return;
+ if (player_status->bonus == ICE_BONUS) return;
+ }
+
+ set_bonus(type, animate);
+}
+
+void
+Player::set_bonus(BonusType type, bool animate)
+{
if(player_status->bonus == NO_BONUS) {
adjust_height = 62.8;
if(animate)
growing_timer.start(GROWING_TIME);
}
-
+
+ if ((type == NO_BONUS) || (type == GROWUP_BONUS)) {
+ player_status->max_fire_bullets = 0;
+ player_status->max_ice_bullets = 0;
+ }
+ if (type == FIRE_BONUS) player_status->max_fire_bullets++;
+ if (type == ICE_BONUS) player_status->max_ice_bullets++;
+
player_status->bonus = type;
}
else
tux_body = small_tux;
- int layer = LAYER_OBJECTS + 10;
+ int layer = LAYER_OBJECTS + 1;
/* Set Tux sprite action */
if (duck && is_big())
|| player_status->bonus == ICE_BONUS)
{
safe_timer.start(TUX_SAFE_TIME);
- player_status->bonus = GROWUP_BONUS;
+ set_bonus(GROWUP_BONUS);
}
else
{
safe_timer.start(TUX_SAFE_TIME /* + GROWING_TIME */);
adjust_height = 30.8;
duck = false;
- player_status->bonus = NO_BONUS;
+ set_bonus(NO_BONUS);
}
}
else
physic.set_acceleration(0, 0);
physic.set_velocity(0, 700);
player_status->coins -= 25;
- player_status->bonus = NO_BONUS;
+ set_bonus(NO_BONUS);
dying = true;
dying_timer.start(3.0);
set_group(COLGROUP_DISABLED);