//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();
}
}
}