102 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			102 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
|   | local lua_major, lua_minor = _VERSION:match("Lua (%d+)%.(%d+)") | ||
|  | lua_major = tonumber(lua_major) | ||
|  | lua_minor = tonumber(lua_minor) | ||
|  | -- lua compat shims | ||
|  | if lua_major > 5 or (lua_major == 5 and lua_minor >= 3) then | ||
|  |   require("lua_5_3_compat") | ||
|  | end | ||
|  | 
 | ||
|  | function table.empty (self) | ||
|  |     for _, _ in pairs(self) do | ||
|  |         return false | ||
|  |     end | ||
|  |     return true | ||
|  | end | ||
|  | 
 | ||
|  | local bizhawk_version = client.getversion() | ||
|  | local bizhawk_major, bizhawk_minor, bizhawk_patch = bizhawk_version:match("(%d+)%.(%d+)%.?(%d*)") | ||
|  | bizhawk_major = tonumber(bizhawk_major) | ||
|  | bizhawk_minor = tonumber(bizhawk_minor) | ||
|  | if bizhawk_patch == "" then | ||
|  |   bizhawk_patch = 0 | ||
|  | else | ||
|  |   bizhawk_patch = tonumber(bizhawk_patch) | ||
|  | end | ||
|  | 
 | ||
|  | local is23Or24Or25 = (bizhawk_version=="2.3.1") or (bizhawk_major == 2 and bizhawk_minor >= 3 and bizhawk_minor <= 5) | ||
|  | local isGreaterOrEqualTo26 = bizhawk_major > 2 or (bizhawk_major == 2 and bizhawk_minor >= 6) | ||
|  | local isUntestedBizhawk = bizhawk_major > 2 or (bizhawk_major == 2 and bizhawk_minor > 9) | ||
|  | local untestedBizhawkMessage = "Warning: this version of bizhawk is newer than we know about. If it doesn't work, consider downgrading to 2.9" | ||
|  | 
 | ||
|  | u8 = memory.read_u8 | ||
|  | wU8 = memory.write_u8 | ||
|  | u16 = memory.read_u16_le | ||
|  | 
 | ||
|  | function getMaxMessageLength() | ||
|  |   local denominator = 12 | ||
|  |   if is23Or24Or25 then | ||
|  |     denominator = 11 | ||
|  |   end | ||
|  |   return math.floor(client.screenwidth()/denominator) | ||
|  | end | ||
|  | 
 | ||
|  | function drawText(x, y, message, color) | ||
|  |   if is23Or24Or25 then | ||
|  |       gui.addmessage(message) | ||
|  |   elseif isGreaterOrEqualTo26 then | ||
|  |       gui.drawText(x, y, message, color, 0xB0000000, 18, "Courier New", "middle", "bottom", nil, "client") | ||
|  |   end | ||
|  | end | ||
|  | 
 | ||
|  | function clearScreen() | ||
|  |   if is23Or24Or25 then | ||
|  |       return | ||
|  |   elseif isGreaterOrEqualTo26 then | ||
|  |       drawText(0, 0, "", "black") | ||
|  |   end | ||
|  | end | ||
|  | 
 | ||
|  | itemMessages = {} | ||
|  | 
 | ||
|  | function drawMessages() | ||
|  |   if table.empty(itemMessages) then | ||
|  |       clearScreen() | ||
|  |       return | ||
|  |   end | ||
|  |   local y = 10 | ||
|  |   found = false | ||
|  |   maxMessageLength = getMaxMessageLength() | ||
|  |   for k, v in pairs(itemMessages) do | ||
|  |       if v["TTL"] > 0 then | ||
|  |           message = v["message"] | ||
|  |           while true do | ||
|  |               drawText(5, y, message:sub(1, maxMessageLength), v["color"]) | ||
|  |               y = y + 16 | ||
|  | 
 | ||
|  |               message = message:sub(maxMessageLength + 1, message:len()) | ||
|  |               if message:len() == 0 then | ||
|  |                   break | ||
|  |               end | ||
|  |           end | ||
|  |           newTTL = 0 | ||
|  |           if isGreaterOrEqualTo26 then | ||
|  |               newTTL = itemMessages[k]["TTL"] - 1 | ||
|  |           end | ||
|  |           itemMessages[k]["TTL"] = newTTL | ||
|  |           found = true | ||
|  |       end | ||
|  |   end | ||
|  |   if found == false then | ||
|  |       clearScreen() | ||
|  |   end | ||
|  | end | ||
|  | 
 | ||
|  | function checkBizhawkVersion() | ||
|  |   if not is23Or24Or25 and not isGreaterOrEqualTo26 then | ||
|  |     print("Must use a version of bizhawk 2.3.1 or higher") | ||
|  |     return false | ||
|  |   elseif isUntestedBizhawk then | ||
|  |     print(untestedBizhawkMessage) | ||
|  |   end | ||
|  |   return true | ||
|  | end |