Tumgik
#K-Byte
turuin · 12 days
Text
youtube
Poi un giorno cerchi e trovi su Youtube un pezzo di una band calabrese che risale a quando avevi vent'anni e che tu avevi su CD e quasi ti commuovi.
1 note · View note
duckapus · 11 months
Text
WarioWare: Double Up!
One day, Wario discovers that there’s a popular new video game company called Hotcake Studios- so popular, in fact, that WarioWare Inc. is losing business to them! Even worse, when he gets his hands on one of their games he discovers that it has the same microgame formula as his games, and that the company is owned by none other than his Treasure Hunting rival Captain Syrup. And then to make matters even worse, when he goes to confront her about so obviously muscling in on his business, she reveals that she’s also got her own development team of colorful characters…and each one is a clear direct counterpart to one of the WarioWare Crew. Or in Wario’s words, “You’re not just bootlegging my games, you’re bootlegging my flunkies, too!”
After the whole thing nearly comes to blows, the two strike a deal; each company will make a game, both with the same set of themes(and with each set of counterparts working on the same theme. So for example, Ashley and whoever her counterpart is both make Fantasy-themed microgames), price, and release date, and at the end of the year they’ll see which game sold more copies. Loser has to become a subsidiary of the winner.
I’m not sure how exactly that would translate into a gameplay gimmick (I’m a story guy not a gameplay guy), but as far as story mode goes each level’s story would involve the WarioWare Host getting into some sort of competition with their Hotcake counterpart, some friendlier than others.
The actual counterparts are:
Wario: Captain Syrup, obviously
Mona: Vanessa, that one singer who had a rivalry with her in Touched
Jimmy T: Jenny K, a semi-famous breakdancer
Dribble and Spitz: A Wolf and Bird racecar-driving duo named Howler and Chirpz
Kat and Ana: A pair of Ninji Twins named Shuri and Ken
Orbulon: Tatanga, because why not
9-Volt: A fourth-grade gamer girl named M-Byte
18-Volt: M-Byte’s older brother G-Byte
5-Volt: M-Byte and G-Byte’s dad, K-Byte
13-Amp: A friend of M and G named 64-Bit
Fronk: a Wanderin’ Goom, just named Goom
Dr. Crygor: Rival inventor Professor Boreal
Penny: Boreal’s niece, Hailey
Mike: A singing Piranha Plant named Polly
Doris 1: A robot butler named Vincent
Ashley and Red: A bubbly Magical Girl named Sora and her shapeshifting rabbit friend Violet
Young Cricket: Goombario, who’s recently become a student of The Master
Master Mantis: The Master, from Paper Mario
Lulu: Leo, that one ninja kid with animal-based powers that Kat and Ana fought in their level of Get It Together
The eventual end result is a draw. Both games somehow sold an exactly equal number of units. While this news initially shocks and infuriates Wario and Syrup, they take it as a sign that this whole argument just isn't worth their time and resolve to just more-or-less ignore each-others gaming ventures. Meanwhile, most of their employees have actually made friends with each-other, not really caring about the competition or their bosses' bad history to begin with.
45 notes · View notes
retrocgads · 5 months
Text
Tumblr media
UK 1987
7 notes · View notes
aj-artjunkyard · 1 year
Text
There better be NO pitting Margo Kess and Gwen against each other in the spiderverse fandom. None
29 notes · View notes
gameboy-berry · 1 year
Text
I miss Book BFDI man... I remember back in pre split where she got shit for absolutely no reason??? I know the arc wasn't the best paced but it was stuff like "shes so mean to taco automatically bad!!11".
Actually when the split happened I vowed to never watch newer BFDI episodes because of how her and Taco's story just. Ended there. I still haven't seen TPOT by the way.
1 note · View note
comicsbyte · 1 year
Text
India In San Diego Comic-Con America
इंडिया इन 'सैन डिएगो कॉमिक-कॉन' अमेरिका (India In San Diego Comic-Con America)
#ComicsByte #comiccon2023 #sandiego #comiccon #projectk #MinnalMurali #Hiranyakashyap #comics #movies #comicbooknews #popculture
https://comicsbyte.com/india-in-san-diego-comic-con-america/
0 notes
lenaisagirl · 11 months
Text
Pomni X Ragatha
Disclaimer! I wrote this on company time. Also this is the first time I've ever shared art online so be nice k thx bye! <3 As Pomni walked around in the second day of her own digital hell, she finally got a chance to note the smaller peculiarities. Music seemed to play no matter where she was. Her footsteps sounded like a royalty-free sound byte, and everything had an unnatural, plastic-y sheen to it.
This only compounded with her other anxious thoughts. What causes abstraction, anyway? How far could she indulge her insanity before she lost it completely, becoming a monster in Caine's cellar?
“Hey, Pomni? You listening?” Ragatha interrupted Pomni's internal monologue, frowning slightly with concern.
“Y-yeah I’m listening. Something about… the concession stands?” Pomni said, shocked out of her stupor. She glanced nervously side to side, looking at the landscape around her. They stood in the middle of the theme park, which was unusually empty for what it was supposed to be. The only presence was a few concession stands manned by empty-faced mannequin NPCs.
Ragatha frowned, unsatisfied with the answer. Moving to Pomni’s front, she crouched down to meet her eye level.
“Hey, new stuff?”
“I know this takes time to get used to… So if you don’t wanna do this, it's okay!” An earnest, sewn-on smile followed her words.
“No, no! This is great. And, um… I really need the company.” said the little jester, as she let out a nervous laugh. In return, Pomni received a soft pat on the head.
“Alright Pomni. I’ll be here as long as you need.” With that, she stood back up, and took a few steps back, holding out her hand to Pomni.
“R-right. That’s – I mean. Thank you.” With a tilted smile, she tentatively reached to accept her hand. While she expected Ragatha’s hand to be a dull, unnaturally smooth surface like everything else - it wasn’t? Beneath her gloves, Pomni could feel real texture, as if she was truly grabbing a ragdoll’s hand. It was a nice change of pace, and brought to her face the first genuine smile she’d had while here.
And so they exited the theme park, quiet at first. Looking towards the night half of the skybox, one could almost be convinced it was a starry night. That is - until you spun around and saw the bright-as-day portion of the skybox.
“Um… Ragatha? Where exactly are we going?” Pomni asked tentatively. It's not that she was distrustful, just shaken up from the past “adventure” and as the lakeside forest of smooth plastic looking trees grew around her, thoughts of losing her tracks crept into her mind.
“Just a little spot out in the forest. Just somewhere away from Jax – er, I mean, the stress of it all. You know.” She held her hand up to her face and chuckled.
“Just - keep it a secret, okay?” She turned around to face Pomni, smiling ever so awkwardly. A kindred spirit, Pomni smiled just as awkwardly in return.
“Well. Here it is.” Letting go of Pomni’s hand, she gestured broadly at the space around them. Really it was just a rock, one of the few bits of decoration that even existed within the forest. Oddly enough, it was actually about chair-shaped. Being so close to the island's edge, Pomni wondered if this was an unfinished overlook.
“It's nice… I think!” As far as cartoonishly digital worlds went, it wasn’t that bad of a place to be. Ragatha walked over to the rock, plopping dramatically on top of it and patting the space beside her.
Pomni, much shorter, had to jump slightly, crawling on top of the rock before taking a seat. For a moment, they simply looked onward into the skybox.
“What… what do you think you were like? Y’know. Before all this?” said Pomni cautiously. It was probably a sore spot, but nevertheless she was curious about her new friends.
“Who knows? I don’t think about it too much, uncontrollable insanity and all that.”
The jester nodded. Like she thought - a sore spot, likely for all of them. Ragatha turned her gaze away from the cliff’s edge and toward her friend.
“Maybe… A waitress? Oh, or a dancer. I'm really good on my feet!” Ragatha kicked her legs as she spoke to add emphasis.
“How about you, new stuff? Gee, I hope you don’t mind me calling you new stuff all the time.” She folded her arms, and glanced to the side.
“Nah, I kinda like it. I mean – it's nice to have a friend, is all.” Pomni looked down at her legs, kicking them slightly as she thought of who she might have been.
Did it matter? Would she ever find out? Did she want to know what kind of life she was missing out on? Her pupils started to dilate as panic rose in her system.
“Pomni? We don’t have to talk about it.”
Ragatha interrupted her panic attack – this time with a hand on the shoulder. Looking up from the ground, the poor jester's eyes welled up slightly, reflecting Ragatha’s face back at herself.
“You okay…? Need a hug, new stuff?” Looking in Ragatha's eyes, she saw a worried expression. At least if she was stuck here, there was someone who cared. Merely nodding, Pomni leaned forward, clinging to her raggedy dress fabric. Slightly surprised, Ragatha smiled, wrapping her linen hands around the poor girl.
“T-thank you.” Pomni squeaked out.
“Hey don’t even worry about it. We gotta stick together, right?” Patting Pomni on the head, she softly ruffled the jester hat.
“Right… It’ll be okay.” And for once, she believed it.
335 notes · View notes
Text
Within cells, interlinked (Miguel O’Hara x Ai/Hologram! Fem! reader) Part 1
Tumblr media Tumblr media Tumblr media
Hiii! Very excited about this bad boy, this is inspired by K and Joi’s relationship in bladerunner 2049, and this panel from 90’s run of the Spider-Man 2099 comics. Also there is some heavily implied (at the very least one sided) holofang (Miguel x Lyla) at the beginning, if that isn’t your cup of tea, then I’m sorry but that’s how I wrote it. Not proofread, enjoy!
(Y/N)-Your name.
Implied (one sided???) holofang, Lyla is like basically dead, mentions of sex work, cursing, Miguel being a sad lonely lonely man, ansty (if you squint), Miguel being a little mad scientist like at the end. Tbh idk really know what to tag these as.
Word count: 3k
Part 2
Masterlist
Playlist I listened to while writing
Neuva York 2099.
A dystopian wasteland that was once a pristine and other worldly city. But, like every other beautiful thing, it would be destined to fall, thanks to Kingpin, who now had the city under his thumb. Straile white buildings that once stood tall, crumpled and decayed, being replaced slowly but surely with dark titanium steel. Holographic projections filled the sides of ugly skyscrapers, advertising anything and everything, ranging from restaurants and video games to Ai women and cyborg upgrades.
Miguel’s original Ai assignment was unfortunately no longer functional, her software having been corrupted due to a virus that was released onto Miguel’s suit during a fight with Doc ock, Miguel having no other choice but to terminate her software, putting her out of her misery. It not only set Miguel back from his usual tasks as Spider-Man and his work at Alchemax, but the whole spider society, Lyla being the one who controlled the whole mainstream to the entire operation, along with help from Spider-Byte, but she couldn’t run the whole society technology wise, she had a life outside of her role there.
If Miguel had the time, he would have done what he had done the first time, and redesign her from scratch, raising her from her nonexistent grave. However, he knew he didn’t have the time. He had spent months programming her, not to mention the years it took for him to upgrade her into what she had become. It’s only been a week, and he could already see the cracks that were forming without her to hold it all together. His universe was already in disarray, he didn’t need another thing to crumble into dust in his hands.
The walk from the Alchemax back to his apartment was meant to help him clear his head, but it only dampened his mood more, bitter cold air and large dark clouds rolling in slowly, threatening to pour down on the decile city. Keeping his head held high and eyes forward despite his desire to go deep into a dark alleyway and swing the rest of the way home, keeping the tension in his temples build up with every sleazy salesperson attempting to sell him a sketchily low price for random gadgets that he was certain was stolen, or sex workers attempting to coax him into a small brothel. All kinds of lives walked past him as he ventured home, humans, cyborgs, full robots and AI holographic companions, a million life stories that could be told.
Less and less began to cross his path as he neared his apartment building, eye bags dark and sunken in as he turned his head to the left, he was now alone on the sidewalk, stopping as he put his hand on the railing that lined the evaluated walkway, he remembered not even 10 years ago, that very spot would look out to a beautiful pond, small ducks that pattered around, families gathering around to have little outings, ones that Miguel only ever really dreamed of. Now, all that was a ginormous digital billboard that would switch advertisers every week or so. Although he never really expected they’d project the one that was on display now. He had to squint a bit so that the now dripping rain didn’t get into his eyes as he watched the projection.
“The perfect companion, the perfect coworker, the perfect partner. Joi, your personal Ai. Everything you want to hear, everything you want to see.” The sentences rotated between each other over and over, Miguel stayed silent as he stared mindless at the naked back of the large Ai hologram, their skin admitting a light glow as she sensually ran her hands through her hair. Despite the words “companion” and “coworker” showing up on the ad, it was painfully obvious what the holographic woman was really meant for.
Still, he caught himself unable to look away, despite seeing the ads hundreds of times prior to this moment. He didn’t even register when the Ai had turned around and squatted in front him, making it so the two were at eye level.
“Hello handsome.” His eyes finally drifted up to meet hers once she spoke, he wasn't very fond of the default version they often used on most of their ads, so seeing this version in front of him was a lot more of a nicer sight to see. “What a day hmm?” When he didn’t respond she just came closer, “you look lonely… I could fix that…” She whispered with a head tilt, “you look like a good Joi…” before getting back up and moving away from Miguel once more.
Maybe it was the stress, maybe it was his way of pretending he wasn’t mourning an algorithm, maybe it was just him being tired of carrying everything on his shoulders, still… his eyes slowly went down to his orange watch, moving it in front of the bare glowing figure, before his free hand slowly hovered over the watch, hesitating for a moment, before pressing purchase.
Once Miguel got home he spent the next hour or so reworking your programming, jailbreaking and removing restrictions, wanting to make sure you were prepared to handle the society’s system before he even turned you on to make sure you wouldn’t crash the second you were hooked up to it.
Eventually, once everything ran to meet his expectations, he stood back and waited for you to appear in front of him. Waiting impatiently as he watched the small loading circle chase itself until you appeared, although you weren’t fully “awake” still, eyes closed, head slumped forwards and arms hung limply to your sides. Still needing to be given a name, an outfit and if he desired to change anything from your physical appearance he could. He decided to keep your assets the same, and placed a simple outfit on you, deciding if you ever evolved enough to be sentient on the same level as Lyla was, that he’d give you free range to change it. For a name though, it was a bit harder of a choice.
Maybe it was him having his previous one for as long as he did, but he wanted you to be… different, then her, a name that wasn’t, well, Lyla. Something nice and pleasant to say, but not simple enough for him to forget in the midst of him in a fight. After some pondering, he finally typed in the name into his watch and pressed the “finalized model”. Releasing a breath he didn’t know he was holding when he saw your head slowly begin to lift and your eyes slowly fluttered open.
“Hello Miguel.” You said him a smile.
“Hello (Y/N).” His lips twitched upwards for half a second.
It took a while for your program to adjust and be accustomed to the database, he never realized how much strain he put on his older Ai until he watched you try and accommodate the same thing, yet then again, he built it all around her, instead of vise versa. It wasn’t just you who had needed some time to adjust though. The amount of times that spiders (including Jessica and Miguel) would call for Lyla still instead of you was starting to… annoy you for lack of a better term.
You had been patient at first, appearing despite the slip up, simply correcting the person who called for you and going on with the request, then it seems that the patience started to run thin. Rolling your eyes or letting out snarky little remarks, then eventually you just started to not respond unless they called you by your actual name, which only led you landing yourself in a lecture from Miguel, being threatened to reboot your system. Him ranting about how it could be dangerous or something, after the first few times, it stops being fear insulating, once you even let out a yawn at his usual lecture. A yawn. How close he was to throwing his desk across his office.
The longer you stuck around the more knowledge you gather, the more self-aware you become, mimicking human thoughts and emotions, reading anything you could get your digital little hands on. From the words of Ancient Greek philosophers to thousands of different articles on how the human brain works, what different areas controlled what. You found humans quite interesting, such complex yet flawed creatures, you can understand why so many filmmakers and authors who write science fiction have some odd variation of robots wanting to either become humans or destroy them.
It’s almost cliche, but you can’t help but develop the same fascination with Miguel. How could you not? You were quite literally around him 24/7, you could tell he wanted to be taken care of when he wasn’t taking care of everything himself, and who were you as his assistant to refuse?
“Welcome back Miguel.” You smiled as you appeared next to the door before he could even step foot through its threshold. Your eyes followed him as he took his shoes off and threw his keys on the coffee table in the middle of the living room, landing with a loud clunk.
“I just saw you back at HQ.” He chuckled, shaking his head as he closed the door behind him before he made his way to his kitchen, “It's been 20 minutes.” He added as he turned the corner, being met with you already there, leaning against the counter as his coffee machine was already pouring him a new cup in his favorite mug, with the stove being lit on for him to place his left overs onto to warm up.
“Being greeted when you arrive home helps boost your overall well-being.” You quipped, which only gained a small hum of acknowledgement as he placed a pot of bistec on top of the open flame, and a bowl of leftover white rice in the microwave.
“It could also help boost my overall well-being if you didn’t act like such a brat half the time.” He countered back as he stirred the streak and potatoes to make sure it didn’t burn before turning to face you, meeting you with that all too familiar smirk he always gave you. You were quick to mirror it. “You're supposed to make my life easier, ya know?” Despite it being a rhetorical question, your smirk only widely more.
A silence fell over the kitchen as he goes back to focusing on his food, you just stay there, watching as he made quick work fixing his plate, mumbled a small “sorry” to you everytime he would “bump into you” (as Miguel liked to call it) despite him only passing through your holographic body as he grabs the plate and cup of coffee and goes it set it down at the table, making sure to be fast as to not hold onto the gradually warming glass crockery long enough to burn his rough hands.
With a sigh, he sat down in front of his plate as he heard the faint noise of your projection deactivated from the kitchen, leaving him alone in the quiet home of his. He’s fork moving around the contains on his plate, piercing the potatoes and steak but never lifting it up to bite into the steaming meal. After a few more moments of playing with his food, he placed his fork back down, keeping his eyes down on his plate despite him lifting his head up.
“(Y/N).” He called out after cleaning his throat.
“Yes?” Your voice called back out, ringing through his apartment as he waited for you to reappear, only to let out a huff when you didn’t.
“…have dinner with me?” When he finally looked back up, he was met with you already in the chair across from him, a digital plate of food replicating his in front of you. His lips twitched up as he whispered a light thank you for entertaining his wish, even down to mimicking eating as you both sat there, his eyes never leaving yours.
After his appetite was satiated, and the dish were washed, he wander to his living room, being met with the sight of you already being sat down on one of the small leather accent chair that sat to the right of the coffee table, a small orange tablet-like screen being held in your hands as you tampered away on it, most likely readjusting tomorrow's schedule or researching more on some random topic you found interesting. Leaning against the doorway, he couldn't help but watch you, admire you. He found it humorous that you chose to physically sit down and read about topics even though you were built with the knowledge of practically everything. It made you feel more… real. It made him feel less insane when he found comfort in your company.
“Would you like me to leave you alone mig?” You asked after a second, eyes never leaving the screen in front of you. His heart stopped for half a second when you called him by the nickname as he shook his head.
“¿Qué estás haciendo?” He asked as he made his way towards you, stopping once he was close enough that if you had a physical being, his legs would have been touching your knees. (What are you doing?)
“Just going over your suit diagnostics, I’ve noticed that it’s been lagging a bit.” You hummed, not even fazed by the close proximity.
“…(Y/N).”
“Hmm?”
“Look at me.” He commanded, but his tone is still somewhat soft with the order, your screen evaporating from your hands as you went to meet his gaze. He hesitated for a moment, leaving his dry lips before finally continuing. “You know, I feel like I don’t appreciate you enough.”
“Miguel, I’m your Ai assistant, my whole purpose is to help make your life easier.” You couldn’t help the slight snark that came seeping through your sentence, causing him to let out a scoff and playful eye roll.
“That’s not what I mean, you know that.” He countered with a head tilt, his hands sliding over his thighs and finding their way into his front jean pockets.
“What do you mean then?”
“What do you think I meant?” Now it was you who let out an eye roll as you huffed.
“Miguel, you know I can’t ‘think’. I’m not human, I can simply process and collect information and recite it back. I speak only in facts and unbiased sources.”
He couldn’t help but hate it when you talked like that during casual conversation, despite the deadpan look in your eyes and the small sass in your infliction, it only reminded him that you weren’t real. The only difference from your body and air, was that you were a set of ones and zeros. He could swat a hand through your body and you would simply glitch around it as it interrupted your coding and it attempted to adjust around him, how for once, he wishes that when he would “bump into you” that he would be met with solid flesh, you stumbling back a bit while you scold him, his hand coming around to met the small of your back to help re-stabilize your footing as he lets out a small chuckle.
“Don’t be a smartass with me (Y/N). You know, most humans I know don’t have the ability to think either, and they for sure aren’t as nearly intelligent or knowledgeable as you are. If they can form an option then you can too.” He was met with your face contorting in confusion, a rare expression on your face, one he appreciated when he got the opportunity to witness it. “I want you to think, give me an original thought. Not a statistic, not a fact. Think for yourself (Y/N).” The was a pause before your lips parted.
“I… I think…”
“Thaaaat’s it…” He leaned forward, his face close to yours as he encouraged you to continue in a low whisper. “I think?”
“I think… that if I was a human, that… that I would be in love with you Miguel.”
Oh.
“(Y/N).”
“Yes Miguel?”
“Shut off.”
“Yes Miguel.”
Within a blink, you were gone. His hands came out from his pockets with a heavy sigh, before he rubbed his face and ran them through his hair, causing the semi-neatly slicked back hair to become desiveled. Glancing around the now empty living room, the small constant buzzing from your hologram now being replaced with the gentle tapping of the rain against his window.
Miguel O’Hara was truly a lonely man. A man with weaknesses and flaws despite himself, a man with feelings, and vulnerabilities and emotions. Miguel O’Hara was just a man, just a human. A human who wanted to be loved. To not be seen as some sort of emotionless being, the irony wasn’t lost on him that the only thing that seemed to really care for him, and see him in that way was something that wasn’t even programmed with actual emotions. Oh how he wished you were real, how you were human.
He couldn’t turn you into a human, but he could get close.
With a sigh he entered his home office, the only room he had restricted giving you access to appearing in. Closing the door behind him before leaning against the door, his eyes instantly finding themselves stuck on the limb on the table. An arm to be more specific, the synthetic flesh that matched your complexion wrapped around its exoskeleton. It took him almost a month to do just one arm, and although the time length of that he estimated for this project was a bit more lengthy then he’d like, if it meant getting every minuscule and minute detail perfected, he’ll take all the time in the world for it. He’d make sure it was perfect, that you’d be prefect.
Tags: @oscarissac2099
342 notes · View notes
impulsivefanwriter · 1 month
Text
Bizarro Ninja Names
So. Question to all my fellow ninjago fans.
What are your hc's for the names of the bizarro ninja from Double Trouble (or additional ones like for Lloyd & Nya)? I'm really curious what people call them and why!
I'll start the thread with my own hcs that I made with a few wonderful friends
Bizarro!Kai -- Aki Forge -- his first name is an anagram of "Kai" (and means 'autumn', where the leaf colours match that of fire) while his last name Forge is both a "forgery" joke and a synonym of "Smith"
Bizarro!Movie!Kai -- Kaigami Julien -- first name is a pun on the name "Kagami", meaning 'mirror', last name is because they get adopted by the Julien family because he's a nindroid built by the Mechanic
Bizarro!Cole -- Loce/Chronos "Chons" Bournrock -- Loce is an anagram for Cole, the chemical formula for coal is C₁₃₇H₉₇O₉NS , or "Chons", and a bourn is a small stream synonymous with brook, as in Brookstone, plus it sounds like "born (of) rock"
Bizarro!Movie!Cole -- Charcoal -- Cole sounds like coal, this one is... pretty easy to tell the origins of ajfksalfjka, he's a clone made by movie!Vangelis who wasn't going for creativity
Bizarro!Zane -- Nane Hawk -- Turn the 'Z' in "Zane" sideways and boom, Nane (which also means 'no-one' or 'no-part of a whole'). Hawk is an alternative to a falcon
Bizarro!Movie!Zane -- Oread "Oreid" -- oreads were mountain nymphs in Ancient Greek mythology and is the type of nymph Echo was in mythos (and we all know why the name Echo is relative to a Zane); in this universe, he's a nindroid built by Garmadon's enginerds with seagull features for peak obnoxiousness (and yes, that one seagull laughing meme)
Bizarro!Jay -- Cage Steller -- Cage sounds a bit like just the letter "K" (plus a 'g'/'j'-like sound) , similar to how Jay sounds like "J", and works as a birdcage reference ; and a Steller's Jay is a type of jay
Bizarro!Movie!Jay -- Jayden Walker -- I think this one is obvious too, he's an oni who ran away from the First Realm & gets adopted by the Walkers after copying m!Jay's identity as a human disguise (think V from The Owl House)
Bonus:
Bizarro!Lloyd -- Dyoll/Floyd -- Yeah this is another reference. No it isn't creative. Yes it's funny. Yes it's also an acronym like the others.
Bizarro!Movie!Lloyd -- Christofern -- Y'all know why. Except he's an oni/part oni made of magic (and maybe a tiny bit of magic tea (leaves) so uhhhh surprise m!Lloyd you have a half-brother on your dad's side
Bizarro!Nya -- Yan/Nereid Forge -- Yan means 'beautiful' and is an acronym of Nya while nereid are sea nymphs from Ancient Greek mythology (and the same Forge 'forgery / smith' reference applies as it does with Aki)
Bizarro!Movie!Nya -- Kujira -- means 'whale' and may have been a potential word inspiration for the name "Wojira" ; a merlopian clone made of magic by the Followers of Wojira to help awaken the sleeping serpentine goddess
Bizarro!PIXAL -- Byte -- 'the basic unit of information in computer storage and processing' and a play on words like "gigabyte, terabyte, etc.'
17 notes · View notes
rosiemoo · 1 year
Text
Spinning Trans Heart in >280 bytes
?"\^!5f100<>7><0"
l=0t=0n=cos::♥::o=200l=(l>0.85and 0)or l+0.01q=pset
for k=0,6 do
for i=0,o do
s=-1-(k/5)q(rnd(o),rnd(o),0)q(s*(32*sin(t)^3)*(-1+(((l<0.5and 8*l^4)or 1-((-2*l+2)^4)/2)*2))+64,s*(28*n(t)^3-10*n(2*t)-10*n(3*t)-n(4*t))+64,k)t+=1/o
end end
goto ♥
Tumblr media
154 notes · View notes
snackugaki · 2 years
Photo
Tumblr media
soft apocalypse 4
leo y fin del mundo en español
k onda soy yo snackugaki tu prima filipina, disculpa por mi español kase mas matalino ako sa tagalog kesa español de mexicano(te amo abuela)
pasyensa na ingles speakers, anyway tl;dr I think Leo would probably start switching to Spanglish more in the Apocalypse considering all the people herding he and his brothers would be doing day-to-day
and as a fun little linguistic byte, there’s hella dominicans and puerto ricans in new york so statistically, Leo’d probably speak spanish like them and if I got some of y’all’s slang wrong.... wag kang magagalit sa akin sinubukan ko oh
293 notes · View notes
closetdystopia · 5 months
Text
Tumblr media
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Here I am, more machine than flesh, every goddamn byte I've shoved into this tin can of a body leeching away what used to make me, me. This glowing hellscape—it's frigid, a cruel joke of light without heat. My heart, shit, it’s just cogs and wires now, no beat, just buzzes. The warmth I used to feel? A fuckin’ ghost, man. And my hair, that wild, fiery mane that screamed defiance? Now it's just limp strands, hanging dead and cold over a frame that’s lost its grip on humanity. Lookin' back, every slice of tech I let them implant, every shiny promise—it's been a trade-off, flesh for phantom pains in a steel shell. What's left? Not much, just a freak caught between worlds, belonging fully to neither. Each upgrade, every so-called breakthrough—it’s just another slice of hell carved into my soul, another piece of me traded for a shot at surviving this techno-dystopian shitshow. But what’s the choice, huh? Lay down and die? Not my style. I’ll keep draggin’ this half-human carcass through the muck, even if every step costs me a piece of what I once was.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// >> Sil K.
Links:
[ Redbubble Store ]
[ Etsy Store ]
[ Pinterest ]
[ Instagram ]
24 notes · View notes
mentalisttraceur · 2 years
Text
Speaking Hexadecimal
Fluently and Unambiguously
I previously proposed a way of saying hexadecimal numbers clearly and efficiently in English, but that was only good for situations where it was otherwise unambiguous that the numbers were in base-16, and it still had some room for getting "wires crossed" with base-10. Now I finally have a proposal I'm satisfied with to finish the job:
We first add distinct words for the six extra "digits":
A is alf, B is brav, C is char, D is delt, E is eck, and F is fost. These are based on the pronunciation of the first six NATO phonetic alphabet words: "alpha", "bravo", "charlie", "delta", "echo", and "foxtrot", except that: we simplify "foxt" to "fost" to make it easier to say, we change the spelling of "alph" to make it more accessible to people not familiar with English's "ph", and the spelling of "eck" makes it obvious that it's a K sound, not a CH sound.
Then we replace "-ty" with "-tex". "-tex" is meant to be evocative of "hex", but the "t" fits the pattern of English number words better:
So 20 in hexadecimal is twentex, not "twenty". 21 is twentex-one, 22 is twentex-two, and so on. 2A is twentex-alf, 2B is twentex-brav, and so on. 30 is thirtex, 31 is thirtex-one, [...], 3A is thirtex-alf, and so on. Fortex, fiftex, sixtex, seventex, eightex, ninetex, alftex, bravtex, chartex, deltex, ecktex, and fostex.
English has special words for 10-19, but we can just use the same regular pattern in hexadecimal for 10-1F as for 20-FF. So 10 is ontex. It's "ontex" and not "onetex" to match the speed and distinctiveness that we get with twenty, thirty, forty, and fifty having slightly different pronunciations and spellings versus two, three, four, and five. 11 is ontex-one, 12 is ontex-two, 13 is ontex-three, and so on.
100 is "hunhex". This continues the mnemonic pattern - English number word, with a hexadecimal-hinting ending. 101 is "one hunhex and one," or just "hunhex and one" for short, just like we say decimal hundreds. 201 is "two hunhex and one", 2D4 is "two hunhex and deltex-four", and so on, all the way up to FFF - "fost hunhex and fostex-fost".
Incidentally, the modern English quirk of saying a number like 2463 as "twenty-four (hundred), sixty-three" instead of "two-thousand, four-hundred, and sixty-three" works really well for hexadecimal numbers: for example, 1AD4 is often written as 1A D4, and can be read as "ontex-alf (hunhex), deltex-four".
In fact, unlike decimal, in hexadecimal it is far more natural and useful, especially given modern technology, to do groups of two. So we don't even bother with another irregular word like "thousand" - instead, we just go directly to using the same Latin prefixes that large numbers in English use (billion, trillion, quadrillion, and so on), for multiples of two more hex digits:
So 10000 is a bihex, 1000000 is a trihex, 100000000 is a quadrihex, 10000000000 is a quintihex, 1000000000000 is a sextihex, 100000000000000 is a septihex, 10000000000000000 is an octohex, and so on. Technical people will appreciate that we're basically counting bytes here, and that a hunhex is one larger than the maximum value in a 1-byte unsigned integer - ditto bihex for 2 bytes, quadrihex for 4 bytes, octohex for 8 bytes, and so on.
193 notes · View notes
randomvarious · 2 months
Text
Tumblr media Tumblr media
Today's mix:
99.2 by Timecode / Aquasky 1999 Drum n Bass
Man, I legitimately have no idea why some of these releases from UK dnb juggernaut label Moving Shadow's 'year-decimal' series are rated so poorly on Discogs. Usually when something has an average rating that's below 4 out of 5, it has noticeable flaws, but this sampler mix from MS head honcho Rob Playford—operating here under his DJ-mixing alias of Timecode—is an excellently steady clinic in fun, turn-of-the-millennium dnb bounciness. And the release that preceded this one, 99.1, which also has a sub-4 rating, is one of the greatest dnb mixes that I've ever heard in my life! So, like, what the hell is wrong with you people?!
And you couldn't beat this deal when this thing dropped, either. £1.99 for this disc, a bonus disc with an exclusive 20-plus minute mix of Omni Trio tunes done by the great trio of Aquasky, and CD-ROM freebies that included snippets of Aquasky remixes in WAV format, promotional videos for some Rockstar Games titles, and a playable demo of Grand Theft Auto 2 as well! They were practically giving this shit away for free!
So we've got a full, chugging, 65-minute workout here with a slate of bangers delivered by Moving Shadow's top talents: Dom & Roland, Calyx, E-Z Rollers, TeeBee, Aquasky, Omni Trio, Technical Itch, and more. But nothing here seems to hit as nicely as the moment when Playford transitions between E-Z Rollers' "RS2000" and 60 Minute Man's "Brand Nu Day." "Brand Nu Day" as a standalone track opens up with this terrific sax line, and to then hear it uniquely played alongside the fuzzy bass groove of "RS2000" just really unlocks something special 🥹.
So don't listen to all the haters and overlook this one. If you want a trip back to those lovely y2k days when music CDs also came with bonus CD-ROM content, this promo mix from Moving Shadow boss Rob Playford is terrific. And I dunno how long the GTA2 demo is on here, but I'm willing to bet that if you fired up the bonus CD in your PC, and then put the main one in your stereo, you were probably in for a good time, because the type of drum n bass that's on here really does feel like the perfect, adrenaline-fueled soundtrack for boosting some cars and wreaking havoc 😎.
Listen to CD1 here. Listen to CD2 here.
Highlights:
CD1:
Renegade - "Terrorist (Dom & Roland Remix)" Calyx - "Diablo" nCode - "Spasm" Kudos - "Boiling Point" E-Z Rollers - "Cops Don't Like Us" Tekniq - "Shark Food" Kudos - "In the Dark" E-Z Rollers - "RS 2000" 60 Minute Man - "Brand Nu Day" Calyx - "Fortune Cookie" Decoder & Substance - "Heat" TB & K - "Arctix" Aquasky - "Bodyshock (Aquasky Remix)" Omni Trio - "Byte Size Life (Shimon Remix)" Calyx - "Code Red" Dom & Roland - "Can't Punish Me" Technical Itch - "Generation" AK1200 & Danny Breaks - "Deep Porn (VIP Mix)"
CD2:
Aquasky - 25 Minute Exclusive Mix of Omni Trio Tracks
11 notes · View notes
blueikeproductions · 1 month
Text
More CyberWorld/EarthSpark stuff that stuck out to me.
Another page in the planning document cropped up, & it gives a general overview of what Hasbro had in mind at the time.
Two new shows are planned to come out, but this page confusingly doesn’t mention CyberWorld, just an “animated kids series” & an “animated pre-K series”.
The other pages still reference CyberWorld, so mostly going by what we’ve seen, CyberWorld is meant to be the kids series, but it’s a big question mark on the pre-k show. Rescue Bots ran its course, I got the feeling lil’ kids weren’t interested in RBA since it didn’t last as long, stories were both too preschool but also trying to tack on IDW centric ideas by forcing Laserbeak to be forgiven and becoming an Autobot, for reasons. Stuff that’s not interesting to lil’ kids or their parents.
When RBA ended, a new toyline took over but I don’t think it sold super well, nor did it have any fiction.
Tumblr media Tumblr media Tumblr media
As well as only including Optimus Primal & BW Megatron Gator…? It was a random line, and clearly just filler to eke out RB style toys longer. I don’t see the new Pre-K show being this, but CHT did sell Decepticons as enemy characters unlike RB/A, so the Pre-K show might be based on the Great War this time? Or at the very least, stuff like the Decepticons robbing banks and power plants, lol. Or some gag about Soundwave illegally downloading music, only to be put in his place, but with a contradictory gag about the human kids and Bumblebee doing the same from time to time.
It’s pry too late to ape it now, but a modern pre-K show I could see being Spidey & His Amazing Friends tonally with toys similar to Paw Patrol’s. Like say you have the standard Optimus toy partnered with Spike (Skybound or G1 doesn’t matter), and the trailer transforms into a big jet for Optimus and Spike to ride in. Something like that.
Tumblr media Tumblr media
As for CyberWorld.
The current assumption based on the toys, is it might be a return to vehicles vs animals that both RiDs, Beast Machines, Beast Wars II and ROTB (kinda) did.
The Decepticons seemingly being animal themed supports this (plus if Meg Bull IS Megatron, Megs trying to push off road Optimus off a cliff in bull mode is hilarious), though Galvatron is the odd one. The only one with a beast form is the BWII version…
Tumblr media Tumblr media
Hasbro might be more open to Beast Wars again but they’re still a bit dodgy about the Japanese cast despite Lio Convoy and Magmatron. I could sooner see a G1 Galvatron than BWII Galvatron, but the fun approach would be an Armada Galvatron inspired design that borrows from G1, Energon & BWII.
Toy speculation suggests the line might be a repaint line like the old TF Universe series made up of Cyberverse, RiD15 and EarthSpark molds.
Tumblr media Tumblr media
A possibility. Cited speculative examples of Sky-Byte being his Cyberverse toy, Chomp & Stomp Grimlock being another go at the AoE toy of the same name, & Mirage being RiD15 Blurr make sense, but I dunno. Scorponok and Galvatron stick out, as I would think they’d have to be new molds, though an argument can be made for a G1 colored version of RiD15 Scorponok… Similarly, they might repaint TFP Predaking into Galvatron if he’s a repaint and they wanted to homage BWII, but I’m leaning towards new molds for now.
CyberWorld ISN’T a cartoon, but a toy only subline or size class meant to replace the abandoned Core/Legion class.
Inconclusive. The tiny toys don’t seem to sell well as it is, Legacy just stopped being restocked my way so no BM Cheetor or Energon Megatron for me. Also guys like Iguanus shelfwarmed HARD. Rungs were still clogging Ollies until recently. CyberWorld is also shown to be the successor to ES in most of the documents that we can tell.
The CyberWorld cartoon will have a half of a half shoe string budget like Cyberverse and possibly be similar to it.
Inconclusive but not out of the realm of possibility either. Hasbro has been having its own problems lately, while Paramount is practically on fire right now. A lot of people mostly just seem to be clinging to how similar World & Verse sound, with the logo also looking slightly similar but still different enough. A lot more people also seem resistant to the idea of more Cyberverse either way. CV didn’t perform well either, the toys clogged store shelves from start to finish, heck the first wave went on clearance immediately after Christmas, and the series JUST came out, the messy, lackadaisical approach to the show’s (lack of) story, the bad voice acting, etc. It’s not a fondly remembered show as much as some make it out to be. And even then, you’d sort of expect, if it was directly related, Hasbro would shove Bumblebee front & center, despite the CV cartoon wanting little to do with Bee as it went on. Like let’s be real, if it was a CV sequel, Bee, Windy & Shadow should be here right out the gate. They’re not. At all. Windy is practically benched in favor of Elita now.
Mirage is the focus (seemingly) instead, presumably due to the ROTB version’s popularity. He’s certainly more fun than the rich snob that may or may not be a traitor the G1 version tends to be. Not that you can’t make the G1 version interesting but boy has Hasbro not really had any interest in doing so beyond his invisibility gimmick.
So really until told otherwise we know very little. All we know for sure is EarthSpark is being slowly phased out in favor of CyberWorld & a potential Pre-K show. The Slag Podcast host has given a knowing wink, and has a show planned that will presumably lay these Snaketicons out straight, as people have been calling him a lying liar again for sticking to what he knows. Similarly some have pointed out Nick Roche may have also been lying, giving false hope EarthSpark is continuing on when it’s pretty clear it isn’t. S2 is it people, one way or the other, and the new CyberWorld order is coming whatever it ends up being.
11 notes · View notes
andymakesgames · 5 months
Text
Balatro-Inspired Spinning Card Tweetcart Breakdown
I recently made a tweetcart of a spinning playing card inspired by finally playing Balatro, the poker roguelike everybody is talking about.
If you don't know what a tweetcart is, it's a type of size-coding where people write programs for the Pico-8 fantasy console where the source code is 280 characters of less, the length of a tweet.
I'm actually not on twitter any more, but I still like 280 characters as a limitation. I posted it on my mastodon and my tumblr.
Here's the tweetcart I'm writing about today:
Tumblr media
And here is the full 279 byte source code for this animation:
a=abs::_::cls()e=t()for r=0,46do for p=0,1,.025do j=sin(e)*20k=cos(e)*5f=1-p h=a(17-p*34)v=a(23-r)c=1+min(23-v,17-h)%5/3\1*6u=(r-1)/80z=a(p-.2)if(e%1<.5)c=a(r-5)<5and z<u+.03and(r==5or z>u)and 8or 8-sgn(h+v-9)/2 g=r+39pset((64+j)*p+(64-j)*f,(g+k)*p+(g-k)*f,c)end end flip()goto _
This post is available with much nicer formatting on the EMMA blog. You can read it here.
You can copy/paste that code into a blank Pico-8 file to try it yourself. I wrote it on Pico-8 version 0.2.6b.
I'm very pleased with this cart! From a strictly technical perspective I think it's my favorite that I've ever made. There is quite a bit going on to make the fake 3D as well as the design on the front and back of the card. In this post I'll be making the source code more readable as well as explaining some tools that are useful if you are making your own tweetcarts or just want some tricks for game dev and algorithmic art.
Expanding the Code
Tweetcarts tend to look completely impenetrable, but they are often less complex than they seem. The first thing to do when breaking down a tweetcart (which I highly recommend doing!) is to just add carriage returns after each command.
Removing these line breaks is a classic tweetcart method to save characters. Lua, the language used in Pico-8, often does not need a new line if a command does not end in a letter, so we can just remove them. Great for saving space, bad for readability. Here's that same code with some line breaks, spaces and indentation added:
a=abs ::_:: cls() e=t() for r=0,46 do for p=0,1,.025 do j=sin(e)*20 k=cos(e)*5 f=1-p h=a(17-p*34) v=a(23-r) c=1+min(23-v,17-h)%5/3\1*6 u=(r-1)/80 z=a(p-.2) if(e%1<.5) c= a(r-5) < 5 and z < u+.03 and (r==5 or z>u) and 8 or 8-sgn(h+v-9)/2 g=r+39 pset((64+j)*p+(64-j)*f,(g+k)*p+(g-k)*f,c) end end flip()goto _
Note: the card is 40 pixels wide and 46 pixels tall. Those number will come up a lot. As will 20 (half of 40) and 23 (half of 46).
Full Code with Variables and Comments
Finally, before I get into what each section is doing, here is an annotated version of the same code. In this code, variables have real names and I added comments:
[editor's note. this one came out terribly on tumblr. Please read the post on my other blog to see it]
This may be all you need to get a sense of how I made this animation, but the rest of this post will be looking at how each section of the code contributes to the final effect. Part of why I wanted to write this post is because I was happy with how many different tools I managed to use in such a small space.
flip() goto_
This pattern shows up in nearly every tweetcart:
::_:: MOST OF THE CODE flip()goto _
This has been written about in Pixienop's Tweetcart Basics which I highly recommend for anybody curious about the medium! The quick version is that using goto is shorter than declaring the full draw function that Pico-8 carts usually use.
Two Spinning Points
The card is drawn in rows starting from the top and going to the bottom. Each of these lines is defined by two points that move around a center point in an elliptical orbit.
The center of the top of the card is x=64 (dead center) and y=39 (a sort of arbitrary number that looked nice).
Then I get the distance away from that center that my two points will be using trigonometry.
x_dist = sin(time)*20 y_dist = cos(time)*5
Here are those points:
Tumblr media
P1 adds x_dist and y_dist to the center point and P2 subtracts those same values.
Those are just the points for the very top row. The outer for loop is the vertical rows. The center x position will be the same each time, but the y position increases with each row like this: y_pos = row+39
Here's how it looks when I draw every 3rd row going down:
Tumblr media
It is worth noting that Pico-8 handles sin() and cos() differently than most languages. Usually the input values for these functions are in radians (0 to two pi), but in Pico-8 it goes from 0 to 1. More info on that here. It takes a little getting used to but it is actually very handy. More info in a minute on why I like values between 0 and 1.
Time
In the shorter code, e is my time variable. I tend to use e for this. In my mind it stands for "elapsed time". In Pico-8 time() returns the current elapsed time in seconds. However, there is a shorter version, t(), which obviously is better for tweetcarts. But because I use the time value a lot, even the 3 characters for t() is often too much, so I store it in the single-letter variable e.
Because it is being used in sine and cosine for this tweetcart, every time e reaches 1, we've reached the end of a cycle. I would have liked to use t()/2 to slow this cart down to be a 2 second animation, but after a lot of fiddling I wound up being one character short. So it goes.
e is used in several places in the code, both to control the angle of the points and to determine which side of the card is facing the camera.
Here you can see how the sine value of e controls the rotation and how we go from showing the front of the card to showing the back when e%1 crosses the threshold of 0.5.
Tumblr media
Drawing and Distorting the Lines
Near the top and bottom of the loop we'll find the code that determines the shape of the card and draws the horizontal lines that make up the card. Here is the loop for drawing a single individual line using the code with expanded variable names:
for prc = 0,1,.025 do x_dist = sin(time)*20 y_dist = cos(time)*5 ... y_pos = row+39 pset( (64+x_dist)*prc + (64-x_dist)*(1-prc), (y_pos+y_dist)*prc + (y_pos-y_dist)*(1-prc), color) end
You might notice that I don't use Pico-8's line function! That's because each line is drawn pixel by pixel.
This tweetcart simulates a 3D object by treating each vertical row of the card as a line of pixels. I generate the points on either side of the card(p1 and p2 in this gif), and then interpolate between those two points. That's why the inner for loop creates a percentage from 0 to 1 instead of pixel positions. The entire card is drawn as individual pixels. I draw them in a line, but the color may change with each one, so they each get their own pset() call.
Here's a gif where I slow down this process to give you a peek at how these lines are being drawn every frame. For each row, I draw many pixels moving across the card between the two endpoints in the row.
Tumblr media
Here's the loop condition again: for prc = 0,1,.025 do
A step of 0.025 means there are 40 steps (0.025 * 40 = 1.0). That's the exact width of the card! When the card is completely facing the camera head-on, I will need 40 steps to make it across without leaving a gap in the pixels. When the card is skinnier, I'm still drawing all 40 pixels, but many of them will be in the same place. That's fine. The most recently drawn one will take priority.
Getting the actual X and Y position
I said that the position of each pixel is interpolated between the two points, but this line of code may be confusing:
y_pos = row+39 pset( (64+x_dist)*prc + (64-x_dist)*(1-prc), (y_pos+y_dist)*prc + (y_pos-y_dist)*(1-prc), color)
So let's unpack it a little bit. If you've ever used a Lerp() function in something like Unity you've used this sort of math. The idea is that we get two values (P1 and P2 in the above example), and we move between them such that a value of 0.0 gives us P1 and 1.0 gives us P2.
Here's a full cart that breaks down exactly what this math is doing:
Tumblr media
::_:: cls() time = t()/8 for row = 0,46 do for prc = 0,1,.025 do x_dist = sin(time)*20 y_dist = cos(time)*5 color = 9 + row % 3 p1x = 64 + x_dist p1y = row+39 + y_dist p2x = 64 - x_dist p2y = row+39 - y_dist x = p2x*prc + p1x*(1-prc) y = p2y*prc + p1y*(1-prc) pset( x, y, color) end end flip()goto _
I'm defining P1 and P2 very explicitly (getting an x and y for both), then I get the actual x and y position that I use by multiplying P2 by prc and P1 by (1-prc) and adding the results together.
This is easiest to understand when prc is 0.5, because then we're just taking an average. In school we learn that to average a set of numbers you add them up and then divide by how many you had. We can think of that as (p1+p2) / 2. This is the same as saying p1*0.5 + p2*0.5.
But the second way of writing it lets us take a weighted average if we want. We could say p1*0.75 + p2*0.25. Now the resulting value will be 75% of p1 and 25% of p2. If you laid the two values out on a number line, the result would be just 25% of the way to p2. As long as the two values being multiplied add up to exactly 1.0 you will get a weighted average between P1 and P2.
I can count on prc being a value between 0 and 1, so the inverse is 1.0 - prc. If prc is 0.8 then 1.0-prc is 0.2. Together they add up to 1!
I use this math everywhere in my work. It's a really easy way to move smoothly between values that might otherwise be tricky to work with.
Compressing
I'm using a little over 400 characters in the above example. But in the real cart, the relevant code inside the loops is this:
j=sin(e)*20 k=cos(e)*5 g=r+39 pset((64+j)*p+(64-j)*f,(g+k)*p+(g-k)*f,c)
which can be further condensed by removing the line breaks:
j=sin(e)*20k=cos(e)*5g=r+39pset((64+j)*p+(64-j)*f,(g+k)*p+(g-k)*f,c)
Because P1, P2 and the resulting interpolated positions x and y are never used again, there is no reason to waste chars by storing them in variables. So all of the interpolation is done in the call to pset().
There are a few parts of the calculation that are used more than once and are four characters or more. Those are stored as variables (j, k & g in this code). These variables tend to have the least helpful names because I usually do them right at the end to save a few chars so they wind up with whatever letters I have not used elsewhere.
Spinning & Drawing
Here's that same example, but with a checker pattern and the card spinning. (Keep in mind, in the real tweetcart the card is fully draw every frame and would not spin mid-draw)
Tumblr media
This technique allows me to distort the lines because I can specify two points and draw my lines between them. Great for fake 3D! Kind of annoying for actually drawing shapes, because now instead of using the normal Pico-8 drawing tools, I have to calculate the color I want based on the row (a whole number between0 and 46) and the x-prc (a float between 0 and 1).
Drawing the Back
Here's the code that handles drawing the back of the card:
h=a(17-p*34) v=a(23-r) c=1+min(23-v,17-h)%5/3\1*6
This is inside the nested for loops, so r is the row and p is a percentage of the way across the horizontal line.
c is the color that we will eventually draw in pset().
h and v are the approximate distance from the center of the card. a was previously assigned as a shorthand for abs() so you can think of those lines like this:
h=abs(17-p*34) v=abs(23-r)
v is the vertical distance. The card is 46 pixels tall so taking the absolute value of 23-r will give us the distance from the vertical center of the card. (ex: if r is 25, abs(23-r) = 2. and if r is 21, abs(23-r) still equals 2 )
As you can probably guess, h is the horizontal distance from the center. The card is 40 pixels wide, but I opted to shrink it a bit by multiplying p by 34 and subtracting that from half of 34 (17). The cardback just looks better with these lower values, and the diamond looks fine.
The next line, where I define c, is where things get confusing. It's a long line doing some clunky math. The critical thing is that when this line is done, I need c to equal 1 (dark blue) or 7 (white) on the Pico-8 color pallette.
Here's the whole thing: c=1+min(23-v,17-h)%5/3\1*6
Here is that line broken down into much more discrete steps.
c = 1 --start with a color of 1 low_dist = min(23-v,17-h) --get the lower inverted distance from center val = low_dist % 5 --mod 5 to bring it to a repeating range of 0 to 5 val = val / 3 --divide by 3. value is now 0 to 1.66 val = flr(val) --round it down. value is now 0 or 1 val = val * 6 --multiply by 6. value is now 0 or 6 c += val --add value to c, making it 1 or 7
The first thing I do is c=1. That means the entire rest of the line will either add 0 or 6 (bumping the value up to 7). No other outcome is acceptable. min(23-v,17-h)%5/3\1*6 will always evaluate to 0 or 6.
I only want the lower value of h and v. This is what will give it the nice box shape. If you color the points inside a rectangle so that ones that are closer to the center on their X are one color and ones that are closer to the center on their Y are a different color you'll get a pattern with clean diagonal lines running from the center towards the corners like this:
Tumblr media
You might think I would just use min(v,h) instead of the longer min(23-v,17-h) in the actual code. I would love to do that, but it results in a pattern that is cool, but doesn't really look like a card back.
Tumblr media
I take the inverted value. Instead of having a v that runs from 0 to 23, I flip it so it runs from 23 to 0. I do the same for h. I take the lower of those two values using min().
Then I use modulo (%) to bring the value to a repeating range of 0 to 5. Then I divide that result by 3 so it is 0 to ~1.66. The exact value doens't matter too much because I am going round it down anyway. What is critical is that it will become 0 or 1 after rounding because then I can multiply it by a specific number without getting any values in between.
Wait? If I'm rounding down, where is flr() in this line: c=1+min(23-v,17-h)%5/3\1*6?
It's not there! That's because there is a sneaky tool in Pico-8. You can use \1 to do the same thing as flr(). This is integer division and it generally saves a 3 characters.
Finally, I multiply the result by 6. If it is 0, we get 0. If it is 1 we get 6. Add it to 1 and we get the color we want!
Here's how it looks with each step in that process turned on or off:
Tumblr media
A Note About Parentheses
When I write tweetcarts I would typically start by writing this type of line like this: c=1+ (((min(23-v,17-h)%5)/3) \1) *6
This way I can figure out if my math makes sense by using parentheses to ensure that my order of operations works. But then I just start deleting them willy nilly to see what I can get away with. Sometimes I'm surprised and I'm able to shave off 2 characters by removing a set of parentheses.
The Face Side
The face side with the diamond and the "A" is a little more complex, but basically works the same way as the back. Each pixel needs to either be white (7) or red (8). When the card is on this side, I'll be overwriting the c value that got defined earlier.
Tumblr media
Here's the code that does it (with added white space). This uses the h and v values defined earlier as well as the r and p values from the nested loops.
u=(r-1)/80 z=a(p-.2) if(e%1<.5) c= a(r-5) < 5 and z < u+.03 and (r==5 or z>u) and 8 or 8-sgn(h+v-9)/2
Before we piece out what this is doing, we need to talk about the structure for conditional logic in tweetcarts.
The Problem with If Statements
The lone line with the if statement is doing a lot of conditional logic in a very cumbersome way designed to avoid writing out a full if statement.
One of the tricky things with Pico-8 tweetcarts is that the loop and conditional logic of Lua is very character intensive. While most programming language might write an if statement like this:
if (SOMETHING){ CODE }
Lua does it like this:
if SOMETHING then CODE end
Using "then" and "end" instead of brackets means we often want to bend over backwards to avoid them when we're trying to save characters.
Luckily, Lua lets you drop "then" and "end" if there is a single command being executed inside the if.
This means we can write
if(e%1 < 0.5) c=5
instead of
if e%1 < 0.5 then c=5 end
This is a huge savings! To take advantage of this, it is often worth doing something in a slightly (or massively) convoluted way if it means we can reduce it to a single line inside the if. This brings us to:
Lua's Weird Ternary Operator
In most programming language there is an inline syntax to return one of two values based on a conditional. It's called the Ternary Operator and in most languages I use it looks like this:
myVar = a>b ? 5 : 10
The value of myVar will be 5 if a is greater than b. Otherwise is will be 10.
Lua has a ternary operator... sort of. You can read more about it here but it looks something like this:
myVar = a>b and 5 or 10
Frankly, I don't understand why this works, but I can confirm that it does.
In this specific instance, I am essentially using it to put another conditional inside my if statement, but by doing it as a single line ternary operation, I'm keeping the whole thing to a single line and saving precious chars.
The Face Broken Out
The conditional for the diamond and the A is a mess to look at. The weird syntax for the ternary operator doesn't help. Neither does the fact that I took out any parentheses that could make sense of it.
Here is the same code rewritten with a cleaner logic flow.
--check time to see if we're on the front half if e%1 < .5 then --this if checks if we're in the A u=(r-1)/80 z=a(p-.2) if a(r-5) < 5 and z < u+.03 and (r==5 or z>u) then c = 8 --if we're not in the A, set c based on if we're in the diamond else c = 8-sgn(h+v-9)/2 end end
The first thing being checked is the time. As I explained further up, because the input value for sin() in Pico-8 goes from 0 to 1, the midpoint is 0.5. We only draw the front of the card if e%1 is less than 0.5.
After that, we check if this pixel is inside the A on the corner of the card or the diamond. Either way, our color value c gets set to either 7 (white) or 8 (red).
Let's start with diamond because it is easier.
The Diamond
This uses the same h and v values from the back of the card. The reason I chose diamonds for my suit is that they are very easy to calculate if you know the vertical and horizontal distance from a point! In fact, I sometimes use this diamond shape instead of proper circular hit detection in size-coded games.
Let's look at the line: c = 8-sgn(h+v-9)/2
This starts with 8, the red color. Since the only other acceptable color is 7 (white), tha means that sgn(h+v-9)/2 has to evaluate to either 1 or 0.
sgn() returns the sign of a number, meaning -1 if the number is negative or 1 if the number is positive. This is often a convenient way to cut large values down to easy-to-work-with values based on a threshold. That's exactly what I'm doing here!
h+v-9 takes the height from the center plus the horizontal distance from the center and checks if the sum is greater than 9. If it is, sgn(h+v-9) will return 1, otherwise -1. In this formula, 9 is the size of the diamond. A smaller number would result in a smaller diamond since that's the threshold for the distance being used. (note: h+v is NOT the actual distance. It's an approximation that happens to make a nice diamond shape.)
OK, but adding -1 or 1 to 8 gives us 7 or 9 and I need 7 or 8.
That's where /2 comes in. Pico-8 defaults to floating point math, so dividing by 2 will turn my -1 or 1 into -0.5 or 0.5. So this line c = 8-sgn(h+v-9)/2 actually sets c to 7.5 or 8.5. Pico-8 always rounds down when setting colors so a value of 7.5 becomes 7 and 8.5 becomes 8. And now we have white for most of the card, and red in the space inside the diamond!
The A
The A on the top corner of the card was the last thing I added. I finished the spinning card with the card back and the diamond and realized that when I condensed the whole thing, I actually had about 50 characters to spare. Putting a letter on the ace seemed like an obvious choice. I struggled for an evening trying to make it happen before deciding that I just couldn't do it. The next day I took another crack at it and managed to get it in, although a lot of it is pretty ugly! Luckily, in the final version the card is spinning pretty fast and it is harder to notice how lopsided it is.
I mentioned earlier that my method of placing pixels in a line between points is great for deforming planes, but makes a lot of drawing harder. Here's a great example. Instead of just being able to call print("a") or even using 3 calls to line() I had to make a convoluted conditional to check if each pixel is "inside" the A and set it to red if it is.
I'll do my best to explain this code, but it was hammered together with a lot of trial and error. I kept messing with it until I found an acceptable balance between how it looked and how many character it ate up.
Here are the relevant bits again:
u=(r-1)/80 z=a(p-.2) if a(r-5) < 5 and z < u+.03 and (r==5 or z>u) then c = 8
The two variables above the if are just values that get used multiple times. Let's give them slightly better names. While I'm making edits, I'll expand a too since that was just a replacement for abs().
slope = (r-1)/80 dist_from_center = abs(p-.2) if abs(r-5) < 5 and dist_from_center < slope+.03 and (r==5 or dist_from_center>slope) then c = 8
Remember that r is the current row and p is the percentage of the way between the two sides where this pixel falls.
u/slope here is basically how far from the center line of the A the legs are at this row. As r increases, so does slope (but at a much smaller rate). The top of the A is very close to the center, the bottom is further out. I'm subtracting 1 so that when r is 0, slope is negative and will not be drawn. Without this, the A starts on the very topmost line of the card and looks bad.
z/dist_from_center is how far this particular p value is from the center of the A (not the center of the card), measured in percentage (not pixels). The center of the A is 20% of the way across the card. This side of the card starts on the right (0% is all the way right, 100% is all the way left), which is why you see the A 20% away from the right side of the card.
Tumblr media
These values are important because the two legs of the A are basically tiny distance checks where the slope for a given r is compared against the dist_from_center. There are 3 checks used to determine if the pixel is part of the A.
if a(r-5) < 5 and z < u+.03 and (r==5 or z>u) then
The first is abs(r-5) < 5. This checks if r is between 1 and 9, the height of my A.
The second is dist_from_center < slope+.03. This is checking if this pixel's x distance from the center of the A is no more than .03 bigger than the current slope value. This is the maximum distance that will be considered "inside" the A. All of this is a percentage, so the center of the A is 0.20 and the slope value will be larger the further down the A we get.
Because I am checking the distance from the center point (the grey line in the image above), this works on either leg of the A. On either side, the pixel can be less than slope+.03 away.
Finally, it checks (r==5 or dist_from_center>slope). If the row is exactly 5, that is the crossbar across the A and should be red. Otherwise, the distance value must be greater than slope (this is the minimum value it can have to be "inside" the A). This also works on both sides thanks to using distance.
Although I am trying to capture 1-pixel-wide lines to draw the shape of the A, I could not think of a cleaner way than doing this bounding check. Ignoring the crossbar on row 5, you can think about the 2nd and 3rd parts of the if statement essentially making sure that dist_from_center fits between slope and a number slightly larger than slope. Something like this:
slope < dist_from_center < slope+0.03
Putting it Together
All of this logic needed to be on a single line to get away with using the short form of the if statement so it got slammed into a single ternary operator. Then I tried removing parentheses one at a time to see what was structurally significant. I wish I could say I was more thoughtful than that but I wasn't. The end result is this beefy line of code:
if(e%1<.5)c=a(r-5)<5and z<u+.03and(r==5or z>u)and 8or 8-sgn(h+v-9)/2
Once we've checked that e (our time value) is in the phase where we show the face, the ternary operator checks if the pixel is inside the A. If it is, c is set to 8 (red). If it isn't, then we set c = 8-sgn(h+v-9)/2, which is the diamond shape described above.
That's It!
Once we've set c the tweetcart uses pset to draw the pixel as described in the section on drawing the lines.
Here's the full code and what it looks like when it runs again. Hopefully now you can pick out more of what's going on!
a=abs::_::cls()e=t()for r=0,46do for p=0,1,.025do j=sin(e)*20k=cos(e)*5f=1-p h=a(17-p*34)v=a(23-r)c=1+min(23-v,17-h)%5/3\1*6u=(r-1)/80z=a(p-.2)if(e%1<.5)c=a(r-5)<5and z<u+.03and(r==5or z>u)and 8or 8-sgn(h+v-9)/2 g=r+39pset((64+j)*p+(64-j)*f,(g+k)*p+(g-k)*f,c)end end flip()goto _
Tumblr media
I hope this was helpful! I had a lot of fun writing this cart and it was fun to break it down. Maybe you can shave off the one additional character needed to slow it down by using e=t()/2 a bit. If you do, please drop me a line on my mastodon or tumblr!
And if you want to try your hand at something like this, consider submitting something to TweetTweetJam which just started! You'll get a luxurious 500 characters to work with!
Links and Resources
There are some very useful posts of tools and tricks for getting into tweetcarts. I'm sure I'm missing many but here are a few that I refer to regularly.
Pixienop's tweetcart basics and tweetcart studies are probably the single best thing to read if you want to learn more.
Trasevol_Dog's Doodle Insights are fascinating, and some of them demonstrate very cool tweetcart techniques.
Optimizing Character Count for Tweetcarts by Eli Piilonen / @2DArray
Guide for Making Tweetcarts by PrincessChooChoo
The official documentation for the hidden P8SCII Control Codes is worth a read. It will let you do wild things like play sound using the print() command.
I have released several size-coded Pico-8 games that have links to heavily annotated code:
Pico-Mace
Cold Sun Surf
1k Jump
Hand Cram
And if you want to read more Pico-8 weirdness from me, I wrote a whole post on creating a networked Pico-8 tribute to Frog Chorus.
13 notes · View notes