#1 Re: Вопросы по скриптингу » Добавление озвучки в reVC » 05-11-2023 01:00

Vital или Cowboy69 могут знать ответ. Найди их в дискорде (https://sannybuilder.com/discord)

#2 Re: Вопросы по скриптингу » Тонкости работы с info.zon » 25-09-2022 05:15

Red_Ender wrote:

Я всё починил, просто создал в мейне такой код:

: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

#3 Re: Вопросы по скриптингу » Мини игра по танцам на лоурайдере » 25-05-2022 00:15

вот исходник лоурайдера

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
}

			

#4 Re: Вопросы по скриптингу » Увеличение дистанции для короны » 20-01-2022 23:30

если подскажешь, как это делается в VC, можно попробовать поискать аналог в SA

#5 Re: Вопросы по скриптингу » Увеличение дистанции для короны » 19-01-2022 14:39

Если нужно для SA 1.0 то там придется напрямую патчить код игры, т.к. значение 150.0 хранится в коде.

sa-drawd.png


0A8C: write_memory 0x0048BF87 size 4 value 150.0 virtual_protect 1

#6 Re: Вопросы по скриптингу » Увеличение дистанции для короны » 19-01-2022 14:35

Могу ошибаться, но попробуй изменить адрес 0x006DBFCC (для Vice City 1.0). По умолчанию там 150.0


vc-drawd.png


0A8C: write_memory 0x006DBFCC size 4 value 150.0 virtual_protect 0

#10 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 18-11-2021 18:17

Kostyan wrote:

Будет ли поддержка клео для ремастера игр?

https://twitter.com/SannyBuilderDev/sta … 9469970440

#11 Re: Вопросы по скриптингу » Вывод текста из локальной переменной. » 03-11-2021 22:14

Убедись, что файл, который ты компилируешь, и файл, который ты запускаешь в игре или декомпилируешь, - один и тот же.

В файле, скомпилированном с "Как есть", должно быть %d

#12 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 20-10-2021 01:33

Я вроде всё или почти всё перенес в онлайн версию. https://docs.sannybuilder.com/v/ru/scm-documentation/sa
Каких материалов не хватает по сравнению со старой справкой?

Преимущество онлайн версии в простоте обновления вне релизов программы и возможности ссылаться на нее из интернет-источников (форумы, чаты и т.п.)

#13 Re: GTA Modding » Sanny Builder / CLEO discussion » 07-08-2021 02:54

RoYaL wrote:

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

#15 Re: Sanny Builder и CLEO » Параметры в классах. » 20-07-2021 23:11

mfisto

спасибо за файл. я нашел и исправил ошибку. постараюсь в ближайшие дни выложить обновление.

#16 Re: Вопросы по скриптингу » Вопрос про фишки которые выдаются при посадки в машину. » 15-07-2021 01:55

Это происходит в функции

.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. в игре не проверял

#17 Re: Sanny Builder и CLEO » Параметры в классах. » 13-07-2021 23:43

Можешь выложить свой скрипт и classes.db, на котором воспроизводится ошибка, я посмотрю в чем дело

#18 Re: Sanny Builder и CLEO » Параметры в классах. » 06-07-2021 20:55

для режима гта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)

#19 Re: Sanny Builder и CLEO » Параметры в классах. » 29-06-2021 02:46

Привет ветеранам  wink

если что, я обычно активен тут https://github.com/sannybuilder/dev/issues или тут https://github.com/sannybuilder/dev/discussions

#20 Re: Вопросы по скриптингу » Отключение розыска при покидании Лос Сантоса » 08-05-2021 21:01

Если я правильно помню, за это отвечает стат 181.

0652: $STAT_UNLOCKED_CITIES_NUMBER = integer_stat 181

чтобы открыть все, нужно выставить значение в 4

0629: change_integer_stat 181 to 4

#21 Re: Вопросы по скриптингу » Копия катсцены из оригинального main.scm в свой » 26-04-2021 22:01

Финальную катсцену в Сан Андреас можно найти в миссии 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 есть несколько ссылок, можно начать с них

#22 Re: Вопросы по скриптингу » Копия катсцены из оригинального main.scm в свой » 22-04-2021 16:41

Титры с именами запускаются командами

0434: show_credits
0435: end_credits
8436:   not reached_end_of_credits

непосредственно к пролету камеры они отношения не имеют

#23 Re: Вопросы по скриптингу » Копия катсцены из оригинального main.scm в свой » 22-04-2021 16:40

Для какой игры? В вайс сити за финальную сцену с титрами отвечает вот этот код из миссии "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

#24 Re: Вопросы по скриптингу » Актер в неправильных координатах » 18-02-2021 14:34

мне выдает ошибку - Недостаточно параметров. Ожидалось 6 параметр(а).

Убедитесь, что когда пишете команду в форме класс.метод, между параметрами стоит запятая:

1@ = Actor.Create(CivMale, #Male01, 2260.7104, -1258.08, 23.975 )

в форме опкода между параметрами запятая не ставится, достаточно пробела (как в моем примере).

Попробуйте изменить координаты немного, поиграйтесь со значением XY, чтобы поставить в нужную точку.

#25 Re: Вопросы по скриптингу » Актер в неправильных координатах » 17-02-2021 14:29

Попробуйте опкод

0972: put_actor 1@ at 2260.7104 -1258.08 23.975 no_offset

Board footer

Powered by FluxBB