├── .github └── ISSUE_TEMPLATE │ └── bug-report-template.md ├── LICENSE ├── README.md ├── Yahimod.json ├── assets ├── 1x │ ├── 21kid.png │ ├── 21kidbg.png │ ├── 21kidstandalone.png │ ├── Jokers.png │ ├── abuelita.png │ ├── adobepremiere.png │ ├── balatro.png │ ├── balatro_alt.png │ ├── bean.png │ ├── bee.png │ ├── bfdiseal.png │ ├── bitch.png │ ├── blindsatlas.png │ ├── blindsatlas2.png │ ├── blingblingbear.png │ ├── blueprintdagger.png │ ├── boosteratlas.png │ ├── budgie.png │ ├── cantaloupe.png │ ├── consumeable_opentolan.png │ ├── convenientlyshapedlamp.png │ ├── damedane.png │ ├── deer.png │ ├── defaultjoker.png │ ├── doorknob.png │ ├── doudou.png │ ├── drwhatsapp.png │ ├── effoc.png │ ├── elwiwi.png │ ├── emptycard.png │ ├── evoker.png │ ├── fortnitebabagee.png │ ├── gatowhatsapp.png │ ├── giftedsub.png │ ├── glungus.png │ ├── goodkitty.png │ ├── greatestgolfer.png │ ├── greenprint.png │ ├── guypointing.png │ ├── halfblueprint.png │ ├── hoglin.png │ ├── homophobia.png │ ├── horse.png │ ├── horseseal.png │ ├── ifunnyseal.png │ ├── jackblack.png │ ├── joel.png │ ├── jokerbase.png │ ├── katana.png │ ├── koda.png │ ├── lcdirects.png │ ├── leo.png │ ├── lighttophat.png │ ├── lydia.png │ ├── lydia_soul.png │ ├── marx.png │ ├── mimearon.png │ ├── minecraftchat.png │ ├── modicon.png │ ├── moonwalkingpig.png │ ├── moroccaninternet.png │ ├── mostreplayed.png │ ├── muchotexto.png │ ├── oaklog.png │ ├── ocd.png │ ├── okaypeople.png │ ├── parkourciv.png │ ├── pe.png │ ├── piglin.png │ ├── robloxmadness.png │ ├── rsgdeck.png │ ├── sand.png │ ├── schmeebchair.png │ ├── shulkerbox.png │ ├── sisyphus.png │ ├── sonyvegas.png │ ├── soretro.png │ ├── soundinvestment.png │ ├── spongebobinspace.png │ ├── steamroller.png │ ├── subwaysurfers.png │ ├── swapperseal.png │ ├── tagatlas.png │ ├── tetopear.png │ ├── toasterball.png │ ├── tree.png │ ├── trueprint.png │ ├── twitch.png │ ├── twitchstream.png │ ├── ultrakill.png │ ├── whatsappseal.png │ ├── whoprint.png │ ├── yahicard.png │ └── yahimod_consumeables.png ├── 21kidjoker.aseprite ├── 2x │ ├── 21kid.png │ ├── Jokers.png │ ├── abuelita.png │ ├── adobepremiere.png │ ├── balatro.png │ ├── balatro_alt.png │ ├── bean.png │ ├── bee.png │ ├── bfdiseal.png │ ├── bitch.png │ ├── blindsatlas.png │ ├── blindsatlas2.png │ ├── blingblingbear.png │ ├── blueprintdagger.png │ ├── boosteratlas.png │ ├── budgie.png │ ├── cantaloupe.png │ ├── consumables.png │ ├── consumables2.png │ ├── consumeable_opentolan.png │ ├── convenientlyshapedlamp.png │ ├── damedane.png │ ├── deer.png │ ├── defaultjoker.png │ ├── doorknob.png │ ├── doudou.png │ ├── drwhatsapp.png │ ├── effoc.png │ ├── elwiwi.png │ ├── emptycard.png │ ├── evoker.png │ ├── fortnitebabagee.png │ ├── gatowhatsapp.png │ ├── giftedsub.png │ ├── glungus.png │ ├── goodkitty.png │ ├── greatestgolfer.png │ ├── greenprint.png │ ├── guypointing.png │ ├── halfblueprint.png │ ├── hoglin.png │ ├── homophobia.png │ ├── horse.png │ ├── horseseal.png │ ├── ifunnyseal.png │ ├── jackblack.png │ ├── joel.png │ ├── katana.png │ ├── koda.png │ ├── lcdirects.png │ ├── leo.png │ ├── lighttophat.png │ ├── lydia.png │ ├── lydia_soul.png │ ├── marx.png │ ├── mimearon.png │ ├── minecraftchat.png │ ├── modicon.png │ ├── moonwalkingpig.png │ ├── moroccaninternet.png │ ├── mostreplayed.png │ ├── muchotexto.png │ ├── oaklog.png │ ├── ocd.png │ ├── okaypeople.png │ ├── parkourciv.png │ ├── pe.png │ ├── piglin.png │ ├── robloxmadness.png │ ├── rsgdeck.png │ ├── sand.png │ ├── schmeebchair.png │ ├── shulkerbox.png │ ├── sisyphus.png │ ├── sonyvegas.png │ ├── soretro.png │ ├── soundinvestment.png │ ├── spongebobinspace.png │ ├── steamroller.png │ ├── subwaysurfers.png │ ├── swapperseal.png │ ├── tagatlas.png │ ├── tetopear.png │ ├── toasterball.png │ ├── tree.png │ ├── trueprint.png │ ├── twitch.png │ ├── twitchstream.png │ ├── ultrakill.png │ ├── whatsappseal.png │ ├── whoprint.png │ ├── yahicard.png │ └── yahimod_consumeables.png ├── balatropalette.aseprite ├── doorknob.aseprite ├── homophobia.aseprite ├── horse.png ├── moving │ ├── horsef.ogv │ └── nuuh.ogv ├── shaders │ ├── anaglyphic.fs │ ├── evil.fs │ ├── flipped.fs │ ├── fluorescent.fs │ ├── foil.fs │ ├── gilded.fs │ ├── gold.fs │ ├── greyscale.fs │ ├── ionized.fs │ ├── laminated.fs │ ├── monochrome.fs │ ├── overexposed.fs │ └── sepia.fs └── sounds │ ├── bitch.ogg │ ├── cantaloupe.ogg │ ├── catlaughing.ogg │ ├── catvomit.ogg │ ├── coin.ogg │ ├── crash.ogg │ ├── dino_death.ogg │ ├── dino_jump.ogg │ ├── eat.ogg │ ├── evokerspawn.ogg │ ├── fish.ogg │ ├── glassbreak.ogg │ ├── horse.ogg │ ├── horsedeath.ogg │ ├── jackpot.ogg │ ├── mariopaintmeow.ogg │ ├── muchotexto.ogg │ ├── music_bitch.ogg │ ├── music_buysomethin.ogg │ ├── music_cybergrind.ogg │ ├── music_slotmachine.ogg │ ├── music_worldmap.mp3 │ ├── nine.ogg │ ├── nomusic1.ogg │ ├── nomusic2.ogg │ ├── nomusic3.ogg │ ├── okaypeople.ogg │ ├── parry.ogg │ ├── piglinhmm.ogg │ ├── pluh.ogg │ ├── pluhsh.ogg │ ├── slotmachine.ogg │ ├── slotmachine_ding.ogg │ ├── snd_explosion.ogg │ ├── ten.ogg │ ├── twennyone.ogg │ ├── ultrakill_landing.ogg │ ├── vampire.ogg │ ├── whatsapp.ogg │ ├── whip.ogg │ ├── woodbreaking.ogg │ └── woodbroke.ogg ├── core.lua ├── customimages ├── assets │ └── mcchat │ │ ├── line1.png │ │ ├── line2.png │ │ └── line3.png ├── cantaloupescreen.png ├── catlaughing.png ├── chromedino.png ├── chromedino_cactus.png ├── coin.png ├── crack.png ├── crash.png ├── errors.png ├── explosiongif.png ├── fishondafloo.png ├── horse.png ├── horsepng.png ├── inventoryitems.png ├── moroccaninternet.png ├── parry.png ├── shulkerhud.png ├── tetopear.png ├── washeewashee.png └── youwin.png ├── items ├── blinds.lua ├── boosters.lua ├── chromedino.lua ├── consumeables.lua ├── decks.lua ├── editions.lua ├── funnyfunctions.lua ├── https.lua ├── jokers.lua ├── seals.lua ├── skiptags.lua └── videos.lua ├── libs ├── jsonparsing.lua └── ui.lua ├── localization ├── beemoviescript.lua └── en-us.lua ├── lovely └── misc.toml └── resources ├── horsef.ogv ├── nuuh.ogv ├── pizzatower.ogv └── twerknite.ogv /.github/ISSUE_TEMPLATE/bug-report-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report template 3 | about: If you have a bug report on something that happened ingame 4 | title: 'BUG REPORT: ' 5 | labels: '' 6 | assignees: Yahiamice 7 | 8 | --- 9 | 10 | # BEFORE YOU START: Please don't report bugs involving other mod support. There WILL be conflicts and i didn't build this mod with cross-mod compatibility in mind. The only mods that i can guarantee smooth sailing are Steammodded, DebugPlus and MoreSpeed. 11 | 12 | ## Describe the bug 13 | A clear and concise description of what the bug is. 14 | ------ 15 | 16 | ## If your game crashed, show the FULL lovely logs (which you can copy from AppData\Roaming\Balatro\mods\lovely\log\lovely-2025.XX.XX-XX.XX.XX.log 17 | ------ 18 | 19 | ## Optional but very helpful: Show footage (screenshot or better yet, a video snippet) of the bug in action and i'll see what i can do 20 | ------ 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # YAHIMOD: the Stupidest Balatro Mod on Earth 2 | The YAHIMOD's a (somewhat unbalanced) mess of custom jokers, tarots and blinds, loosely themed around [Yahiamice](https://www.youtube.com/@YahiamiceLIVE) (yes, i'm self-centered) with several meta effects that stray from the base game; like throwing a wet trout at your screen or forcing the game speed to be 0.25x 3 | 4 | ![A display of the dumb jokers contained in this mod](https://i.imgur.com/G9Hvo78.png) 5 | 6 | # Installing Instructions 7 | 1) Install the [Lovely injector](https://github.com/ethangreen-dev/lovely-injector): https://github.com/ethangreen-dev/lovely-injector 8 | 2) Download [Steamodded](https://github.com/Steamodded/smods) and add it to your %AppData%Roaming\Balatro\mods folder https://github.com/Steamodded/smods 9 | 3) Download the [latest release](https://github.com/Yahiamice/yahimod-balatro/releases) of the Yahimod and extract the folder into %AppData%Roaming\Balatro\mods 10 | It should look like this 11 | ![\AppData\Roaming\Balatro\mods](https://i.imgur.com/WaVn9Jd.png) 12 | 4) Launch the game and click the Mods button, it should've loaded properly if you followed the steps correctly! 13 | 14 | ![Ingame look at it](https://i.imgur.com/cJKqefE.png) 15 | 16 | # DISCLAIMER 17 | I didn't build this mod with cross-mod compatibility in mind. Please don't report issues pertaining to crashes related to other mods, thank you. 18 | -------------------------------------------------------------------------------- /Yahimod.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "Yahimod", 3 | "name": "Yahimod", 4 | "display_name": "Yahimod", 5 | "author": [ 6 | "Yahiamice" 7 | ], 8 | "description": "is that yaha mouse", 9 | "prefix": "yahimod", 10 | "main_file": "core.lua", 11 | "priority": 0, 12 | "badge_colour": "7a2eb6", 13 | "badge_text_colour": "FFFFFF", 14 | "version": "2.0", 15 | "dependencies": [ 16 | "Lovely (>=0.7)", 17 | "Balatro (>=1.0.1o)" 18 | ], 19 | "conflicts": [ 20 | "Talisman (<=2.0.2)", 21 | "Cryptid (<<0.5.4)", 22 | ] 23 | } -------------------------------------------------------------------------------- /assets/1x/21kid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/21kid.png -------------------------------------------------------------------------------- /assets/1x/21kidbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/21kidbg.png -------------------------------------------------------------------------------- /assets/1x/21kidstandalone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/21kidstandalone.png -------------------------------------------------------------------------------- /assets/1x/Jokers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/Jokers.png -------------------------------------------------------------------------------- /assets/1x/abuelita.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/abuelita.png -------------------------------------------------------------------------------- /assets/1x/adobepremiere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/adobepremiere.png -------------------------------------------------------------------------------- /assets/1x/balatro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/balatro.png -------------------------------------------------------------------------------- /assets/1x/balatro_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/balatro_alt.png -------------------------------------------------------------------------------- /assets/1x/bean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/bean.png -------------------------------------------------------------------------------- /assets/1x/bee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/bee.png -------------------------------------------------------------------------------- /assets/1x/bfdiseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/bfdiseal.png -------------------------------------------------------------------------------- /assets/1x/bitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/bitch.png -------------------------------------------------------------------------------- /assets/1x/blindsatlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/blindsatlas.png -------------------------------------------------------------------------------- /assets/1x/blindsatlas2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/blindsatlas2.png -------------------------------------------------------------------------------- /assets/1x/blingblingbear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/blingblingbear.png -------------------------------------------------------------------------------- /assets/1x/blueprintdagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/blueprintdagger.png -------------------------------------------------------------------------------- /assets/1x/boosteratlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/boosteratlas.png -------------------------------------------------------------------------------- /assets/1x/budgie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/budgie.png -------------------------------------------------------------------------------- /assets/1x/cantaloupe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/cantaloupe.png -------------------------------------------------------------------------------- /assets/1x/consumeable_opentolan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/consumeable_opentolan.png -------------------------------------------------------------------------------- /assets/1x/convenientlyshapedlamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/convenientlyshapedlamp.png -------------------------------------------------------------------------------- /assets/1x/damedane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/damedane.png -------------------------------------------------------------------------------- /assets/1x/deer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/deer.png -------------------------------------------------------------------------------- /assets/1x/defaultjoker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/defaultjoker.png -------------------------------------------------------------------------------- /assets/1x/doorknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/doorknob.png -------------------------------------------------------------------------------- /assets/1x/doudou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/doudou.png -------------------------------------------------------------------------------- /assets/1x/drwhatsapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/drwhatsapp.png -------------------------------------------------------------------------------- /assets/1x/effoc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/effoc.png -------------------------------------------------------------------------------- /assets/1x/elwiwi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/elwiwi.png -------------------------------------------------------------------------------- /assets/1x/emptycard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/emptycard.png -------------------------------------------------------------------------------- /assets/1x/evoker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/evoker.png -------------------------------------------------------------------------------- /assets/1x/fortnitebabagee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/fortnitebabagee.png -------------------------------------------------------------------------------- /assets/1x/gatowhatsapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/gatowhatsapp.png -------------------------------------------------------------------------------- /assets/1x/giftedsub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/giftedsub.png -------------------------------------------------------------------------------- /assets/1x/glungus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/glungus.png -------------------------------------------------------------------------------- /assets/1x/goodkitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/goodkitty.png -------------------------------------------------------------------------------- /assets/1x/greatestgolfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/greatestgolfer.png -------------------------------------------------------------------------------- /assets/1x/greenprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/greenprint.png -------------------------------------------------------------------------------- /assets/1x/guypointing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/guypointing.png -------------------------------------------------------------------------------- /assets/1x/halfblueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/halfblueprint.png -------------------------------------------------------------------------------- /assets/1x/hoglin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/hoglin.png -------------------------------------------------------------------------------- /assets/1x/homophobia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/homophobia.png -------------------------------------------------------------------------------- /assets/1x/horse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/horse.png -------------------------------------------------------------------------------- /assets/1x/horseseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/horseseal.png -------------------------------------------------------------------------------- /assets/1x/ifunnyseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/ifunnyseal.png -------------------------------------------------------------------------------- /assets/1x/jackblack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/jackblack.png -------------------------------------------------------------------------------- /assets/1x/joel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/joel.png -------------------------------------------------------------------------------- /assets/1x/jokerbase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/jokerbase.png -------------------------------------------------------------------------------- /assets/1x/katana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/katana.png -------------------------------------------------------------------------------- /assets/1x/koda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/koda.png -------------------------------------------------------------------------------- /assets/1x/lcdirects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/lcdirects.png -------------------------------------------------------------------------------- /assets/1x/leo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/leo.png -------------------------------------------------------------------------------- /assets/1x/lighttophat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/lighttophat.png -------------------------------------------------------------------------------- /assets/1x/lydia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/lydia.png -------------------------------------------------------------------------------- /assets/1x/lydia_soul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/lydia_soul.png -------------------------------------------------------------------------------- /assets/1x/marx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/marx.png -------------------------------------------------------------------------------- /assets/1x/mimearon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/mimearon.png -------------------------------------------------------------------------------- /assets/1x/minecraftchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/minecraftchat.png -------------------------------------------------------------------------------- /assets/1x/modicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/modicon.png -------------------------------------------------------------------------------- /assets/1x/moonwalkingpig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/moonwalkingpig.png -------------------------------------------------------------------------------- /assets/1x/moroccaninternet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/moroccaninternet.png -------------------------------------------------------------------------------- /assets/1x/mostreplayed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/mostreplayed.png -------------------------------------------------------------------------------- /assets/1x/muchotexto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/muchotexto.png -------------------------------------------------------------------------------- /assets/1x/oaklog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/oaklog.png -------------------------------------------------------------------------------- /assets/1x/ocd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/ocd.png -------------------------------------------------------------------------------- /assets/1x/okaypeople.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/okaypeople.png -------------------------------------------------------------------------------- /assets/1x/parkourciv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/parkourciv.png -------------------------------------------------------------------------------- /assets/1x/pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/pe.png -------------------------------------------------------------------------------- /assets/1x/piglin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/piglin.png -------------------------------------------------------------------------------- /assets/1x/robloxmadness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/robloxmadness.png -------------------------------------------------------------------------------- /assets/1x/rsgdeck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/rsgdeck.png -------------------------------------------------------------------------------- /assets/1x/sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/sand.png -------------------------------------------------------------------------------- /assets/1x/schmeebchair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/schmeebchair.png -------------------------------------------------------------------------------- /assets/1x/shulkerbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/shulkerbox.png -------------------------------------------------------------------------------- /assets/1x/sisyphus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/sisyphus.png -------------------------------------------------------------------------------- /assets/1x/sonyvegas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/sonyvegas.png -------------------------------------------------------------------------------- /assets/1x/soretro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/soretro.png -------------------------------------------------------------------------------- /assets/1x/soundinvestment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/soundinvestment.png -------------------------------------------------------------------------------- /assets/1x/spongebobinspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/spongebobinspace.png -------------------------------------------------------------------------------- /assets/1x/steamroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/steamroller.png -------------------------------------------------------------------------------- /assets/1x/subwaysurfers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/subwaysurfers.png -------------------------------------------------------------------------------- /assets/1x/swapperseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/swapperseal.png -------------------------------------------------------------------------------- /assets/1x/tagatlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/tagatlas.png -------------------------------------------------------------------------------- /assets/1x/tetopear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/tetopear.png -------------------------------------------------------------------------------- /assets/1x/toasterball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/toasterball.png -------------------------------------------------------------------------------- /assets/1x/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/tree.png -------------------------------------------------------------------------------- /assets/1x/trueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/trueprint.png -------------------------------------------------------------------------------- /assets/1x/twitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/twitch.png -------------------------------------------------------------------------------- /assets/1x/twitchstream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/twitchstream.png -------------------------------------------------------------------------------- /assets/1x/ultrakill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/ultrakill.png -------------------------------------------------------------------------------- /assets/1x/whatsappseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/whatsappseal.png -------------------------------------------------------------------------------- /assets/1x/whoprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/whoprint.png -------------------------------------------------------------------------------- /assets/1x/yahicard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/yahicard.png -------------------------------------------------------------------------------- /assets/1x/yahimod_consumeables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/1x/yahimod_consumeables.png -------------------------------------------------------------------------------- /assets/21kidjoker.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/21kidjoker.aseprite -------------------------------------------------------------------------------- /assets/2x/21kid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/21kid.png -------------------------------------------------------------------------------- /assets/2x/Jokers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/Jokers.png -------------------------------------------------------------------------------- /assets/2x/abuelita.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/abuelita.png -------------------------------------------------------------------------------- /assets/2x/adobepremiere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/adobepremiere.png -------------------------------------------------------------------------------- /assets/2x/balatro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/balatro.png -------------------------------------------------------------------------------- /assets/2x/balatro_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/balatro_alt.png -------------------------------------------------------------------------------- /assets/2x/bean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/bean.png -------------------------------------------------------------------------------- /assets/2x/bee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/bee.png -------------------------------------------------------------------------------- /assets/2x/bfdiseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/bfdiseal.png -------------------------------------------------------------------------------- /assets/2x/bitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/bitch.png -------------------------------------------------------------------------------- /assets/2x/blindsatlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/blindsatlas.png -------------------------------------------------------------------------------- /assets/2x/blindsatlas2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/blindsatlas2.png -------------------------------------------------------------------------------- /assets/2x/blingblingbear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/blingblingbear.png -------------------------------------------------------------------------------- /assets/2x/blueprintdagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/blueprintdagger.png -------------------------------------------------------------------------------- /assets/2x/boosteratlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/boosteratlas.png -------------------------------------------------------------------------------- /assets/2x/budgie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/budgie.png -------------------------------------------------------------------------------- /assets/2x/cantaloupe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/cantaloupe.png -------------------------------------------------------------------------------- /assets/2x/consumables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/consumables.png -------------------------------------------------------------------------------- /assets/2x/consumables2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/consumables2.png -------------------------------------------------------------------------------- /assets/2x/consumeable_opentolan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/consumeable_opentolan.png -------------------------------------------------------------------------------- /assets/2x/convenientlyshapedlamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/convenientlyshapedlamp.png -------------------------------------------------------------------------------- /assets/2x/damedane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/damedane.png -------------------------------------------------------------------------------- /assets/2x/deer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/deer.png -------------------------------------------------------------------------------- /assets/2x/defaultjoker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/defaultjoker.png -------------------------------------------------------------------------------- /assets/2x/doorknob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/doorknob.png -------------------------------------------------------------------------------- /assets/2x/doudou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/doudou.png -------------------------------------------------------------------------------- /assets/2x/drwhatsapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/drwhatsapp.png -------------------------------------------------------------------------------- /assets/2x/effoc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/effoc.png -------------------------------------------------------------------------------- /assets/2x/elwiwi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/elwiwi.png -------------------------------------------------------------------------------- /assets/2x/emptycard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/emptycard.png -------------------------------------------------------------------------------- /assets/2x/evoker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/evoker.png -------------------------------------------------------------------------------- /assets/2x/fortnitebabagee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/fortnitebabagee.png -------------------------------------------------------------------------------- /assets/2x/gatowhatsapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/gatowhatsapp.png -------------------------------------------------------------------------------- /assets/2x/giftedsub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/giftedsub.png -------------------------------------------------------------------------------- /assets/2x/glungus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/glungus.png -------------------------------------------------------------------------------- /assets/2x/goodkitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/goodkitty.png -------------------------------------------------------------------------------- /assets/2x/greatestgolfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/greatestgolfer.png -------------------------------------------------------------------------------- /assets/2x/greenprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/greenprint.png -------------------------------------------------------------------------------- /assets/2x/guypointing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/guypointing.png -------------------------------------------------------------------------------- /assets/2x/halfblueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/halfblueprint.png -------------------------------------------------------------------------------- /assets/2x/hoglin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/hoglin.png -------------------------------------------------------------------------------- /assets/2x/homophobia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/homophobia.png -------------------------------------------------------------------------------- /assets/2x/horse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/horse.png -------------------------------------------------------------------------------- /assets/2x/horseseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/horseseal.png -------------------------------------------------------------------------------- /assets/2x/ifunnyseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/ifunnyseal.png -------------------------------------------------------------------------------- /assets/2x/jackblack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/jackblack.png -------------------------------------------------------------------------------- /assets/2x/joel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/joel.png -------------------------------------------------------------------------------- /assets/2x/katana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/katana.png -------------------------------------------------------------------------------- /assets/2x/koda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/koda.png -------------------------------------------------------------------------------- /assets/2x/lcdirects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/lcdirects.png -------------------------------------------------------------------------------- /assets/2x/leo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/leo.png -------------------------------------------------------------------------------- /assets/2x/lighttophat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/lighttophat.png -------------------------------------------------------------------------------- /assets/2x/lydia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/lydia.png -------------------------------------------------------------------------------- /assets/2x/lydia_soul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/lydia_soul.png -------------------------------------------------------------------------------- /assets/2x/marx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/marx.png -------------------------------------------------------------------------------- /assets/2x/mimearon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/mimearon.png -------------------------------------------------------------------------------- /assets/2x/minecraftchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/minecraftchat.png -------------------------------------------------------------------------------- /assets/2x/modicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/modicon.png -------------------------------------------------------------------------------- /assets/2x/moonwalkingpig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/moonwalkingpig.png -------------------------------------------------------------------------------- /assets/2x/moroccaninternet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/moroccaninternet.png -------------------------------------------------------------------------------- /assets/2x/mostreplayed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/mostreplayed.png -------------------------------------------------------------------------------- /assets/2x/muchotexto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/muchotexto.png -------------------------------------------------------------------------------- /assets/2x/oaklog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/oaklog.png -------------------------------------------------------------------------------- /assets/2x/ocd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/ocd.png -------------------------------------------------------------------------------- /assets/2x/okaypeople.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/okaypeople.png -------------------------------------------------------------------------------- /assets/2x/parkourciv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/parkourciv.png -------------------------------------------------------------------------------- /assets/2x/pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/pe.png -------------------------------------------------------------------------------- /assets/2x/piglin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/piglin.png -------------------------------------------------------------------------------- /assets/2x/robloxmadness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/robloxmadness.png -------------------------------------------------------------------------------- /assets/2x/rsgdeck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/rsgdeck.png -------------------------------------------------------------------------------- /assets/2x/sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/sand.png -------------------------------------------------------------------------------- /assets/2x/schmeebchair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/schmeebchair.png -------------------------------------------------------------------------------- /assets/2x/shulkerbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/shulkerbox.png -------------------------------------------------------------------------------- /assets/2x/sisyphus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/sisyphus.png -------------------------------------------------------------------------------- /assets/2x/sonyvegas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/sonyvegas.png -------------------------------------------------------------------------------- /assets/2x/soretro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/soretro.png -------------------------------------------------------------------------------- /assets/2x/soundinvestment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/soundinvestment.png -------------------------------------------------------------------------------- /assets/2x/spongebobinspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/spongebobinspace.png -------------------------------------------------------------------------------- /assets/2x/steamroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/steamroller.png -------------------------------------------------------------------------------- /assets/2x/subwaysurfers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/subwaysurfers.png -------------------------------------------------------------------------------- /assets/2x/swapperseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/swapperseal.png -------------------------------------------------------------------------------- /assets/2x/tagatlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/tagatlas.png -------------------------------------------------------------------------------- /assets/2x/tetopear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/tetopear.png -------------------------------------------------------------------------------- /assets/2x/toasterball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/toasterball.png -------------------------------------------------------------------------------- /assets/2x/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/tree.png -------------------------------------------------------------------------------- /assets/2x/trueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/trueprint.png -------------------------------------------------------------------------------- /assets/2x/twitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/twitch.png -------------------------------------------------------------------------------- /assets/2x/twitchstream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/twitchstream.png -------------------------------------------------------------------------------- /assets/2x/ultrakill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/ultrakill.png -------------------------------------------------------------------------------- /assets/2x/whatsappseal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/whatsappseal.png -------------------------------------------------------------------------------- /assets/2x/whoprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/whoprint.png -------------------------------------------------------------------------------- /assets/2x/yahicard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/yahicard.png -------------------------------------------------------------------------------- /assets/2x/yahimod_consumeables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/2x/yahimod_consumeables.png -------------------------------------------------------------------------------- /assets/balatropalette.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/balatropalette.aseprite -------------------------------------------------------------------------------- /assets/doorknob.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/doorknob.aseprite -------------------------------------------------------------------------------- /assets/homophobia.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/homophobia.aseprite -------------------------------------------------------------------------------- /assets/horse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/horse.png -------------------------------------------------------------------------------- /assets/moving/horsef.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/moving/horsef.ogv -------------------------------------------------------------------------------- /assets/moving/nuuh.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/moving/nuuh.ogv -------------------------------------------------------------------------------- /assets/shaders/anaglyphic.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 anaglyphic; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Util] 21 | // Transform color from HSL to RGB 22 | vec4 RGB(vec4 c); 23 | 24 | // [Util] 25 | // Transform color from RGB to HSL 26 | vec4 HSL(vec4 c); 27 | 28 | // [Required] 29 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 30 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 31 | 32 | // This is what actually changes the look of card 33 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 34 | { 35 | 36 | float displacement_x = (0.1*cos(anaglyphic.g*0.3)+0.3)/texture_details.b; 37 | float displacement_y = (0.03*sin(anaglyphic.r)+0.03)/texture_details.a; 38 | 39 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 40 | vec4 tex = Texel(texture, texture_coords); 41 | vec4 red_tex = Texel(texture, vec2(texture_coords.x + displacement_x, texture_coords.y + displacement_y)); 42 | vec4 blue_tex = Texel(texture, vec2(texture_coords.x - displacement_x, texture_coords.y - displacement_y)); 43 | // Position of a pixel within the sprite 44 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 45 | vec2 coords = uv.xy; 46 | vec2 adjusted_uv = uv - vec2(0.5, 0.5); 47 | adjusted_uv.x = adjusted_uv.x*texture_details.b/texture_details.a; 48 | 49 | 50 | red_tex = HSL(red_tex); 51 | blue_tex = HSL(blue_tex); 52 | 53 | 54 | 55 | 56 | if(red_tex.z < 0.8) { 57 | red_tex.x = 0; 58 | red_tex.y = 3; 59 | } else { 60 | red_tex.a = 0; 61 | } 62 | 63 | if(blue_tex.z < 0.8){ 64 | blue_tex.x = 0.5; 65 | blue_tex.y = 3; 66 | } else { 67 | blue_tex.a = 0; 68 | } 69 | 70 | if(tex.z < 0.8){ 71 | blue_tex.a = 0.2; 72 | red_tex.a = 0.2; 73 | } 74 | if (tex.a == 0){ 75 | red_tex.a = 0; 76 | blue_tex.a = 0; 77 | } 78 | if (anaglyphic.g > 0.0 || anaglyphic.g < 0.0) { 79 | red_tex = RGB(red_tex); 80 | blue_tex = RGB(blue_tex); 81 | } 82 | 83 | float ratio = 0.5; 84 | tex = ratio*red_tex + ratio*blue_tex;// + (1-(2*ratio))*tex; 85 | 86 | // required 87 | return dissolve_mask(tex*colour, texture_coords, uv); 88 | } 89 | 90 | number hue(number s, number t, number h) 91 | { 92 | number hs = mod(h, 1.)*6.; 93 | if (hs < 1.) return (t-s) * hs + s; 94 | if (hs < 3.) return t; 95 | if (hs < 4.) return (t-s) * (4.-hs) + s; 96 | return s; 97 | } 98 | 99 | vec4 RGB(vec4 c) 100 | { 101 | if (c.y < 0.0001) 102 | return vec4(vec3(c.z), c.a); 103 | 104 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 105 | number s = 2.0 * c.z - t; 106 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 107 | } 108 | 109 | vec4 HSL(vec4 c) 110 | { 111 | number low = min(c.r, min(c.g, c.b)); 112 | number high = max(c.r, max(c.g, c.b)); 113 | number delta = high - low; 114 | number sum = high+low; 115 | 116 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 117 | if (delta == .0) 118 | return hsl; 119 | 120 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 121 | 122 | if (high == c.r) 123 | hsl.x = (c.g - c.b) / delta; 124 | else if (high == c.g) 125 | hsl.x = (c.b - c.r) / delta + 2.0; 126 | else 127 | hsl.x = (c.r - c.g) / delta + 4.0; 128 | 129 | hsl.x = mod(hsl.x / 6., 1.); 130 | return hsl; 131 | } 132 | 133 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 134 | { 135 | if (dissolve < 0.001) { 136 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 137 | } 138 | 139 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 140 | 141 | float t = time * 10.0 + 2003.; 142 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 143 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 144 | 145 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 146 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 147 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 148 | 149 | float field = (1.+ ( 150 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 151 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 152 | vec2 borders = vec2(0.2, 0.8); 153 | 154 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 155 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 156 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 157 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 158 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 159 | 160 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 161 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 162 | tex.rgba = burn_colour_1.rgba; 163 | } else if (burn_colour_2.a > 0.01) { 164 | tex.rgba = burn_colour_2.rgba; 165 | } 166 | } 167 | 168 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 169 | } 170 | 171 | // for transforming the card while your mouse is on it 172 | extern PRECISION vec2 mouse_screen_pos; 173 | extern PRECISION float hovering; 174 | extern PRECISION float screen_scale; 175 | 176 | #ifdef VERTEX 177 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 178 | { 179 | if (hovering <= 0.){ 180 | return transform_projection * vertex_position; 181 | } 182 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 183 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 184 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 185 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 186 | 187 | return transform_projection * vertex_position + vec4(0,0,0,scale); 188 | } 189 | #endif 190 | -------------------------------------------------------------------------------- /assets/shaders/evil.fs: -------------------------------------------------------------------------------- 1 | // by Lexi 2 | 3 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 4 | #define MY_HIGHP_OR_MEDIUMP highp 5 | #else 6 | #define MY_HIGHP_OR_MEDIUMP mediump 7 | #endif 8 | 9 | extern MY_HIGHP_OR_MEDIUMP vec2 evil; 10 | extern MY_HIGHP_OR_MEDIUMP number dissolve; 11 | extern MY_HIGHP_OR_MEDIUMP number time; 12 | extern MY_HIGHP_OR_MEDIUMP vec4 texture_details; 13 | extern MY_HIGHP_OR_MEDIUMP vec2 image_details; 14 | extern bool shadow; 15 | extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_1; 16 | extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_2; 17 | 18 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 19 | { 20 | if (dissolve < 0.001) { 21 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 22 | } 23 | 24 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; 25 | 26 | float t = time * 10.0 + 2003.; 27 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 28 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 29 | 30 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 31 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 32 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 33 | 34 | float field = (1.+ ( 35 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 36 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 37 | vec2 borders = vec2(0.2, 0.8); 38 | 39 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 40 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 41 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 42 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 43 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 44 | 45 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 46 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 47 | tex.rgba = burn_colour_1.rgba; 48 | } else if (burn_colour_2.a > 0.01) { 49 | tex.rgba = burn_colour_2.rgba; 50 | } 51 | } 52 | 53 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 54 | } 55 | 56 | number hue(number s, number t, number h) 57 | { 58 | number hs = mod(h, 1.)*6.; 59 | if (hs < 1.) return (t-s) * hs + s; 60 | if (hs < 3.) return t; 61 | if (hs < 4.) return (t-s) * (4.-hs) + s; 62 | return s; 63 | } 64 | 65 | vec4 RGB(vec4 c) 66 | { 67 | if (c.y < 0.0001) 68 | return vec4(vec3(c.z), c.a); 69 | 70 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 71 | number s = 2.0 * c.z - t; 72 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 73 | } 74 | 75 | vec4 HSL(vec4 c) 76 | { 77 | number low = min(c.r, min(c.g, c.b)); 78 | number high = max(c.r, max(c.g, c.b)); 79 | number delta = high - low; 80 | number sum = high+low; 81 | 82 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 83 | if (delta == .0) 84 | return hsl; 85 | 86 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 87 | 88 | if (high == c.r) 89 | hsl.x = (c.g - c.b) / delta; 90 | else if (high == c.g) 91 | hsl.x = (c.b - c.r) / delta + 2.0; 92 | else 93 | hsl.x = (c.r - c.g) / delta + 4.0; 94 | 95 | hsl.x = mod(hsl.x / 6., 1.); 96 | return hsl; 97 | } 98 | 99 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 100 | { 101 | vec4 tex = Texel(texture, texture_coords); 102 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 103 | 104 | number low = min(tex.r, min(tex.g, tex.b)); 105 | number high = max(tex.r, max(tex.g, tex.b)); 106 | number delta = high - low; 107 | 108 | number saturation_fac = 1. - max(0., 0.05*(1.1-delta)); 109 | 110 | vec4 hsl = HSL(vec4(tex.r*saturation_fac, tex.g*saturation_fac, tex.b, tex.a)); 111 | 112 | float t = evil.y*2.221 + mod(time,1.); 113 | vec2 floored_uv = (floor((uv*texture_details.ba)))/texture_details.ba; 114 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 50.; 115 | 116 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 117 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 118 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 119 | 120 | float field = (1.+ ( 121 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 122 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 123 | 124 | float res = (.5 + .5* cos( (evil.x) * 2.612 + ( field + -.5 ) *3.14)); 125 | 126 | // Changed hue from purple (0.8) to red (0.0) 127 | hsl.x = 0.0; // Red hue 128 | hsl.y = hsl.y * 0.9; // Slightly increased saturation 129 | hsl.z = hsl.z * 0.3 + 0.6 * sin(hsl.z/2.5 - res/4. + sin(evil.y)/8. + 0.5)/1.4; 130 | 131 | tex.rgb = RGB(hsl).rgb; 132 | 133 | if (tex[3] < 0.7) 134 | tex[3] = tex[3]/3.; 135 | return dissolve_mask(tex*colour, texture_coords, uv); 136 | } 137 | 138 | extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos; 139 | extern MY_HIGHP_OR_MEDIUMP float hovering; 140 | extern MY_HIGHP_OR_MEDIUMP float screen_scale; 141 | 142 | #ifdef VERTEX 143 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 144 | { 145 | if (hovering <= 0.){ 146 | return transform_projection * vertex_position; 147 | } 148 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 149 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 150 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 151 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 152 | 153 | return transform_projection * vertex_position + vec4(0,0,0,scale); 154 | } 155 | #endif -------------------------------------------------------------------------------- /assets/shaders/flipped.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // 8 | // Shader made by: stupxd 9 | // You are free to use and modify this shader in your projects, 10 | // as long as you credit me for the original work. 11 | // 12 | 13 | // Look ionized.fs for explanation 14 | extern PRECISION vec2 flipped; 15 | 16 | extern PRECISION number dissolve; 17 | extern PRECISION number time; 18 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 19 | extern PRECISION vec4 texture_details; 20 | // (width, height) for atlas texture [not normalized] 21 | extern PRECISION vec2 image_details; 22 | extern bool shadow; 23 | extern PRECISION vec4 burn_colour_1; 24 | extern PRECISION vec4 burn_colour_2; 25 | 26 | // [Required] 27 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 28 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 29 | 30 | // This is what actually changes the look of card 31 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 32 | { 33 | 34 | // Position of a pixel within the sprite 35 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 36 | 37 | float sprite_width = texture_details.z / image_details.x; // Normalized width 38 | float sprite_pos_x = texture_details.x * sprite_width; // Normalized pos_x 39 | 40 | float newX = sprite_pos_x + sprite_width - (texture_coords.x - sprite_pos_x); 41 | 42 | float sprite_height = texture_details.a / image_details.y; // Normalized height 43 | float sprite_pos_y = texture_details.y * sprite_height; // Normalized pos_y 44 | 45 | float newY = sprite_pos_y + sprite_height - (texture_coords.y - sprite_pos_y); 46 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 47 | vec4 tex = Texel(texture, vec2(newX, newY)); 48 | 49 | // Does not do anything. Required for shader to not crash. 50 | if (uv.x > 2. * uv.x) { 51 | uv = flipped; 52 | } 53 | 54 | // required 55 | return dissolve_mask(tex*colour, texture_coords, uv); 56 | } 57 | 58 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 59 | { 60 | if (dissolve < 0.001) { 61 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 62 | } 63 | 64 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 65 | 66 | float t = time * 10.0 + 2003.; 67 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 68 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 69 | 70 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 71 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 72 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 73 | 74 | float field = (1.+ ( 75 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 76 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 77 | vec2 borders = vec2(0.2, 0.8); 78 | 79 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 80 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 81 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 82 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 83 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 84 | 85 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 86 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 87 | tex.rgba = burn_colour_1.rgba; 88 | } else if (burn_colour_2.a > 0.01) { 89 | tex.rgba = burn_colour_2.rgba; 90 | } 91 | } 92 | 93 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 94 | } 95 | 96 | // for transforming the card while your mouse is on it 97 | extern PRECISION vec2 mouse_screen_pos; 98 | extern PRECISION float hovering; 99 | extern PRECISION float screen_scale; 100 | 101 | #ifdef VERTEX 102 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 103 | { 104 | if (hovering <= 0.){ 105 | return transform_projection * vertex_position; 106 | } 107 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 108 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 109 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 110 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 111 | 112 | return transform_projection * vertex_position + vec4(0,0,0,scale); 113 | } 114 | #endif 115 | -------------------------------------------------------------------------------- /assets/shaders/fluorescent.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 fluorescent; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Util] 21 | // Transform color from HSL to RGB 22 | vec4 RGB(vec4 c); 23 | 24 | // [Util] 25 | // Transform color from RGB to HSL 26 | vec4 HSL(vec4 c); 27 | 28 | // [Required] 29 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 30 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 31 | 32 | // This is what actually changes the look of card 33 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 34 | { 35 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 36 | vec4 tex = Texel(texture, texture_coords); 37 | // Position of a pixel within the sprite 38 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 39 | vec2 adjusted_uv = uv - vec2(0.5, 0.5); 40 | adjusted_uv.x = adjusted_uv.x*texture_details.b/texture_details.a; 41 | 42 | 43 | // tex.r += 0.09; 44 | // tex.g += 0.12; 45 | // tex.b += 0.08; 46 | 47 | //vec4 hsl = HSL(vec4(tex.r*saturation_fac, tex.g*saturation_fac, tex.b*saturation_fac, tex.a)); 48 | 49 | vec4 hsl = HSL(tex); // convert texture to HSL values 50 | vec4 bhsl = HSL(tex); // make a base copy of HSL values 51 | 52 | // trigonometric variable definition 53 | float t = fluorescent.g + time; 54 | float a = 0.93; 55 | float b = 1.1; 56 | float c = 1.3; 57 | 58 | if (fluorescent.g > 0.0 || fluorescent.g < 0.0) { 59 | // Vary the lightness of pixels that are low in saturation, otherwise increase the saturation of them 60 | if (hsl.y < 0.2) { 61 | //hsl.y *= (0.5*sin(a*t) + 0.5); 62 | //hsl.z *= (0.5*sin(a*t) + 0.5); 63 | hsl.z *= ((-0.25*cos(a*t)) + 0.8); 64 | hsl.a = min(1 - ((-0.25*cos(a*t)) + 0.9), 1); 65 | } else { 66 | // Lower base saturation to stop washout 67 | if (bhsl.y > 0.4) { 68 | hsl.y *= bhsl.y; 69 | } 70 | hsl.y *= 2 * (b*cos(a*t) + c); 71 | float res = (.01 + .01* cos( (fluorescent.r)*4 )); 72 | hsl.x += res; 73 | 74 | // hsl.y *= cos(fluorescent.r*0.513); 75 | 76 | //hsl.z *= 1 * (b/5*cos(a*t) + 0.7*c); 77 | //hsl.z += 0.2; 78 | } 79 | } 80 | 81 | 82 | if (bhsl.a == 0){ 83 | hsl.a = 0; 84 | } 85 | 86 | tex = RGB(hsl); 87 | 88 | 89 | // Mix with base texture 90 | //tex = RGB(0.7*hsl + 0.3*bhsl); 91 | // float ratio = 1; 92 | // tex = ratio*RGB(hsl) + (1-ratio)*RGB(bhsl); 93 | 94 | 95 | // required 96 | return dissolve_mask(tex*colour, texture_coords, uv); 97 | } 98 | 99 | number hue(number s, number t, number h) 100 | { 101 | number hs = mod(h, 1.)*6.; 102 | if (hs < 1.) return (t-s) * hs + s; 103 | if (hs < 3.) return t; 104 | if (hs < 4.) return (t-s) * (4.-hs) + s; 105 | return s; 106 | } 107 | 108 | vec4 RGB(vec4 c) 109 | { 110 | if (c.y < 0.0001) 111 | return vec4(vec3(c.z), c.a); 112 | 113 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 114 | number s = 2.0 * c.z - t; 115 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 116 | } 117 | 118 | vec4 HSL(vec4 c) 119 | { 120 | number low = min(c.r, min(c.g, c.b)); 121 | number high = max(c.r, max(c.g, c.b)); 122 | number delta = high - low; 123 | number sum = high+low; 124 | 125 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 126 | if (delta == .0) 127 | return hsl; 128 | 129 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 130 | 131 | if (high == c.r) 132 | hsl.x = (c.g - c.b) / delta; 133 | else if (high == c.g) 134 | hsl.x = (c.b - c.r) / delta + 2.0; 135 | else 136 | hsl.x = (c.r - c.g) / delta + 4.0; 137 | 138 | hsl.x = mod(hsl.x / 6., 1.); 139 | return hsl; 140 | } 141 | 142 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 143 | { 144 | if (dissolve < 0.001) { 145 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 146 | } 147 | 148 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 149 | 150 | float t = time * 10.0 + 2003.; 151 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 152 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 153 | 154 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 155 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 156 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 157 | 158 | float field = (1.+ ( 159 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 160 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 161 | vec2 borders = vec2(0.2, 0.8); 162 | 163 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 164 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 165 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 166 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 167 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 168 | 169 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 170 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 171 | tex.rgba = burn_colour_1.rgba; 172 | } else if (burn_colour_2.a > 0.01) { 173 | tex.rgba = burn_colour_2.rgba; 174 | } 175 | } 176 | 177 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 178 | } 179 | 180 | // for transforming the card while your mouse is on it 181 | extern PRECISION vec2 mouse_screen_pos; 182 | extern PRECISION float hovering; 183 | extern PRECISION float screen_scale; 184 | 185 | #ifdef VERTEX 186 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 187 | { 188 | if (hovering <= 0.){ 189 | return transform_projection * vertex_position; 190 | } 191 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 192 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 193 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 194 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 195 | 196 | return transform_projection * vertex_position + vec4(0,0,0,scale); 197 | } 198 | #endif 199 | -------------------------------------------------------------------------------- /assets/shaders/foil.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define MY_HIGHP_OR_MEDIUMP highp 3 | #else 4 | #define MY_HIGHP_OR_MEDIUMP mediump 5 | #endif 6 | 7 | 8 | // Look ionized.fs for explanation 9 | extern MY_HIGHP_OR_MEDIUMP vec2 foil; 10 | extern MY_HIGHP_OR_MEDIUMP number dissolve; 11 | extern MY_HIGHP_OR_MEDIUMP number time; 12 | extern MY_HIGHP_OR_MEDIUMP vec4 texture_details; 13 | extern MY_HIGHP_OR_MEDIUMP vec2 image_details; 14 | extern bool shadow; 15 | extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_1; 16 | extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_2; 17 | 18 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 19 | { 20 | if (dissolve < 0.001) { 21 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 22 | } 23 | 24 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 25 | 26 | float t = time * 10.0 + 2003.; 27 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 28 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 29 | 30 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 31 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 32 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 33 | 34 | float field = (1.+ ( 35 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 36 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 37 | vec2 borders = vec2(0.2, 0.8); 38 | 39 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 40 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 41 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 42 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 43 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 44 | 45 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 46 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 47 | tex.rgba = burn_colour_1.rgba; 48 | } else if (burn_colour_2.a > 0.01) { 49 | tex.rgba = burn_colour_2.rgba; 50 | } 51 | } 52 | 53 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 54 | } 55 | 56 | number hue(number s, number t, number h) 57 | { 58 | number hs = mod(h, 1.)*6.; 59 | if (hs < 1.) return (t-s) * hs + s; 60 | if (hs < 3.) return t; 61 | if (hs < 4.) return (t-s) * (4.-hs) + s; 62 | return s; 63 | } 64 | 65 | vec4 RGB(vec4 c) 66 | { 67 | if (c.y < 0.0001) 68 | return vec4(vec3(c.z), c.a); 69 | 70 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 71 | number s = 2.0 * c.z - t; 72 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 73 | } 74 | 75 | vec4 HSL(vec4 c) 76 | { 77 | number low = min(c.r, min(c.g, c.b)); 78 | number high = max(c.r, max(c.g, c.b)); 79 | number delta = high - low; 80 | number sum = high+low; 81 | 82 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 83 | if (delta == .0) 84 | return hsl; 85 | 86 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 87 | 88 | if (high == c.r) 89 | hsl.x = (c.g - c.b) / delta; 90 | else if (high == c.g) 91 | hsl.x = (c.b - c.r) / delta + 2.0; 92 | else 93 | hsl.x = (c.r - c.g) / delta + 4.0; 94 | 95 | hsl.x = mod(hsl.x / 6., 1.); 96 | return hsl; 97 | } 98 | 99 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 100 | { 101 | vec4 tex = Texel( texture, texture_coords); 102 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 103 | vec2 adjusted_uv = uv - vec2(0.5, 0.5); 104 | adjusted_uv.x = adjusted_uv.x*texture_details.b/texture_details.a; 105 | 106 | number low = min(tex.r, min(tex.g, tex.b)); 107 | number high = max(tex.r, max(tex.g, tex.b)); 108 | number delta = min(high, max(0.5, 1. - low)); 109 | 110 | number fac = max(min(2.*sin((length(90.*adjusted_uv) + foil.r*2.) + 3.*(1.+0.8*cos(length(113.1121*adjusted_uv) - foil.r*3.121))) - 1. - max(5.-length(90.*adjusted_uv), 0.), 1.), 0.); 111 | vec2 rotater = vec2(cos(foil.r*0.1221), sin(foil.r*0.3512)); 112 | number angle = dot(rotater, adjusted_uv)/(length(rotater)*length(adjusted_uv)); 113 | number fac2 = max(min(5.*cos(foil.g*0.3 + angle*3.14*(2.2+0.9*sin(foil.r*1.65 + 0.2*foil.g))) - 4. - max(2.-length(20.*adjusted_uv), 0.), 1.), 0.); 114 | number fac3 = 0.3*max(min(2.*sin(foil.r*5. + uv.x*3. + 3.*(1.+0.5*cos(foil.r*7.))) - 1., 1.), -1.); 115 | number fac4 = 0.3*max(min(2.*sin(foil.r*6.66 + uv.y*3.8 + 3.*(1.+0.5*cos(foil.r*3.414))) - 1., 1.), -1.); 116 | 117 | number maxfac = max(max(fac, max(fac2, max(fac3, max(fac4, 0.0)))) + 2.2*(fac+fac2+fac3+fac4), 0.); 118 | 119 | tex.r = tex.r-delta + delta*maxfac*0.3; 120 | tex.g = tex.g-delta + delta*maxfac*0.3; 121 | tex.b = tex.b + delta*maxfac*1.9; 122 | tex.a = min(tex.a, 0.3*tex.a + 0.9*min(0.5, maxfac*0.1)); 123 | 124 | return dissolve_mask(tex, texture_coords, uv); 125 | } 126 | 127 | extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos; 128 | extern MY_HIGHP_OR_MEDIUMP float hovering; 129 | extern MY_HIGHP_OR_MEDIUMP float screen_scale; 130 | 131 | #ifdef VERTEX 132 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 133 | { 134 | if (hovering <= 0.){ 135 | return transform_projection * vertex_position; 136 | } 137 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 138 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 139 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 140 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 141 | 142 | return transform_projection * vertex_position + vec4(0,0,0,scale); 143 | } 144 | #endif -------------------------------------------------------------------------------- /assets/shaders/gilded.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 gilded; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Util] 21 | // Transform color from HSL to RGB 22 | vec4 RGB(vec4 c); 23 | 24 | // [Util] 25 | // Transform color from RGB to HSL 26 | vec4 HSL(vec4 c); 27 | 28 | // [Required] 29 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 30 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 31 | 32 | //increase contrast function 33 | vec4 increase_contrast(vec4 tex, float contrast_level) 34 | { 35 | // Normalize the RGB values to the -0.5 to +0.5 range 36 | vec3 normalized_rgb = tex.rgb - 0.5; 37 | 38 | // Apply contrast scaling based on the contrast level 39 | normalized_rgb *= contrast_level; 40 | 41 | // Shift back to the 0-1 range 42 | vec3 adjusted_rgb = normalized_rgb + 0.5; 43 | 44 | // Clamp to ensure RGB values are within a valid range 45 | adjusted_rgb = clamp(adjusted_rgb, 0.0, 1.0); 46 | 47 | // Return the color with the adjusted contrast 48 | return vec4(adjusted_rgb, tex.a); // Keep the original alpha value 49 | } 50 | 51 | // This is what actually changes the look of card 52 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 53 | { 54 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 55 | vec4 tex = Texel(texture, texture_coords); 56 | // Position of a pixel within the sprite 57 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 58 | 59 | number cyan = 0; 60 | number magenta = 0; 61 | number yellow = 0; 62 | 63 | number black = 1 - max(tex.r, max(tex.g, tex.b)); 64 | 65 | float grayscale = 0.2126 * tex.r + 0.7152 * tex.g + 0.0722 * tex.b; 66 | 67 | // greyscale tex 68 | vec4 gray = vec4(grayscale, grayscale, grayscale, tex.a); 69 | 70 | // desaturate tex 71 | tex.rgb = mix(tex.rgb, gray.rgb, 1); 72 | 73 | if (black < 1) { 74 | cyan = (1 - tex.r - black) / (1 - black); 75 | magenta = (1 - tex.g - black) / (1 - black); 76 | yellow = (1 - tex.b - black) / (1 - black); 77 | } 78 | if (gilded.g > 0.0 || gilded.g < 0.0) { 79 | cyan *= 0.6; 80 | magenta *= 0.6; 81 | yellow *= 1.4; 82 | black *= 0.9; 83 | } 84 | 85 | tex.r = (1.2 - cyan) * (1 - black); 86 | tex.g = (1.2 - magenta) * (1 - black); 87 | tex.b = (1 - yellow) * (1 - black); 88 | 89 | // gradient 90 | 91 | float brightness_reduction = (0.5 * (uv.y-0.5)); 92 | float bottom_rim = (0.2 * (uv.y-0.5)); 93 | float x_brightness_reduction = (0.5 * (uv.x-0.5)); 94 | tex.rgb *= (1.0 - brightness_reduction); 95 | tex.rgb *= (1.0 + bottom_rim); 96 | tex.rgb *= (1.0 - x_brightness_reduction); 97 | tex.g *= (1.0 - (0.5 * brightness_reduction)); 98 | tex.g *= (1.0 - (0.5 * x_brightness_reduction)); 99 | tex.b *= (1.0 - brightness_reduction); 100 | tex.b *= (1.0 - x_brightness_reduction); 101 | 102 | // lower contrast 103 | tex = increase_contrast(tex, 0.8); 104 | tex.r *= 1.2; 105 | tex.g *= 0.90; 106 | tex.b *= 0.8; 107 | 108 | // required 109 | return dissolve_mask(tex*colour, texture_coords, uv); 110 | } 111 | 112 | number hue(number s, number t, number h) 113 | { 114 | number hs = mod(h, 1.)*6.; 115 | if (hs < 1.) return (t-s) * hs + s; 116 | if (hs < 3.) return t; 117 | if (hs < 4.) return (t-s) * (4.-hs) + s; 118 | return s; 119 | } 120 | 121 | vec4 RGB(vec4 c) 122 | { 123 | if (c.y < 0.0001) 124 | return vec4(vec3(c.z), c.a); 125 | 126 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 127 | number s = 2.0 * c.z - t; 128 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 129 | } 130 | 131 | vec4 HSL(vec4 c) 132 | { 133 | number low = min(c.r, min(c.g, c.b)); 134 | number high = max(c.r, max(c.g, c.b)); 135 | number delta = high - low; 136 | number sum = high+low; 137 | 138 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 139 | if (delta == .0) 140 | return hsl; 141 | 142 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 143 | 144 | if (high == c.r) 145 | hsl.x = (c.g - c.b) / delta; 146 | else if (high == c.g) 147 | hsl.x = (c.b - c.r) / delta + 2.0; 148 | else 149 | hsl.x = (c.r - c.g) / delta + 4.0; 150 | 151 | hsl.x = mod(hsl.x / 6., 1.); 152 | return hsl; 153 | } 154 | 155 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 156 | { 157 | if (dissolve < 0.001) { 158 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 159 | } 160 | 161 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 162 | 163 | float t = time * 10.0 + 2003.; 164 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 165 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 166 | 167 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 168 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 169 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 170 | 171 | float field = (1.+ ( 172 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 173 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 174 | vec2 borders = vec2(0.2, 0.8); 175 | 176 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 177 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 178 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 179 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 180 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 181 | 182 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 183 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 184 | tex.rgba = burn_colour_1.rgba; 185 | } else if (burn_colour_2.a > 0.01) { 186 | tex.rgba = burn_colour_2.rgba; 187 | } 188 | } 189 | 190 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 191 | } 192 | 193 | // for transforming the card while your mouse is on it 194 | extern PRECISION vec2 mouse_screen_pos; 195 | extern PRECISION float hovering; 196 | extern PRECISION float screen_scale; 197 | 198 | #ifdef VERTEX 199 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 200 | { 201 | if (hovering <= 0.){ 202 | return transform_projection * vertex_position; 203 | } 204 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 205 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 206 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 207 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 208 | 209 | return transform_projection * vertex_position + vec4(0,0,0,scale); 210 | } 211 | #endif 212 | -------------------------------------------------------------------------------- /assets/shaders/gold.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // 8 | // Shader made by: stupxd 9 | // You are free to use and modify this shader in your projects, 10 | // as long as you credit me for the original work. 11 | // 12 | 13 | extern PRECISION vec2 gold; 14 | 15 | extern PRECISION number dissolve; 16 | extern PRECISION number time; 17 | extern PRECISION vec4 texture_details; 18 | extern PRECISION vec2 image_details; 19 | extern bool shadow; 20 | extern PRECISION vec4 burn_colour_1; 21 | extern PRECISION vec4 burn_colour_2; 22 | 23 | // Custom extern from SMODS.Shader 24 | extern PRECISION float lines_offset; 25 | 26 | #define TWO_PI 6.28318530718 27 | 28 | vec4 gold_color = vec4(231., 164., 25., 0.) / 255.; 29 | 30 | vec4 dissolve_mask(vec4 final_pixel, vec2 texture_coords, vec2 uv); 31 | 32 | bool line(vec2 uv, float offset, float width) { 33 | uv.x = uv.x * texture_details.z / texture_details.w; 34 | 35 | offset = offset + 0.35 * sin(gold.x + TWO_PI * lines_offset); 36 | width = width + 0.005 * sin(gold.x); 37 | 38 | float min_y = -uv.x + offset; 39 | float max_y = -uv.x + offset + width; 40 | 41 | return uv.y > min_y && uv.y < max_y; 42 | } 43 | 44 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 45 | { 46 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.zw)/texture_details.zw; 47 | vec4 pixel = Texel(texture, texture_coords); 48 | 49 | vec4 tex = vec4(1., 1., 1., 0.1); 50 | 51 | if ( 52 | lines_offset > 0 && (line(uv, 0.0, 0.07) || line(uv, 0.4, 0.1) || line(uv, 0.55, 0.1) || line(uv, 1.3, 0.05) || line(uv, 1.8, 0.1)) || 53 | (line(uv, -0.1, 0.13) || line(uv, 0.3, 0.05) || line(uv, 0.8, 0.1) || line(uv, 1.3, 0.11) || line(uv, 1.7, 0.07)) 54 | ) { 55 | tex.a = tex.a * 2.; 56 | } else { 57 | tex.a = 0.05; 58 | } 59 | 60 | float avg = (pixel.r + pixel.g + pixel.b) / 3.; 61 | pixel = vec4(gold_color.rgb * avg + tex.rgb * tex.a, pixel.a); 62 | 63 | return dissolve_mask(pixel, texture_coords, uv); 64 | } 65 | 66 | vec4 dissolve_mask(vec4 final_pixel, vec2 texture_coords, vec2 uv) 67 | { 68 | if (dissolve < 0.001) { 69 | return vec4(shadow ? vec3(0.,0.,0.) : final_pixel.xyz, shadow ? final_pixel.a*0.3: final_pixel.a); 70 | } 71 | 72 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 73 | 74 | float t = time * 10.0 + 2003.; 75 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 76 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 77 | 78 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 79 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 80 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 81 | 82 | float field = (1.+ ( 83 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 84 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 85 | vec2 borders = vec2(0.2, 0.8); 86 | 87 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 88 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 89 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 90 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 91 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 92 | 93 | if (final_pixel.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 94 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 95 | final_pixel.rgba = burn_colour_1.rgba; 96 | } else if (burn_colour_2.a > 0.01) { 97 | final_pixel.rgba = burn_colour_2.rgba; 98 | } 99 | } 100 | 101 | return vec4(shadow ? vec3(0.,0.,0.) : final_pixel.xyz, res > adjusted_dissolve ? (shadow ? final_pixel.a*0.3: final_pixel.a) : .0); 102 | } 103 | 104 | extern PRECISION vec2 mouse_screen_pos; 105 | extern PRECISION float hovering; 106 | extern PRECISION float screen_scale; 107 | 108 | #ifdef VERTEX 109 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 110 | { 111 | if (hovering <= 0.){ 112 | return transform_projection * vertex_position; 113 | } 114 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 115 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 116 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 117 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 118 | 119 | return transform_projection * vertex_position + vec4(0,0,0,scale); 120 | } 121 | #endif -------------------------------------------------------------------------------- /assets/shaders/greyscale.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 greyscale; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Util] 21 | // Transform color from HSL to RGB 22 | vec4 RGB(vec4 c); 23 | 24 | // [Util] 25 | // Transform color from RGB to HSL 26 | vec4 HSL(vec4 c); 27 | 28 | // [Required] 29 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 30 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 31 | 32 | // This is what actually changes the look of card 33 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 34 | { 35 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 36 | vec4 tex = Texel(texture, texture_coords); 37 | // Position of a pixel within the sprite 38 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 39 | 40 | float t = greyscale.g + time; 41 | float adjust_value = 0.1 * sin(t) + 0.5; 42 | vec2 adjusted_uv = uv - vec2(adjust_value, adjust_value); 43 | adjusted_uv.x = adjusted_uv.x*texture_details.b/texture_details.a; 44 | adjusted_uv.y = adjusted_uv.y*texture_details.b/texture_details.a; 45 | 46 | 47 | 48 | vec4 hsl = HSL(tex); // convert texture to HSL values 49 | vec4 bhsl = HSL(tex); // make a base copy of HSL values 50 | 51 | //vec2 rotater = vec2(cos(greyscale.r*0.1221), sin(greyscale.r*0.3512)); 52 | 53 | 54 | if (greyscale.g > 0.0 || greyscale.g < 0.0) { 55 | hsl.y = 0.02; 56 | hsl.z *= (1 - adjusted_uv.x*(cos(greyscale.r*0.512))); 57 | hsl.z *= (1 - adjusted_uv.y*(cos(greyscale.r*0.512))); 58 | } 59 | 60 | if (bhsl.z > 0.95){ 61 | hsl.a = 0; 62 | } 63 | 64 | if (bhsl.a == 0){ 65 | hsl.a = 0; 66 | } 67 | 68 | 69 | // Mix with base texture 70 | //tex = RGB(0.7*hsl + 0.3*bhsl); 71 | float ratio = 1; 72 | tex = ratio*RGB(hsl) + (1-ratio)*RGB(bhsl); 73 | 74 | 75 | 76 | // required 77 | return dissolve_mask(tex*colour, texture_coords, uv); 78 | } 79 | 80 | number hue(number s, number t, number h) 81 | { 82 | number hs = mod(h, 1.)*6.; 83 | if (hs < 1.) return (t-s) * hs + s; 84 | if (hs < 3.) return t; 85 | if (hs < 4.) return (t-s) * (4.-hs) + s; 86 | return s; 87 | } 88 | 89 | vec4 RGB(vec4 c) 90 | { 91 | if (c.y < 0.0001) 92 | return vec4(vec3(c.z), c.a); 93 | 94 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 95 | number s = 2.0 * c.z - t; 96 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 97 | } 98 | 99 | vec4 HSL(vec4 c) 100 | { 101 | number low = min(c.r, min(c.g, c.b)); 102 | number high = max(c.r, max(c.g, c.b)); 103 | number delta = high - low; 104 | number sum = high+low; 105 | 106 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 107 | if (delta == .0) 108 | return hsl; 109 | 110 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 111 | 112 | if (high == c.r) 113 | hsl.x = (c.g - c.b) / delta; 114 | else if (high == c.g) 115 | hsl.x = (c.b - c.r) / delta + 2.0; 116 | else 117 | hsl.x = (c.r - c.g) / delta + 4.0; 118 | 119 | hsl.x = mod(hsl.x / 6., 1.); 120 | return hsl; 121 | } 122 | 123 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 124 | { 125 | if (dissolve < 0.001) { 126 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 127 | } 128 | 129 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 130 | 131 | float t = time * 10.0 + 2003.; 132 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 133 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 134 | 135 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 136 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 137 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 138 | 139 | float field = (1.+ ( 140 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 141 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 142 | vec2 borders = vec2(0.2, 0.8); 143 | 144 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 145 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 146 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 147 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 148 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 149 | 150 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 151 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 152 | tex.rgba = burn_colour_1.rgba; 153 | } else if (burn_colour_2.a > 0.01) { 154 | tex.rgba = burn_colour_2.rgba; 155 | } 156 | } 157 | 158 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 159 | } 160 | 161 | // for transforming the card while your mouse is on it 162 | extern PRECISION vec2 mouse_screen_pos; 163 | extern PRECISION float hovering; 164 | extern PRECISION float screen_scale; 165 | 166 | #ifdef VERTEX 167 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 168 | { 169 | if (hovering <= 0.){ 170 | return transform_projection * vertex_position; 171 | } 172 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 173 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 174 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 175 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 176 | 177 | return transform_projection * vertex_position + vec4(0,0,0,scale); 178 | } 179 | #endif 180 | -------------------------------------------------------------------------------- /assets/shaders/ionized.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // !! change this variable name to your Shader's name 8 | // YOU MUST USE THIS VARIABLE IN THE vec4 effect AT LEAST ONCE 9 | 10 | // Values of this variable: 11 | // self.ARGS.send_to_shader[1] = math.min(self.VT.r*3, 1) + (math.sin(G.TIMERS.REAL/28) + 1) + (self.juice and self.juice.r*20 or 0) + self.tilt_var.amt 12 | // self.ARGS.send_to_shader[2] = G.TIMERS.REAL 13 | extern PRECISION vec2 ionized; 14 | 15 | extern PRECISION number dissolve; 16 | extern PRECISION number time; 17 | // [Note] sprite_pos_x _y is not a pixel position! 18 | // To get pixel position, you need to multiply 19 | // it by sprite_width _height (look flipped.fs) 20 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 21 | extern PRECISION vec4 texture_details; 22 | // (width, height) for atlas texture [not normalized] 23 | extern PRECISION vec2 image_details; 24 | extern bool shadow; 25 | extern PRECISION vec4 burn_colour_1; 26 | extern PRECISION vec4 burn_colour_2; 27 | 28 | // [Required] 29 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 30 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 31 | 32 | // This is what actually changes the look of card 33 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 34 | { 35 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 36 | vec4 tex = Texel(texture, texture_coords); 37 | // Position of a pixel within the sprite 38 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 39 | 40 | // For all vectors (vec2, vec3, vec4), .rgb is equivalent of .xyz, so uv.y == uv.g 41 | // .a is last parameter for vec4 (usually the alpha channel - transparency) 42 | 43 | // generic shimmer copied straight from negative_shine.fs 44 | number low = min(tex.r, min(tex.g, tex.b)); 45 | number high = max(tex.r, max(tex.g, tex.b)); 46 | number delta = high-low -0.1; 47 | 48 | number fac = 0.8 + 0.9*sin(11.*uv.x+4.32*uv.y + ionized.r*12. + cos(ionized.r*5.3 + uv.y*4.2 - uv.x*4.)); 49 | number fac2 = 0.5 + 0.5*sin(8.*uv.x+2.32*uv.y + ionized.r*5. - cos(ionized.r*2.3 + uv.x*8.2)); 50 | number fac3 = 0.5 + 0.5*sin(10.*uv.x+5.32*uv.y + ionized.r*6.111 + sin(ionized.r*5.3 + uv.y*3.2)); 51 | number fac4 = 0.5 + 0.5*sin(3.*uv.x+2.32*uv.y + ionized.r*8.111 + sin(ionized.r*1.3 + uv.y*11.2)); 52 | number fac5 = sin(0.9*16.*uv.x+5.32*uv.y + ionized.r*12. + cos(ionized.r*5.3 + uv.y*4.2 - uv.x*4.)); 53 | 54 | number maxfac = 0.7*max(max(fac, max(fac2, max(fac3,0.0))) + (fac+fac2+fac3*fac4), 0.); 55 | 56 | // normally this would have both a tex.b and tex.r for this segement but 57 | // it made the card look rainbow 58 | tex.g = tex.g-delta + delta*maxfac*(0.7 - fac5*0.27) - 0.1; 59 | 60 | // make the red channel really bright and **SLIGHTLY** dependant on the rotation of the card 61 | tex.r = tex.r*1.1 + (0.1*ionized.y); 62 | // reduce the green channel and **SLIGHTLY** dependant on the rotation of the card 63 | tex.g = tex.g*0.65 + (0.000001*ionized.x); 64 | // greatly reduce the blue channel 65 | tex.b = tex.b*0.2; 66 | 67 | // required 68 | return dissolve_mask(tex*colour, texture_coords, uv); 69 | } 70 | 71 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 72 | { 73 | if (dissolve < 0.001) { 74 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 75 | } 76 | 77 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 78 | 79 | float t = time * 10.0 + 2003.; 80 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 81 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 82 | 83 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 84 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 85 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 86 | 87 | float field = (1.+ ( 88 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 89 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 90 | vec2 borders = vec2(0.2, 0.8); 91 | 92 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 93 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 94 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 95 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 96 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 97 | 98 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 99 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 100 | tex.rgba = burn_colour_1.rgba; 101 | } else if (burn_colour_2.a > 0.01) { 102 | tex.rgba = burn_colour_2.rgba; 103 | } 104 | } 105 | 106 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 107 | } 108 | 109 | // for transforming the card while your mouse is on it 110 | extern PRECISION vec2 mouse_screen_pos; 111 | extern PRECISION float hovering; 112 | extern PRECISION float screen_scale; 113 | 114 | #ifdef VERTEX 115 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 116 | { 117 | if (hovering <= 0.){ 118 | return transform_projection * vertex_position; 119 | } 120 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 121 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 122 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 123 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 124 | 125 | return transform_projection * vertex_position + vec4(0,0,0,scale); 126 | } 127 | #endif 128 | -------------------------------------------------------------------------------- /assets/shaders/laminated.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 laminated; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Required] 21 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 22 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 23 | 24 | // This is what actually changes the look of card 25 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 26 | { 27 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 28 | vec4 tex = Texel(texture, texture_coords); 29 | // Position of a pixel within the sprite 30 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 31 | 32 | number low = min(tex.r, min(tex.g, tex.b)); 33 | number high = max(tex.r, max(tex.g, tex.b)); 34 | number delta = high-low -0.1; 35 | 36 | number fac = 0.8 + 0.9*sin(11.*uv.x+4.32*uv.y + laminated.r*12. + cos(laminated.r*5.3 + uv.y*4.2 - uv.x*4.)); 37 | number fac2 = 0.5 + 0.5*sin(8.*uv.x+2.32*uv.y + laminated.r*5. - cos(laminated.r*2.3 + uv.x*8.2)); 38 | number fac3 = 0.5 + 0.5*sin(10.*uv.x+5.32*uv.y + laminated.r*6.111 + sin(laminated.r*5.3 + uv.y*3.2)); 39 | number fac4 = 0.5 + 0.5*sin(3.*uv.x+2.32*uv.y + laminated.r*8.111 + sin(laminated.r*1.3 + uv.y*11.2)); 40 | number fac5 = sin(0.9*16.*uv.x+5.32*uv.y + laminated.r*12. + cos(laminated.r*5.3 + uv.y*4.2 - uv.x*4.)); 41 | 42 | number maxfac = 0.7*max(max(fac, max(fac2, max(fac3,0.0))) + (fac+fac2+fac3*fac4), 0.); 43 | 44 | tex.rgb = tex.rgb*0.5 + vec3(0.4, 0.4, 0.8); 45 | 46 | tex.r = tex.r-delta + delta*maxfac*(0.7 + fac5*0.27) - 0.1; 47 | tex.g = tex.g-delta + delta*maxfac*(0.7 - fac5*0.27) - 0.1; 48 | tex.b = tex.b-delta + delta*maxfac*0.7 - 0.1; 49 | tex.a = tex.a*(0.5*max(min(1., max(0.,0.3*max(low*0.2, delta)+ min(max(maxfac*0.1,0.), 0.4)) ), 0.) + 0.15*maxfac*(0.1+delta)); 50 | 51 | return dissolve_mask(tex*colour, texture_coords, uv); 52 | } 53 | 54 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 55 | { 56 | if (dissolve < 0.001) { 57 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 58 | } 59 | 60 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 61 | 62 | float t = time * 10.0 + 2003.; 63 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 64 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 65 | 66 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 67 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 68 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 69 | 70 | float field = (1.+ ( 71 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 72 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 73 | vec2 borders = vec2(0.2, 0.8); 74 | 75 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 76 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 77 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 78 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 79 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 80 | 81 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 82 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 83 | tex.rgba = burn_colour_1.rgba; 84 | } else if (burn_colour_2.a > 0.01) { 85 | tex.rgba = burn_colour_2.rgba; 86 | } 87 | } 88 | 89 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 90 | } 91 | 92 | // for transforming the card while your mouse is on it 93 | extern PRECISION vec2 mouse_screen_pos; 94 | extern PRECISION float hovering; 95 | extern PRECISION float screen_scale; 96 | 97 | #ifdef VERTEX 98 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 99 | { 100 | if (hovering <= 0.){ 101 | return transform_projection * vertex_position; 102 | } 103 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 104 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 105 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 106 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 107 | 108 | return transform_projection * vertex_position + vec4(0,0,0,scale); 109 | } 110 | #endif 111 | -------------------------------------------------------------------------------- /assets/shaders/monochrome.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 monochrome; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Util] 21 | // Transform color from HSL to RGB 22 | vec4 RGB(vec4 c); 23 | 24 | // [Util] 25 | // Transform color from RGB to HSL 26 | vec4 HSL(vec4 c); 27 | 28 | // [Required] 29 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 30 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 31 | 32 | // This is what actually changes the look of card 33 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 34 | { 35 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 36 | vec4 tex = Texel(texture, texture_coords); 37 | // Position of a pixel within the sprite 38 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 39 | float t = monochrome.y + time; 40 | float adjust_value = fract(0.08*t); 41 | 42 | vec3 linear = tex.rgb; 43 | vec4 hslSuit = HSL(vec4(1,0,0,1)); 44 | vec4 hsl = HSL(tex); // convert texture to HSL values 45 | 46 | if (monochrome.y > 0.0 || monochrome.y < 0.0) { 47 | if (hsl.z == 1) { 48 | tex.a = 0; 49 | } 50 | } 51 | 52 | linear.r = pow(linear.r, 2.2); 53 | linear.g = pow(linear.g, 2.2); 54 | linear.b = pow(linear.b, 2.2); 55 | hslSuit.z = (linear.r + linear.g + linear.b)/3; 56 | hslSuit = RGB(hslSuit); 57 | tex = vec4(hslSuit.rgb, tex.a); 58 | 59 | vec4 temp = HSL(tex); 60 | temp.r = adjust_value; 61 | tex = RGB(temp); 62 | 63 | // required 64 | return dissolve_mask(tex*colour, texture_coords, uv); 65 | } 66 | 67 | number hue(number s, number t, number h) 68 | { 69 | number hs = mod(h, 1.)*6.; 70 | if (hs < 1.) return (t-s) * hs + s; 71 | if (hs < 3.) return t; 72 | if (hs < 4.) return (t-s) * (4.-hs) + s; 73 | return s; 74 | } 75 | 76 | vec4 RGB(vec4 c) 77 | { 78 | if (c.y < 0.0001) 79 | return vec4(vec3(c.z), c.a); 80 | 81 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 82 | number s = 2.0 * c.z - t; 83 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 84 | } 85 | 86 | vec4 HSL(vec4 c) 87 | { 88 | number low = min(c.r, min(c.g, c.b)); 89 | number high = max(c.r, max(c.g, c.b)); 90 | number delta = high - low; 91 | number sum = high+low; 92 | 93 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 94 | if (delta == .0) 95 | return hsl; 96 | 97 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 98 | 99 | if (high == c.r) 100 | hsl.x = (c.g - c.b) / delta; 101 | else if (high == c.g) 102 | hsl.x = (c.b - c.r) / delta + 2.0; 103 | else 104 | hsl.x = (c.r - c.g) / delta + 4.0; 105 | 106 | hsl.x = mod(hsl.x / 6., 1.); 107 | return hsl; 108 | } 109 | 110 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 111 | { 112 | if (dissolve < 0.001) { 113 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 114 | } 115 | 116 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 117 | 118 | float t = time * 10.0 + 2003.; 119 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 120 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 121 | 122 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 123 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 124 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 125 | 126 | float field = (1.+ ( 127 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 128 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 129 | vec2 borders = vec2(0.2, 0.8); 130 | 131 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 132 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 133 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 134 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 135 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 136 | 137 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 138 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 139 | tex.rgba = burn_colour_1.rgba; 140 | } else if (burn_colour_2.a > 0.01) { 141 | tex.rgba = burn_colour_2.rgba; 142 | } 143 | } 144 | 145 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 146 | } 147 | 148 | // for transforming the card while your mouse is on it 149 | extern PRECISION vec2 mouse_screen_pos; 150 | extern PRECISION float hovering; 151 | extern PRECISION float screen_scale; 152 | 153 | #ifdef VERTEX 154 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 155 | { 156 | if (hovering <= 0.){ 157 | return transform_projection * vertex_position; 158 | } 159 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 160 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 161 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 162 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 163 | 164 | return transform_projection * vertex_position + vec4(0,0,0,scale); 165 | } 166 | #endif 167 | -------------------------------------------------------------------------------- /assets/shaders/overexposed.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 overexposed; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Required] 21 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 22 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 23 | 24 | vec3 reinhardToneMap(vec3 color, float exposure) 25 | { 26 | color *= exposure/(1. + color / exposure); 27 | color = pow(color, vec3(1. / 2.2)); 28 | return color; 29 | } 30 | 31 | // This is what actually changes the look of card 32 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 33 | { 34 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 35 | vec4 tex = Texel(texture, texture_coords); 36 | // Position of a pixel within the sprite 37 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 38 | 39 | vec4 basetex = Texel(texture, texture_coords); 40 | float t = overexposed.g + time; 41 | 42 | 43 | if (tex.a == 0){ 44 | tex.a = 0; 45 | } else { 46 | vec3 color = tex.rgb; 47 | float rate = 1.5 - uv.y - 0.3*sin(0.8*t); 48 | if(rate > 1){ 49 | rate = 1 - mod(rate, 1); 50 | } 51 | color *= (2.3 * rate); 52 | vec3 newColor = reinhardToneMap(color, 1.5); 53 | // newColor += 0.5*sin(overexposed.r*0.12512); 54 | tex = vec4(newColor, 1.); 55 | 56 | float ratio = 0.9; 57 | tex = ratio*tex + (1-ratio)*basetex; 58 | } 59 | // required 60 | return dissolve_mask(tex*colour, texture_coords, uv); 61 | } 62 | 63 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 64 | { 65 | if (dissolve < 0.001) { 66 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 67 | } 68 | 69 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 70 | 71 | float t = time * 10.0 + 2003.; 72 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 73 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 74 | 75 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 76 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 77 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 78 | 79 | float field = (1.+ ( 80 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 81 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 82 | vec2 borders = vec2(0.2, 0.8); 83 | 84 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 85 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 86 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 87 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 88 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 89 | 90 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 91 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 92 | tex.rgba = burn_colour_1.rgba; 93 | } else if (burn_colour_2.a > 0.01) { 94 | tex.rgba = burn_colour_2.rgba; 95 | } 96 | } 97 | 98 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 99 | } 100 | 101 | // for transforming the card while your mouse is on it 102 | extern PRECISION vec2 mouse_screen_pos; 103 | extern PRECISION float hovering; 104 | extern PRECISION float screen_scale; 105 | 106 | #ifdef VERTEX 107 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 108 | { 109 | if (hovering <= 0.){ 110 | return transform_projection * vertex_position; 111 | } 112 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 113 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 114 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 115 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 116 | 117 | return transform_projection * vertex_position + vec4(0,0,0,scale); 118 | } 119 | #endif 120 | -------------------------------------------------------------------------------- /assets/shaders/sepia.fs: -------------------------------------------------------------------------------- 1 | #if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH) 2 | #define PRECISION highp 3 | #else 4 | #define PRECISION mediump 5 | #endif 6 | 7 | // Look ionized.fs for explanation 8 | extern PRECISION vec2 sepia; 9 | 10 | extern PRECISION number dissolve; 11 | extern PRECISION number time; 12 | // (sprite_pos_x, sprite_pos_y, sprite_width, sprite_height) [not normalized] 13 | extern PRECISION vec4 texture_details; 14 | // (width, height) for atlas texture [not normalized] 15 | extern PRECISION vec2 image_details; 16 | extern bool shadow; 17 | extern PRECISION vec4 burn_colour_1; 18 | extern PRECISION vec4 burn_colour_2; 19 | 20 | // [Util] 21 | // Transform color from HSL to RGB 22 | vec4 RGB(vec4 c); 23 | 24 | // [Util] 25 | // Transform color from RGB to HSL 26 | vec4 HSL(vec4 c); 27 | 28 | // [Required] 29 | // Apply dissolve effect (when card is being "burnt", e.g. when consumable is used) 30 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv); 31 | 32 | // This is what actually changes the look of card 33 | vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords ) 34 | { 35 | // Take pixel color (rgba) from `texture` at `texture_coords`, equivalent of texture2D in GLSL 36 | vec4 tex = Texel(texture, texture_coords); 37 | // Position of a pixel within the sprite 38 | vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; 39 | 40 | vec4 hsl = HSL(tex); // convert texture to HSL values 41 | vec4 bhsl = HSL(tex); // make a base copy of HSL values 42 | 43 | //vec2 rotater = vec2(cos(sepia.r*0.1221), sin(sepia.r*0.3512)); 44 | 45 | vec3 sepiaVec = tex.rgb; 46 | if (sepia.g > 0.0 || sepia.g < 0.0) { 47 | sepiaVec.r = (tex.r * 0.393) + (tex.g * 0.769) + (tex.b * 0.189); 48 | sepiaVec.g = (tex.r * 0.349) + (tex.g * 0.686) + (tex.b * 0.168); 49 | sepiaVec.b = (tex.r * 0.272) + (tex.g * 0.534) + (tex.b * 0.131); 50 | } 51 | 52 | tex = vec4(sepiaVec, tex.a); 53 | 54 | // Mix with base texture 55 | //tex = RGB(0.7*hsl + 0.3*bhsl); 56 | 57 | // required 58 | return dissolve_mask(tex*colour, texture_coords, uv); 59 | } 60 | 61 | number hue(number s, number t, number h) 62 | { 63 | number hs = mod(h, 1.)*6.; 64 | if (hs < 1.) return (t-s) * hs + s; 65 | if (hs < 3.) return t; 66 | if (hs < 4.) return (t-s) * (4.-hs) + s; 67 | return s; 68 | } 69 | 70 | vec4 RGB(vec4 c) 71 | { 72 | if (c.y < 0.0001) 73 | return vec4(vec3(c.z), c.a); 74 | 75 | number t = (c.z < .5) ? c.y*c.z + c.z : -c.y*c.z + (c.y+c.z); 76 | number s = 2.0 * c.z - t; 77 | return vec4(hue(s,t,c.x + 1./3.), hue(s,t,c.x), hue(s,t,c.x - 1./3.), c.w); 78 | } 79 | 80 | vec4 HSL(vec4 c) 81 | { 82 | number low = min(c.r, min(c.g, c.b)); 83 | number high = max(c.r, max(c.g, c.b)); 84 | number delta = high - low; 85 | number sum = high+low; 86 | 87 | vec4 hsl = vec4(.0, .0, .5 * sum, c.a); 88 | if (delta == .0) 89 | return hsl; 90 | 91 | hsl.y = (hsl.z < .5) ? delta / sum : delta / (2.0 - sum); 92 | 93 | if (high == c.r) 94 | hsl.x = (c.g - c.b) / delta; 95 | else if (high == c.g) 96 | hsl.x = (c.b - c.r) / delta + 2.0; 97 | else 98 | hsl.x = (c.r - c.g) / delta + 4.0; 99 | 100 | hsl.x = mod(hsl.x / 6., 1.); 101 | return hsl; 102 | } 103 | 104 | vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv) 105 | { 106 | if (dissolve < 0.001) { 107 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a); 108 | } 109 | 110 | float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values 111 | 112 | float t = time * 10.0 + 2003.; 113 | vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a); 114 | vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a); 115 | 116 | vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324)); 117 | vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532)); 118 | vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000)); 119 | 120 | float field = (1.+ ( 121 | cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) + 122 | cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.; 123 | vec2 borders = vec2(0.2, 0.8); 124 | 125 | float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14)) 126 | - (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 127 | - (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve) 128 | - (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve) 129 | - (floored_uv.y < borders.x ? (borders.x - floored_uv.y)*(5. + 5.*dissolve) : 0.)*(dissolve); 130 | 131 | if (tex.a > 0.01 && burn_colour_1.a > 0.01 && !shadow && res < adjusted_dissolve + 0.8*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 132 | if (!shadow && res < adjusted_dissolve + 0.5*(0.5-abs(adjusted_dissolve-0.5)) && res > adjusted_dissolve) { 133 | tex.rgba = burn_colour_1.rgba; 134 | } else if (burn_colour_2.a > 0.01) { 135 | tex.rgba = burn_colour_2.rgba; 136 | } 137 | } 138 | 139 | return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, res > adjusted_dissolve ? (shadow ? tex.a*0.3: tex.a) : .0); 140 | } 141 | 142 | // for transforming the card while your mouse is on it 143 | extern PRECISION vec2 mouse_screen_pos; 144 | extern PRECISION float hovering; 145 | extern PRECISION float screen_scale; 146 | 147 | #ifdef VERTEX 148 | vec4 position( mat4 transform_projection, vec4 vertex_position ) 149 | { 150 | if (hovering <= 0.){ 151 | return transform_projection * vertex_position; 152 | } 153 | float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy); 154 | vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale; 155 | float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist)) 156 | *hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist); 157 | 158 | return transform_projection * vertex_position + vec4(0,0,0,scale); 159 | } 160 | #endif 161 | -------------------------------------------------------------------------------- /assets/sounds/bitch.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/bitch.ogg -------------------------------------------------------------------------------- /assets/sounds/cantaloupe.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/cantaloupe.ogg -------------------------------------------------------------------------------- /assets/sounds/catlaughing.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/catlaughing.ogg -------------------------------------------------------------------------------- /assets/sounds/catvomit.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/catvomit.ogg -------------------------------------------------------------------------------- /assets/sounds/coin.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/coin.ogg -------------------------------------------------------------------------------- /assets/sounds/crash.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/crash.ogg -------------------------------------------------------------------------------- /assets/sounds/dino_death.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/dino_death.ogg -------------------------------------------------------------------------------- /assets/sounds/dino_jump.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/dino_jump.ogg -------------------------------------------------------------------------------- /assets/sounds/eat.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/eat.ogg -------------------------------------------------------------------------------- /assets/sounds/evokerspawn.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/evokerspawn.ogg -------------------------------------------------------------------------------- /assets/sounds/fish.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/fish.ogg -------------------------------------------------------------------------------- /assets/sounds/glassbreak.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/glassbreak.ogg -------------------------------------------------------------------------------- /assets/sounds/horse.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/horse.ogg -------------------------------------------------------------------------------- /assets/sounds/horsedeath.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/horsedeath.ogg -------------------------------------------------------------------------------- /assets/sounds/jackpot.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/jackpot.ogg -------------------------------------------------------------------------------- /assets/sounds/mariopaintmeow.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/mariopaintmeow.ogg -------------------------------------------------------------------------------- /assets/sounds/muchotexto.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/muchotexto.ogg -------------------------------------------------------------------------------- /assets/sounds/music_bitch.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/music_bitch.ogg -------------------------------------------------------------------------------- /assets/sounds/music_buysomethin.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/music_buysomethin.ogg -------------------------------------------------------------------------------- /assets/sounds/music_cybergrind.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/music_cybergrind.ogg -------------------------------------------------------------------------------- /assets/sounds/music_slotmachine.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/music_slotmachine.ogg -------------------------------------------------------------------------------- /assets/sounds/music_worldmap.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/music_worldmap.mp3 -------------------------------------------------------------------------------- /assets/sounds/nine.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/nine.ogg -------------------------------------------------------------------------------- /assets/sounds/nomusic1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/nomusic1.ogg -------------------------------------------------------------------------------- /assets/sounds/nomusic2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/nomusic2.ogg -------------------------------------------------------------------------------- /assets/sounds/nomusic3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/nomusic3.ogg -------------------------------------------------------------------------------- /assets/sounds/okaypeople.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/okaypeople.ogg -------------------------------------------------------------------------------- /assets/sounds/parry.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/parry.ogg -------------------------------------------------------------------------------- /assets/sounds/piglinhmm.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/piglinhmm.ogg -------------------------------------------------------------------------------- /assets/sounds/pluh.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/pluh.ogg -------------------------------------------------------------------------------- /assets/sounds/pluhsh.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/pluhsh.ogg -------------------------------------------------------------------------------- /assets/sounds/slotmachine.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/slotmachine.ogg -------------------------------------------------------------------------------- /assets/sounds/slotmachine_ding.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/slotmachine_ding.ogg -------------------------------------------------------------------------------- /assets/sounds/snd_explosion.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/snd_explosion.ogg -------------------------------------------------------------------------------- /assets/sounds/ten.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/ten.ogg -------------------------------------------------------------------------------- /assets/sounds/twennyone.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/twennyone.ogg -------------------------------------------------------------------------------- /assets/sounds/ultrakill_landing.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/ultrakill_landing.ogg -------------------------------------------------------------------------------- /assets/sounds/vampire.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/vampire.ogg -------------------------------------------------------------------------------- /assets/sounds/whatsapp.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/whatsapp.ogg -------------------------------------------------------------------------------- /assets/sounds/whip.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/whip.ogg -------------------------------------------------------------------------------- /assets/sounds/woodbreaking.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/woodbreaking.ogg -------------------------------------------------------------------------------- /assets/sounds/woodbroke.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/assets/sounds/woodbroke.ogg -------------------------------------------------------------------------------- /core.lua: -------------------------------------------------------------------------------- 1 | --- STEAMODDED HEADER 2 | --- MOD_NAME: Yahimod 3 | --- MOD_ID: Yahimod 4 | --- MOD_AUTHOR: Yahiamice 5 | --- MOD_DESCRIPTION: hi 6 | --- PREFIX: yahi 7 | ---------------------------------------------------------- 8 | ----------- MOD CODE ------------------------------------- 9 | 10 | -- shoutouts cryptid & mathisfun -- 11 | 12 | if not Yahimod then 13 | Yahimod = {} 14 | end 15 | 16 | G.C.YAHIPURPLE = HEX("d342fe") 17 | G.C.YAHIORANGE = HEX("ffd874") 18 | G.C.mid_flash = 0 19 | G.C.vort_time = 7 20 | G.C.vort_speed = 0.4 21 | 22 | -- from cryptid :} 23 | local oldfunc = Game.main_menu 24 | Game.main_menu = function(change_context) 25 | local ret = oldfunc(change_context) 26 | G.SPLASH_BACK:define_draw_steps({ 27 | { 28 | shader = "splash", 29 | send = { 30 | { name = "time", ref_table = G.TIMERS, ref_value = "REAL_SHADER" }, 31 | {name = 'vort_speed', val = G.C.vort_speed}, 32 | {name = 'colour_1', ref_table = G.C, ref_value = 'YAHIPURPLE'}, 33 | {name = 'colour_2', ref_table = G.C, ref_value = 'YAHIORANGE'}, 34 | {name = 'mid_flash', ref_table = G.C, ref_value = 'mid_flash'}, 35 | }, 36 | }, 37 | }) 38 | return ret 39 | end 40 | 41 | 42 | local mod_path = "" .. SMODS.current_mod.path 43 | Yahimod.path = mod_path 44 | Yahimod_config = SMODS.current_mod.config 45 | 46 | SMODS.current_mod.optional_features = { 47 | retrigger_joker = true, 48 | post_trigger = true, 49 | } 50 | 51 | -- effect manager for particles etc 52 | 53 | G.effectmanager = {} 54 | 55 | --get twitch numbers 56 | 57 | G.last_update_time = 0 58 | function recheckTwitch(please) 59 | 60 | if ((os.time() - G.last_update_time) >= 90) or please == "please" then 61 | G.last_update_time = os.time() 62 | local json = require "json" 63 | local succ, https = pcall(require, "SMODS.https") 64 | local url = "https://gql.twitch.tv/gql" 65 | local options = { 66 | method = "POST", 67 | data = '[{"operationName":"VideoMetadata","variables":{"channelLogin":"Yahiamice","videoID":"0"},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"45111672eea2e507f8ba44d101a61862f9c56b11dee09a15634cb75cb9b9084d"}}}]', 68 | headers = { 69 | ["Client-ID"] = "kimne78kx3ncx6brgo4mv6wki5h1ko", 70 | ["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36", 71 | ["Content-Type"] = "application/json" 72 | } 73 | } 74 | 75 | local status, body, headers = https.request(url, options) 76 | if status ~= 200 then 77 | print("Can't connect to Twitch! Are you offline? Is Twitch being blocked by a firewall?") 78 | G.yahiviewers = 0 79 | G.yahifollowers = 111000 80 | else 81 | G.twitchbodyjson = json.decode(body) 82 | G.yahifollowers = G.twitchbodyjson[1].data.user.followers.totalCount 83 | G.yahiviewers = 0 84 | if G.twitchbodyjson[1].data.user.stream then G.yahiviewers = G.twitchbodyjson[1].data.user.stream.viewersCount else print("Failed to parse yahi's viewer count! Maybe he's offline?") end 85 | end 86 | else 87 | --print("Can't update! Wait " .. (90 - (os.time() - G.last_update_time)) .. " more seconds please...") 88 | end 89 | end 90 | 91 | 92 | -- Cat joker pool 93 | SMODS.ObjectType({ 94 | key = "Cat", 95 | default = "j_reserved_parking", 96 | cards = {}, 97 | inject = function(self) 98 | SMODS.ObjectType.inject(self) 99 | -- insert base game food jokers 100 | self:inject_card(G.P_CENTERS.j_lucky_cat) 101 | end, 102 | }) 103 | 104 | -- Yahimod joker pool 105 | SMODS.ObjectType({ 106 | key = "Yahimodaddition", 107 | default = "j_reserved_parking", 108 | cards = {}, 109 | inject = function(self) 110 | SMODS.ObjectType.inject(self) 111 | -- insert base game food jokers 112 | end, 113 | }) 114 | 115 | 116 | 117 | --Yahimod.nuuhstream = love.graphics.newVideoStream( Yahimod.path .. "nuuh.ogv" ) 118 | --Yahimod.nuuh = love.graphics.newVideo( Yahimod.nuuhstream ) 119 | 120 | --Load item files 121 | local files = NFS.getDirectoryItems(mod_path .. "items") 122 | for _, file in ipairs(files) do 123 | print("[YAHIMOD] Loading lua file " .. file) 124 | local f, err = SMODS.load_file("items/" .. file) 125 | if err then 126 | error(err) 127 | end 128 | f() 129 | end 130 | 131 | --Load lib files 132 | local files = NFS.getDirectoryItems(mod_path .. "libs/") 133 | for _, file in ipairs(files) do 134 | print("[YAHIMOD] Loading lib file " .. file) 135 | local f, err = SMODS.load_file("libs/" .. file) 136 | if err then 137 | error(err) 138 | end 139 | f() 140 | end 141 | 142 | --Load Localization file 143 | local files = NFS.getDirectoryItems(mod_path .. "localization") 144 | for _, file in ipairs(files) do 145 | print("[YAHIMOD] Loading localization file " .. file) 146 | local f, err = SMODS.load_file("localization/" .. file) 147 | if err then 148 | error(err) 149 | end 150 | f() 151 | end 152 | 153 | 154 | 155 | 156 | 157 | --Load misc stuff so i only hook things once 158 | --local hook = love.load 159 | --function love.load() 160 | -- hook() 161 | -- local full_path = (Yahimod.path 162 | -- .."assets/" 163 | -- .. G.SETTINGS.GRAPHICS.texture_scaling 164 | -- .. "x/" 165 | -- .. "horse.png") 166 | -- file_data = assert(NFS.newFileData(full_path),("Epic fail")) 167 | -- Yahimod.horsepngimagedata = assert(love.image.newImageData(file_data),("Epic fail 2")) 168 | -- Yahimod.horsepng = assert(love.graphics.newImage(Yahimod.horsepngimagedata),("Epic fail 3")) 169 | -- 170 | --end 171 | 172 | ---------------------------------------------------------- 173 | ----------- MOD CODE END ---------------------------------- 174 | -------------------------------------------------------------------------------- /customimages/assets/mcchat/line1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/assets/mcchat/line1.png -------------------------------------------------------------------------------- /customimages/assets/mcchat/line2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/assets/mcchat/line2.png -------------------------------------------------------------------------------- /customimages/assets/mcchat/line3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/assets/mcchat/line3.png -------------------------------------------------------------------------------- /customimages/cantaloupescreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/cantaloupescreen.png -------------------------------------------------------------------------------- /customimages/catlaughing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/catlaughing.png -------------------------------------------------------------------------------- /customimages/chromedino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/chromedino.png -------------------------------------------------------------------------------- /customimages/chromedino_cactus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/chromedino_cactus.png -------------------------------------------------------------------------------- /customimages/coin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/coin.png -------------------------------------------------------------------------------- /customimages/crack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/crack.png -------------------------------------------------------------------------------- /customimages/crash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/crash.png -------------------------------------------------------------------------------- /customimages/errors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/errors.png -------------------------------------------------------------------------------- /customimages/explosiongif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/explosiongif.png -------------------------------------------------------------------------------- /customimages/fishondafloo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/fishondafloo.png -------------------------------------------------------------------------------- /customimages/horse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/horse.png -------------------------------------------------------------------------------- /customimages/horsepng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/horsepng.png -------------------------------------------------------------------------------- /customimages/inventoryitems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/inventoryitems.png -------------------------------------------------------------------------------- /customimages/moroccaninternet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/moroccaninternet.png -------------------------------------------------------------------------------- /customimages/parry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/parry.png -------------------------------------------------------------------------------- /customimages/shulkerhud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/shulkerhud.png -------------------------------------------------------------------------------- /customimages/tetopear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/tetopear.png -------------------------------------------------------------------------------- /customimages/washeewashee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/washeewashee.png -------------------------------------------------------------------------------- /customimages/youwin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/customimages/youwin.png -------------------------------------------------------------------------------- /items/blinds.lua: -------------------------------------------------------------------------------- 1 | SMODS.Atlas { 2 | key = "yahiblinds", 3 | path = "blindsatlas.png", 4 | px = 34, 5 | py = 34, 6 | frames = 1, 7 | atlas_table = 'ANIMATION_ATLAS' 8 | } 9 | 10 | SMODS.Atlas { 11 | key = "yahiblinds2", 12 | path = "blindsatlas2.png", 13 | px = 34, 14 | py = 34, 15 | frames = 1, 16 | atlas_table = 'ANIMATION_ATLAS' 17 | } 18 | 19 | SMODS.Blind { 20 | name = "boss_jimothy", 21 | key = "boss_jimothy", 22 | atlas = "yahiblinds", 23 | mult = 2, 24 | pos = { y = 1 }, 25 | dollars = 10, 26 | loc_txt = { 27 | name = 'JIMOTHY', 28 | text = { 29 | 'Debuffs all', 30 | 'YAHIMOD cards', 31 | } 32 | }, 33 | boss = { min = 1 }, 34 | boss_colour = HEX('3cc0c8'), 35 | 36 | recalc_debuff = function(self, card) 37 | for i = 1, #G.jokers.cards do 38 | if G.jokers.cards[i].config.center.pools and G.jokers.cards[i].config.center.pools.Yahimodaddition then 39 | G.jokers.cards[i]:set_debuff(true) 40 | end 41 | end 42 | end, 43 | 44 | disable = function(self) 45 | for i = 1, #G.jokers.cards do 46 | G.jokers.cards[i]:set_debuff(false) 47 | end 48 | end, 49 | 50 | defeat = function(self) 51 | for i = 1, #G.jokers.cards do 52 | G.jokers.cards[i]:set_debuff(false) 53 | end 54 | end, 55 | } 56 | 57 | SMODS.Blind { 58 | name = "boss_horse", 59 | key = "boss_horse", 60 | atlas = "yahiblinds", 61 | mult = 2, 62 | pos = { y = 0 }, 63 | dollars = 10, 64 | loc_txt = { 65 | name = 'THE HORSE', 66 | text = { 67 | 'Fuck you', 68 | } 69 | }, 70 | boss = { min = 2 }, 71 | boss_colour = HEX('795223'), 72 | 73 | debuff_hand = function(self) 74 | for i = 1, #G.play.cards do 75 | if G.play.cards[i].seal == nil then 76 | SMODS.juice_up_blind() 77 | G.play.cards[i].seal = "yahimod_horse_seal" 78 | play_sound("yahimod_horse") 79 | delay(0.3) 80 | end 81 | end 82 | end, 83 | 84 | defeat = function(self) 85 | if G.ARGS.chip_flames.real_intensity > 0.000001 then 86 | addHorse() 87 | G.FUNCS.overlay_menu{ 88 | definition = create_UIBox_custom_video1("horsef","Hell Yeah"), 89 | config = {no_esc = true} 90 | } 91 | end 92 | end, 93 | 94 | 95 | } 96 | 97 | SMODS.Blind { 98 | name = "boss_vibe", 99 | key = "boss_vibe", 100 | atlas = "yahiblinds", 101 | pos = { y = 2 }, 102 | dollars = 8, 103 | loc_txt = { 104 | name = 'VIBE', 105 | text = { 106 | 'Sets game speed to x0.25' 107 | } 108 | }, 109 | boss = { min = 2 }, 110 | boss_colour = HEX('bc25ec'), 111 | 112 | defeat = function(self) 113 | G.SETTINGS.GAMESPEED = G.GAME.normalgamespeed 114 | G.GAME.normalgamespeed = nil 115 | end, 116 | 117 | disable = function(self) 118 | G.SETTINGS.GAMESPEED = G.GAME.normalgamespeed 119 | G.GAME.normalgamespeed = nil 120 | end, 121 | } 122 | 123 | SMODS.Blind { 124 | name = "boss_chickenjockey", 125 | key = "boss_chickenjockey", 126 | atlas = "yahiblinds", 127 | pos = { y = 3 }, 128 | dollars = 10, 129 | mult = 1, 130 | loc_txt = { 131 | name = 'CHICKEN JOCKEY', 132 | text = { 133 | 'Smaller Blind Size', 134 | '-2 Hands - 2 Discards', 135 | } 136 | }, 137 | boss = { min = 2 }, 138 | boss_colour = HEX('2fa44a'), 139 | 140 | 141 | 142 | set_blind= function(self) 143 | G.GAME.current_round.hands_left = G.GAME.current_round.hands_left - 2 144 | G.GAME.current_round.discards_left = G.GAME.current_round.discards_left - 2 145 | end, 146 | 147 | disable = function(self) 148 | G.GAME.current_round.hands_left = G.GAME.current_round.hands_left + 2 149 | G.GAME.current_round.discards_left = G.GAME.current_round.discards_left + 2 150 | end, 151 | 152 | } 153 | 154 | SMODS.Blind { 155 | name = "boss_fish", 156 | key = "boss_fish", 157 | atlas = "yahiblinds", 158 | pos = { y = 4 }, 159 | dollars = 6, 160 | mult = 2, 161 | loc_txt = { 162 | name = 'FISH!', 163 | text = { 164 | 'FISH!', 165 | } 166 | }, 167 | boss = { min = 3 }, 168 | boss_colour = HEX('e9f3f2'), 169 | 170 | 171 | debuff_hand = function(self) 172 | G.showfish = 175 173 | play_sound("yahimod_fish") 174 | end, 175 | 176 | set_blind= function(self) 177 | G.showfish = 175 178 | play_sound("yahimod_fish") 179 | end, 180 | 181 | disable = function(self) 182 | G.FUNCS.overlay_menu{ 183 | definition = create_UIBox_custom_video1("nuuh","I understand."), 184 | config = {no_esc = true} 185 | } 186 | end, 187 | 188 | } 189 | 190 | SMODS.Blind { 191 | name = "boss_bastion", 192 | key = "boss_bastion", 193 | atlas = "yahiblinds", 194 | pos = { y = 5 }, 195 | dollars = 8, 196 | mult = 1.5, 197 | loc_txt = { 198 | name = 'BASTION REMNANT', 199 | text = { 200 | "Played cards won't score", 201 | "unless if a gold card", 202 | "is held in hand", 203 | } 204 | }, 205 | boss = { min = 3 }, 206 | boss_colour = HEX('ffd955'), 207 | 208 | 209 | debuff_hand = function(self) 210 | local _hasgold = false 211 | for i = 1, #G.hand.cards do 212 | if SMODS.has_enhancement(G.hand.cards[i], 'm_gold') then 213 | _hasgold = true 214 | end 215 | end 216 | if _hasgold ~= true and not G.GAME.blind.disabled then 217 | SMODS.juice_up_blind() 218 | return true 219 | end 220 | end, 221 | 222 | } 223 | 224 | SMODS.Blind { 225 | name = "boss_speedrun", 226 | key = "boss_speedrun", 227 | atlas = "yahiblinds", 228 | pos = { y = 6 }, 229 | dollars = 8, 230 | mult = 1.5, 231 | loc_txt = { 232 | name = 'THE SPEEDRUN', 233 | text = { 234 | "Beat this blind in", 235 | "60 seconds or it's", 236 | "GAME OVER.", 237 | } 238 | }, 239 | boss = { min = 4 }, 240 | boss_colour = HEX('a7ffa8'), 241 | 242 | 243 | calculate = function(self, card, context) 244 | if G.clockticking <= 0 then forceGameover() end 245 | end, 246 | 247 | set_blind = function(self) 248 | G.clockticking = 60 249 | end, 250 | 251 | debuff_hand = function(self) 252 | local _timesup = false 253 | if G.clockticking <= 0 then 254 | _timesup = true 255 | end 256 | if _timesup == true and not G.GAME.blind.disabled then 257 | return true 258 | end 259 | end, 260 | 261 | } 262 | 263 | SMODS.Blind { 264 | name = "boss_mechahorse", 265 | key = "boss_mechahorse", 266 | atlas = "yahiblinds", 267 | pos = { y = 7 }, 268 | mult = 10, 269 | dollars = 30, 270 | loc_txt = { 271 | name = 'MECHA-HORSE', 272 | text = { 273 | 'EXTREMELY LARGE BLIND SIZE', 274 | '(Fuck you 3000)', 275 | } 276 | }, 277 | boss = { showdown = true }, 278 | boss_colour = HEX('4f4f4f'), 279 | 280 | debuff_hand = function(self) 281 | for i = 1, #G.play.cards do 282 | if G.play.cards[i].seal == nil then 283 | SMODS.juice_up_blind() 284 | G.play.cards[i].seal = "yahimod_horse_seal" 285 | play_sound("yahimod_horse") 286 | delay(0.3) 287 | end 288 | end 289 | end, 290 | 291 | defeat = function(self) 292 | if G.ARGS.chip_flames.real_intensity > 0.000001 then 293 | addHorse() 294 | end 295 | G.FUNCS.overlay_menu{ 296 | definition = create_UIBox_custom_video1("pizzatower","Hell Yeah"), 297 | config = {no_esc = true} 298 | } 299 | end, 300 | } 301 | 302 | SMODS.Blind { 303 | name = "boss_damndaniel", 304 | key = "boss_damndaniel", 305 | atlas = "yahiblinds", 306 | pos = { y = 8 }, 307 | mult = 0.01, 308 | dollars = 1, 309 | loc_txt = { 310 | name = 'DAMN DANIEL', 311 | text = { 312 | 'Damn Daniel!', 313 | 'Back at it again with the white vans!', 314 | } 315 | }, 316 | boss = { min = 1 }, 317 | boss_colour = HEX('456185'), 318 | 319 | } 320 | 321 | SMODS.Blind { 322 | name = "boss_poopwall", 323 | key = "boss_poopwall", 324 | atlas = "yahiblinds", 325 | pos = { y = 9 }, 326 | dollars = 6, 327 | mult = 2, 328 | loc_txt = { 329 | name = 'THE POOP WALL', 330 | text = { 331 | 'Playing your most played hand(s)', 332 | 'crashes the game', 333 | } 334 | }, 335 | boss = { min = 3 }, 336 | boss_colour = HEX('fff38d'), 337 | 338 | 339 | calculate = function(self, card, context) 340 | 341 | if context.cardarea == G.play and context.individual and context.other_card then 342 | 343 | local handname = context.scoring_name 344 | local handplayed = (G.GAME.hands[handname].played or 0) 345 | local mostplayed = 0 346 | 347 | for k, v in pairs(G.GAME.hands) do 348 | if G.GAME.hands[k].played > mostplayed then mostplayed = G.GAME.hands[k].played end 349 | end 350 | 351 | if G.GAME.hands[handname].played >= mostplayed then crashGame() end 352 | end 353 | end, 354 | 355 | } 356 | 357 | function forceGameover() 358 | G.STATE = G.STATES.GAME_OVER 359 | G.STATE_COMPLETE = false 360 | end 361 | 362 | SMODS.Blind { 363 | name = "boss_thepip", 364 | key = "boss_thepip", 365 | atlas = "yahiblinds", 366 | pos = { y = 10 }, 367 | dollars = 7, 368 | mult = 0.3, 369 | loc_txt = { 370 | name = 'THE PIP', 371 | text = { 372 | "Instantly lose", 373 | "if you don't play High Card", 374 | } 375 | }, 376 | boss = { min = 4 }, 377 | boss_colour = HEX('9b477e'), 378 | 379 | 380 | calculate = function(self, card, context) 381 | if context.cardarea == G.play and context.individual and context.other_card then 382 | local handname = context.scoring_name 383 | if handname ~= "High Card" then forceGameover() end 384 | end 385 | end, 386 | 387 | } 388 | 389 | SMODS.Blind { 390 | name = "boss_alcatraz", 391 | key = "boss_alcatraz", 392 | atlas = "yahiblinds", 393 | pos = { y = 11 }, 394 | dollars = 5, 395 | mult = 2, 396 | loc_txt = { 397 | name = 'ALCATRAZ', 398 | text = { 399 | 'Debuffs all', 400 | 'Cat cards', 401 | } 402 | }, 403 | boss = { min = 1 }, 404 | boss_colour = HEX('18977f'), 405 | 406 | recalc_debuff = function(self, card) 407 | for i = 1, #G.jokers.cards do 408 | if not G.GAME.blind.disabled and G.jokers.cards[i].config.center.pools and G.jokers.cards[i].config.center.pools.Cat then 409 | G.jokers.cards[i]:set_debuff(true) 410 | end 411 | end 412 | end, 413 | 414 | disable = function(self) 415 | for i = 1, #G.jokers.cards do 416 | G.jokers.cards[i]:set_debuff(false) 417 | end 418 | end, 419 | 420 | defeat = function(self) 421 | for i = 1, #G.jokers.cards do 422 | G.jokers.cards[i]:set_debuff(false) 423 | end 424 | end, 425 | } 426 | 427 | SMODS.Blind { 428 | name = "boss_e", 429 | key = "boss_e", 430 | atlas = "yahiblinds", 431 | pos = { y = 12 }, 432 | dollars = 6, 433 | mult = 2, 434 | loc_txt = { 435 | name = 'E', 436 | text = { 437 | "Debuffs every Joker whose", 438 | "name doesn't have 'E'" 439 | } 440 | }, 441 | boss = { showdown = true }, 442 | boss_colour = HEX('cc0d00'), 443 | 444 | recalc_debuff = function(self, card) 445 | for i = 1, #G.jokers.cards do 446 | local _card = G.jokers.cards[i] 447 | local _jn = string.lower(getJokerName(_card)) 448 | if string.find(_jn,"e") == nil and getJokerName(_card) ~= "Luchador" and not G.GAME.blind.disabled then 449 | G.jokers.cards[i]:set_debuff(true) 450 | end 451 | end 452 | end, 453 | 454 | disable = function(self) 455 | for i = 1, #G.jokers.cards do 456 | G.jokers.cards[i]:set_debuff(false) 457 | end 458 | end, 459 | 460 | defeat = function(self) 461 | for i = 1, #G.jokers.cards do 462 | G.jokers.cards[i]:set_debuff(false) 463 | end 464 | end, 465 | } 466 | 467 | SMODS.Blind { 468 | name = "boss_sans", 469 | key = "boss_sans", 470 | atlas = "yahiblinds2", 471 | pos = { y = 0 }, 472 | dollars = 5, 473 | mult = 2, 474 | boss = { min = 3 }, 475 | loc_txt = { 476 | name = 'sans.', 477 | text = { 478 | "The easiest blind.", 479 | } 480 | }, 481 | boss_colour = HEX('000000'), 482 | 483 | } 484 | 485 | SMODS.Sound({key = "slotmachine_ding", path = "slotmachine_ding.ogg",}) 486 | 487 | 488 | -- fragile check 489 | userHasClickedBoss = function(x,y) 490 | if G.GAME.blind and not G.GAME.blind.disabled and G.GAME.blind.name == 'boss_fragile' and G.CONTROLLER.hovering.target and G.CONTROLLER.hovering.target.config.center ~= nil then 491 | if G.CONTROLLER.hovering.target.config.center.set == "Joker" then 492 | explodeCard(G.CONTROLLER.hovering.target) 493 | end 494 | end 495 | if G.GAME.blind and not G.GAME.blind.disabled and G.GAME.blind.name == 'boss_gambling' and G.CONTROLLER.hovering.target then 496 | play_sound("yahimod_slotmachine_ding") 497 | end 498 | end 499 | 500 | SMODS.Blind { 501 | name = "boss_fragile", 502 | key = "boss_fragile", 503 | atlas = "yahiblinds2", 504 | pos = { y = 1 }, 505 | dollars = 5, 506 | mult = 2, 507 | boss = { min = 2 }, 508 | loc_txt = { 509 | name = 'FRAGILE', 510 | text = { 511 | "Clicking on a joker destroys it", 512 | } 513 | }, 514 | boss_colour = HEX('fae5c8'), 515 | 516 | } 517 | 518 | SMODS.Sound({key = "slotmachine", path = "slotmachine.ogg",}) 519 | SMODS.Sound({key = "jackpot", path = "jackpot.ogg",}) 520 | 521 | SMODS.Sound({ 522 | key = "music_slotmachine", 523 | path = "music_slotmachine.ogg", 524 | pitch = 1, 525 | volume = 0.6, 526 | select_music_track = function() 527 | if G.GAME.blind and not G.GAME.blind.disabled and G.GAME.blind.name == 'boss_gambling' then 528 | return true end 529 | end, 530 | }) 531 | 532 | 533 | SMODS.Blind { 534 | name = "boss_gambling", 535 | key = "boss_gambling", 536 | atlas = "yahiblinds2", 537 | pos = { y = 2 }, 538 | dollars = 15, 539 | mult = 2, 540 | boss = { min = 1 }, 541 | loc_txt = { 542 | name = "LET'S GO GAMBLING!", 543 | text = { 544 | "HIT THE SLOTS UP BIG BOY", 545 | } 546 | }, 547 | boss_colour = HEX('fae5c8'), 548 | 549 | press_play = function(self) 550 | play_sound("yahimod_slotmachine") 551 | end, 552 | 553 | defeat = function(self) 554 | play_sound("yahimod_jackpot") 555 | end, 556 | 557 | disable = function(self) 558 | for i = 1, #G.hand.cards do 559 | G.hand.cards[i].ability.forced_selection = false 560 | G.hand:remove_from_highlighted(G.hand.cards[i]) 561 | end 562 | end, 563 | 564 | } 565 | 566 | -- Chrome dino 567 | SMODS.Blind { 568 | name = "boss_dino", 569 | key = "boss_dino", 570 | atlas = "yahiblinds2", 571 | pos = { y = 3 }, 572 | dollars = 7, 573 | mult = 2, 574 | boss = { min = 1 }, 575 | loc_txt = { 576 | name = "CHROME DINO", 577 | text = { 578 | "Play a minigame", 579 | } 580 | }, 581 | 582 | boss_colour = HEX('ffffff'), 583 | 584 | recalc_debuff = function(self) 585 | dinoLoad() 586 | end, 587 | 588 | defeat = function(self) 589 | endDino() 590 | end, 591 | 592 | disable = function(self) 593 | endDino() 594 | end, 595 | 596 | } 597 | 598 | SMODS.Blind { 599 | name = "boss_chudjak", 600 | key = "boss_chudjak", 601 | atlas = "yahiblinds2", 602 | pos = { y = 4 }, 603 | dollars = 5, 604 | mult = 2, 605 | boss = { min = 5 }, 606 | loc_txt = { 607 | name = "CHUDJAK", 608 | text = { 609 | "Can only draw unmodified cards", 610 | } 611 | }, 612 | boss_colour = HEX('ffffff'), 613 | 614 | drawn_to_hand = function(self) 615 | for i = 1, #G.hand.cards do 616 | local _discardthisone = false 617 | if G.hand.cards[i].seal ~= nil then _discardthisone = true end 618 | if G.hand.cards[i].edition ~= nil then _discardthisone = true end 619 | if G.hand.cards[i].ability.set ~= "Default" then _discardthisone = true end 620 | if _discardthisone == true then 621 | local _selected_card = G.hand.cards[i] 622 | G.hand:add_to_highlighted(_selected_card, true) 623 | G.FUNCS.discard_cards_from_highlighted(nil, true) 624 | end 625 | end 626 | end, 627 | 628 | } -------------------------------------------------------------------------------- /items/boosters.lua: -------------------------------------------------------------------------------- 1 | -- Booster Atlas 2 | SMODS.Atlas{ 3 | key = 'boosteratlas', 4 | path = 'boosteratlas.png', 5 | px = 71, 6 | py = 96, 7 | } 8 | 9 | SMODS.Sound({ 10 | key = "music_buysomethin", 11 | path = "music_buysomethin.ogg", 12 | pitch = 1, 13 | volume = 0.6, 14 | select_music_track = function() 15 | if G.STATE == G.STATES.SMODS_BOOSTER_OPENED then 16 | if G.pack_cards 17 | and G.pack_cards.cards 18 | and G.pack_cards.cards[1] 19 | and G.pack_cards.cards[1].config 20 | and G.pack_cards.cards[1].config.center 21 | and G.pack_cards.cards[1].config.center.mod 22 | and G.pack_cards.cards[1].config.center.mod.id 23 | and G.pack_cards.cards[1].config.center.mod.id == "Yahimod" then 24 | return true 25 | end 26 | end 27 | end, 28 | }) 29 | 30 | -- Booster Pack 1 31 | SMODS.Booster{ 32 | key = 'booster_yahiworld', 33 | group_key = "k_yahimod_booster_group", 34 | atlas = 'boosteratlas', 35 | pos = { x = 0, y = 0 }, 36 | discovered = true, 37 | loc_txt= { 38 | name = 'YAHIMOD BOOSTER PACK', 39 | text = { "Pick {C:attention}#1#{} card out", 40 | "{C:attention}#2#{} YAHIMOD jokers!", }, 41 | group_name = {"Pick somethin', will ya?"}, 42 | }, 43 | 44 | draw_hand = false, 45 | config = { 46 | extra = 3, 47 | choose = 1, 48 | }, 49 | 50 | loc_vars = function(self, info_queue, card) 51 | return { vars = { card.ability.choose, card.ability.extra } } 52 | end, 53 | 54 | weight = 1, 55 | cost = 5, 56 | kind = "YahiworldPack", 57 | 58 | create_card = function(self, card, i) 59 | ease_background_colour(HEX("ffac00")) 60 | return SMODS.create_card({ 61 | set = "Yahimodaddition", 62 | area = G.pack_cards, 63 | skip_materialize = true, 64 | soulable = true, 65 | }) 66 | end, 67 | select_card = 'jokers', 68 | 69 | in_pool = function() return true end 70 | } 71 | 72 | -- Booster Pack 2 73 | SMODS.Booster{ 74 | key = 'booster_yahiworld2', 75 | group_key = "k_yahimod_booster_group", 76 | atlas = 'boosteratlas', 77 | pos = { x = 1, y = 0 }, 78 | discovered = true, 79 | loc_txt= { 80 | name = 'YAHIMOD BOOSTER PACK', 81 | text = { "Pick {C:attention}#1#{} card out", 82 | "{C:attention}#2#{} YAHIMOD jokers!", }, 83 | group_name = {"Pick somethin', will ya?"}, 84 | }, 85 | 86 | draw_hand = false, 87 | config = { 88 | extra = 3, 89 | choose = 1, 90 | }, 91 | loc_vars = function(self, info_queue, card) 92 | return { vars = { card.ability.choose, card.ability.extra } } 93 | end, 94 | weight = 1, 95 | cost = 5, 96 | kind = "YahiworldPack", 97 | 98 | create_card = function(self, card, i) 99 | ease_background_colour(HEX("ffac00")) 100 | return SMODS.create_card({ 101 | set = "Yahimodaddition", 102 | area = G.pack_cards, 103 | skip_materialize = true, 104 | soulable = true, 105 | }) 106 | end, 107 | select_card = 'jokers', 108 | 109 | in_pool = function() return true end 110 | } 111 | 112 | -- Booster Pack 3 113 | SMODS.Booster{ 114 | key = 'booster_yahiworld3', 115 | group_key = "k_yahimod_booster_group", 116 | atlas = 'boosteratlas', 117 | pos = { x = 0, y = 1 }, 118 | discovered = true, 119 | loc_txt= { 120 | name = 'WOULD YOU RATHER?', 121 | text = { "Pick {C:attention}#1#{} card out", 122 | "{C:attention}#2#{} YAHIMOD jokers!", }, 123 | group_name = {"Pick somethin', will ya?"}, 124 | }, 125 | 126 | draw_hand = false, 127 | config = { 128 | extra = 2, 129 | choose = 1, 130 | }, 131 | loc_vars = function(self, info_queue, card) 132 | return { vars = { card.ability.choose, card.ability.extra } } 133 | end, 134 | weight = 1, 135 | cost = 3, 136 | kind = "YahiworldPack", 137 | 138 | create_card = function(self, card, i) 139 | ease_background_colour(HEX("ffac00")) 140 | return SMODS.create_card({ 141 | set = "Yahimodaddition", 142 | area = G.pack_cards, 143 | skip_materialize = true, 144 | soulable = true, 145 | }) 146 | end, 147 | select_card = 'jokers', 148 | 149 | in_pool = function() return true end 150 | } 151 | 152 | -- Booster Pack 4 153 | SMODS.Booster{ 154 | key = 'booster_yahiworld4', 155 | group_key = "k_yahimod_booster_group", 156 | atlas = 'boosteratlas', 157 | pos = { x = 1, y = 1 }, 158 | discovered = true, 159 | loc_txt= { 160 | name = 'JUMBO YAHIMOD PACK', 161 | text = { "Pick {C:attention}#1#{} card out", 162 | "{C:attention}#2#{} YAHIMOD jokers!", }, 163 | group_name = {"Pick somethin', will ya?"}, 164 | }, 165 | 166 | draw_hand = false, 167 | config = { 168 | extra = 7, 169 | choose = 1, 170 | }, 171 | loc_vars = function(self, info_queue, card) 172 | return { vars = { card.ability.choose, card.ability.extra } } 173 | end, 174 | weight = 0.66, 175 | cost = 7, 176 | kind = "YahiworldPack", 177 | 178 | create_card = function(self, card, i) 179 | ease_background_colour(HEX("ffac00")) 180 | return SMODS.create_card({ 181 | set = "Yahimodaddition", 182 | area = G.pack_cards, 183 | skip_materialize = true, 184 | soulable = true, 185 | }) 186 | end, 187 | select_card = 'jokers', 188 | 189 | in_pool = function() return true end 190 | } -------------------------------------------------------------------------------- /items/chromedino.lua: -------------------------------------------------------------------------------- 1 | 2 | 3 | SMODS.Sound({key = "dino_jump", path = "dino_jump.ogg",}) 4 | SMODS.Sound({key = "dino_death", path = "dino_death.ogg",}) 5 | 6 | dinoLoad = function() 7 | if not G.dino then 8 | Yahimod.img_dino = loadThatFuckingImage("chromedino.png") 9 | Yahimod.spr_dino = loadThatFuckingImageSpritesheet("chromedino.png",98,100,6,1) 10 | 11 | 12 | 13 | 14 | 15 | local _xscale = love.graphics.getWidth()/1920 16 | local _yscale = love.graphics.getHeight()/1080 17 | 18 | G.dino = {} 19 | 20 | G.dino.cacw = 42*2 21 | G.dino.cach = 76*2 22 | 23 | G.dino.cachbox_x = 10 24 | G.dino.cachbox_y = 25 25 | G.dino.cachbox_w = 66 26 | G.dino.cachbox_h = 124 27 | 28 | Yahimod.img_cactus = loadThatFuckingImage("chromedino_cactus.png") 29 | Yahimod.spr_cactus = loadThatFuckingImageSpritesheet("chromedino_cactus.png",G.dino.cacw,G.dino.cach,5,1) 30 | 31 | G.dino.cacw = G.dino.cacw*_xscale 32 | G.dino.cach = G.dino.cach*_yscale 33 | 34 | G.dino.x = 523*_xscale 35 | G.dino.y = 291*_yscale 36 | 37 | G.dino.w = 98*_xscale 38 | G.dino.h = 100*_yscale 39 | 40 | G.dino.yvel = 0 41 | G.dino.obstacles = {} 42 | 43 | G.dino.gamefloory = 400*_xscale 44 | G.dino.gameceily = 0*_yscale 45 | 46 | G.dino.firsttick = Yahimod.ticks 47 | end 48 | end 49 | 50 | dinoTick = function() 51 | if G.dino and not G.SETTINGS.paused then 52 | local _yscale = love.graphics.getHeight()/1080 53 | 54 | if math.fmod(Yahimod.ticks,220) == 0 then 55 | dinoSpawnObstacle() 56 | end 57 | 58 | if G.dino.y < G.dino.gameceily then G.dino.y = G.dino.gameceily end 59 | if G.dino.y > G.dino.gamefloory then 60 | G.dino.y = G.dino.gamefloory 61 | G.dino.yvel = 0 end 62 | if G.dino.y < G.dino.gamefloory then G.dino.yvel = G.dino.yvel + (0.25 * _yscale) end 63 | 64 | G.dino.y = G.dino.y + G.dino.yvel 65 | 66 | for i = 1, #G.dino.obstacles do 67 | if G.dino and G.dino.obstacles[i] then 68 | local _ob = G.dino.obstacles[i] 69 | _ob.obsx = _ob.obsx + _ob.obsxvel 70 | if _ob.obsx < 0 then table.remove(G.dino.obstacles,i) end 71 | if CheckCollision(G.dino.x, G.dino.y, G.dino.w, G.dino.h, _ob.obsx+G.dino.cachbox_x, _ob.obsy+G.dino.cachbox_y, G.dino.cachbox_w, G.dino.cachbox_h) then 72 | 73 | playEffect("explosion",G.dino.x,G.dino.y) 74 | print("Game Over!") 75 | endDino() 76 | 77 | G.E_MANAGER:add_event(Event({ 78 | trigger = 'after', 79 | blocking = false, 80 | delay = 2, 81 | func = function() 82 | play_sound("yahimod_dino_death") 83 | forceGameover() 84 | return true 85 | end, 86 | })) 87 | end 88 | end 89 | end 90 | end 91 | end 92 | 93 | dinoSpawnObstacle = function() 94 | if G.dino and #G.dino.obstacles < 4 then 95 | local _intensity = math.floor((Yahimod.ticks - G.dino.firsttick)/2000 ) 96 | local _xscale = love.graphics.getWidth()/1920 97 | local _yscale = love.graphics.getHeight()/1080 98 | 99 | local _obs = { 100 | obsx = love.graphics.getWidth() + 200, 101 | obsy = G.dino.gamefloory - G.dino.cach*0.5+(28*_yscale), 102 | obsframe = math.random(1,5), 103 | 104 | obsxvel = -5 + _intensity*-1 * _xscale , 105 | } 106 | table.insert(G.dino.obstacles,_obs) 107 | end 108 | end 109 | 110 | dinoDraw = function() 111 | 112 | local _xscale = love.graphics.getWidth()/1920 113 | local _yscale = love.graphics.getHeight()/1080 114 | 115 | if G.dino and not G.SETTINGS.paused then 116 | love.graphics.setColor(1, 1, 1, 1) 117 | local _frame = 1+ math.floor(math.fmod(Yahimod.ticks/25,4)) 118 | love.graphics.draw(Yahimod.img_dino, Yahimod.spr_dino[_frame], G.dino.x, G.dino.y,0,_xscale,_yscale,0,0) 119 | 120 | for i = 1, #G.dino.obstacles do 121 | local _ob = G.dino.obstacles[i] 122 | if _ob then love.graphics.draw(Yahimod.img_cactus, Yahimod.spr_cactus[_ob.obsframe], _ob.obsx, _ob.obsy,0,_xscale,_yscale,0,0) end 123 | end 124 | end 125 | end 126 | 127 | dinoJump = function() 128 | local _yscale = love.graphics.getHeight()/1080 129 | if G.dino and G.dino.y == G.dino.gamefloory then 130 | G.dino.yvel = -11 * _yscale 131 | play_sound("yahimod_dino_jump") 132 | end 133 | end 134 | 135 | endDino = function() 136 | G.dino = nil 137 | end -------------------------------------------------------------------------------- /items/decks.lua: -------------------------------------------------------------------------------- 1 | SMODS.Atlas{ 2 | key = 'Decks', 3 | path = 'rsgdeck.png', 4 | px = 71, 5 | py = 95, 6 | } 7 | 8 | SMODS.Back({ 9 | key = "rsg_deck", 10 | loc_txt = { 11 | name = "Resetting For A Beach Seed", 12 | text={ 13 | "{C:green}1 in 6{} chance", 14 | "to start with an", 15 | "{C:attention}Open To Lan{}", 16 | }, 17 | }, 18 | 19 | config = { hands = 0, discards = 0, consumeables = 'c_opentolan'}, 20 | pos = { x = 0, y = 0 }, 21 | order = 1, 22 | atlas = "Decks", 23 | unlocked = true, 24 | 25 | apply = function(self) 26 | G.E_MANAGER:add_event(Event({ 27 | func = function() 28 | if G.consumeables then 29 | if math.random(1,6) == 1 then 30 | local card = create_card("Spectral", G.consumeables, nil, nil, nil, nil, "c_yahimod_opentolan", "yahimod_deck") 31 | card:add_to_deck() 32 | --card:start_materialize() 33 | G.consumeables:emplace(card) 34 | else 35 | local card = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_yahimod_tree", "yahimod_deck") 36 | card:add_to_deck() 37 | --card:start_materialize() 38 | G.jokers:emplace(card) 39 | end 40 | return true 41 | end 42 | end, 43 | })) 44 | end, 45 | 46 | check_for_unlock = function(self, args) 47 | if args.type == "win_deck" then 48 | unlock_card(self) 49 | else 50 | unlock_card(self) 51 | end 52 | end, 53 | }) 54 | 55 | SMODS.Back({ 56 | key = "whatsapp_deck", 57 | loc_txt = { 58 | name = "Google Play", 59 | text={ 60 | "Start with a", 61 | "{C:green}Dr. Whatsapp{} and 2", 62 | "{C:attention}Hispanic Family Gatherings", 63 | }, 64 | }, 65 | 66 | config = { hands = 0, discards = 0, consumeables = 'c_opentolan'}, 67 | pos = { x = 1, y = 0 }, 68 | order = 1, 69 | atlas = "Decks", 70 | unlocked = true, 71 | 72 | apply = function(self) 73 | G.E_MANAGER:add_event(Event({ 74 | func = function() 75 | if G.consumeables then 76 | local card = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_yahimod_drwhatsapp", "yahimod_deck") 77 | card:add_to_deck() 78 | --card:start_materialize() 79 | G.jokers:emplace(card) 80 | 81 | for i = 1, 2 do 82 | local card = create_card("Tarot", G.consumeables, nil, nil, nil, nil, "c_yahimod_hispanicgathering", "yahimod_deck") 83 | card:add_to_deck() 84 | --card:start_materialize() 85 | G.consumeables:emplace(card) 86 | end 87 | 88 | return true 89 | end 90 | end, 91 | })) 92 | end, 93 | 94 | check_for_unlock = function(self, args) 95 | if args.type == "win_deck" then 96 | unlock_card(self) 97 | else 98 | unlock_card(self) 99 | end 100 | end, 101 | }) 102 | 103 | SMODS.Back({ 104 | key = "mound_deck", 105 | loc_txt = { 106 | name = "The Mound", 107 | text={ 108 | "{C:dark_edition}+2 Joker Slots", 109 | "{C:blue}-2 Hands", 110 | }, 111 | }, 112 | 113 | config = { hands = -2, joker_slot = 2, consumeables = 'c_opentolan'}, 114 | pos = { x = 2, y = 0 }, 115 | order = 1, 116 | atlas = "Decks", 117 | unlocked = true, 118 | 119 | check_for_unlock = function(self, args) 120 | if args.type == "win_deck" then 121 | unlock_card(self) 122 | else 123 | unlock_card(self) 124 | end 125 | end, 126 | }) 127 | 128 | SMODS.Back({ 129 | key = "e_deck", 130 | loc_txt = { 131 | name = "Avoid Fifth Glyphs", 132 | text={ 133 | "Clown Cards that contain a", 134 | "{C:red}fifth glyph{} can't play", 135 | "All Clown Cards proc again", 136 | }, 137 | }, 138 | 139 | config = { }, 140 | pos = { x = 3, y = 0 }, 141 | order = 1, 142 | atlas = "Decks", 143 | unlocked = true, 144 | 145 | apply = function(self) 146 | G.GAME.shop.joker_max = 3 147 | end, 148 | 149 | 150 | calculate = function(self, back, context) 151 | for i = 1, #G.jokers.cards do 152 | local _jn = string.lower(getJokerName(G.jokers.cards[i])) 153 | if string.find(_jn,"e") and G.jokers.cards[i].debuff == false then G.jokers.cards[i].debuff = true end 154 | end 155 | if context.retrigger_joker_check and not context.retrigger_joker then 156 | local _card = context.other_card 157 | local _jn = string.lower(getJokerName(context.other_card)) 158 | if string.find(_jn,"e") == nil then 159 | return { 160 | message = "Again!", 161 | repetitions = 1, 162 | _card = _card, 163 | } 164 | else 165 | return nil, true 166 | end 167 | end 168 | end, 169 | 170 | check_for_unlock = function(self, args) 171 | if args.type == "win_deck" then 172 | unlock_card(self) 173 | else 174 | unlock_card(self) 175 | end 176 | end, 177 | }) -------------------------------------------------------------------------------- /items/editions.lua: -------------------------------------------------------------------------------- 1 | SMODS.Sound({key = "vampire", path = "vampire.ogg",}) 2 | 3 | SMODS.Shader({ key = 'evil', path = 'evil.fs' }) 4 | SMODS.Shader({ key = 'anaglyphic', path = 'anaglyphic.fs' }) 5 | 6 | SMODS.Edition{ 7 | key = "evil", 8 | order = 2, 9 | loc_txt = { 10 | name = "Evil", 11 | label = "Evil", 12 | text = { 13 | "{X:chips,C:white}x1.5{} {C:blue}Chips", 14 | } 15 | }, 16 | weight = 13, --evil 17 | shader = "evil", 18 | in_shop = true, 19 | extra_cost = 3, 20 | config = { x_chips = 1.5, trigger = nil }, 21 | sound = { 22 | sound = "yahimod_vampire", 23 | per = 1, 24 | vol = 0.3, 25 | }, 26 | 27 | get_weight = function(self) 28 | return G.GAME.edition_rate * self.weight 29 | end, 30 | loc_vars = function(self, info_queue) 31 | return { vars = { self.config.x_chips } } 32 | end, 33 | calculate = function(self, card, context) 34 | if 35 | ( 36 | context.edition -- for when on jonklers 37 | and context.cardarea == G.jokers -- checks if should trigger 38 | and card.config.trigger -- fixes double trigger 39 | ) or ( 40 | context.main_scoring -- for when on playing cards 41 | and context.cardarea == G.play 42 | ) 43 | then 44 | return { x_chips = self.config.x_chips } -- updated value 45 | end 46 | if context.joker_main then 47 | card.config.trigger = true -- context.edition triggers twice, this makes it only trigger once (only for jonklers) 48 | end 49 | 50 | if context.after then 51 | card.config.trigger = nil 52 | end 53 | end, 54 | } 55 | 56 | -- shamelessly copied from cryptid. i have no idea what i'm doing 57 | 58 | local miscitems = { 59 | evil_shader, 60 | evil, 61 | } 62 | 63 | return { 64 | name = "Misc.", 65 | items = miscitems, 66 | } -------------------------------------------------------------------------------- /items/funnyfunctions.lua: -------------------------------------------------------------------------------- 1 | -- these are funny functions for debug & bit purposes and probably aren't actually used in the main core of the mod. you can probably call these through DebugPlus if you feel Quirky 2 | 3 | 4 | function everythingRedSteelKing() 5 | for _, card in ipairs(G.playing_cards) do 6 | card.base.value = "King" 7 | card.base.face_nominal = 0.4 8 | card.base.suit_nominal_original = 0.04 9 | card.nominal = 10 10 | card:set_seal('Red') 11 | card.config.card.value = "King" 12 | card:set_ability("m_steel") 13 | end 14 | end 15 | 16 | -- this one isn't funny, it's a tool! wow!!! you've been tricked into learning about bounding boxes!! 17 | function BoundingBox(x1, y1, x2, y2, tx, ty) 18 | return (x2 >= tx and y2 >= ty) 19 | and (x1 <= tx and y1 <= ty) 20 | or (x1 >= tx and y2 >= ty) 21 | and (x2 <= tx and y1 <= ty) 22 | end 23 | 24 | function CheckCollision(x1,y1,w1,h1, x2,y2,w2,h2) 25 | return x1 < x2+w2 and 26 | x2 < x1+w1 and 27 | y1 < y2+h2 and 28 | y2 < y1+h1 29 | end 30 | 31 | -- neither is this one 32 | 33 | function instantly_update_hand_text(witheffects) 34 | --G.hand_text_area.chips = hand_chips 35 | G.hand_text_area.chips:update(0) 36 | --G.hand_text_area.mult = mult 37 | G.hand_text_area.mult:update(0) 38 | local hand_UI = G.HUD:get_UIE_by_ID('hand_UI_count') 39 | hand_UI.config.object:update() 40 | G.HUD:recalculate() 41 | if witheffects == true then 42 | G.hand_text_area.chips:juice_up() 43 | G.hand_text_area.mult:juice_up() 44 | end 45 | end 46 | 47 | -- shake yo booty? 48 | function shakeEverything(factor) 49 | G.ROOM.jiggle = G.ROOM.jiggle + factor 50 | end 51 | 52 | -- Used in homophobic cat 53 | function isEven(number) 54 | local _even = true 55 | if number/2 == math.floor(number/2) then _even = false end 56 | return _even 57 | end -------------------------------------------------------------------------------- /items/https.lua: -------------------------------------------------------------------------------- 1 | -- Shamelessly stolen off Cryptid mod! Thank u devs i wouldn'tve figured out https requests in a lifetime 2 | 3 | https = require "SMODS.https" 4 | local member_fallback = 3 5 | local succ, https = pcall(require, "SMODS.https") 6 | local last_update_time = 0 7 | local initial = true 8 | local clientid = "gp762nuuoqcoxypju8c569th9wz7q5" 9 | 10 | Yahimod.viewercount = member_fallback 11 | if not succ then 12 | print("HTTP module could not be loaded. " .. tostring(https)) 13 | end 14 | 15 | local function apply_discord_member_count(code, body, headers) 16 | if body then 17 | Yahimod.viewercount = string.match(body, '"approximate_member_count"%s*:%s*(%d+)') or Yahimod.viewercount 18 | end 19 | end 20 | 21 | 22 | -------------------------------------------------------------------------------- /items/seals.lua: -------------------------------------------------------------------------------- 1 | 2 | SMODS.Sound({key = "whatsapp", path = "whatsapp.ogg",}) 3 | 4 | SMODS.Atlas { 5 | key = "whatsapp_seal", 6 | path = "whatsappseal.png", 7 | px = 71, 8 | py = 96 9 | } 10 | 11 | SMODS.Seal { 12 | name = "whatsapp_seal", 13 | key = "whatsapp_seal", 14 | badge_colour = HEX("00FF00"), 15 | config = { mult = 1, chips = 10, money = 1, x_mult = 1.1 }, 16 | loc_txt = { 17 | -- Badge name (displayed on card description when seal is applied) 18 | label = 'Whatsapp Seal', 19 | -- Tooltip description 20 | name = 'Whatsapp Seal', 21 | text = { 22 | '{C:mult}+#1#{} Mult', 23 | '{C:chips}+#2#{} Chips', 24 | '{C:money}+$#3#{}', 25 | '{X:mult,C:white}X#4#{} Mult', 26 | } 27 | }, 28 | 29 | 30 | sound = { sound = 'yahimod_whatsapp', per = 1, vol = 0.4 }, 31 | 32 | loc_vars = function(self, info_queue) 33 | return { vars = {self.config.mult, self.config.chips, self.config.money, self.config.x_mult, } } 34 | end, 35 | atlas = "whatsapp_seal", 36 | pos = {x=0, y=0}, 37 | 38 | -- self - this seal prototype 39 | -- card - card this seal is applied to 40 | calculate = function(self, card, context) 41 | -- main_scoring context is used whenever the card is scored 42 | 43 | if context.main_scoring and context.cardarea == G.play then 44 | return { 45 | G.E_MANAGER:add_event(Event({func = function() 46 | play_sound('yahimod_whatsapp') 47 | return true end })), 48 | 49 | message = "(1) New Message", 50 | mult = self.config.mult, 51 | chips = self.config.chips, 52 | dollars = self.config.money, 53 | x_mult = self.config.x_mult 54 | } 55 | end 56 | end, 57 | } 58 | 59 | SMODS.Atlas { 60 | key = "horse_seal", 61 | path = "horseseal.png", 62 | px = 71, 63 | py = 96 64 | } 65 | 66 | SMODS.Seal { 67 | name = "horse_seal", 68 | key = "horse_seal", 69 | badge_colour = HEX("795223"), 70 | config = { mult = -1, chips = -5, money = -1, x_mult = 0.9 }, 71 | loc_txt = { 72 | -- Badge name (displayed on card description when seal is applied) 73 | label = 'Horse Seal', 74 | -- Tooltip description 75 | name = 'Horse Seal', 76 | text = { 77 | '{C:mult}#1#{} Mult', 78 | '{C:chips}#2#{} Chips', 79 | '{C:money}$#3#{}', 80 | '{X:mult,C:white}X#4#{} Mult', 81 | } 82 | }, 83 | 84 | 85 | sound = { sound = 'yahimod_horse', per = 1.6, vol = 0.4 }, 86 | 87 | loc_vars = function(self, info_queue) 88 | return { vars = {self.config.mult, self.config.chips, self.config.money, self.config.x_mult, } } 89 | end, 90 | atlas = "horse_seal", 91 | pos = {x=0, y=0}, 92 | 93 | -- self - this seal prototype 94 | -- card - card this seal is applied to 95 | calculate = function(self, card, context) 96 | -- main_scoring context is used whenever the card is scored 97 | 98 | if context.main_scoring and context.cardarea == G.play then 99 | return { 100 | G.E_MANAGER:add_event(Event({func = function() 101 | play_sound('yahimod_horse') 102 | 103 | return true end })), 104 | 105 | message = "Neigh.", 106 | mult = self.config.mult, 107 | chips = self.config.chips, 108 | dollars = self.config.money, 109 | x_mult = self.config.x_mult 110 | } 111 | end 112 | end, 113 | } 114 | 115 | SMODS.Atlas { 116 | key = "bfdi_seal", 117 | path = "bfdiseal.png", 118 | px = 71, 119 | py = 96 120 | } 121 | 122 | SMODS.Seal { 123 | name = "bfdi_seal", 124 | key = "bfdi_seal", 125 | badge_colour = HEX("1fb0ab"), 126 | config = { }, 127 | loc_txt = { 128 | -- Badge name (displayed on card description when seal is applied) 129 | label = 'BFDI Mouth', 130 | -- Tooltip description 131 | name = 'BFDI Mouth', 132 | text = { 133 | 'Does nothing' 134 | } 135 | }, 136 | 137 | loc_vars = function(self, info_queue) 138 | return { vars = {self.config.mult, self.config.chips, self.config.money, self.config.x_mult, } } 139 | end, 140 | atlas = "bfdi_seal", 141 | pos = {x=0, y=0}, 142 | 143 | } 144 | 145 | SMODS.Atlas { 146 | key = "ifunny_seal", 147 | path = "ifunnyseal.png", 148 | px = 71, 149 | py = 96 150 | } 151 | 152 | SMODS.Seal { 153 | name = "ifunny_seal", 154 | key = "ifunny_seal", 155 | badge_colour = HEX("202020"), 156 | config = { }, 157 | loc_txt = { 158 | -- Badge name (displayed on card description when seal is applied) 159 | label = 'iFunny watermark', 160 | -- Tooltip description 161 | name = 'iFunny watermark', 162 | text = { 163 | 'Retriggers once', 164 | '{C:green}#1# in 3{} chance to', 165 | 'crop watermark out', 166 | } 167 | }, 168 | 169 | loc_vars = function(self, info_queue) 170 | return { vars = {G.GAME.probabilities.normal, self.config.mult, self.config.chips, self.config.money, self.config.x_mult, } } 171 | end, 172 | atlas = "ifunny_seal", 173 | pos = {x=0, y=0}, 174 | 175 | calculate = function(self, card, context) 176 | 177 | if context.cardarea == G.play and context.repetition then 178 | return { 179 | 180 | repetitions = 1, 181 | G.E_MANAGER:add_event(Event({func = function() 182 | if pseudorandom('ifunny') < (G.GAME.probabilities.normal / 3) then 183 | card.seal = nil 184 | card_eval_status_text(card,'extra',nil,nil,nil,{message = "Cropped!"}) 185 | play_sound("cardFan2") 186 | end 187 | return true end })), 188 | 189 | } 190 | end 191 | end, 192 | 193 | } 194 | 195 | SMODS.Atlas { 196 | key = "swapper_seal", 197 | path = "swapperseal.png", 198 | px = 71, 199 | py = 96 200 | } 201 | 202 | SMODS.Seal { 203 | name = "swapper_seal", 204 | key = "swapper_seal", 205 | badge_colour = HEX("a544ff"), 206 | config = { }, 207 | loc_txt = { 208 | -- Badge name (displayed on card description when seal is applied) 209 | label = 'Swapper Seal', 210 | -- Tooltip description 211 | name = 'Swapper Seal', 212 | text = { 213 | 'When this card is scored,', 214 | 'Swaps {C:blue}chips{} and {C:red}mult{}', 215 | } 216 | }, 217 | 218 | atlas = "swapper_seal", 219 | pos = {x=0, y=0}, 220 | 221 | calculate = function(self, card, context) 222 | 223 | if context.main_scoring and context.cardarea == G.play then 224 | 225 | local old_mult = mult 226 | local old_chips = hand_chips 227 | mult = mod_mult(hand_chips) 228 | hand_chips = mod_chips(old_mult) 229 | 230 | return { 231 | message = "Swapped!" 232 | } 233 | end 234 | end, 235 | 236 | } 237 | 238 | ---------------------------------------------- 239 | ------------MOD CODE END---------------------- 240 | -------------------------------------------------------------------------------- /items/skiptags.lua: -------------------------------------------------------------------------------- 1 | -- Tag Atlas 2 | SMODS.Atlas{ 3 | key = 'tagatlas', 4 | path = 'tagatlas.png', 5 | px = 32, 6 | py = 32, 7 | } 8 | 9 | SMODS.Tag{ 10 | key = 'tag_yahimodrare', 11 | loc_txt= { 12 | name = 'RARE YAHIMOD Tag', 13 | text = { "Immediately grants you a", 14 | "{C:attention}YAHIMOD Joker{}", }}, 15 | atlas = 'tagatlas', 16 | pos = { x = 0, y = 0 }, 17 | min_ante = 4, 18 | 19 | 20 | apply = function(self, tag, context) 21 | tag:yep('+', G.C.DARK_EDITION, print() ) 22 | 23 | local card = create_card("Yahimodaddition", G.Jokers, nil, nil, nil, nil, nil, 'yahiworld') 24 | card:add_to_deck() 25 | G.jokers:emplace(card) 26 | play_sound("yahimod_mariopaintmeow") 27 | 28 | tag.triggered = true 29 | return true 30 | end, 31 | } 32 | 33 | SMODS.Tag{ 34 | key = 'tag_yahimodyoutube', 35 | loc_txt= { 36 | name = 'VIDEO Tag', 37 | text = { "Immediately plays an", 38 | "{C:attention}important video{}", }}, 39 | atlas = 'tagatlas', 40 | pos = { x = 1, y = 0 }, 41 | 42 | 43 | apply = function(self, tag, context) 44 | tag:yep('+', G.C.DARK_EDITION, print() ) 45 | 46 | G.FUNCS.overlay_menu{ 47 | definition = create_UIBox_custom_video1("twerknite","Hell Yeah"), 48 | config = {no_esc = true} 49 | } 50 | 51 | tag.triggered = true 52 | return true 53 | end, 54 | } 55 | 56 | SMODS.Tag{ 57 | key = 'tag_yahimodcleanse', 58 | loc_txt= { 59 | name = 'Cleanse Tag', 60 | text = { "Rids your jokers and deck", 61 | "{C:attention}of all horses{}", }}, 62 | atlas = 'tagatlas', 63 | pos = { x = 0, y = 1 }, 64 | min_ante = 2, 65 | 66 | apply = function(self, tag, context) 67 | tag:yep('+', G.C.DARK_EDITION, print() ) 68 | 69 | play_sound("yahimod_horsedeath") 70 | for _, card in ipairs(G.playing_cards) do 71 | if card.seal == "yahimod_horse_seal" then 72 | card.seal = nil 73 | end 74 | end 75 | for i = 1, #G.jokers.cards do 76 | if G.jokers.cards[i].ability.name == "j_yahimod_horsewalksin" then 77 | G.jokers.cards[i]:start_dissolve() 78 | G.jokers.cards[i] = nil 79 | end 80 | end 81 | 82 | tag.triggered = true 83 | return true 84 | end, 85 | } 86 | 87 | SMODS.Tag{ 88 | key = 'tag_yahimodwashee', 89 | loc_txt= { 90 | name = 'Washee Washee', 91 | text = { "Washee Washee", }}, 92 | atlas = 'tagatlas', 93 | pos = { x = 1, y = 1 }, 94 | 95 | apply = function(self, tag, context) 96 | tag:yep('+', G.C.DARK_EDITION, print() ) 97 | 98 | G.washee = 1 99 | 100 | tag.triggered = true 101 | return true 102 | end, 103 | } -------------------------------------------------------------------------------- /items/videos.lua: -------------------------------------------------------------------------------- 1 | -- credits to SMG9000 for the code 2 | 3 | function create_UIBox_custom_video1(name, buttonname) 4 | local file_path = SMODS.Mods["Yahimod"].path.."/resources/"..name..".ogv" 5 | local file = NFS.read(file_path) 6 | love.filesystem.write("temp.ogv", file) 7 | local video_file = love.graphics.newVideo('temp.ogv') 8 | local vid_sprite = Sprite(0,0,11*16/9,11,G.ASSET_ATLAS["ui_"..(G.SETTINGS.colourblind_option and 2 or 1)], {x=0, y=0}) 9 | video_file:getSource():setVolume(G.SETTINGS.SOUND.volume*G.SETTINGS.SOUND.game_sounds_volume/(100*10)) 10 | vid_sprite.video = video_file 11 | video_file:play() 12 | 13 | local t = create_UIBox_generic_options({ back_delay = 2 , back_label = buttonname, colour = G.C.BLACK, padding = 0, contents = { 14 | {n=G.UIT.O, config={object = vid_sprite}} }}) 15 | return t 16 | end 17 | 18 | -------------------------------------------------------------------------------- /libs/jsonparsing.lua: -------------------------------------------------------------------------------- 1 | -- not needed -------------------------------------------------------------------------------- /libs/ui.lua: -------------------------------------------------------------------------------- 1 | SMODS.Atlas({ 2 | key = "modicon", 3 | path = "modicon.png", 4 | px = 32, 5 | py = 32 6 | }) 7 | 8 | logo = "balatro.png" 9 | 10 | SMODS.Atlas { 11 | key = "balatro", 12 | path = logo, 13 | px = 333, 14 | py = 216, 15 | prefix_config = { key = false } 16 | } 17 | 18 | 19 | -------------------------------------------------------------------------------- /localization/en-us.lua: -------------------------------------------------------------------------------- 1 | -- idk why this wouldn't work unless if i put it in a separate localization file. ill be damned 2 | return { 3 | descriptions = { 4 | Other = { 5 | yahimod_artcredit = { 6 | name = "Art by", 7 | text = { 8 | "{C:attention}#1#{}" 9 | }, 10 | }, 11 | yahimod_ideacredit = { 12 | name = "Idea by", 13 | text = { 14 | "{C:blue}#1#{}" 15 | }, 16 | }, 17 | yahimod_catcredit = { 18 | name = "Cat", 19 | text = { 20 | "{C:green}#1#{}'s cat!" 21 | }, 22 | }, 23 | 24 | }, 25 | 26 | }, 27 | } -------------------------------------------------------------------------------- /lovely/misc.toml: -------------------------------------------------------------------------------- 1 | [manifest] 2 | version = "1.0.0" 3 | dump_lua = true 4 | priority = -1 5 | 6 | 7 | [[patches]] 8 | [patches.pattern] 9 | target = "card.lua" 10 | pattern = "sliced_card.getting_sliced = true" 11 | position = "after" 12 | payload = ''' 13 | G.hasajokerbeendestroyedthistick_unused = true 14 | ''' 15 | match_indent = false 16 | 17 | -------------------------------------------------------------------------------- /resources/horsef.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/resources/horsef.ogv -------------------------------------------------------------------------------- /resources/nuuh.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/resources/nuuh.ogv -------------------------------------------------------------------------------- /resources/pizzatower.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/resources/pizzatower.ogv -------------------------------------------------------------------------------- /resources/twerknite.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yahiamice/yahimod-balatro/393cc64bdd2e4ffd5e6ccff88c883b4a9611ae73/resources/twerknite.ogv --------------------------------------------------------------------------------