From 3eeac7bec0035ad69e5e16d4419290066ebe0cf7 Mon Sep 17 00:00:00 2001 From: hikerstk Date: Thu, 18 Oct 2007 13:22:20 +0000 Subject: [PATCH] 1) Fixes bug 1812403 (you could get rid of a bomb by using another banana, now the bomb will explode if you hit a banana). 2) All other 'bananas' now get more severe as well if you hit a banana while having an anvil/parachute attached (anvil: time is extended, parachute: you get an anvil with the same time as the parachute attached). git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@1276 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/attachment.cpp | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/attachment.cpp b/src/attachment.cpp index a6cd9b450..a76b7629d 100644 --- a/src/attachment.cpp +++ b/src/attachment.cpp @@ -64,17 +64,44 @@ void Attachment::set(attachmentType _type, float time, Kart *current_kart) // ----------------------------------------------------------------------------- void Attachment::hitGreenHerring() { - switch (rand()%3) + int random_attachment; + float leftover_time = 0.0f; + switch(getType()) // If there already is an attachment, make it worse :) { - case 0: set( ATTACH_PARACHUTE, stk_config->m_parachute_time ) ; + case ATTACH_BOMB: projectile_manager->newExplosion(m_kart->getCoord()); + // Best solution would probably be to trigger the + // explosion, and then to attach a new, random + // attachment. Unfortunately, handleExplosion() is not + // really severe enough, and forceRescue() attaches + // tinytux, so that the new attachment is immediately lost. + //m_kart->handleExplosion(m_kart->getCoord()->xyz, true); + m_kart->forceRescue(); + clear(); + random_attachment = rand()%3; + break; + case ATTACH_ANVIL :// if the kart already has an anvil, attach a new anvil, + // and increase the overall time + random_attachment = 2; + leftover_time = m_time_left; + break; + case ATTACH_PARACHUTE: + random_attachment = 2; // anvil + leftover_time = m_time_left; + break; + default: random_attachment = rand()%3; + } // switch + + switch (random_attachment) + { + case 0: set( ATTACH_PARACHUTE, stk_config->m_parachute_time+leftover_time); // if ( m_kart == m_kart[0] ) // sound -> playSfx ( SOUND_SHOOMF ) ; break ; - case 1: set( ATTACH_BOMB, stk_config->m_bomb_time ) ; + case 1: set( ATTACH_BOMB, stk_config->m_bomb_time+leftover_time); // if ( m_kart == m_kart[0] ) // sound -> playSfx ( SOUND_SHOOMF ) ; break ; - case 2: set( ATTACH_ANVIL, stk_config->m_anvil_time ) ; + case 2: set( ATTACH_ANVIL, stk_config->m_anvil_time+leftover_time); // if ( m_kart == m_kart[0] ) // sound -> playSfx ( SOUND_SHOOMF ) ; // Reduce speed once (see description above), all other changes are