You are not logged in.
Есть ли какая-то информация о скриптовой составляющей мини-игры с попаданием в ноты во время миссии с танцами на лоурайдерах, или в танцах в клубе и т.д.
Я попытался собственноручно посмотреть как оно работает в исходнике и понял, что основная ветка в LOWGAME, начиная с LOWGAME_10566 примерно. К сожалению, моих познаний не хватает.
Кто может помочь с воссозданием подобной миссии или имеет хоть какую-то информацию о ней? Ничего подобного нагуглить к сожалению не смог.
Offline
вот исходник лоурайдера
MISSION_START
MISSION_END
// GLOBALS
VAR_INT lowrider_game_is_active
VAR_INT lowrider_pscore
VAR_INT lowrider_oscore
VAR_INT lowrider_level
VAR_INT lowrider_last_level
VAR_INT lowrider_opposition_skill
VAR_FLOAT wheel_fl wheel_bl wheel_fr wheel_br
CONST_INT LOWRIDER_PERFECT_SCORE 50
CONST_INT LOWRIDER_GOOD_SCORE 25
CONST_INT LOWRIDER_OK_SCORE 15
CONST_INT LOWRIDER_BAD_SCORE 0
CONST_INT LOWRIDER_VBAD_SCORE 0
CONST_INT LOWRIDER_PERFECT_TIME 126
CONST_INT LOWRIDER_PERFECT_TIME_NEG -126
CONST_INT LOWRIDER_GOOD_TIME 244
CONST_INT LOWRIDER_GOOD_TIME_NEG -244
CONST_INT LOWRIDER_OK_TIME 344
CONST_INT LOWRIDER_OK_TIME_NEG -344
CONST_INT LOWRIDER_BAD_TIME 450
CONST_INT LOWRIDER_BAD_TIME_NEG -450
CONST_INT LOWRIDER_BEAT_PERFECT 0
CONST_INT LOWRIDER_BEAT_GOOD 1
CONST_INT LOWRIDER_BEAT_ALRIGHT 2
CONST_INT LOWRIDER_BEAT_PAST 3
CONST_INT LOWRIDER_BEAT_FUTURE 4
CONST_INT LOWRIDER_BEAT_WRONG_BUTTON 5
CONST_INT LOWRIDER_BEAT_MISTIMED_BUTTON 6
CONST_INT LOWRIDER_SCORE_LIMIT 999999
CONST_INT LOWRIDER_OVERALL_BAD 0
CONST_INT LOWRIDER_OVERALL_GOOD 1
CONST_INT LOWRIDER_OVERALL_PERFECT 2
CONST_INT LOWRIDER_SCORE_PERFECT_MULTIPLER 10
CONST_INT SPRITE_PERFECT 54
CONST_INT SPRITE_BAD 55
CONST_INT SPRITE_GOOD 56
CONST_INT LOWRIDER_SCORE_TOTAL_BEATS_TO_REPORT 4
VAR_INT lowr_perfect_beat_counter
VAR_INT lowr_good_beat_counter
VAR_INT lowr_bad_beat_counter
VAR_INT lowr_overall_state
{
lowrider_game:
SCRIPT_NAME LOWGAME
// input parameters
LVAR_INT pcar
LVAR_INT ocar
LVAR_INT bounce_girl
// workings
LVAR_FLOAT pcar_x pcar_y pcar_z
LVAR_FLOAT ocar_x ocar_y ocar_z
LVAR_FLOAT vec_x vec_y vec_z
LVAR_FLOAT force_multiplier
LVAR_INT flag
LVAR_INT temp_seq
LVAR_INT lowrider_sequence
LVAR_INT car_got_roof
LVAR_INT temp_int
LVAR_INT player_stick_position
LVAR_INT last_stick_position
LVAR_INT beat_time beat_type beat_num
LVAR_INT beat_fuckup
LVAR_INT cumulative_score
LVAR_INT last_scored_beat
LVAR_FLOAT temp_float
LVAR_INT last_opp_scored_beat
VAR_INT old_beat_num
LVAR_INT last_print
LVAR_INT consecutive_goods
LVAR_INT consecutive_bads
// set initial flags
force_multiplier = 0.01
lowrider_level = 0
flag = 0
car_got_roof = 0
lowrider_pscore = 0
lowrider_oscore = 0
player_stick_position = 0
beat_fuckup = 0
cumulative_score = 0
last_scored_beat = -1
last_opp_scored_beat = 0
last_stick_position = 0
old_beat_num = -1
LOAD_SPRITE SPRITE_BAD upr
LOAD_SPRITE SPRITE_PERFECT downl
LOAD_SPRITE SPRITE_GOOD upl
// fake creates
IF flag = -1
CREATE_CAR PONY 0.0 0.0 0.0 pcar
CREATE_CAR PONY 0.0 0.0 0.0 ocar
CREATE_CHAR PEDTYPE_CIVMALE MALE01 0.0 0.0 0.0 bounce_girl
WAIT 0
WAIT 0
WAIT 0
ENDIF
// check input is valid
IF DOES_VEHICLE_EXIST pcar
IF IS_CAR_DEAD pcar
GOTO terminate_lowrider_game
ENDIF
ELSE
GOTO terminate_lowrider_game
ENDIF
IF DOES_VEHICLE_EXIST ocar
IF IS_CAR_DEAD ocar
GOTO terminate_lowrider_game
ENDIF
ELSE
GOTO terminate_lowrider_game
ENDIF
IF lowrider_opposition_skill < 1
lowrider_opposition_skill = 1
ELSE
IF lowrider_opposition_skill > 5
lowrider_opposition_skill = 5
ENDIF
ENDIF
// get initial values
IF NOT IS_CAR_DEAD pcar
GET_CAR_COORDINATES pcar pcar_x pcar_y pcar_z
ENDIF
IF NOT IS_CAR_DEAD ocar
GET_CAR_COORDINATES ocar ocar_x ocar_y ocar_z
ENDIF
lowrider_game_is_active = 1
lowrider_game_loop:
WAIT 0
// this is to fix the bug if player dies from starvation while on mini game
IF flag < 5
IF NOT DOES_VEHICLE_EXIST pcar
bd_terminate_script = 1
flag = 5
ENDIF
ENDIF
SWITCH flag
// initialise
CASE 0
SET_CAR_DENSITY_MULTIPLIER 0.0
SET_PED_DENSITY_MULTIPLIER 0.0
CLEAR_AREA pcar_x pcar_y pcar_z 200.0 TRUE
// load anims
REQUEST_ANIMATION LOWRIDER
WHILE NOT HAS_ANIMATION_LOADED LOWRIDER
WAIT 0
ENDWHILE
// setup girl in car
IF NOT IS_CAR_DEAD pcar
LOCK_CAR_DOORS pcar CARLOCK_LOCKED_PLAYER_INSIDE
APPLY_BRAKES_TO_PLAYERS_CAR player1 ON
SET_CAR_PROOFS pcar TRUE TRUE TRUE TRUE TRUE
// default offsets
x = 0.6200
y = 0.3100
z = -0.1670
ENDIF
TIMERB = 0
// give girl initial sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idleloop LOWRIDER 4.0 FALSE FALSE FALSE FALSE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idleloop LOWRIDER 4.0 FALSE FALSE FALSE FALSE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idleloop LOWRIDER 4.0 FALSE FALSE FALSE FALSE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idleloop LOWRIDER 4.0 FALSE FALSE FALSE FALSE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_hurry LOWRIDER 4.0 FALSE FALSE FALSE FALSE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_hair LOWRIDER 4.0 FALSE FALSE FALSE FALSE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idleloop LOWRIDER 4.0 FALSE FALSE FALSE FALSE -1
SET_SEQUENCE_TO_REPEAT lowrider_sequence 1
CLOSE_SEQUENCE_TASK lowrider_sequence
IF NOT IS_CHAR_DEAD bounce_girl
IF IS_CHAR_ATTACHED_TO_ANY_CAR bounce_girl
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
ENDIF
ENDIF
// check if car has roof
car_got_roof = 0
IF NOT IS_CAR_DEAD pcar
IF IS_CAR_MODEL pcar REMINGTN
OR IS_CAR_MODEL pcar SLAMVAN
OR IS_CAR_MODEL pcar TORNADO
car_got_roof = 1
ELSE
IF IS_CAR_MODEL pcar BLADE
OR IS_CAR_MODEL pcar BROADWAY
OR IS_CAR_MODEL pcar SAVANNA
GET_CURRENT_CAR_MOD pcar VEHICLE_UPGRADE_ROOF temp_int
IF NOT temp_int = -1
car_got_roof = 1
ENDIF
ELSE
car_got_roof = 1
ENDIF
ENDIF
ENDIF
IF NOT IS_CHAR_DEAD bounce_girl
IF NOT IS_CHAR_ATTACHED_TO_ANY_CAR bounce_girl
car_got_roof = 1
ENDIF
ENDIF
// initialise all the scores
lowr_perfect_beat_counter = 0
lowr_good_beat_counter = 0
lowr_bad_beat_counter = 0
lowrider_pscore = 0
lowr_overall_state = 0
lowrider_oscore = 0
flag++
BREAK
// wait to make sure track is playing
CASE 1
GET_BEAT_TRACK_STATUS temp_int
IF temp_int = CUTSCENE_TRACK_PLAYING
//DISPLAY_NTH_ONSCREEN_COUNTER_WITH_STRING lowrider_pscore COUNTER_DISPLAY_NUMBER 1 LOWR1
//DISPLAY_NTH_ONSCREEN_COUNTER_WITH_STRING lowrider_oscore COUNTER_DISPLAY_NUMBER 2 LOWR2
flag++
TIMERA = 0
ENDIF
BREAK
// game is playing - update scores and bounce girl
CASE 2
GET_BEAT_TRACK_STATUS temp_int
IF TIMERB > 40000
IF lowr_overall_state = LOWRIDER_OVERALL_PERFECT
IF IS_BIG_VEHICLE 42 // Hack to determine if the game is in English langauge setting
DRAW_SPRITE SPRITE_PERFECT 340.0 30.0 95.0 25.0 255 255 255 255
ELSE
PRINT_BIG DNC_002 50000 5 // PERFECT!
ENDIF
ENDIF
IF lowr_overall_state = LOWRIDER_OVERALL_GOOD
IF IS_BIG_VEHICLE 42
DRAW_SPRITE SPRITE_GOOD 350.0 30.0 49.5 26.1 255 255 255 255
ELSE
PRINT_BIG DNC_004 50000 5 // GOOD!
ENDIF
ENDIF
IF lowr_overall_state = LOWRIDER_OVERALL_BAD
IF IS_BIG_VEHICLE 42
DRAW_SPRITE SPRITE_BAD 350.0 30.0 35.7 20.7 255 255 255 255
ELSE
PRINT_BIG DNC_003 50000 5 // BAD!
ENDIF
ENDIF
ENDIF
IF IS_PS2_KEYBOARD_KEY_JUST_PRESSED PS2_KEY_SPACE
TIMERA = 90000
ENDIF
GET_BEAT_PROXIMITY -1 beat_time beat_type beat_num
IF NOT beat_type = 33
LVAR_FLOAT fTempVal
fTempVal = 0.0
fTempVal =# lowrider_pscore
SET_WIDGET_INFO WIDGET_PLAYER_SCORE 1 0 0 1 1 fTempVal LOWR1
fTempVal =# lowrider_oscore
SET_WIDGET_INFO WIDGET_OPPOSITION_SCORE 1 0 0 1 1 fTempVal LOWR2
FORCE_BIG_MESSAGE_AND_COUNTER TRUE
/// ------------- FIGURE HOW GOOD THIS ATTEMPT WAS -----------------------------------
GET_BEAT_PROXIMITY 0 beat_time beat_type beat_num
//WRITE_DEBUG_WITH_INT beat_num beat_num
// scoring system ---------------------------------------
GOSUB LOWR_get_stick_position
IF NOT beat_type = SPRITE_STKUR
AND NOT beat_type = SPRITE_STKDL
AND NOT beat_type = SPRITE_STKUL
AND NOT beat_type = SPRITE_STKDR
IF NOT beat_num = last_scored_beat
stored_beat = -1
// if player has moved stick
IF NOT player_stick_position = 0
// player hits beat spot on (zone 1)
IF beat_time > LOWRIDER_PERFECT_TIME_NEG
AND beat_time < LOWRIDER_PERFECT_TIME
// player has hit the right beat
IF player_stick_position = beat_type
stored_beat = LOWRIDER_BEAT_PERFECT
ELSE
// player hits wrong beat
beat_fuckup = 1
stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
ENDIF
ELSE
// player hits beat medium zone (zone 2)
IF beat_time > LOWRIDER_GOOD_TIME_NEG
AND beat_time < LOWRIDER_GOOD_TIME
// player has hit the right beat
IF player_stick_position = beat_type
stored_beat = LOWRIDER_BEAT_GOOD
ELSE
// player hits wrong beat
beat_fuckup = 1
stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
ENDIF
ELSE
// player hits beat in easy zone (zone 3)
IF beat_time > LOWRIDER_OK_TIME_NEG
AND beat_time < LOWRIDER_OK_TIME
// player has hit the right beat
IF player_stick_position = beat_type
stored_beat = LOWRIDER_BEAT_ALRIGHT
ELSE
// player hits wrong beat
beat_fuckup = 1
stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
ENDIF
ELSE
// player has missed beat
IF beat_time > LOWRIDER_BAD_TIME_NEG
OR beat_time < LOWRIDER_BAD_TIME
IF player_stick_position = beat_type
beat_fuckup = 1
IF beat_time < 0
stored_beat = LOWRIDER_BEAT_PAST
ELSE
stored_beat = LOWRIDER_BEAT_FUTURE
ENDIF
ELSE
beat_fuckup = 1
stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BD_RenderHit = 0
IF stored_beat = LOWRIDER_BEAT_PERFECT
BD_RenderHit = BD_HIT_PERFECT
consecutive_goods++
ELSE
IF stored_beat = LOWRIDER_BEAT_GOOD
BD_RenderHit = BD_HIT_GOOD
consecutive_goods++
ENDIF
IF stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
consecutive_bads++
ELSE
BD_RenderHit = BD_HIT_STANDARD
consecutive_bads++
ENDIF
ENDIF
ELSE
IF beat_time < LOWRIDER_BAD_TIME_NEG
beat_fuckup = 1
stored_beat = LOWRIDER_BEAT_PAST
consecutive_bads++
ENDIF
ENDIF
IF NOT stored_beat = -1
GOSUB LOWR_Update_Overall_Report
GOSUB LOWR_update_score_and_stats
//GOSUB LOWR_Print_Input_Feedback
last_scored_beat = beat_num
ENDIF
ENDIF
ENDIF
// make sure players score can't fall below zero
IF lowrider_pscore < 0
lowrider_pscore = 0
ENDIF
// make sure cars don't roll over --------------------------
IF NOT IS_CAR_DEAD pcar
IF NOT LOCATE_CAR_2D pcar pcar_x pcar_y 3.0 3.0 FALSE
GET_CAR_COORDINATES pcar x y z
vec_x = pcar_x - x
vec_y = pcar_y - y
vec_x *= force_multiplier
vec_y *= force_multiplier
APPLY_FORCE_TO_CAR pcar vec_x vec_y 0.0 0.0 0.0 0.0
ENDIF
ENDIF
IF NOT IS_CAR_DEAD ocar
IF NOT LOCATE_CAR_2D ocar ocar_x ocar_y 3.0 3.0 FALSE
GET_CAR_COORDINATES ocar x y z
vec_x = ocar_x - x
vec_y = ocar_y - y
vec_x *= force_multiplier
vec_y *= force_multiplier
APPLY_FORCE_TO_CAR ocar vec_x vec_y 0.0 0.0 0.0 0.0
ENDIF
ENDIF
// make opposition car bounce to the music -------------------
IF beat_time < 100
AND beat_time > -100
IF beat_type = 9
wheel_fl = 1.0
wheel_bl = 1.0
wheel_fr = 0.0
wheel_br = 0.0
ENDIF
IF beat_type = 10
wheel_fl = 0.0
wheel_bl = 0.0
wheel_fr = 1.0
wheel_br = 1.0
ENDIF
IF beat_type = 11
wheel_fl = 0.0
wheel_bl = 0.0
wheel_fr = 1.0
wheel_br = 0.0
ENDIF
IF beat_type = 12
wheel_fl = 0.0
wheel_bl = 1.0
wheel_fr = 0.0
wheel_br = 0.0
ENDIF
IF beat_type = 13
wheel_fl = 1.0
wheel_bl = 0.0
wheel_fr = 1.0
wheel_br = 0.0
ENDIF
IF beat_type = 14
wheel_fl = 0.0
wheel_bl = 1.0
wheel_fr = 0.0
wheel_br = 1.0
ENDIF
IF beat_type = 15
wheel_fl = 1.0
wheel_bl = 0.0
wheel_fr = 0.0
wheel_br = 0.0
ENDIF
IF beat_type = 16
wheel_fl = 0.0
wheel_bl = 0.0
wheel_fr = 0.0
wheel_br = 1.0
ENDIF
// give opposition score depending on their skill
IF NOT beat_num = last_opp_scored_beat
GOSUB update_lowrider_opposition_score
last_opp_scored_beat = beat_num
ENDIF
ELSE
wheel_fl = 0.0
wheel_bl = 0.0
wheel_fr = 0.0
wheel_br = 0.0
ENDIF
// control ocar hydraulics
IF NOT IS_CAR_DEAD ocar
IF DOES_CAR_HAVE_HYDRAULICS ocar
CONTROL_CAR_HYDRAULICS ocar wheel_fl wheel_bl wheel_fr wheel_br
ENDIF
ENDIF
// BOUNCING GIRL ===============================================================
IF car_got_roof = 0
// control the level of the bounce girl --------------------
// once passed level -1 never go back
IF lowrider_level = -1
IF NOT player_stick_position = 0
lowrider_level = 0
ENDIF
ENDIF
// once passed level 0 never go back
IF lowrider_level = 0
IF consecutive_goods > 5
lowrider_level++
consecutive_goods = 0
ENDIF
ENDIF
IF lowrider_level = 1
IF consecutive_goods > 5
lowrider_level++
consecutive_goods = 0
consecutive_bads = 0
ENDIF
ENDIF
IF lowrider_level = 2
IF consecutive_goods > 5
lowrider_level++
consecutive_goods = 0
consecutive_bads = 0
ENDIF
IF consecutive_bads > 1
lowrider_level--
consecutive_bads = 0
ENDIF
ENDIF
IF lowrider_level = 3
IF consecutive_goods > 5
lowrider_level++
consecutive_goods = 0
consecutive_bads = 0
ENDIF
IF consecutive_bads > 1
lowrider_level--
consecutive_bads = 0
ENDIF
ENDIF
IF lowrider_level = 4
IF consecutive_goods > 5
lowrider_level++
consecutive_goods = 0
consecutive_bads = 0
ENDIF
IF consecutive_bads > 1
lowrider_level--
consecutive_bads = 0
ENDIF
ENDIF
IF lowrider_level = 5
IF consecutive_bads > 1
lowrider_level--
consecutive_goods = 0
consecutive_bads = 0
ENDIF
ENDIF
// ------------------------- girl anims --------------------------
// we have changed l
IF NOT IS_CHAR_DEAD bounce_girl
IF NOT lowrider_last_level = lowrider_level
IF lowrider_level = -1
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_hair LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_hurry LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idleloop LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
SET_SEQUENCE_TO_REPEAT lowrider_sequence 1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = -1
AND lowrider_level = 0
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idle_to_l0 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l0_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = 0
AND lowrider_level = 1
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l0_to_l1 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l1_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = 1
AND lowrider_level = 2
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l1_to_l2 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l2_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = 2
AND lowrider_level = 3
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l2_to_l3 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l3_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = 3
AND lowrider_level = 4
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l3_to_l4 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l4_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = 4
AND lowrider_level = 5
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l4_to_l5 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l5_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level > 1
AND lowrider_level = 1
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l345_to_l1 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l1_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = 1
AND lowrider_level = 0
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l12_to_l0 LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l0_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
IF lowrider_last_level = 0
AND lowrider_level = -1
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_hair LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_hurry LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_idleloop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
lowrider_last_level = lowrider_level
ENDIF
IF NOT last_stick_position = player_stick_position
AND NOT player_stick_position = 0
temp_int = 0
temp_float = 1.0
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_idle_to_l0
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_idle_to_l0 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l12_to_l0
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l12_to_l0 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l345_to_l1
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l345_to_l1 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l0_to_l1
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l0_to_l1 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l1_to_l2
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l1_to_l2 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l2_to_l3
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l2_to_l3 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l3_to_l4
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l3_to_l4 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l4_to_l5
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l4_to_l5 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_bdbnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_bdbnce temp_float
ENDIF
IF temp_float < 0.9
temp_int = 1
ENDIF
IF temp_int = 0
IF lowrider_level = 0
OPEN_SEQUENCE_TASK temp_seq
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l0_bnce LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK temp_seq
PERFORM_SEQUENCE_TASK bounce_girl temp_seq
CLEAR_SEQUENCE_TASK temp_seq
ENDIF
IF lowrider_level = 1
OPEN_SEQUENCE_TASK temp_seq
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l1_bnce LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK temp_seq
PERFORM_SEQUENCE_TASK bounce_girl temp_seq
CLEAR_SEQUENCE_TASK temp_seq
ENDIF
IF lowrider_level = 2
OPEN_SEQUENCE_TASK temp_seq
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l2_bnce LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK temp_seq
PERFORM_SEQUENCE_TASK bounce_girl temp_seq
CLEAR_SEQUENCE_TASK temp_seq
ENDIF
IF lowrider_level = 3
OPEN_SEQUENCE_TASK temp_seq
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l3_bnce LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK temp_seq
PERFORM_SEQUENCE_TASK bounce_girl temp_seq
CLEAR_SEQUENCE_TASK temp_seq
ENDIF
IF lowrider_level = 4
OPEN_SEQUENCE_TASK temp_seq
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l4_bnce LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK temp_seq
PERFORM_SEQUENCE_TASK bounce_girl temp_seq
CLEAR_SEQUENCE_TASK temp_seq
ENDIF
IF lowrider_level = 5
OPEN_SEQUENCE_TASK temp_seq
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l5_bnce LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK temp_seq
PERFORM_SEQUENCE_TASK bounce_girl temp_seq
CLEAR_SEQUENCE_TASK temp_seq
ENDIF
ENDIF
last_stick_position = player_stick_position
ENDIF
IF beat_fuckup = 1
IF player_stick_position = 0
IF lowrider_level > 0
IF NOT IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_bdbnce
OPEN_SEQUENCE_TASK temp_seq
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_bdbnce LOWRIDER 4.0 FALSE FALSE FALSE TRUE -1
CLOSE_SEQUENCE_TASK temp_seq
PERFORM_SEQUENCE_TASK bounce_girl temp_seq
CLEAR_SEQUENCE_TASK temp_seq
CLEAR_SEQUENCE_TASK lowrider_sequence
OPEN_SEQUENCE_TASK lowrider_sequence
TASK_PLAY_ANIM_NON_INTERRUPTABLE -1 lrgirl_l1_loop LOWRIDER 4.0 TRUE FALSE FALSE FALSE -1
CLOSE_SEQUENCE_TASK lowrider_sequence
ENDIF
lowrider_level = 1
lowrider_last_level = 1
ENDIF
ENDIF
beat_fuckup = 0
ENDIF
// if char is not playing certain anims then do the sequence task
temp_int = 0
temp_float = 1.0
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_bdbnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_bdbnce temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_idle_to_l0
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_idle_to_l0 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l12_to_l0
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l12_to_l0 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l345_to_l1
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l345_to_l1 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l0_bnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l0_bnce temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l0_to_l1
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l0_to_l1 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l1_to_l2
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l1_to_l2 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l2_to_l3
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l2_to_l3 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l3_to_l4
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l3_to_l4 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l4_to_l5
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l4_to_l5 temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l1_bnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l1_bnce temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l2_bnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l2_bnce temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l3_bnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l3_bnce temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l4_bnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l4_bnce temp_float
ENDIF
IF IS_CHAR_PLAYING_ANIM bounce_girl lrgirl_l5_bnce
GET_CHAR_ANIM_CURRENT_TIME bounce_girl lrgirl_l5_bnce temp_float
ENDIF
IF temp_float < 0.9
temp_int = 1
ENDIF
IF temp_int = 0
GET_SCRIPT_TASK_STATUS bounce_girl PERFORM_SEQUENCE_TASK temp_int
IF temp_int = FINISHED_TASK
PERFORM_SEQUENCE_TASK bounce_girl lowrider_sequence
ENDIF
ENDIF
ENDIF // is char dead
ENDIF // car_got_roof
// quit out
//SET_PLAYER_CONTROL player1 OFF // This should be set, but breaks old saves :(
IF IS_BUTTON_PRESSED PAD1 TRIANGLE
OR IS_WIDGET_RELEASED WIDGET_RHYTHM_EXIT
lowrider_pscore = 0
flag++
ENDIF
ELSE
// track has finished
flag++
TIMERA = 0
ENDIF
BREAK
// wait for beat display to finish
CASE 3
//IF beat_display_script_started = 0
flag++
//ENDIF
BREAK
// fade out music
CASE 4
IF IS_PLAYER_PLAYING player1
SET_PLAYER_CONTROL player1 OFF
ENDIF
DO_FADE 500 FADE_OUT
WHILE GET_FADING_STATUS
WAIT 0
ENDWHILE
bd_terminate_script = 1
flag++
BREAK
// track has ended
CASE 5
GET_BEAT_TRACK_STATUS temp_int
IF temp_int = CUTSCENE_TRACK_PLAYING
STOP_BEAT_TRACK
ENDIF
CLEAR_ONSCREEN_COUNTER lowrider_pscore
CLEAR_ONSCREEN_COUNTER lowrider_oscore
REMOVE_ANIMATION LOWRIDER
GOTO terminate_lowrider_game
BREAK
ENDSWITCH
GOTO lowrider_game_loop
update_lowrider_opposition_score:
GENERATE_RANDOM_INT_IN_RANGE 0 10 temp_int
IF lowrider_opposition_skill = 0
OR lowrider_opposition_skill = 1
SWITCH temp_int
CASE 0
CASE 1
lowrider_oscore += LOWRIDER_BAD_SCORE
BREAK
CASE 2
CASE 3
CASE 4
CASE 5
lowrider_oscore += LOWRIDER_OK_SCORE
BREAK
CASE 6
CASE 7
CASE 8
lowrider_oscore += LOWRIDER_GOOD_SCORE
BREAK
CASE 9
lowrider_oscore += LOWRIDER_PERFECT_SCORE
BREAK
ENDSWITCH
ELSE
IF lowrider_opposition_skill = 2
SWITCH temp_int
CASE 0
lowrider_oscore += LOWRIDER_BAD_SCORE
BREAK
CASE 1
CASE 2
CASE 3
CASE 4
lowrider_oscore += LOWRIDER_OK_SCORE
BREAK
CASE 5
CASE 6
CASE 7
lowrider_oscore += LOWRIDER_GOOD_SCORE
BREAK
CASE 8
CASE 9
lowrider_oscore += LOWRIDER_PERFECT_SCORE
BREAK
ENDSWITCH
ELSE
IF lowrider_opposition_skill = 3
SWITCH temp_int
CASE 0
lowrider_oscore += LOWRIDER_BAD_SCORE
BREAK
CASE 1
CASE 2
CASE 3
lowrider_oscore += LOWRIDER_OK_SCORE
BREAK
CASE 4
CASE 5
CASE 6
lowrider_oscore += LOWRIDER_GOOD_SCORE
BREAK
CASE 7
CASE 8
CASE 9
lowrider_oscore += LOWRIDER_PERFECT_SCORE
BREAK
ENDSWITCH
ELSE
IF lowrider_opposition_skill = 4
SWITCH temp_int
CASE 0
CASE 1
CASE 2
lowrider_oscore += LOWRIDER_OK_SCORE
BREAK
CASE 3
CASE 4
CASE 5
CASE 6
lowrider_oscore += LOWRIDER_GOOD_SCORE
BREAK
CASE 7
CASE 8
CASE 9
lowrider_oscore += LOWRIDER_PERFECT_SCORE
BREAK
ENDSWITCH
ELSE
IF lowrider_opposition_skill = 5
SWITCH temp_int
CASE 0
CASE 1
lowrider_oscore += LOWRIDER_OK_SCORE
BREAK
CASE 2
CASE 3
CASE 4
CASE 5
lowrider_oscore += LOWRIDER_GOOD_SCORE
BREAK
CASE 6
CASE 7
CASE 8
CASE 9
lowrider_oscore += LOWRIDER_PERFECT_SCORE
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF lowrider_oscore < 0
lowrider_oscore = 0
ENDIF
RETURN
terminate_lowrider_game:
lowrider_game_is_active = 0
TERMINATE_THIS_SCRIPT
/********************************************
PRINT INPUT FEEDBACK
********************************************/
LOWR_Print_Input_Feedback:
SWITCH stored_beat
CASE LOWRIDER_BEAT_PERFECT
SHAKE_PAD PAD1 200 255
BREAK
CASE LOWRIDER_BEAT_GOOD
SHAKE_PAD PAD1 200 200
BREAK
CASE LOWRIDER_BEAT_ALRIGHT
SHAKE_PAD PAD1 200 110
BREAK
DEFAULT
SHAKE_PAD PAD1 200 50
BREAK
ENDSWITCH
PRINT_BIG DNC_013 1000 5 //That's it!
SWITCH last_print
DEFAULT
IF stored_beat = LOWRIDER_BEAT_PERFECT
PRINT_BIG DNC_005 1000 5 // Great timing!
ENDIF
IF stored_beat = LOWRIDER_BEAT_GOOD
PRINT_BIG DNC_006 1000 5 // Well done!
ENDIF
IF stored_beat = LOWRIDER_BEAT_ALRIGHT
PRINT_BIG DNC_007 1000 5 // Alright
ENDIF
IF stored_beat = LOWRIDER_BEAT_PAST
PRINT_BIG DNC_008 1000 5 // Too late!
ENDIF
IF stored_beat = LOWRIDER_BEAT_FUTURE
PRINT_BIG DNC_009 1000 5 // Too early!
ENDIF
IF stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
PRINT_BIG DNC_010 1000 5 // Wrong!
ENDIF
IF stored_beat = LOWRIDER_BEAT_MISTIMED_BUTTON
PRINT_BIG DNC_011 1000 5 // Poor timing!
ENDIF
last_print = 2
BREAK
CASE 2
IF stored_beat = LOWRIDER_BEAT_PERFECT
PRINT_BIG DNC_012 1000 5 //Synchronized!
ENDIF
IF stored_beat = LOWRIDER_BEAT_GOOD
PRINT_BIG DNC_013 1000 5 //That's it!
ENDIF
IF stored_beat = LOWRIDER_BEAT_ALRIGHT
PRINT_BIG DNC_014 1000 5 //Not bad!
ENDIF
IF stored_beat = LOWRIDER_BEAT_PAST
PRINT_BIG DNC_015 1000 5 //You missed it!
ENDIF
IF stored_beat = LOWRIDER_BEAT_FUTURE
PRINT_BIG DNC_016 1000 5 //You're fast!
ENDIF
IF stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
PRINT_BIG DNC_017 1000 5 //Not that one!
ENDIF
IF stored_beat = LOWRIDER_BEAT_MISTIMED_BUTTON
PRINT_BIG DNC_018 1000 5 //Try again!
ENDIF
++last_print
BREAK
CASE 3
IF stored_beat = LOWRIDER_BEAT_PERFECT
PRINT_BIG DNC_019 1000 5 //The master!
ENDIF
IF stored_beat = LOWRIDER_BEAT_GOOD
PRINT_BIG DNC_020 1000 5 //You got it!
ENDIF
IF stored_beat = LOWRIDER_BEAT_ALRIGHT
PRINT_BIG DNC_021 1000 5 //Can do better!
ENDIF
IF stored_beat = LOWRIDER_BEAT_PAST
PRINT_BIG DNC_022 1000 5 //You're late!
ENDIF
IF stored_beat = LOWRIDER_BEAT_FUTURE
PRINT_BIG DNC_023 1000 5 //Slow down!
ENDIF
IF stored_beat = LOWRIDER_BEAT_WRONG_BUTTON
PRINT_BIG DNC_024 1000 5 //Random!
ENDIF
IF stored_beat = LOWRIDER_BEAT_MISTIMED_BUTTON
PRINT_BIG DNC_025 1000 5 //Not on time!
ENDIF
++last_print
BREAK
ENDSWITCH
RETURN
/********************************************
UPDATE OVERALL REPORT
********************************************/
LOWR_Update_Overall_Report:
temp_int = lowr_good_beat_counter + lowr_bad_beat_counter
temp_int += lowr_perfect_beat_counter
IF temp_int > 0
IF temp_int >= LOWRIDER_SCORE_TOTAL_BEATS_TO_REPORT
IF lowr_perfect_beat_counter = LOWRIDER_SCORE_TOTAL_BEATS_TO_REPORT
IF lowr_overall_state = LOWRIDER_OVERALL_GOOD
OR lowr_overall_state = LOWRIDER_OVERALL_PERFECT
//--- Can enter perfect
lowr_overall_state = LOWRIDER_OVERALL_PERFECT
ELSE
// GOOD! //use a big number, the next state will brak it
lowr_overall_state = LOWRIDER_OVERALL_GOOD
ENDIF
ELSE
IF lowr_good_beat_counter > lowr_bad_beat_counter
//DISPLAY_TEXT 232.0 50.0 DNC_004 // GOOD! //use a big number, the next state will brak it
lowr_overall_state = LOWRIDER_OVERALL_GOOD
ELSE
IF lowr_overall_state = LOWRIDER_OVERALL_PERFECT
//PRINT_BIG DNC_004 50000 7 // GOOD! //use a big number, the next state will brak it
lowr_overall_state = LOWRIDER_OVERALL_GOOD
ELSE
IF lowr_overall_state = LOWRIDER_OVERALL_GOOD
//PRINT_BIG DNC_003 50000 7 // BAD! //use a big number, the next state will brak it
lowr_overall_state = LOWRIDER_OVERALL_BAD
ELSE
//PRINT_BIG DNC_003 50000 7 // BAD! //use a big number, the next state will brak it
lowr_overall_state = LOWRIDER_OVERALL_BAD
ENDIF
ENDIF
ENDIF
ENDIF
//--- Clear the counters
lowr_perfect_beat_counter = 0
lowr_good_beat_counter = 0
lowr_bad_beat_counter = 0
ENDIF
ENDIF
RETURN
LOWR_update_score_and_stats:
SWITCH stored_beat
CASE LOWRIDER_BEAT_PERFECT
IF lowrider_pscore < LOWRIDER_SCORE_LIMIT
IF lowr_overall_state = LOWRIDER_OVERALL_PERFECT
temp_int = LOWRIDER_PERFECT_SCORE * LOWRIDER_SCORE_PERFECT_MULTIPLER
lowrider_pscore += temp_int
ELSE
lowrider_pscore += LOWRIDER_PERFECT_SCORE
ENDIF
ENDIF
lowr_perfect_beat_counter++
BREAK
CASE LOWRIDER_BEAT_GOOD
IF lowrider_pscore < LOWRIDER_SCORE_LIMIT
IF lowr_overall_state = LOWRIDER_OVERALL_PERFECT
temp_int = LOWRIDER_GOOD_SCORE * LOWRIDER_SCORE_PERFECT_MULTIPLER
lowrider_pscore += temp_int
ELSE
lowrider_pscore += LOWRIDER_GOOD_SCORE
ENDIF
ENDIF
lowr_good_beat_counter++
BREAK
CASE LOWRIDER_BEAT_ALRIGHT
IF lowrider_pscore < LOWRIDER_SCORE_LIMIT
IF lowr_overall_state = LOWRIDER_OVERALL_PERFECT
temp_int = LOWRIDER_OK_SCORE * LOWRIDER_SCORE_PERFECT_MULTIPLER
lowrider_pscore += temp_int
ELSE
lowrider_pscore += LOWRIDER_OK_SCORE
ENDIF
ENDIF
lowr_good_beat_counter++
BREAK
CASE LOWRIDER_BEAT_PAST
IF lowrider_pscore > 0
lowrider_pscore += LOWRIDER_BAD_SCORE
ENDIF
lowr_bad_beat_counter++
BREAK
CASE LOWRIDER_BEAT_FUTURE
IF lowrider_pscore > 0
lowrider_pscore += LOWRIDER_BAD_SCORE
ENDIF
lowr_bad_beat_counter++
BREAK
CASE LOWRIDER_BEAT_WRONG_BUTTON
IF lowrider_pscore > 0
lowrider_pscore += LOWRIDER_VBAD_SCORE
ENDIF
lowr_bad_beat_counter++
BREAK
CASE LOWRIDER_BEAT_MISTIMED_BUTTON
IF lowrider_pscore > 0
lowrider_pscore += LOWRIDER_VBAD_SCORE
ENDIF
lowr_bad_beat_counter++
BREAK
ENDSWITCH
// make sure score hasn't gone above maximum
IF lowrider_pscore > LOWRIDER_SCORE_LIMIT
lowrider_pscore = LOWRIDER_SCORE_LIMIT
ENDIF
RETURN
LOWR_get_stick_position:
GET_POSITION_OF_ANALOGUE_STICKS PAD1 lstickx lsticky rstickx rsticky
temp_float =# rstickx
vec_x = temp_float
temp_float =# rsticky
vec_y = temp_float
GET_DISTANCE_BETWEEN_COORDS_2D 0.0 0.0 vec_x vec_y temp_float
player_stick_position = 0
IF temp_float > 64.0
GET_ANGLE_BETWEEN_2D_VECTORS vec_x vec_y 0.0 -1.0 temp_float
// must be up
IF temp_float < 15.0
player_stick_position = 13 // up
ELSE
IF temp_float < 75.0
IF rstickx > 0
player_stick_position = 11 // right and up
ELSE
player_stick_position = 15 // left and up
ENDIF
ELSE
IF temp_float < 105.0
IF rstickx > 0
player_stick_position = 10 // right
ELSE
player_stick_position = 9 // left
ENDIF
ELSE
IF temp_float < 165.0
IF rstickx > 0
player_stick_position = 16 // right down
ELSE
player_stick_position = 12 // left down
ENDIF
ELSE
// must be down
player_stick_position = 14 // left down
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN
}
Offline