// Confirms only 206-432 & 661-999 unboosted Special Attack activate the Special Defense badge boost from Glacierbadge #include typedef unsigned char bool; unsigned char A, B, C, D, E, F; bool CARRY, ZERO; unsigned int MAX_STAT = (unsigned int) 999; unsigned char LOW(unsigned int integer){ return (unsigned char) (integer % 256); } unsigned char HIGH(unsigned int integer){ return (unsigned char) (integer / 256); } void resetGlobals(){ A = 0; B = 0; C = 0; D = 0; E = 0; CARRY = 0; ZERO = 0; } void ld(unsigned char* dest, unsigned char value){ *dest = value; } void srl(unsigned char* reg){ CARRY = (*reg & 1); *reg >>= 1; ZERO = (*reg == 0); } void rr(unsigned char* reg){ unsigned char newCarry; newCarry = (*reg & 1); *reg >>= 1; *reg |= (CARRY << 7); CARRY = newCarry; ZERO = (*reg == 0); } void add(unsigned char reg){ unsigned int tmpA; tmpA = A + reg; A += reg; CARRY = (tmpA > 255); ZERO = (A == 0); } void adc(unsigned char reg){ unsigned int tmpA; tmpA = A + reg + CARRY; A += (reg + CARRY); CARRY = (tmpA > 255); ZERO = (A == 0); } void sub(unsigned char reg){ int tmpA; tmpA = A - reg; A -= reg; CARRY = (tmpA < 0); ZERO = (A == 0); } void sbc(unsigned char reg){ int tmpA; tmpA = A - reg - CARRY; A -= (reg + CARRY); CARRY = (tmpA < 0); ZERO = (A == 0); } void BoostStat(unsigned char _high, unsigned char _low){ unsigned char high = _high; unsigned char low = _low; ld(&A, high); ld(&D, A); ld(&E, low); srl(&D); rr(&E); srl(&D); rr(&E); srl(&D); rr(&E); ld(&A, low); add(E); ld(&low, A); ld(&A, high); adc(D); ld(&high, A); ld(&A, low); sub(LOW(MAX_STAT)); ld(&A, high); sbc(HIGH(MAX_STAT)); if(CARRY){ return; } ld(&A, HIGH(MAX_STAT)); ld(&high, A); ld(&A, LOW(MAX_STAT)); ld(&low, A); return; } bool testFunction(unsigned char high, unsigned char low){ BoostStat(high, low); srl(&A); return CARRY; } int main() { unsigned char highSpcAtk; unsigned char lowSpcAtk; unsigned int MIN_INPUT = 0; unsigned int MAX_INPUT = 999; bool out; for(unsigned int i = MIN_INPUT; i <= MAX_INPUT; i++){ resetGlobals(); highSpcAtk = HIGH(i); lowSpcAtk = LOW(i); out = testFunction(highSpcAtk, lowSpcAtk); printf("%4d %s\n", (highSpcAtk<<8)|lowSpcAtk, out ? "BOOST":""); } }