You are not logged in.
Seemann wrote:Я безнадежно застрял в прошлом поколении: GTA3-VC-San Andreas. До сих пор ковыряюсь.
Привет, всё ещё "в прошлом" ?) GTA5 - не, не ковыряешь?
ps: Буду приходить каждые 4 года и спрашивать
ну, я сделал CLEO для GTA IV. Можно и для GTA V, только после сливов исходников особого спортивного интереса нет. GTA6, когда выйдет, я конечно гляну, но особых планов пока нет
привет)
Vital или Cowboy69 могут знать ответ. Найди их в дискорде (https://sannybuilder.com/discord)
Я всё починил, просто создал в мейне такой код:
:VARIABLES wait 500 Actor.StorePos($PLAYER_ACTOR, 3@, 4@, 5@) 08F1: get_zone_at 3@ 4@ 5@ nameB_to s$9451 // 8-byte string if Player.InZone($PLAYER_CHAR, s$9451) jf @VARIABLES 090C: set_specific_zone_to_trigger_gang_war zone s$9451 090D: highlight_all_inactive_gang_zones_as_available_for_gangwars gosub @VARIABLES
в конце наверно должно быть jump @VARIABLES вместо gosub
вот исходник лоурайдера
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 }
если подскажешь, как это делается в VC, можно попробовать поискать аналог в SA
наверно, можно начать с https://thirteenag.github.io/p2dfx#about
CLEO для San Andreas: The Definitive Edition
https://re.cleo.li
Привет!
Еще хорошо работает https://github.com/iAmAsval/FModel
Будет ли поддержка клео для ремастера игр?
Убедись, что файл, который ты компилируешь, и файл, который ты запускаешь в игре или декомпилируешь, - один и тот же.
В файле, скомпилированном с "Как есть", должно быть %d
Я вроде всё или почти всё перенес в онлайн версию. https://docs.sannybuilder.com/v/ru/scm-documentation/sa
Каких материалов не хватает по сравнению со старой справкой?
Преимущество онлайн версии в простоте обновления вне релизов программы и возможности ссылаться на нее из интернет-источников (форумы, чаты и т.п.)
How do I set a value to a variable with a command while I'm in the game?
the question is not clear. you can set a value with the set command, like 0004: $var = 1 or 0006: 0@ = 1 etc
{$CLEO} 0000: while true wait 250 if 0ADC: test_cheat "SETVAR" then 0@ = 10 // or any other value end end
попробуй на бета-версии v3.8.0
https://github.com/sannybuilder/dev/rel … 8.0-beta.0
mfisto
спасибо за файл. я нашел и исправил ошибку. постараюсь в ближайшие дни выложить обновление.
Это происходит в функции
.text:005B89F0 CVehicle::SetDriver((CPed *)) proc near
вот например добавление 20 ХП
.text:005B8AC2 call GetPlayerPed
.text:005B8AC7 mov dl, ds:_players.maxHealth
.text:005B8ACD fld flt_69C69C
можно записать 0 по этому адресу
.data:0069C69C flt_69C69C dd 20.0
тогда здоровье не будет увеличиваться
с оружием чуть сложнее
.text:005B8C0D mov ecx, ebp ; CPed *
.text:005B8C0F push 1 ; flag
.text:005B8C11 push 3 ; weaponIndex
.text:005B8C13 call CPed__HasWeapon
.text:005B8C18 test al, al
.text:005B8C1A jz loc_5B8CD0
.text:005B8C20
.text:005B8C20 loc_5B8C20: ; CODE XREF: CVehicle::SetDriver((CPed *))+21Bj
.text:005B8C20 push 1 ; flags
.text:005B8C22 push 261 ; modelIndex
.text:005B8C27 call RequestStream
самое простое что тут можно сделать, это инвертировать проверку на наличие оружия у игрока. в оригинальной версии оружие выдается, если у игрока еще нет шотгана, можно сделать наоборот. если шотгана нет - не выдавать.
для этого должно быть достаточно записать 0x85 по адресу 005B8C1B
write_memory 0x005B8C1B 1 0x85 1
ps. в игре не проверял
Можешь выложить свой скрипт и classes.db, на котором воспроизводится ошибка, я посмотрю в чем дело
для режима гта3 же нет classes.db. ты используешь какой-то свой classes.db?
если да, то в 3.6.0 формат "extended" параметров изменился. https://docs.sannybuilder.com/v/ru/codi … starevshee
для того, чтобы они работали, их нужно объявить в classes.db как #DEPRECATED_ENUMS
смотри в качестве примера classes.db из режима SA
а еще лучше, использовать новые enum (тоже требуют изменения в classes.db)
Привет ветеранам
если что, я обычно активен тут https://github.com/sannybuilder/dev/issues или тут https://github.com/sannybuilder/dev/discussions
Если я правильно помню, за это отвечает стат 181.
0652: $STAT_UNLOCKED_CITIES_NUMBER = integer_stat 181
чтобы открыть все, нужно выставить значение в 4
0629: change_integer_stat 181 to 4
Финальную катсцену в Сан Андреас можно найти в миссии 112 FINALEC. Сразу после команды 0434: show_credits
:FINALEC_41683 0954: start_playing_loaded_soundtrack 043C: disable_sounds_after_fadeout 0 0924: enable_screen_darkness 1 with_value -1 0434: show_credits 016A: fade 1 time 250 0925: restore_camera_to_user_defined 0936: set_camera 2523.975 -1749.962 57.202 position_to 2514.887 -1733.851 57.202 time 2000 smooth_transition 0 0920: point_camera 2523.755 -1749.572 56.3075 transverse_to 2514.668 -1733.461 56.3075 time 2000 smooth_transition 0 :FINALEC_41780 ... <финальная катсцена> ...
учебники/туториалы по main.scm?
на главной странице https://sannybuilder.com/ru/index.html есть несколько ссылок, можно начать с них
Титры с именами запускаются командами
0434: show_credits 0435: end_credits 8436: not reached_end_of_credits
непосредственно к пролету камеры они отношения не имеют
Для какой игры? В вайс сити за финальную сцену с титрами отвечает вот этот код из миссии "Keep your friends close..."
0000: 01B4: set_player $PLAYER_CHAR can_move 0 02A3: enable_widescreen 1 03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 1 03F4: set_all_vehicles_apply_damage_rules 0 04BB: select_interiour 0 // select render area 0004: $991 = 0 // $ = int 03AD: set_rubbish 1 04FA: clear_extra_colors_with_fade 0 0055: put_player $PLAYER_CHAR at 198.4252 -434.6284 9.5332 0434: show_credits 0004: $61 = 0 // $ = int 03EA: generate_cars_around_camera 1 01BD: $4811 = current_time_in_ms 0001: wait 0 ms 0001: wait 0 ms 02A3: enable_widescreen 1 01BD: $4811 = current_time_in_ms 0084: $5040 = $4811 // $ = $ int 01B6: set_weather 0 :FIN_1_24761 00D6: if 8436: not reached_end_of_credits 004D: jump_if_false @FIN_1_26913 0001: wait 0 ms 01BD: $4811 = current_time_in_ms 00D6: if 00E1: player 0 pressed_button 16 004D: jump_if_false @FIN_1_24827 00D6: if 0038: $61 == 1 // $ == int 004D: jump_if_false @FIN_1_24820 0435: end_credits :FIN_1_24820 0002: jump @FIN_1_24834 :FIN_1_24827 0004: $61 = 1 // $ = int :FIN_1_24834 00D6: if 0038: $5039 == 0 // $ == int 004D: jump_if_false @FIN_1_24980 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_24980 015F: set_camera_position 315.4413 -606.3295 10.9994 rotation 0.0 0.0 0.0 0160: point_camera 315.8044 -605.4032 11.1004 switchstyle 2 00C0: set_current_time 18 0 009B: destroy_actor_instantly $5027 009A: $5027 = create_actor_pedtype 4 model #MALE01 at 315.4413 -606.3295 10.9994 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_24980 00D6: if 0038: $5039 == 1 // $ == int 004D: jump_if_false @FIN_1_25055 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25055 0169: set_fade_color 0 0 1 016A: fade 1 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25055 00D6: if 0038: $5039 == 2 // $ == int 004D: jump_if_false @FIN_1_25130 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25130 0169: set_fade_color 0 0 1 016A: fade 0 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 3500 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25130 00D6: if 0038: $5039 == 3 // $ == int 004D: jump_if_false @FIN_1_25276 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25276 015F: set_camera_position -57.009 -1579.473 11.6604 rotation 0.0 0.0 0.0 0160: point_camera -57.1214 -1578.485 11.765 switchstyle 2 00C0: set_current_time 14 0 009B: destroy_actor_instantly $5027 009A: $5027 = create_actor_pedtype 4 model #MALE01 at -57.009 -1579.473 11.6604 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25276 00D6: if 0038: $5039 == 4 // $ == int 004D: jump_if_false @FIN_1_25351 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25351 0169: set_fade_color 0 0 1 016A: fade 1 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25351 00D6: if 0038: $5039 == 5 // $ == int 004D: jump_if_false @FIN_1_25426 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25426 0169: set_fade_color 0 0 1 016A: fade 0 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 3500 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25426 00D6: if 0038: $5039 == 6 // $ == int 004D: jump_if_false @FIN_1_25572 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25572 015F: set_camera_position -31.4477 -942.5128 11.2897 rotation 0.0 0.0 0.0 0160: point_camera -30.4814 -942.2845 11.4088 switchstyle 2 00C0: set_current_time 15 0 009B: destroy_actor_instantly $5027 009A: $5027 = create_actor_pedtype 4 model #MALE01 at -31.4477 -942.5128 11.2897 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25572 00D6: if 0038: $5039 == 7 // $ == int 004D: jump_if_false @FIN_1_25647 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25647 0169: set_fade_color 0 0 1 016A: fade 1 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25647 00D6: if 0038: $5039 == 8 // $ == int 004D: jump_if_false @FIN_1_25722 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25722 0169: set_fade_color 0 0 1 016A: fade 0 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 3500 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25722 00D6: if 0038: $5039 == 9 // $ == int 004D: jump_if_false @FIN_1_25868 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25868 015F: set_camera_position 527.1948 -1101.658 12.3979 rotation 0.0 0.0 0.0 0160: point_camera 526.1959 -1101.612 12.4088 switchstyle 2 00C0: set_current_time 12 0 009B: destroy_actor_instantly $5027 009A: $5027 = create_actor_pedtype 4 model #MALE01 at 527.1948 -1101.658 12.3979 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25868 00D6: if 0038: $5039 == 10 // $ == int 004D: jump_if_false @FIN_1_25943 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_25943 0169: set_fade_color 0 0 1 016A: fade 1 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_25943 00D6: if 0038: $5039 == 11 // $ == int 004D: jump_if_false @FIN_1_26018 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26018 0169: set_fade_color 0 0 1 016A: fade 0 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 3500 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26018 00D6: if 0038: $5039 == 12 // $ == int 004D: jump_if_false @FIN_1_26164 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26164 015F: set_camera_position 329.8244 -1123.419 29.418 rotation 0.0 0.0 0.0 0160: point_camera 329.5483 -1122.458 29.4027 switchstyle 2 00C0: set_current_time 2 0 009B: destroy_actor_instantly $5027 009A: $5027 = create_actor_pedtype 4 model #MALE01 at 329.8244 -1123.419 29.418 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26164 00D6: if 0038: $5039 == 13 // $ == int 004D: jump_if_false @FIN_1_26239 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26239 0169: set_fade_color 0 0 1 016A: fade 1 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26239 00D6: if 0038: $5039 == 14 // $ == int 004D: jump_if_false @FIN_1_26314 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26314 0169: set_fade_color 0 0 1 016A: fade 0 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 3500 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26314 00D6: if 0038: $5039 == 15 // $ == int 004D: jump_if_false @FIN_1_26460 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26460 015F: set_camera_position 420.3749 -179.7319 12.2077 rotation 0.0 0.0 0.0 0160: point_camera 420.3214 -178.7335 12.193 switchstyle 2 00C0: set_current_time 11 0 009B: destroy_actor_instantly $5027 009A: $5027 = create_actor_pedtype 4 model #MALE01 at 420.3749 -179.7319 12.2077 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26460 00D6: if 0038: $5039 == 16 // $ == int 004D: jump_if_false @FIN_1_26535 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26535 0169: set_fade_color 0 0 1 016A: fade 1 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26535 00D6: if 0038: $5039 == 17 // $ == int 004D: jump_if_false @FIN_1_26610 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26610 0169: set_fade_color 0 0 1 016A: fade 0 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 3500 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26610 00D6: if 0038: $5039 == 18 // $ == int 004D: jump_if_false @FIN_1_26756 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26756 015F: set_camera_position -397.3825 22.9746 47.9553 rotation 0.0 0.0 0.0 0160: point_camera -396.5451 23.4814 47.7505 switchstyle 2 00C0: set_current_time 5 45 009B: destroy_actor_instantly $5027 009A: $5027 = create_actor_pedtype 4 model #MALE01 at -391.2471 26.5135 25.2721 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26756 00D6: if 0038: $5039 == 19 // $ == int 004D: jump_if_false @FIN_1_26831 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26831 0169: set_fade_color 0 0 1 016A: fade 1 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 20000 // $ += int 0008: $5039 += 1 // $ += int :FIN_1_26831 00D6: if 0038: $5039 == 20 // $ == int 004D: jump_if_false @FIN_1_26906 00D6: if 001C: $4811 > $5040 // $ > $ int 004D: jump_if_false @FIN_1_26906 0169: set_fade_color 0 0 1 016A: fade 0 3000 ms 0084: $5040 = $4811 // $ = $ int 0008: $5040 += 3500 // $ += int 0004: $5039 = 21 // $ = int :FIN_1_26906 0002: jump @FIN_1_24761 :FIN_1_26913 043C: set_game_sounds_disable_on_fade 1 0440: stop_cutscene_music 009B: destroy_actor_instantly $5027 02A3: enable_widescreen 0 03EA: generate_cars_around_camera 0 01B7: release_weather 0395: clear_area 1 at -379.2 -536.4 16.2 range 1.0 0055: put_player $PLAYER_CHAR at -379.2 -536.4 16.2 0171: set_player $PLAYER_CHAR z_angle_to 0.0 0373: set_camera_directly_behind_player 04BB: select_interiour 0 // select render area 0004: $991 = 0 // $ = int 03AD: set_rubbish 1 04FA: clear_extra_colors_with_fade 0 03CB: load_scene -379.2 -536.4 16.2 0169: set_fade_color 0 0 1 016A: fade 1 1500 ms 01B4: set_player $PLAYER_CHAR can_move 1 02A3: enable_widescreen 0 03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 0 03F4: set_all_vehicles_apply_damage_rules 1 0373: set_camera_directly_behind_player 02EB: restore_camera_with_jumpcut 03DE: set_pedestrians_density_multiplier_to 1.0 0395: clear_area 0 at -354.419 -569.529 30.0 range 200.0 04E3: set_player $PLAYER_CHAR mood 0 duration 60000 end_thread
мне выдает ошибку - Недостаточно параметров. Ожидалось 6 параметр(а).
Убедитесь, что когда пишете команду в форме класс.метод, между параметрами стоит запятая:
1@ = Actor.Create(CivMale, #Male01, 2260.7104, -1258.08, 23.975 )
в форме опкода между параметрами запятая не ставится, достаточно пробела (как в моем примере).
Попробуйте изменить координаты немного, поиграйтесь со значением XY, чтобы поставить в нужную точку.