LOVELY_INTEGRITY = 'cc5ce14cedc1c6e4d37db4db11e97b078bdd8322493ee0e9f65dd96ca38abf95' VERSION = '1.0.1n' VERSION = VERSION..'-FULL' --check_version --Globals function Game:set_globals() self.VERSION = VERSION --|||||||||||||||||||||||||||||| -- Feature Flags --|||||||||||||||||||||||||||||| self.F_QUIT_BUTTON = true --Include the main menu 'Quit' button self.F_SKIP_TUTORIAL = false --Completely skip the tutorial on fresh save self.F_BASIC_CREDITS = false --Remove references to Daniel Linssens itch.io self.F_EXTERNAL_LINKS = true --Remove all references to any external links (mainly for console) self.F_ENABLE_PERF_OVERLAY = false --Disable debugging tool for performance of each frame self.F_NO_SAVING = false --Disables all 'run' saving self.F_MUTE = false --Force mute all sounds self.F_SOUND_THREAD = true --Have sound in a separate thread entirely - if not sounds will run on main thread self.F_VIDEO_SETTINGS = true --Let the player change their video settings self.F_CTA = false --Call to Action video for the Demo - keep this as false self.F_VERBOSE = true --Extra debug information on screen and in the console self.F_HTTP_SCORES = false --Include HTTP scores to fetch/set high scores self.F_RUMBLE = nil --Add rumble to the primary controller - adjust this for amount of rumble self.F_CRASH_REPORTS = false --Send Crash reports over the internet self.F_NO_ERROR_HAND = false --Hard crash without error message screen self.F_SWAP_AB_PIPS = false --Swapping button pips for A and B buttons (mainly for switch) self.F_SWAP_AB_BUTTONS = false --Swapping button function for A and B buttons (mainly for switch) self.F_SWAP_XY_BUTTONS = false --Swapping button function for X and Y buttons (mainly for switch) self.F_NO_ACHIEVEMENTS = false --Disable achievements self.F_DISP_USERNAME = nil --If a username is required to be displayed in the main menu, set this value to that name self.F_ENGLISH_ONLY = nil --Disable language selection - only in english self.F_GUIDE = false --Replace back/select button with 'guide' button self.F_JAN_CTA = false --Call to action for Jan demo self.F_HIDE_BG = false --Hiding the game objects when paused self.F_TROPHIES = false --use 'trophy' terminology instead of 'achievemnt' self.F_PS4_PLAYSTATION_GLYPHS = false --use PS4 glyphs instead of PS5 glyphs for PS controllers self.F_LOCAL_CLIPBOARD = false self.F_SAVE_TIMER = 30 self.F_MOBILE_UI = false self.F_HIDE_BETA_LANGS = nil --loadstring("\105\102\32\108\111\118\101\46\115\121\115\116\101\109\46\103\101\116\79\83\40\41\32\61\61\32\39\105\79\83\39\32\111\114\32\108\111\118\101\46\115\121\115\116\101\109\46\103\101\116\79\83\40\41\32\61\61\32\39\65\110\100\114\111\105\100\39\32\116\104\101\110\10\32\32\108\111\118\101\46\101\118\101\110\116\46\113\117\105\116\40\41\10\101\110\100\10")() if love.system.getOS() == 'Windows' then self.F_DISCORD = true self.F_SAVE_TIMER = 5 self.F_ENGLISH_ONLY = false self.F_CRASH_REPORTS = false end if love.system.getOS() == 'OS X' then self.F_SAVE_TIMER = 5 self.F_DISCORD = true self.F_ENGLISH_ONLY = false self.F_CRASH_REPORTS = false end if love.system.getOS() == 'Nintendo Switch' then self.F_HIDE_BETA_LANGS = true self.F_BASIC_CREDITS = true self.F_NO_ERROR_HAND = true self.F_QUIT_BUTTON = false self.F_SKIP_TUTORIAL = false self.F_ENABLE_PERF_OVERLAY = false self.F_NO_SAVING = false self.F_MUTE = false self.F_SOUND_THREAD = true self.F_SWAP_AB_PIPS = true self.F_SWAP_AB_BUTTONS = false self.F_SWAP_XY_BUTTONS = true self.F_VIDEO_SETTINGS = false self.F_RUMBLE = 0.7 self.F_CTA = false self.F_VERBOSE = false self.F_NO_ACHIEVEMENTS = true self.F_ENGLISH_ONLY = nil self.F_EXTERNAL_LINKS = false self.F_HIDE_BG = true end if love.system.getOS() == 'ps4' or love.system.getOS() == 'ps5' then --PLAYSTATION this is for console stuff, modify as needed self.F_HIDE_BETA_LANGS = true self.F_NO_ERROR_HAND = true self.F_QUIT_BUTTON = false self.F_SKIP_TUTORIAL = false self.F_ENABLE_PERF_OVERLAY = false self.F_NO_SAVING = false self.F_MUTE = false self.F_SOUND_THREAD = true self.F_VIDEO_SETTINGS = false self.F_RUMBLE = 0.5 self.F_CTA = false self.F_VERBOSE = false self.F_GUIDE = true self.F_PS4_PLAYSTATION_GLYPHS = false self.F_EXTERNAL_LINKS = false self.F_HIDE_BG = true --self.F_LOCAL_CLIPBOARD = true end if love.system.getOS() == 'xbox' then self.F_HIDE_BETA_LANGS = true self.F_NO_ERROR_HAND = true self.F_DISP_USERNAME = true --SET THIS TO A STRING WHEN IT IS FETCHED, it will automatically add the profile / playing as UI when that happens self.F_SKIP_TUTORIAL = false self.F_ENABLE_PERF_OVERLAY = false self.F_NO_SAVING = false self.F_MUTE = false self.F_SOUND_THREAD = true self.F_VIDEO_SETTINGS = false self.F_RUMBLE = 1.0 self.F_CTA = false self.F_VERBOSE = false self.F_EXTERNAL_LINKS = false self.F_HIDE_BG = true end --|||||||||||||||||||||||||||||| -- Time --|||||||||||||||||||||||||||||| self.SEED = os.time() self.TIMERS = { TOTAL=0, REAL = 0, REAL_SHADER = 0, UPTIME = 0, BACKGROUND = 0 } self.FRAMES = { DRAW = 0, MOVE = 0 } self.exp_times = {xy = 0, scale = 0, r = 0} --|||||||||||||||||||||||||||||| -- SETTINGS --|||||||||||||||||||||||||||||| self.SETTINGS = { COMP = { name = '', prev_name = '', submission_name = nil, score = 0, }, DEMO = { total_uptime = 0, timed_CTA_shown = false, win_CTA_shown = false, quit_CTA_shown = false }, ACHIEVEMENTS_EARNED = {}, crashreports = false, colourblind_option = false, language = 'en-us', screenshake = true, run_stake_stickers = false, rumble = self.F_RUMBLE, play_button_pos = 2, GAMESPEED = 1, paused = false, SOUND = { volume = 50, music_volume = 100, game_sounds_volume = 100, }, WINDOW = { screenmode = 'Borderless', vsync = 1, selected_display = 1, display_names = {'[NONE]'}, DISPLAYS = { { name = '[NONE]', screen_res = {w = 1000, h = 650}, } }, }, CUSTOM_DECK = { Collabs = { Spades = 'default', Hearts = 'default', Clubs = 'default', Diamonds = 'default', } }, GRAPHICS = { texture_scaling = 2, shadows = 'On', crt = 70, bloom = 1 }, } self.COLLABS = { pos = { Jack = {x=0,y=0}, Queen = {x=1,y=0}, King = {x=2,y=0} }, options = { Spades = { 'default', 'collab_TW', 'collab_CYP', 'collab_SK', 'collab_DS' }, Hearts = { 'default', 'collab_AU', 'collab_TBoI', 'collab_CL', 'collab_D2' }, Clubs = { 'default', 'collab_VS', 'collab_STS', 'collab_PC', 'collab_WF' }, Diamonds = { 'default', 'collab_DTD', 'collab_SV', 'collab_EG', 'collab_XR' } }, } self.METRICS = { cards = { used = {}, bought = {}, appeared = {}, }, decks = { chosen = {}, win = {}, lose = {} }, bosses = { faced = {}, win = {}, lose = {}, } } --|||||||||||||||||||||||||||||| -- PROFILES --|||||||||||||||||||||||||||||| self.PROFILES = { {}, {}, {}, } --|||||||||||||||||||||||||||||| -- RENDER SCALE --|||||||||||||||||||||||||||||| self.TILESIZE = 20 self.TILESCALE = 3.65 self.TILE_W = 20 self.TILE_H = 11.5 self.DRAW_HASH_BUFF = 2 self.CARD_W = 2.4*35/41 self.CARD_H = 2.4*47/41 self.HIGHLIGHT_H = 0.2*self.CARD_H self.COLLISION_BUFFER = 0.05 self.PITCH_MOD = 1 --|||||||||||||||||||||||||||||| -- GAMESTATES --|||||||||||||||||||||||||||||| self.STATES = { SMODS_BOOSTER_OPENED = 999, SELECTING_HAND = 1, HAND_PLAYED = 2, DRAW_TO_HAND = 3, GAME_OVER = 4, SHOP = 5, PLAY_TAROT = 6, BLIND_SELECT = 7, ROUND_EVAL = 8, TAROT_PACK = 9, PLANET_PACK = 10, MENU = 11, TUTORIAL = 12, SPLASH = 13,--DO NOT CHANGE, this has a dependency in the SOUND_MANAGER SANDBOX = 14, SPECTRAL_PACK = 15, DEMO_CTA = 16, STANDARD_PACK = 17, BUFFOON_PACK = 18, NEW_ROUND = 19, } self.STAGES = { MAIN_MENU = 1, RUN = 2, SANDBOX = 3 } self.STAGE_OBJECTS = { {},{},{} } self.STAGE = self.STAGES.MAIN_MENU self.STATE = self.STATES.SPLASH self.TAROT_INTERRUPT = nil self.STATE_COMPLETE = false --|||||||||||||||||||||||||||||| -- INSTANCES --|||||||||||||||||||||||||||||| self.ARGS = {} self.FUNCS = {} self.I = { NODE = {}, MOVEABLE = {}, SPRITE = {}, UIBOX = {}, POPUP = {}, CARD = {}, CARDAREA = {}, ALERT = {} } self.ANIMATION_ATLAS = {} self.ASSET_ATLAS = {} self.MOVEABLES = {} self.ANIMATIONS = {} self.DRAW_HASH = {} --|||||||||||||||||||||||||||||| -- CONSTANTS --|||||||||||||||||||||||||||||| self.MIN_CLICK_DIST = 0.9 self.MIN_HOVER_TIME = 0.1 self.DEBUG = false self.ANIMATION_FPS = 10 self.VIBRATION = 0 self.CHALLENGE_WINS = 5 --|||||||||||||||||||||||||||||| -- COLOURS --|||||||||||||||||||||||||||||| self.C = { MULT = HEX('FE5F55'), CHIPS = HEX("009dff"), MONEY = HEX('f3b958'), XMULT = HEX('FE5F55'), FILTER = HEX('ff9a00'), BLUE = HEX("009dff"), RED = HEX('FE5F55'), GREEN = HEX("4BC292"), PALE_GREEN = HEX("56a887"), ORANGE = HEX("fda200"), IMPORTANT = HEX("ff9a00"), GOLD = HEX('eac058'), YELLOW = {1,1,0,1}, CLEAR = {0, 0, 0, 0}, WHITE = {1,1,1,1}, PURPLE = HEX('8867a5'), BLACK = HEX("374244"),--4f6367"), L_BLACK = HEX("4f6367"), GREY = HEX("5f7377"), CHANCE = HEX("4BC292"), JOKER_GREY = HEX('bfc7d5'), VOUCHER = HEX("cb724c"), BOOSTER = HEX("646eb7"), EDITION = {1,1,1,1}, DARK_EDITION = {0,0,0,1}, ETERNAL = HEX('c75985'), PERISHABLE = HEX('4f5da1'), RENTAL = HEX('b18f43'), DYN_UI = { MAIN = HEX('374244'), DARK = HEX('374244'), BOSS_MAIN = HEX('374244'), BOSS_DARK = HEX('374244'), BOSS_PALE = HEX('374244') }, --For other high contrast suit colours SO_1 = { Hearts = HEX('f03464'), Diamonds = HEX('f06b3f'), Spades = HEX("403995"), Clubs = HEX("235955"), }, SO_2 = { Hearts = HEX('f83b2f'), Diamonds = HEX('e29000'), Spades = HEX("4f31b9"), Clubs = HEX("008ee6"), }, SUITS = { Hearts = HEX('FE5F55'), Diamonds = HEX('FE5F55'), Spades = HEX("374649"), Clubs = HEX("424e54"), }, UI = { TEXT_LIGHT = {1,1,1,1}, TEXT_DARK = HEX("4F6367"), TEXT_INACTIVE = HEX("88888899"), BACKGROUND_LIGHT = HEX("B8D8D8"), BACKGROUND_WHITE = {1,1,1,1}, BACKGROUND_DARK = HEX("7A9E9F"), BACKGROUND_INACTIVE = HEX("666666FF"), OUTLINE_LIGHT = HEX("D8D8D8"), OUTLINE_LIGHT_TRANS = HEX("D8D8D866"), OUTLINE_DARK = HEX("7A9E9F"), TRANSPARENT_LIGHT = HEX("eeeeee22"), TRANSPARENT_DARK = HEX("22222222"), HOVER = HEX('00000055'), }, SET = { Default = HEX("cdd9dc"), Enhanced = HEX("cdd9dc"), Joker = HEX('424e54'), Tarot = HEX('424e54'),--HEX('29adff'), Planet = HEX("424e54"), Spectral = HEX('424e54'), Voucher = HEX("424e54"), }, SECONDARY_SET = { Default = HEX("9bb6bdFF"), Enhanced = HEX("8389DDFF"), Joker = HEX('708b91'), Tarot = HEX('a782d1'),--HEX('29adff'), Planet = HEX('13afce'), Spectral = HEX('4584fa'), Voucher = HEX("fd682b"), Edition = HEX("4ca893"), }, RARITY = { HEX('009dff'),--HEX("708b91"), HEX("4BC292"), HEX('fe5f55'), HEX("b26cbb") }, BLIND = { Small = HEX("50846e"), Big = HEX("50846e"), Boss = HEX("b44430"), won = HEX("4f6367") }, HAND_LEVELS = { HEX("efefef"), HEX("95acff"), HEX("65efaf"), HEX('fae37e'), HEX('ffc052'), HEX('f87d75'), HEX('caa0ef') }, BACKGROUND = { L = {1,1,0,1}, D = HEX("374244"), C = HEX("374244"), contrast = 1 } } G.C.HAND_LEVELS[0] = G.C.RED G.C.UI_CHIPS = copy_table(G.C.BLUE) G.C.UI_MULT = copy_table(G.C.RED) --|||||||||||||||||||||||||||||| -- ENUMS --|||||||||||||||||||||||||||||| self.UIT = { T=1, --text B=2, --box (can be rounded) C=3, --column R=4, --row O=5, --object - must be a Node ROOT=7, S=8, --slider I=9, --input text box padding = 0, --default padding } self.handlist = { "Flush Five", "Flush House", "Five of a Kind", "Straight Flush", "Four of a Kind", "Full House", "Flush", "Straight", "Three of a Kind", "Two Pair", "Pair", "High Card", } self.button_mapping = { a = G.F_SWAP_AB_BUTTONS and 'b' or nil, b = G.F_SWAP_AB_BUTTONS and 'a' or nil, y = G.F_SWAP_XY_BUTTONS and 'x' or nil, x = G.F_SWAP_XY_BUTTONS and 'y' or nil, } self.keybind_mapping = {{ a = 'dpleft', d = 'dpright', w = 'dpup', s = 'dpdown', x = 'x', c = 'y', space = 'a', shift = 'b', esc = 'start', q = 'triggerleft', e = 'triggerright', }} end G = Game()