/*=================================================================
	File created by Yohann NICOLAS.
	Add support 1.13d by L'Autour.
	Add support 1.14d by haxifix.

	Use a more big stash

=================================================================*/

#include "plugYFiles.h"		// Install_PlugYFiles()
#include "common.h"

bool active_bigStash = false;
bool active_bigStash_tested = false;

const char* tradeStash_RefFile= "%s\\TradeStash";
const BYTE gridX_BB = 10;
const BYTE gridY_BB = 10;
const DWORD gridLeft_BB = 16;
const DWORD gridRight_BB = 302;
const DWORD gridTop_BB = 82;
const DWORD gridbottom_BB = 371;

InventoryBIN* STDCALL modifStashGrid(InventoryBIN* ptInventoryBin)
{
	active_bigStash_tested = true;
	if ( onRealm || !active_bigStash) return ptInventoryBin;

	InventoryBIN* inventory=ptInventoryBin+12;
	inventory->gridX = gridX_BB;
	inventory->gridY = gridY_BB;
	inventory->gridLeft = gridLeft_BB;
	inventory->gridRight = gridRight_BB;
	inventory->gridTop = gridTop_BB;
	inventory->gridBottom = gridbottom_BB;

	inventory = ptInventoryBin+28;
	inventory->gridX = gridX_BB;
	inventory->gridY = gridY_BB;
	inventory->gridLeft = gridLeft_BB + 80;
	inventory->gridRight = gridRight_BB + 80;
	inventory->gridTop = gridTop_BB + 60;
	inventory->gridBottom = gridbottom_BB + 60;

	return ptInventoryBin;
}

FCT_ASM ( caller_modifStashGrid )
	PUSH DWORD PTR SS:[ESP+0x14]
	PUSH DWORD PTR SS:[ESP+0x14]
	PUSH DWORD PTR SS:[ESP+0x14]
	PUSH DWORD PTR SS:[ESP+0x14]
	PUSH DWORD PTR SS:[ESP+0x14]
	CALL D2CompileTxtFile
	PUSH EAX
	CALL modifStashGrid
	RETN 0x14
}}

//FCT_ASM ( caller_modifStashGrid )
//	POP ESI
//	CALL D2CompileTxtFile
//	PUSH EAX
//	CALL modifStashGrid
//	JMP ESI
//}}

FCT_ASM ( caller_changeTradeStash )
	CMP onRealm,0
	JNZ normalTradeStash
	MOV EAX,modDataDirectory
	MOV DWORD PTR SS:[ESP+0x8],EAX
	MOV EAX,tradeStash_RefFile
	MOV DWORD PTR SS:[ESP+0x4],EAX
normalTradeStash:
	POP EAX
	PUSH 0x104
	JMP EAX
}}


void Install_BigStash()
{
	static int isInstalled = false;
	if (isInstalled) return;

	Install_PlugYFiles();

	log_msg("Patch D2Common & D2Client for make 10x10 squares in the stash. (BigStash)\n");

	// modification of stash grid
	mem_seek R8(D2Common, C9F3, CA03, 14ED3, 5FCB5, 2A505, 1BDB5, 82CA5, 6CC25, 25C0F8);
	MEMC_REF4( D2CompileTxtFile, caller_modifStashGrid);
	//01B64ED2  |. E8 99AEFFFF    CALL D2Common.#10578
	//6FDAFCB4  |. E8 A7C3FCFF    CALL D2Common.#10653
	//6FD7A504  |. E8 5743FEFF    CALL D2Common.#10496                     ; \#10496
	//6FD6BDB4  |. E8 97600200    CALL D2Common.#10244                     ; \#10244
	//6FDD2CA4  |. E8 97C2FDFF    CALL D2Common.#10849                     ; \#10849
	//6FDBCC24  |. E8 B7FEF9FF    CALL D2Common.#10037                     ; \#10037
	//0065C0F7  |. E8 F461FBFF    CALL Game.006122F0                       ; \Game.006122F0

	// modification of stash background
	mem_seek R8(D2Client, 45B1C, 45B1C, 4C61C, A643C, 749BC, A9D7C, 8CC1C, 943FC, 89EB5);
	memt_byte( 0x68, 0xE8 );	// CALL caller_changeTradeStash
	MEMT_REF4( 0x00000104, caller_changeTradeStash);
	//6FAEC61C  |. 68 04010000    PUSH 104
	//6FB5643C  |. 68 04010000    PUSH 104
	//6FB249BC  |. 68 04010000    PUSH 104
	//6FB59D7C  |. 68 04010000    PUSH 104
	//6FB3CC1C  |. 68 04010000    PUSH 104
	//6FB443FC  |. 68 04010000    PUSH 104
	//00489EB5  |. 68 04010000    PUSH 104                                 ; |Arg2 = 00000104

	log_msg("\n");

	isInstalled = true;
}

/*================================= END OF FILE =================================*/