Beispiel #1
0
void slideRowanMultichoice(u8 index) {
	//task *tasks = (task *) 0x3005090;
	u32 **ptr = (u32**) 0x0203B108;
	u16 *		displace = (u16*) 0x02021BC8;
	u16 arg;
	u16 id;
	u8 current;

	/* Wait message */
	if (check_a_pressed(0)) return;

	arg = tasks[index].args[6];

	if (arg > 0) {
		/* Slide sprite right */
		u16 (*mod)(u8,u32,u8) = (u16 (*)(void)) 0x08001B90 + 1;
		mod(2, 0x200, 2);
		tasks[index].args[6] = arg - 1;
		return;
	}

	/* Show multichoice */

	// Load rbox
	u16 (*func)(u32) = (u16 (*)(void)) 0x08003CE4 + 1;
	//id = func(&info_multichoice);

	// New
	tasks[index].args[0xD] = id;
	u16 (*func2)(u16) = (u16 (*)(void)) 0x8003FA0 + 1;
	func2(id);

	// Draw its border
	int (*outline)(u16, u8, u16, u8) = (int (*)(void)) 0x0810F2E8 + 1;
	outline(id, 1, 0x214, 0xE);

	// Clear the contents
	int (*clear)(u16, u8) = (int (*)(void)) 0x0800445C + 1;
	clear(id, 0x11);

	// Draw strings
	// id, font, x, y, bg_color, fg_color, str
	int (*print)(u16, u8, u8, u8, u32, u32, u32*) = (int (*)(void)) 0x0812E51C + 1;

	print(id, 2, 8, 1, 1, 0, caOptionInfoControls);
	print(id, 2, 8, 0x11, 1, 0, caOptionInfoAdventure);
	print(id, 2, 8, 0x21, 1, 0, caOptionInfoNone);

	// Field
	u8 (*field)(u8, u8) = (u8 (*)(void)) 0x080F79D8 + 1;
	current = field(2, 1);

	// Allow moving the selecty thing
	int (*huh)(u8, u8, u8, u8, u8, u8, u32) = (int (*)(void)) 0x0810F7D8 + 1;
	huh(id, 2, 0, 1, current + 2, 3, 0);

	rboxid_to_vram(id, 3);
	
	tasks[index].function = (u32) handleRowanMultichoice;
}
Beispiel #2
0
void preRowanMultichoice(u8 index) {
	//task *tasks = (task *) 0x3005090;
	char *dest = (char*) 0x02021D18;
	u32 *okay = (u32*) 0x2020050;

	u8 *prev_quest_mode = (u8*) 0x0203ADFA;
	u8 b = 8;

	/* Wait for A press */
	if (check_a_pressed(0)) return;
	//*textflags = 0xF;
	//*prev_quest_mode = 2;

	// Textflags = 4 (3rd bit) means no continue arrow, bit 2 means auto a press
	// We use auto A press to wait for message to finish rendering
	// By checking for a press
	
	loadMessageBox(0, 0);
	fdecoder(dest, (char*) caAdvice);
	box_related_one(0, 4, dest, b, 0, 2, 1, 3);

	rboxid_to_vram(0, 3);

	tasks[index].args[6] = 0x1E;

	tasks[index].function = (u32) slideRowanMultichoice;
}
Beispiel #3
0
void introduceRowan(u8 index) {
	//task *tasks = (task *) 0x3005090;

	u16 arg;
	u8 mix_color;

	mix_color = (u8) fade_control->color;
	if (mix_color & 0x80) return;

	arg = tasks[index].args[6];
	if (!arg) {
		u32 **ptr = (u32**) 0x0203B108;
		char *dest = (char*) 0x02021D18;
		u8 b = 8;

		loadMessageBox(0, 0);
		fdecoder(dest, (char*) caIntroduce);
		box_related_one(0, 4, dest, b, 0, 2, 1, 3);

		rboxid_to_vram(0, 3);
	
		tasks[index].args[6] = 0x0;
		tasks[index].function = (u32) preRowanMultichoice;
	} else {
		tasks[index].args[6] = arg - 1;
	}
	return;
}
Beispiel #4
0
void textbox_set_text(u8 *string, u8 font, u8 text_bg, u8 text_colour, u8 shadow, u8 text_bg_box) {
	textflags.unknown[0] = textflags.unknown[0] | 1;
	if (text_bg_box) {
		rboxid_clear_pixels(0, 0xFF); // transparent
	} else {
		rboxid_clear_pixels(0, 0x11); // white
	}
	rboxid_08003FA0(0);
	rboxid_to_vram(0, 0);
	box_related_one(0, font, string, sav2_get_text_speed(), 0, text_colour, text_bg, shadow);
}
Beispiel #5
0
void helloThere(u8 index) {
	u16 arg;

	arg = tasks[index].args[6];
	if (!arg) {
		u32 **ptr = (u32**) 0x0203B108;
		char *dest = (char*) 0x02021D18;
		u8 b = 8;
		u8 i;

		u16 (*object_from_compressed)(u32*) = (u16 (*)(void)) 0x0800EBCC + 1;
		u8 (*object_apply_palette)(u32*) = (u8 (*)(void)) 0x08008928 + 1;
		u8 (*object_search)(u32*,u16,u16,u8) = (u8 (*)(void)) 0x08006F8C + 1;
		void (*load_pal)(u32*,u16,u16) = (void (*)(void)) 0x080703EC + 1;
		void (*lcd_io_set)(u8,u16) = (void (*)(void)) 0x08000A38 + 1;

		//object_from_compressed((u32*) 0x8462F14);
		//object_apply_palette((u32*) 0x8462F24);

		//object_from_compressed((u32*) &graphics);
		//object_apply_palette((u32*) &palette);

		// For 256
		//load_pal((u32*) 0x084615FC, 0x100 + 4 * 16, 16 * 2 * 2);

		// Set BLDCNT to allow alpha blending of OAM onto bg
		//lcd_io_set(0x50, 0x2F50);

		// Set opacity of the sprites
		//lcd_io_set(0x52, 0x40C);

		// Now we can toggle the one objects opacity bit to set which objects are blended

		// This isn't a search, it controls display of objects
		//object_search((u32*) &temp, 64, 0x30, 1);
		// object_search((u32*) &temp2, 64, 0x70, 1);

		loadMessageBox(0, 0);
		fdecoder(dest, (char*) caHelloThere);
		box_related_one(0, 4, dest, b, 0, 2, 1, 3);

		rboxid_to_vram(0, 3);
	
		tasks[index].args[6] = 0x1E;
		tasks[index].function = (u32) showRowan;
	} else {
		tasks[index].args[6] = arg - 1;
	}
	return;
}
Beispiel #6
0
void multichoice() {
	u16 id;
	u8 current;

	/* Wait for A press */
	if (check_a_pressed(0)) return;

	/* Show multichoice */

	// Load rbox
	u16 (*func)(u32) = (u16 (*)(void)) 0x08003CE4 + 1;
	//id = func(&boy_girl);

	// New
	//tasks[index].args[0xD] = id;
	u16 (*func2)(u16) = (u16 (*)(void)) 0x8003FA0 + 1;
	func2(id);

	// Draw its border
	int (*outline)(u16, u8, u16, u8) = (int (*)(void)) 0x0810F2E8 + 1;
	outline(id, 1, 0x214, 0xE);

	// Clear the contents
	int (*clear)(u16, u8) = (int (*)(void)) 0x0800445C + 1;
	clear(id, 0x11);

	// Draw strings
	// id, font, x, y, bg_color, fg_color, str
	int (*print)(u16, u8, u8, u8, u32, u32, char*) = (int (*)(void)) 0x0812E51C + 1;

	print(id, 2, 8, 1, 1, 0, caOptionInfoControls);
	print(id, 2, 8, 0x11, 1, 0, caOptionInfoAdventure);
	//print(id, 2, 8, 0x21, 1, 0, 0x08415D97);

	// Field
	u8 (*field)(u8, u8) = (u8 (*)(void)) 0x080F79D8 + 1;
	current = field(2, 1);

	// Allow moving the selecty thing
	int (*huh)(u8, u8, u8, u8, u8, u8, u32) = (int (*)(void)) 0x0810F7D8 + 1;
	huh(id, 2, 0, 1, current + 2, 2, 0);

	rboxid_to_vram(id, 3);
}