gt = RegisterMod("goodtrip", 1) ------------------------------------------- local player = Isaac.GetPlayer(0) local level = Game():GetLevel() local stage = level:GetStage() local curse = 0 local room = Game():GetRoom() local crd = level:GetCurrentRoomDesc() local last_crd local crid = crd.GridIndex --- local sfx = SFXManager() local mmp = Sprite() mmp:Load("gfx/ui/minimap1.anm2", true) local gtui = Sprite() gtui:Load("sprite/gt_ui.anm2", true) local select = Sprite() select:Load("sprite/gt_ui.anm2", true) local cursor = Sprite() cursor:Load("gfx/ui/cursor.anm2", true) cursor:SetFrame("Idle", 0) local trash = Sprite() trash:Load("sprite/gt_exit.anm2", true) --- local mouse_pressed = {false, false, false, false, false} local key = {ButtonAction.ACTION_SHOOTUP,ButtonAction.ACTION_SHOOTLEFT,ButtonAction.ACTION_SHOOTRIGHT,ButtonAction.ACTION_SHOOTDOWN} local dir = {Vector(0, -1),Vector(-1, 0),Vector(1, 0),Vector(0, 1)} local icon_room = {"RoomOutline", "RoomVisited", "RoomUnvisited", "RoomCurrent"} local icon_flag = {"1_IconNormal", "IconShop", "3_IconError", "IconTreasureRoom", "IconBoss", "IconMiniboss", "IconSecretRoom", "IconSuperSecretRoom", "IconArcade", "IconCurseRoom", "IconAmbushRoom", "IconLibrary", "IconSacrificeRoom", "14_IconDevilRoom", "IconAngleRoom", "16_IconDungeon", "17_IconBossRush", "IconIsaacsRoom", "IconBarrenRoom", "IconChestRoom", "IconDiceRoom", "22_IconBlackMarket", "23_IconGreedExit"} --miniboss/sacrifice.3=nil-- --LKJWEDVBhard=IsaacsRoom-- local icon_flag2 = {"IconLockedRoom", "IconTreasureRoomGreed", "IconBossAmbushRoom"} local scpos = Vector(0, 0) local grid_room = {} local draw_room_id = {} local draw_room_pos = {} local draw_room_shape = {} local draw_icon_pos = {Vector(0, 0),Vector(0, 0),Vector(0, 0),Vector(0,3), Vector(0,3),Vector(4, 0),Vector(4, 0),Vector(4,3), Vector(8, 7),Vector(0, 7),Vector(8, 0),Vector(0, 0),} local ltroom = Vector(6, 6) local rbroom = Vector(6, 6) local mmp_pos0 = Vector(0, 0) local mmp_ltpos_ = Vector(0, 0) local mmp_ltpos = Vector(100, 100) --main local mmp_rbpos_ = Vector(0, 0) local mmp_rbpos = Vector(0, 0) local d_pos = Vector(0, 0) local mmp_pin = 0 local mouse_magnet = false local mpos = Vector(0, 0) local ui_timer = 0 local mmp_ctrl = false local mmp_ctrl_pos = Vector(0, 0) local mouse_in_ui = false -- local tele_maze = false local secret_pre_room_id = {} local prep_alarm = false local testnum = 0 gt.HudOffset = 0 gt.KeyboardMapEnable = true gt.DebugMod = false gt.FastRestartEnable = false gt.TeleportAnimation = true local _, err = pcall(require, "gtconfig") ---- local hudoffset = gt.HudOffset local keyboardmap = gt.KeyboardMapEnable local debug = gt.DebugMod local fastrestartenable = gt.FastRestartEnable local tele_anime = 3 local tele_cd0 = 45 local tele_cd = 0 if not gt.TeleportAnimation then tele_anime = 1 tele_cd0 = 10 end if debug then tele_cd0 = 1 end ------------------------------- ---functions--- function gt:check_pos_en_box(pos,ltpos,rbpos) if pos.X > ltpos.X and pos.X < rbpos.X and pos.Y > ltpos.Y and pos.Y < rbpos.Y then return true else return false end end -- function gt:IsMouseBtnTriggered(m) if Input.IsMouseBtnPressed(m) then if not mouse_pressed[m+1] then mouse_pressed[m+1] = true return true end else mouse_pressed[m+1] = false end return false end -- function gt:check_room_open() local door = nil for i =0, 7 do door = room:GetDoor(i) if door then if door:IsOpen() then return true end end end return false end -- function gt:check_teleble(gid) --Isaac.RenderText("check_teleble_running", 50, 50, 1, 1, 1, 1)--test if gid == -99 or level:GetCurses() & LevelCurse.CURSE_OF_THE_LOST ~= 0 then return false elseif debug and grid_room[gid] then return true end --check_current_room-- local cid = crd.SafeGridIndex if grid_room[cid] == nil or not crd.Clear or crd.Data.Name == "Mom" then --inmap/cleaned/momboss return false elseif (crd.Data.Type == 6 or crd.Data.Type == 11) then --miniboss/challengeroom if not gt:check_room_open() then return false end end ---- if gid == false then return true end --skip targetroom check --check_target_room-- if grid_room[gid] == nil then return false else local trd = grid_room[gid] if trd.ListIndex == crd.ListIndex or trd.VisitedCount == 0 or not trd.Clear then --notcurrent/hasvisited/cleaned return false end end --[[ if (crd.Data.Type == 7 and grid_room[secret_pre_room_id[crid] ].VisitedCount == 0) or (grid_room[gid].Data.Type == 7 and not grid_room[secret_pre_room_id[gid] ].VisitedCount == 0) then return end ]]--todo if grid_room[gid].Data.Type == 11 then if stage%2 == 0 and stage ~= 10 then if player:GetHearts() > 2 then sfx:Play(187, 0.5, 0, false, 1) return false end else if player:GetHearts() + player:GetSoulHearts() + player:GetBlackHearts() < player:GetMaxHearts() then sfx:Play(187, 0.5, 0, false, 1) return false end end end -- return true end -- function gt:check_curse_room(gid) if debug then return end ---- local trd = grid_room[gid] if crd.Data.Type == 10 then player:TakeDamage(1, 0, EntityRef(player), 0) elseif trd.Data.Type == 10 and not player:IsFlying() then player:TakeDamage(1, 0, EntityRef(player), 0) end end -- function gt:teleport_to_grid_index(gid) ----core -- gt:check_curse_room(gid) -- level.EnterDoor = -1 level.LeaveDoor = -1 -- if level:GetCurses() & LevelCurse.CURSE_OF_MAZE ~= 0 then level:RemoveCurse(LevelCurse.CURSE_OF_MAZE, false) tele_maze = true end if crd.Data.Type == 7 then if grid_room[secret_pre_room_id[crid]].ListIndex == grid_room[gid].ListIndex then gid = secret_pre_room_id[crid] else --check_curse_room if grid_room[secret_pre_room_id[crid]].Data.Type == 10 then player:TakeDamage(1, 0, EntityRef(player), 0) end -- Game():ChangeRoom(secret_pre_room_id[crid]) end end if grid_room[gid].Data.Type == 7 then if secret_pre_room_id[gid] then if grid_room[secret_pre_room_id[gid]].ListIndex == grid_room[crid].ListIndex then if grid_room[crid].Data.Shape > 3 then Game():ChangeRoom(secret_pre_room_id[gid]) end else --check_curse_room if grid_room[secret_pre_room_id[gid]].Data.Type == 10 and not player:IsFlying() then player:TakeDamage(1, 0, EntityRef(player), 0) end -- Game():ChangeRoom(secret_pre_room_id[gid]) end else --do nothing end end -- if debug then Game():ChangeRoom(gid) else Game():StartRoomTransition(gid, Direction.NO_DIRECTION, tele_anime) tele_cd = tele_cd0 end end -- function gt:get_pos_grid_index(pos) local rtroom = gt:get_corner_room(2) -----RTmap----- local ltx = scpos.X - (rtroom.X + 1) * 17 - 5 - hudoffset * 2.4 --withrighttopmap local lty = - (rtroom.Y) * 15 + 5 + hudoffset * 1.3 --whthrighttopmap if pos.X > ltx and pos.Y > lty and pos.X < ltx + 222 and pos.Y < lty + 196 then local mgid = math.floor((pos.X - ltx)/ 17) + math.floor((pos.Y - lty)/ 15) * 13 return mgid else return -99 end end -- function gt:get_pos_grid_index_mmp(pos) -----minimap----- if gt:check_pos_en_box(pos,mmp_ltpos + Vector(1, 1), mmp_rbpos + Vector(11, 10)) then local mgid = math.floor((pos.X - mmp_pos0.X - 2)/ 8) + math.floor((pos.Y - mmp_pos0.Y - 2)/ 7) * 13 return mgid else return -99 end end -- function gt:get_grid_room() grid_room = {} local all_room = level:GetRooms() for i = 0, all_room.Size do local des = all_room:Get(i) if des then local gid = des.GridIndex for jx=0, 1 do for jy=0, 1 do local tgid = gid + jx + jy * 13 local tdes = level:GetRoomByIdx(tgid) if tdes.ListIndex == des.ListIndex then grid_room[tgid] = des end end end end end end -- function gt:get_corner_room(num) local corner_room = Vector(6, 6) local fx = {1, -1, 1, -1} local fy = {1, 1, -1, -1} local ffx = fx[num] local ffy = fy[num] ---- for i = 6 - 6 * ffx, 6 - ffx, ffx do for j = 0, 12 do if grid_room[i+j*13] then if grid_room[i+j*13].DisplayFlags > 0 then corner_room.X = i break end end end if corner_room.X ~= 6 then break end end ---- for j = 6 - 6 * ffy, 6 - ffy, ffy do for i = 0, 12 do if grid_room[i+j*13] then if grid_room[i+j*13].DisplayFlags > 0 then corner_room.Y = j break end end end if corner_room.Y ~= 6 then break end end ---- return corner_room end -- function gt:pre_secret_room() local door = nil for i =0, 7 do door = room:GetDoor(i) if door then local id = door.TargetRoomIndex if door.Desc.Variant == 8 then if door.TargetRoomType == 10 then if not secret_pre_room_id[crid] then secret_pre_room_id[crid] = id end elseif grid_room[id].VisitedCount == 0 then secret_pre_room_id[crid] = id else secret_pre_room_id[crid] = id break end end end end end ---draw works--- function gt:print_center_map() --test useing-- local cp = scpos / 2 for i = 0, 12 do for j = 0, 12 do if grid_room[i * 13 + j] == nil then Isaac.RenderText(0, cp.X + 17 * (j-6) - 2, cp.Y + 15 * (i-6) - 5, 1, 1, 1, 0.1) else local color = {} if crd.ListIndex == grid_room[i * 13 + j].ListIndex then color = {1 , 0.5 , 0.5 , 1} elseif grid_room[i * 13 + j].VisitedCount > 0 and grid_room[i * 13 + j].Clear then color = {1 , 1 , 1 , 1} elseif grid_room[i * 13 + j].DisplayFlags > 0 then color = {1 , 1 , 1 , 0.5} else color = {0.5 , 0.5 , 1 , 0.5} end Isaac.RenderText(grid_room[i * 13 + j].Data.Type.."/"..grid_room[i * 13 + j].DisplayFlags, cp.X + 17 * (j-6) - 3, cp.Y + 15 * (i-6) - 6, color[1] ,color[2] ,color[3] ,color[4]) end end end end -- function gt:prep_minimap() --Isaac.RenderText("prep_minimap_running", 50, 50, 1, 1, 1, 1)--test draw_room_id = {} draw_room_pos = {} draw_room_shape = {} ---- ltroom = gt:get_corner_room(1) rbroom = gt:get_corner_room(4) mmp_ltpos_ = Vector(ltroom.X * 8, ltroom.Y * 7) -- + Vector(-4, -4) mmp_rbpos_ = Vector(rbroom.X * 8, rbroom.Y * 7) -- + Vector(4, 4) mmp_pos0 = mmp_ltpos - mmp_ltpos_ mmp_rbpos = mmp_pos0 + mmp_rbpos_ ---ctrl pos prep--- if mmp_ctrl then local gx = crid % 13 local gy = (crid - gx)/ 13 mmp_ctrl_pos = mmp_pos0 + Vector(gx * 8 + 6, gy * 7 + 5) end ---draw prep--- for i = 0, 12 do for j = 0, 12 do local drd = grid_room[i * 13 + j] if drd then if drd.DisplayFlags > 0 then if drd.Data.Type == 5 and drd.Data.Shape > 3 and stage == 12 then --void bossrooms--type4=1x2/type6=2x1/type8=2x2=Delirium local near_room = {grid_room[i * 13 + j - 13] ~= nil, grid_room[i * 13 + j - 1] and j > 0, grid_room[i * 13 + j + 1] and j < 12, grid_room[i * 13 + j + 13] ~= nil} if (near_room[1] and near_room[4]) or (near_room[2] and near_room[3]) or (drd.Data.Shape == 6 and (near_room[1] or near_room[4])) or (drd.Data.Shape == 4 and (near_room[2] or near_room[3])) then table.insert(draw_room_id, i * 13 + j) table.insert(draw_room_shape, 1) table.insert(draw_room_pos, Vector(mmp_pos0.X + 8 * j, mmp_pos0.Y + 7 * i)) end --else draw nothing elseif drd.Data.Shape == RoomShape.ROOMSHAPE_LTL then --LTLonly table.insert(draw_room_id, i * 13 + j) table.insert(draw_room_shape, drd.Data.Shape) table.insert(draw_room_pos, Vector(mmp_pos0.X + 8 * (j - 1), mmp_pos0.Y + 7 * i)) -- else --normal table.insert(draw_room_id, i * 13 + j) table.insert(draw_room_shape, drd.Data.Shape) table.insert(draw_room_pos, Vector(mmp_pos0.X + 8 * j, mmp_pos0.Y + 7 * i)) -- end end end end end end -- function gt:draw_minimap_ui() if not ((keyboardmap and gt:check_teleble(false)) or debug) then -------return when keyboardmap disable & debug disable ui_timer = 0 return elseif ui_timer < 10 then ui_timer = ui_timer + 1 end ---draw ui--- gtui:SetFrame("ui1", ui_timer) gtui:Render(Vector(mmp_ltpos.X, mmp_ltpos.Y), Vector(0, 0), Vector(0, 0)) gtui:SetFrame("ui3", ui_timer) gtui:Render(Vector(mmp_rbpos.X, mmp_ltpos.Y), Vector(0, 0), Vector(0, 0)) gtui:SetFrame("ui7", ui_timer) gtui:Render(Vector(mmp_ltpos.X, mmp_rbpos.Y), Vector(0, 0), Vector(0, 0)) gtui:SetFrame("ui9", ui_timer) gtui:Render(Vector(mmp_rbpos.X, mmp_rbpos.Y), Vector(0, 0), Vector(0, 0)) --- for i = ltroom.X, rbroom.X do gtui:SetFrame("ui2", ui_timer) gtui:Render(mmp_pos0 + Vector(i * 8, ltroom.Y * 7), Vector(0, 0), Vector(0, 0)) gtui:SetFrame("ui8", ui_timer) gtui:Render(mmp_pos0 + Vector(i * 8, rbroom.Y * 7), Vector(0, 0), Vector(0, 0)) end for j = ltroom.Y, rbroom.Y do gtui:SetFrame("ui4", ui_timer) gtui:Render(mmp_pos0 + Vector(ltroom.X * 8, j * 7), Vector(0, 0), Vector(0, 0)) gtui:SetFrame("ui6", ui_timer) gtui:Render(mmp_pos0 + Vector(rbroom.X * 8, j * 7), Vector(0, 0), Vector(0, 0)) end --- gtui:SetFrame("ui5", ui_timer) for i = ltroom.X, rbroom.X do for j = ltroom.Y, rbroom.Y do gtui:Render(mmp_pos0 + Vector(i * 8, j * 7), Vector(0, 0), Vector(0, 0)) end end --pin-- if mmp_pin == 1 then gtui:SetFrame("pin1", ui_timer) else gtui:SetFrame("pin0", ui_timer) end gtui:Render(mmp_ltpos, Vector(0, 0), Vector(0, 0)) end -- function gt:draw_minimap() ---draw outline--- mmp:SetFrame(icon_room[1], 0) for i = 1, #draw_room_id do if grid_room[draw_room_id[i]].Data.Shape == RoomShape.ROOMSHAPE_LTL then mmp:Render(draw_room_pos[i] + Vector(8, 0), Vector(0, 0), Vector(0, 0)) else mmp:Render(draw_room_pos[i], Vector(0, 0), Vector(0, 0)) end end ---draw room&icon--- for i = 1, #draw_room_id do local rd = grid_room[draw_room_id[i]] if rd.SafeGridIndex == draw_room_id[i] or (rd.Data.Type == 5 and stage == 12) then -----room if crd.ListIndex == rd.ListIndex then mmp:SetFrame(icon_room[4], draw_room_shape[i] - 1) mmp:Render(draw_room_pos[i], Vector(0, 0), Vector(0, 0)) elseif rd.VisitedCount > 0 and rd.Clear then mmp:SetFrame(icon_room[2], draw_room_shape[i] - 1) mmp:Render(draw_room_pos[i], Vector(0, 0), Vector(0, 0)) elseif rd.Data.Type ~= 7 and rd.Data.Type ~= 8 then mmp:SetFrame(icon_room[3], draw_room_shape[i] - 1) mmp:Render(draw_room_pos[i], Vector(0, 0), Vector(0, 0)) end -----icon if rd.Data.Type > 1 and rd.DisplayFlags > 1 and (rd.DisplayFlags ~= 3 or (rd.Data.Type ~= 6 and rd.Data.Type ~= 13))then if (rd.Data.Type == 2 or rd.Data.Type == 12 or (rd.Data.Type > 17 and rd.Data.Type < 22)) and rd.DisplayFlags == 3 then mmp:SetFrame(icon_flag2[1], 0) elseif rd.Data.Type == 4 and Game():IsGreedMode() and rd.GridIndex == 98 then mmp:SetFrame(icon_flag2[2], 0) elseif rd.Data.Type == 11 and stage%2 == 0 and stage ~= 10 then mmp:SetFrame(icon_flag2[3], 0) else mmp:SetFrame(icon_flag[rd.Data.Type], 0) end mmp:Render(draw_room_pos[i] + draw_icon_pos[draw_room_shape[i]], Vector(0, 0), Vector(0, 0)) end end end ---draw select--- local checkid = nil if mmp_ctrl then checkid = gt:get_pos_grid_index_mmp(mmp_ctrl_pos) else checkid = gt:get_pos_grid_index_mmp(mpos) end if grid_room[checkid] then checkid = grid_room[checkid].SafeGridIndex for i = 1, #draw_room_id do if checkid == draw_room_id[i] then if gt:check_teleble(checkid) then select:SetFrame("select", draw_room_shape[i]) else select:SetFrame("select_false", draw_room_shape[i]) end select:Render(draw_room_pos[i], Vector(0, 0), Vector(0, 0)) break end end end ---draw cursor--- if mmp_ctrl then cursor:Render(mmp_ctrl_pos, Vector(0, 0), Vector(0, 0)) end end ---control & run--- function gt:mmp_ctrl_move() local dif = {mmp_ctrl_pos.Y - mmp_ltpos.Y + 2, mmp_ctrl_pos.X - mmp_ltpos.X + 2, mmp_rbpos.X - mmp_ctrl_pos.X + 14, mmp_rbpos.Y - mmp_ctrl_pos.Y + 13} for i = 1,4 do if Input.IsActionPressed(key[i], player.ControllerIndex) and dif[i] > 0 then mmp_ctrl_pos = mmp_ctrl_pos + dir[i] end end end -- function gt:prep() player = Isaac.GetPlayer(0) if keyboardmap then gt:prep_minimap() end end -- function gt:tab_action() local cp = Isaac.WorldToRenderPosition(Vector(320,280)) scpos = cp + cp mpos = Isaac.WorldToScreen(Input.GetMousePosition(true)) -- if Input.IsActionTriggered(ButtonAction.ACTION_RESTART, player.ControllerIndex) and fastrestartenable then Isaac.ExecuteCommand("restart") end -- if (keyboardmap and gt:check_teleble(false)) or debug then -------return when keyboardmap & debug disable if not (Input.IsActionPressed(ButtonAction.ACTION_UP,player.ControllerIndex) or Input.IsActionPressed(ButtonAction.ACTION_LEFT,player.ControllerIndex) or Input.IsActionPressed(ButtonAction.ACTION_RIGHT,player.ControllerIndex) or Input.IsActionPressed(ButtonAction.ACTION_DOWN,player.ControllerIndex)) then if not gt:check_pos_en_box(mpos,mmp_ltpos + Vector(-8, -18),mmp_rbpos + Vector(20, 20)) then --ui zone if not mmp_ctrl then mmp_ctrl = true local gx = crid % 13 local gy = (crid - gx)/ 13 mmp_ctrl_pos = mmp_pos0 + Vector(gx * 8 + 6, gy * 7 + 5) else gt:mmp_ctrl_move() player:SetShootingCooldown(2) end else mmp_ctrl = false end gt:draw_minimap_ui() else mmp_ctrl = false if mmp_pin == 1 or gt:check_pos_en_box(mpos,mmp_ltpos + Vector(-8, -18),mmp_rbpos + Vector(20, 20)) then --ui zone gt:draw_minimap_ui() else ui_timer = 0 end end gt:draw_minimap() end ----- gt:mouse_action() end -- function gt:mouse_action() if gt:IsMouseBtnTriggered(0) then -- if crd.Data.Type == 7 or (crd.Data.Type == 8 and Game():IsGreedMode()) then gt:pre_secret_room() end -- local mgid = gt:get_pos_grid_index(mpos) --- if (gt:check_teleble(mgid) and tele_cd < 1) then gt:teleport_to_grid_index(mgid) elseif keyboardmap then -----------------------keyboardmap enable mgid = gt:get_pos_grid_index_mmp(mpos) -- if (gt:check_teleble(mgid) and tele_cd < 1) then gt:teleport_to_grid_index(mgid) elseif gt:check_pos_en_box(mpos,mmp_ltpos + Vector(-6, -15),Vector(mmp_rbpos.X + 18, mmp_ltpos.Y - 1)) then --magnet zone if gt:check_pos_en_box(mpos,mmp_ltpos + Vector(-3, -13),mmp_ltpos + Vector(5,-4)) then --pin zone if mmp_pin == 1 then mmp_pin = 0 else mmp_pin = 1 end elseif mmp_pin == 0 then mouse_magnet = true d_pos = mmp_ltpos - mpos end end -- end --- end ---------------------------------- if not keyboardmap then return end ---------------------------------- local cp = scpos / 2 if Input.IsMouseBtnPressed(0) then if mouse_magnet then mmp_ltpos = mpos + d_pos mmp_pos0 = mmp_ltpos - mmp_ltpos_ mmp_rbpos = mmp_pos0 + mmp_rbpos_ gt:prep_minimap() player:SetShootingCooldown(2) -- if gt:check_pos_en_box(mpos, cp + Vector(-16, -16), cp + Vector(16, 116)) then trash:SetFrame("trash", 1) trash:Render(cp, Vector(0, 0), Vector(0, 0)) else trash:SetFrame("trash", 0) trash:Render(cp, Vector(0, 0), Vector(0, 0)) end -- end else if mouse_magnet then mouse_magnet = false if gt:check_pos_en_box(mpos, cp + Vector(-16, -16), cp + Vector(16, 16)) then keyboardmap = false end end -- if mmp_ltpos.X < 5 then mmp_ltpos.X = 5 mmp_pos0 = mmp_ltpos - mmp_ltpos_ mmp_rbpos = mmp_pos0 + mmp_rbpos_ gt:prep_minimap() elseif mmp_rbpos.X > scpos.X - 17 then mmp_rbpos.X = scpos.X - 17 mmp_pos0 = mmp_rbpos - mmp_rbpos_ mmp_ltpos = mmp_pos0 + mmp_ltpos_ gt:prep_minimap() end if mmp_ltpos.Y < 14 then mmp_ltpos.Y = 14 mmp_pos0 = mmp_ltpos - mmp_ltpos_ mmp_rbpos = mmp_pos0 + mmp_rbpos_ gt:prep_minimap() elseif mmp_rbpos.Y > scpos.Y - 16 then mmp_rbpos.Y = scpos.Y - 16 mmp_pos0 = mmp_rbpos - mmp_rbpos_ mmp_ltpos = mmp_pos0 + mmp_ltpos_ gt:prep_minimap() end -- end --- end -- function gt:step() if Input.IsActionTriggered(ButtonAction.ACTION_MAP,player.ControllerIndex) then gt:prep() end if Input.IsActionPressed(ButtonAction.ACTION_MAP,player.ControllerIndex) then gt:tab_action() --do when tab pressed elseif (keyboardmap) or debug then -------return when keyboardmap & debug disable --PIN ACTION WITHOUT TAB-- if mmp_pin == 1 and crd.Clear and gt:check_teleble(false) then if mouse_in_ui then ---click if gt:IsMouseBtnTriggered(0) then if gt:check_pos_en_box(mpos,mmp_ltpos + Vector(-3, -13),mmp_ltpos + Vector(5,-4)) then --pin zone mmp_pin = 0 else local mgid = gt:get_pos_grid_index_mmp(mpos) if (gt:check_teleble(mgid) and tele_cd < 1) then gt:teleport_to_grid_index(mgid) end end end ---click end gt:draw_minimap_ui() else ui_timer = 0 end gt:draw_minimap() else ui_timer = 0 end --do when tab not pressed with pin always-- if mmp_ctrl and gt:check_teleble(false) then mmp_ctrl = false local mgid = gt:get_pos_grid_index_mmp(mmp_ctrl_pos) if (gt:check_teleble(mgid) and tele_cd < 1) then gt:teleport_to_grid_index(mgid) end end end--PINend ----other stepworks---- if prep_alarm then gt:prep_minimap() prep_alarm = false end if tele_cd > 0 then tele_cd = tele_cd - 1 end if debug then --test-- -------- end ---undebug test--- --gt:print_center_map() --Isaac.RenderText(crd.Data.Type.."/"..crd.DisplayFlags, 50, 50, 1, 1, 1, 1) --[[ if secret_pre_room_id[crid] then Isaac.RenderText(secret_pre_room_id[crid], 50, 150, 1, 1, 1, 1) else Isaac.RenderText(0, 50, 150, 1, 1, 1, 1) end ]] ------------------ end -- function gt:step2() if mmp_pin == 1 and keyboardmap then mpos = Isaac.WorldToScreen(Input.GetMousePosition(true)) if gt:check_pos_en_box(mpos,mmp_ltpos + Vector(-8, -18),mmp_rbpos + Vector(20, 20)) then --ui zone mouse_in_ui = true else mouse_in_ui = false end end end -- function gt:new_room() last_crd = crd -- room = Game():GetRoom() crd = level:GetCurrentRoomDesc() crid = crd.GridIndex stage = level:GetStage() if keyboardmap then prep_alarm = true gt:prep_minimap() end if tele_maze then level:AddCurse(LevelCurse.CURSE_OF_MAZE) tele_maze = false end -- if last_crd.Data then if last_crd.Data.Type == 7 or (last_crd.Data.Type == 8 and Game():IsGreedMode()) then -- if not secret_pre_room_id[last_crd.GridIndex] then if (level:GetRoomByIdx(last_crd.GridIndex + 1)).ListIndex == crd.ListIndex then secret_pre_room_id[last_crd.GridIndex] = last_crd.GridIndex + 1 elseif (level:GetRoomByIdx(last_crd.GridIndex - 1)).ListIndex == crd.ListIndex then secret_pre_room_id[last_crd.GridIndex] = last_crd.GridIndex - 1 elseif (level:GetRoomByIdx(last_crd.GridIndex + 13)).ListIndex == crd.ListIndex then secret_pre_room_id[last_crd.GridIndex] = last_crd.GridIndex + 13 elseif (level:GetRoomByIdx(last_crd.GridIndex - 13)).ListIndex == crd.ListIndex then secret_pre_room_id[last_crd.GridIndex] = last_crd.GridIndex - 13 end end -- end end if crd.Data.Type == 7 or (crd.Data.Type == 8 and Game():IsGreedMode()) then gt:pre_secret_room() end end -- function gt:new_level() level = Game():GetLevel() gt:get_grid_room() secret_pre_room_id = {} if keyboardmap then prep_alarm = true gt:prep_minimap() end end -- ------------------------------- gt:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, function() gt:prep() gt:new_room() gt:new_level() end) gt:AddCallback(ModCallbacks.MC_POST_RENDER, gt.step) gt:AddCallback(ModCallbacks.MC_POST_UPDATE, gt.step2) gt:AddCallback(ModCallbacks.MC_POST_NEW_ROOM, gt.new_room) gt:AddCallback(ModCallbacks.MC_POST_NEW_LEVEL, gt.new_level)