Copy to Clipboard Test

Swindle Haggle Code

//Swindle_Haggle.zs
//Haggle Choppah by ZoriaRPG
//v0.2 24-Nov-2016

const int SCREEN_D_HAGGLE = 6;
int Haggle(){ return Screen->D[SCREEN_D_HAGGLE]; }
void Haggle(int haggle){ Screen->D[SCREEN_D_HAGGLE] = haggle; }

const int SFX_HAGGLE_GOOD = 27;
const int SFX_HAGGLE_FAIL = 28;
const int SFX_HAGGLE_NORM = 24;

const int HAGGLE = 1;
const int HAGGLE1 = 109;
const int HAGGLE2 = 110;
const int RT_HAGGLE = 10;

//Settings
//Set any of these to '1' t make pressing that button in a normal ZC shop try haggling with the merchant.
const int HAGGLE_BUTTON_B = 1;
const int HAGGLE_BUTTON_A = 1;
const int HAGGLE_BUTTON_R = 0;
const int HAGGLE_BUTTON_L = 1;
const int HAGGLE_BUTTON_EX1 = 0;
const int HAGGLE_BUTTON_EX2 = 0;
const int HAGGLE_BUTTON_EX3 = 0;
const int HAGGLE_BUTTON_EX4 = 0;

void HaggleMedals(int haggle){
	if ( haggle == 1 ) {
		if ( Link->Item[HAGGLE1] ) Link->Item[HAGGLE1] = false;
		if ( Link->Item[HAGGLE2] ) Link->Item[HAGGLE2] = false;
	}
	if ( haggle == 2 ) {
		if ( Link->Item[HAGGLE2] ) Link->Item[HAGGLE2] = false;
		if ( !Link->Item[HAGGLE1] ) Link->Item[HAGGLE1] = true;
	}
	if ( haggle == 3 ) {
		if ( !Link->Item[HAGGLE2] ) Link->Item[HAGGLE2] = true;
	}
}

int HaggleMedals(){ 
	if ( Link->Item[HAGGLE2] ) return 3;
	if ( Link->Item[HAGGLE1] ) return 2;
	return 1;
}

//This is the haggle that you swindle before WaitHaggle()
void DoHaggle(){
	if ( HaggleMedals() != 2 && !CanHaggle() ) { 
		HaggleMedals(2);
	}
	if ( CanHaggle() && Haggle() ) HaggleMedals(Haggle());
	TryHaggle();
}

bool CanHaggle(){
	return ( Screen->RoomType == RT_HAGGLE );
}

void DrawHaggle() { Waitdraw(); }
void WaitHaggle() { Waitframe(); }

void TryHaggle(){
	bool try;
	if ( HAGGLE_BUTTON_B && ( Link->PressB ) ) try = true;
	if ( HAGGLE_BUTTON_A && Link->PressA ) try = true;
	if ( HAGGLE_BUTTON_R && Link->PressR ) try = true;
	if ( HAGGLE_BUTTON_L && Link->PressL ) try = true;
	if ( HAGGLE_BUTTON_EX1 && Link->PressEx1 ) try = true;
	if ( HAGGLE_BUTTON_EX2 && Link->PressEx2 ) try = true;
	if ( HAGGLE_BUTTON_EX3 && Link->PressEx3 ) try = true;
	if ( HAGGLE_BUTTON_EX4 && Link->PressEx4 ) try = true;
	if ( try && !Haggle() && CanHaggle() ){
		Haggle( Rand(3)+1 );
		if ( Haggle() == 1 && SFX_HAGGLE_FAIL ) Game->PlaySound(SFX_HAGGLE_FAIL);
		if ( Haggle() == 2 && SFX_HAGGLE_NORM ) Game->PlaySound(SFX_HAGGLE_NORM);
		if ( Haggle() == 3 && SFX_HAGGLE_GOOD ) Game->PlaySound(SFX_HAGGLE_GOOD);
		for ( int q = 0; q <= 90; q++ ) {
			Link->InputUp = false; Link->PressUp = false;
			Link->InputDown = false; Link->PressDown = false;
			Link->InputLeft = false; Link->PressLeft = false;
			Link->InputRight = false; Link->PressRight = false;
			Link->InputR = false; Link->PressR = false;
			Link->InputL = false; Link->PressL = false;
			Link->InputA = false; Link->PressA = false;
			Link->InputB = false; Link->PressB = false;
			Link->InputEx1 = false; Link->PressEx1 = false;
			Link->InputEx2 = false; Link->PressEx2 = false;
			Link->InputEx3 = false; Link->PressEx3 = false;
			Link->InputEx4 = false; Link->PressEx4 = false;
			WaitHaggle();
		}
		HaggleMedals(Haggle());
		//Prices won't swindle without warping. Ask Mister Owl.
		Link->PitWarp( Game->GetCurDMap(), Game->GetCurScreen() );

	}
}
		
global script SwindleHaggle{
	void run(){
		while(HAGGLE){
			DoHaggle();
			DrawHaggle();
			WaitHaggle();
		}
	}
}