Wednesday, May 13, 2026
loud shoes
Tuesday, May 12, 2026
the great wave
when Chuck met Valerie
Chuck 20 walked through the door 10 minutes late. Chuck 40 gave him a look.
"Oh shut up" Chuck 20 said.
"What are you two on about?" asked Chuck 30, coming into the main showroom, carrying a box of game controllers.
"I told you he'd be late today, and viola!" Chuck 40 gestured.
"WTF, it's not like I'm not ever late, hey, I'm sometimes early too! But mostly on time." said Chuck 20.
"No, I remember coming in late today. You coming in late, I mean."
"You liar, you can't remember every single sodding time you were late to work." Chuck 20 said angrily, stomping past to the staff room. He was already wearing his regulation "It’s Collectables Time!" polo neck. It had not been washed since the day before.
"I remember this time, partly due of this argument, but also from being hung over, and mostly from coming straight from Charlottes house."
"Oh, so the date went well then?" Chuck 30 said.
"You both know how it went." Chuck 20 replied loudly from the staff room. They could hear the spray of deodorant.
"Ah, youth. Good times, good times." Chuck 40 opened the box and started pulling out individual controllers to shelve.
"Wow, did you use enough?" Chuck 30 fake coughed, "I can smell it from here."
Later that day, Chuck 20 and Chuck 30 were restocking the plushie shelves.
"Can you tell me how it goes? The relationship, I mean." Chuck 20 said, cramming vaguely alligator shaped green things on the shelf.
"You know I can't give you any information about the future."
"Isn't that more about stock tips and gambling? It's just a guideline anyway. You told me you'd told me your greatest love left you. Is it her? Anyway, even if you tell me, you're here, so what possible difference can it make? Does she cheat on me? Do I cheat on her? Do you just drift apart? Is there anything I can do to stop it?"
"No, there is no escape from fate. I can't tell you, you can't avoid it, the multiverse doesn't exist. There is no other timeline where you had asked out Valerie from the 'Rival Fires' store instead. We are the proof." Chuck 30 grumpily stuffed red dragon shaped things into the shelves. A couple fell off the ends, on to the floor. He ignored them.
"So, there's basically no escape for me, is there. I'm stuck in this life. I can't change it, at least partly because you won't tell me what happens. And I work here 3 times. What happens between when I leave and come back ?"
"I can't tell you! But, you've been here nearly, what 2 years. You might get sick of it, maybe try something else. Charlotte could - " he stopped himself, still angry.
"What if I just overheard you and Chuck 40, you know, reminiscing about old times. Maybe while I was hiding behind a door. How could they tell? I mean, if it’s all fated already, if you tell me or not, it doesn't matter, that’s just the way it was supposed to be. Should I buy Bitcoin or Apple stock or something?"
"Gold is always a solid bet, unless it's not."
It was just before closing. It had been a slow day, so this took them kind of by surprise. "Hey, Charlotte is going to come and pick me up from work in about 10 minutes, just a heads up."
Nine minutes later.
"Holy shit, it always weirds me out coming in to these types of places. Do I need to introduce myself, or ...? I mean, technically, we've already met. So you are both an older version of him? Did you get sucked into working here again, or can you never leave? Are we still, you know, a thing, or ..." Chuck 30 looked pained, and Chuck 40 looked sad.
"I'm sorry, I just work here, I can't tell you any more. We come from the future, but we work, and live somewhat, in the past."
"Don't ask those kinds of questions, they can't, or won't, answer." Chuck 20 said with annoyance. "Come on, lets go to the movies."
"Nice to meet you again for the first time!" Charlotte cheerily waved with her free hand as she left.
"She just disappeared from my life." Chuck 30 said, watching them leave. "One day I just never heard from her. No contact, I was never sure what I'd done, but her mother never liked me. I'll see you tomorrow." Chuck 30 went to the back of the shop, collected his jacket, and left.
Chuck 40 waited for him to go, straightened up some collectable toys, and sighed. Talking to the toys sometimes made him feel better, less of a failure. Sometimes he could explain his feelings to them more easily than to a real person.
"I found out a few months ago, she was in a car crash. Died really suddenly. Her family never contacted me, her mother thought I wasn't good enough, just working in this shop. But nothing else had worked out. I guess I really didn't know any of her other friends, it had really felt it was just her and I. I read it on a note someone had left for me. Turns out the note was right."
"I dropped my sunglasses, maybe here, maybe somewhere else. Chuck, I mean your Chuck 20, is waiting in the car." Charlotte said from behind him. "I overheard. Can you show me the note?" Chuck 40 handed over a piece of paper, soft from handling. "Huh, you never were very good at recognising handwriting.” She looked him in the face. ”I have a friend who loves making time paradoxes, she started work at 'Rival Fires' in a few weeks ago, Valerie, I hope you get to meet her, she's fun! Anyway" Charlotte gave him a hug "maybe I'll see you another time. Oh, and there they are!"
Monday, September 12, 2022
in olden times
Unnamed Teen fantasy novel
Part 1 - The beginning
“All good adventures start in the pub” said Randall, sitting at a crude wooden table in the dingy and grimy (and slightly dangerous) Smugglers Arms. The Smugglers Arms had started out as a smugglers pub, accessible via a secret entrance in the basement of an old a tea shop. As such, the pub was dark, built from rough wood, brick and exposed dirt walls. Over hundreds of years, patrons had carved their aliases, extra shelves, hidey holes and escape tunnels in to the soft rock walls from which it had been carved out. Tens of years ago, after the University of Magical Sciences had been built nearby, the clientele slowly changed, from smugglers getting drunk, doing deals, and getting into fights, to students and smugglers, getting drunk, doing deals and getting into fights. Currently, shadowy figures sat in darkened corners, nursing beers or plotting schemes. A shadowy figure a few tables over slipped from his chair to the floor, though it was hard to tell whether the cause was from drunkness, or being stabbed. His companions hurriedly propped him back up on his chair. It was pretty typical for a student/smuggler pub in Pirn on a Wednesday. Randall sipped his beer and smiled at each of his three friends in turn, Guilaan; tall, dark haired and pale, Tobias; stocky and blonde, and Yurgen ;red of hair and nose (especially when drunk).
Randall cleared his throat, and placed his hands flat on the table. He stared at them, and cleared his throat again. He thought about his father, and how he would not approve of the place he was in, the company he was keeping, and the adventure he planned to take his friends on. He smiled a smile.
“The reason I have called you all here this afternoon, aside from the fine ale and excellt company, is to propose a business venture: between the end of our studies and taking our Placement tests, we form a company of journeymen, and take on some quests. Potentially we can make some good money, and gain some useful experience before we sadly separate to make our own way in the world.” he said. "Kind of... a last hurrah, to celebrate our friendships."
His friends slouched in their chairs, and nodded sagely while sipping their tankards of ale.
“Another round of the same for my friends, please Tameria” said Guiilaan, gesturing to the barmaid as she passed the table. Whisking her hand towel onto her shoulder, she nodded and headed toward the rough hewn wooden bar to pour four more tankards of ale.
“So, how should we go about this questing business then?” said Yurgen quietly, leaning forward over the table. Though the pub was mostly empty, it was still rowdy, and interested parties may have been eavesdropping on their conversation. Questing could be a competitive business, and while the group of soon-to-be former students wouldn’t be a true threat to the professionals, even taking only low paying jobs could still become dangerous for them if they were seen to be too sucessful.
Randall leaned forward onto his elbows and rolled his tankard from hand to hand.
"I think we should just take the easy ones, eh?" He said, making eye contact with each of his friends. "We'll go to the market for cheap supplies, and then off to Rory's Gear House for the quest. They have an open board in there, with no fees. It also means we don't have to join a guild or other organisation." The boys at the table nodded in agreement. "But, it does mean we are on our own. If we get into actual trouble, we have no physical backup, and we have no legal representation if things go awry. We would be free agents."
Tameria walked over with four new tankards of ale and placed them on the table.
"Which brings me to the final member of our group." He gestured expansively. "Tameria here is willing to come with us on any requests for help we have, plus it means we can potentially have backup in short order due to her connections in the -"
"She's Nifkin" said Yurgen in his thick Havertown accent, straightening up and folding his arms over his chest. "I won't go questing with no Nifkin."
"Having her along is the only way we can make this a viable proposition,” replied Randall.
Yurgen leaned his chair back, folding his arms. He jutted his chin at Tameria, counting off his points on his fingers. "We won't be able to use horses, some places won't take us for the night, aaaand we need to be careful with her 'n' magic…" Yurgen looked at Randall pointedly.
"If we want to do this, then she stays, otherwise we might as well give up and go home now." said Randall.
"I'm all for her coming" said Guilaan. Yurgen glared at him.
"Me too", said Tobais into his tankard of ale, casting shy glances at the barmaid.
Tameria crossed her arms and looked squarely at Yurgen, frowning. He sighed, and then raised his palms in acquiescence.
"Fine, I have nowt against Nifkin as such," he said, causing Guilaan to snort into his beer. "I'm just thinking about how longer it will take to get to places in wagon, not horseback, and we will need to make she doesn't have access to magic, spell books, magical relics or magical objects." He said objects as two words, ob-jects.
Tobias smiled. Yurgen had been working as a clerk in the town hall while studying, and probably picked up a legal thing or two.
"Duly noted. Any other objections?" He looked at Guillaan and Tobias, who silently shook their heads. "Right!" He enthused, clapping his hands together, the noise startling a couple of drinkers who had been drooping at a nearby table. "Let's meet outside Rory's Gear Shop in a sevenday. I expect you to have all of the supplies you need to go on a journey, including food, rope, bags, and other items suitable for questing. " He waved his hand vaguely. "I'll see if I can borrow my father's wagon for the summer so we don't have to walk everywhere. It's unlikely to happen,
part 2: Troll hunting
One sunny afternoon a week later, Randall, Tobias, Guillaan and Yurgen walked into Rory's Gear House, a general supply shop for adventurers, travellers and anyone else planning on leaving the big city behind and spending some time in the wilderness. It was packed with everything anyone would need for any type of journey. The shop was jam-packed with all kinds of items a traveller or adventurer might need, from magical weatherproof hats, coats and tents, to barrels of dried food, magical ingredients, spell books, tents, sleeping rolls and even cooking gear and utensils to take on long journeys. Randall squeezed his way carefully through the overstuffed aisles until he found the noticeboard, his boots ringing gently on the stone floor. While Randall studied the sole piece of parchment on the noticeboard, the other three boys looked around the shop in wonder and curiosity, not sure where to begin.
"Well, good morning boys, or is it actually…” the shopkeeper peered dramatically out through the dusty windows into the street, ”the afternoon? I'm sure it's a little early for you lot, the The Fat Ladies Arms won’t be open for another 30 minutes." He heartily at his weak joke. His voice was rough, like he’d been up all night yelling at alley cats or wild dogs. "Aren't you supposed to be studying for your Placement Tests? Won't you be sitting them in the next few months?" He stood behind the high wooden counter, making a show of dusting some horn mugs which didn’t need dusting, clearly keeping an eye on the boys to make sure they weren't shoplifting.
"A bit of practical study never hurt anyone." Guillan said to the shop keeper, with an annoyed grimace. The shopkeeper's tone was prying and intrusive, beyond normal conversation.
Guilaan looked for the other two. Yurgen was making his way down an aisle of stinky fish in barrels. Tobias lifted what looked like a dead racoon from a pile near the counter, sniffed it, confirmed it was indeed a dead racoon, and gingerly put it back on the pile.
“Camping gear is down the back.” Said the shopkeeper dismissively.
Guilaan squeezed his way past a precarious stack of spades and pickaxes, to where Randall still squinted at the notice pinned on the notice board. It was nearly illegible, and the light was bad. "That does really depend on what you mean by 'practical study'" said Randall. "The only thing on this board is from some farmers having trouble with a rock troll. I think. The writing is atrocious. The reward seems decent enough though. And it's only a few days from here."
"Might give you some chance to practice your Trollish chat-up lines, eh, Guilaan?" Yurgen grinned at Guilaan, who had followed him through the gap, and was currently struggling to right several spades he had just dislodged.
"And you can practise, um, whatever language sheep talk in." said Guilaan. Yurgen poked his tongue out. "Oooh yeah, sexy sheep."
While the other boys laughed, Tobias looked sadly out the dirty main window, where Tameria stood, trying to look inconspicuous. Her dark hair, tanned skin, red eyes and pointed ears marked her out as Nifkin, so legally she wasn't allowed around magic, magic users or in shops selling magical goods. However, that didn't stop her keeping company with these 'boys from the local wizarding school' on the sly.
"Them racoons are excellent *troll* bait," said the shopkeeper, still polishing the mugs, as Guillaan walked up with a book. "Oooh, Joyce's 'Journeys through the Awarua's'. Good read that. Got some good spells in here. Just make sure you don't let any of them Nifkin read it, eh? They's a bad lot them." He wrapped the book in a spare piece of canvas and slid it back over the rough wooden counter. "Thirty shekels."
"What? Blimmin' books." muttered Guilaan as he handed over the money.
Randal tore the notice from the board. The group of boys made for the door, Randall giving the shopkeeper a casual nod of thanks for the parchment. "Five shekels for the notice, if you please." the shopkeeper called out gruffly.
"Ya what now?" cried Tobias indignantly. "Taking this quest should be free!"
"The gentlemen farmers who put up the notice never did pay for that parchment," claimed the shopkeeper airily, polishing. "If'n you want to take it, you'll need to pay for it."
Guilann stomped back to the counter, and slammed a five sheckel coin on the counter. "Keep the bloody change," he rumbled, as he stalked out.
Tameria met them around the corner from the shop, giving a happy sigh as Guillan grumpily gave her the canvas wrapped package from the shop. She pulled of part of the wrapping excitedly, and peeked at the covers. “Joyce's 'Journeys through the Awarua's.” Guilaan pulled another book from under his tunic. “Ooh, and ‘Nobby’s Book of Demons and How to Charm Them’! Nice!”
"Don't open it here!" exclaimed Yurgen, snatching the books from her hands. He rewrapped the bundle, and forced it back into Guilaan's hands. "It's really no a grand idea for ye even to carrying it! Do ye want us to get arrested!" He threw his hands up in the air in exasperation. "At least wait 'til we are out of town! Bloody crazy Nifkin! Ye'll get us all arrested!"
"Calm down, Yurgen! And be quiet. Tameria, please look at the books later. Nothing to see here, citizens!" he said loudly to a pair of middle-aged human women who stolidly ignored him as they walked past. He waved the five sheckle parchment at Yurgen to shut him up. "So, the quest we so rudely paid for is a village with a troll problem. Called, uh, Clovis. It's near the foot of the Clovis Mountains. It’s about half a day by horse, or, uh ,3 days on foot" he looked quickly at Tameria and looked away again.
"Yeh couldn't get your da’s wagon then?" grumped Yurgen. "If we didn't have her" - he gestured rudely at Tameria - " we could all be ridin'!"
"It's not her fault!" Guilaan protested. "The war may have been over for a hundred years, but there are still pockets of prejudice around."
"Don't I know it," said Tobias. Yurgen glared at him. Yurgen's father was a member of the Freedom Movement, a group determined to make life hard for the Nifkin.
"Look, just break it up you lot, let's get going." Randal muttered angrily, shouldering his pack. "Clovis is this way. Maybe once we are seasoned and famous adventurers of influence, we can change the policies of this realm, but until then, we follow the rules. Let’s well-make our start."
"By the way", said Tobais to Yurgen, pulling a cloak out of his bag, "You might want wear this, instead of your school cloak. That way, random prying shop owners won't know what city or school you are from. It might keep you safe, and her a bit safer too." Tobias gestured at Tameria. Yurgen threw the new cloak over his shoulders, scowled and stuffed his school cloak in his bag.
As they made their way down the road to the city gates, a group of three old Nifkin women, hunched from years of hard labour, and wearing traditional Nifkin garb, hissed and called loudly in the group's direction. Tameria looked away unhappliy.
"What did they say?" Tobias asked Tameria.
"Oh, nothing" she said.
"They said she should stay away from us, she brings dishonour to her people, and draws danger to herself." whispered Guilaan. Tameria's eyes widened.
"I have a talent for languages, studied Nifk at school. Along with some other languages I thought might be handy," he said darkly.
Part 3 The Clay Golem, or, I can always move it later
On the third day of their trek to Clovis, the sky turned suddenly grey and rain turned the once beautiful day miserable. The road quickly turned to a muddy bog. They had to either walk along the side of the road, where the grass was long and wet, or walkin the muddy road, risking losing a boot or being knocked over by a rider who didn’t see them in the dense rain. Eventually, they found a rocky overhang near the road, and set up a camp there, with a smoky fire of wet wood. They pulled off sodden boots and cloaks, and hung them up in the hopes the vague warmth of the fire would dry them out. After a while, Yurgen and Randall slunk out to go hunting, returning a while later with a couple of wet rabbits.
Eventually the rain stopped, and a few hours later, after checking the sky for rainclouds, the group packed up and made their way down the road again.
Soon they heard what sounded like a child in distress. As they rounded a corner, Yurgen, in the lead, stopped on the side of the road, and his hand shot up in a warning gesture.
They saw what appeared to be a child, sitting on a log, crying loudly on the other side of the road. In the middle of the road there appeared to be a large, rectangular package, wrapped in waterproofed canvas, partially submerged in an oddly shaped mud pile.
“What the heck is this about?” Yurgen said quietly, gesturing at the scene before them.
“It seems to be a young boy, crying.” Tameria hotly retorted.
“It might be trap.I think we should go round, or at least scout it.” Yurgen said, ignoring her anger.
“Maybe he is lost in the woods? I think we should at least find out what is going on here.” said Randall.
“Ok, you two can go on with your ‘finding out’, we have a look in the woods and see whats what.”
“Ok, sure.” Tameria took an appraising look at the wood, and then pulled the hood of her cloak over her head, watching the sides of the road for bandits. Glancing at Yurgen, Tameria and Randall walked cautiously down the road to the boy, while the others slithered into the trees on either side of the road to check for an ambush. Tobias clenched his hands into glowing fists, while Yurgen and Guilaan stalked through the forest with swords drawn. After spending a few minutes determining there was no further threat, they made their way to the boy, and tried to understand what was going on.
"I only bought it two weeks ago, and it's ruined!" The boy repeated, and nearly burst into tears again.
"Your package, whatever it is, looks fine, if a little muddy?" said Tameria, frustrated and puzzled. "It's all wrapped up, I'm sure we can pull it out of the mud for you." At that the boy did burst into tears again.
"But it's all melted, it's melted and been ruined by the rain. That bastard did it on purpose."
"What? Guillan, Yurgen, see if you can get that whatever it is out of that mud, eh?" Randall made a shooing gesture toward the package. In reply Guillan gestured at the muddy road, and poked out his tongue. Yurgen was already grumbling his way towards the large package, through the sucking mud.
The boy looked up at Tameria, and said “It’s a fancy bookcase for Mrs Withers. Don’t let them drop it, Miss, I’ll be in all kinds of trouble, what with my clay man melted in the rain.” He squinted at her and let out an involuntary gasp. She quickly straightened up, clasping her hood close to her head, and began berating the muddy young men wrestling with the slippery bookcase.
“What do you mean, your clay man melted in the rain?” said Randall to the boy.
“My clay man, the one carrying the book case” the boy gestured out onto the road, at the muddly pile slowly releasing its grip. Guillan had slipped over in the mud and was laughing, trying to throw mud at an increasingly frustrated Yurgen.
“Oh, you mean a golem?” said Randall. “I haven’t seen one of those for a long time.”
Finally the bookcase was freed from the muck, and the boys were able to drag it to the side of the road.
“We found this while getting the book case out,” said Yurgen, brandishing a mud covered piece of cloth, about the size of a playing card. “It’s got some magic residue on it, I’m not sure what the writing is for though? Maybe some kind of magical attack?” He looked dubiously at the boy ”However, it looks like the ink ran in the rain.”
“Can I have a look at it?" said Randall "Ah, the ink has washed out of it, but I recognise some of it. It's a spell for animating the golem. It's been a while, but I recognise the writing style as well." He looked significantly at Tobais, who crossed his arms and frowned. "Indeed."
Soon enough, the boys were taking turns carrying the book case next to the road, alternatively carrying it, or sliding over the grass and mud, careful not to damage Mrs Wither’s precious bookcase as they did so. After about half an hour, they could hear a low clanking, which eventually turned into a farmer on a ox-pulled wagon.
“Why hello there young Feon, I see you have found some help in these tough times.”
“Father!” Feon ran through the muck to the farmer, and gave him an awkward hug from the road.
“My golem melted in the rain. They stopped to help me.” he said sheepishly.
“Ah, my lad, didn’t I tell you it wouldn’t last? Its rainy season, your golem was all but doomed when you took it out this morning.” he said kindly. “Put the bookcase in the back then, you lot, and we’ll take it where it needs to go after we’ve all dried out at the farm. Your sister is asleep, but we'd best be back quicky.”
Upon levering the bookcase into the wagon, the wagon sank significantly, however with a flick of his crop, the farmer managed to get it slowly moving again. The others walked along the side of the road, to an old farm house a few miles away.
In the kitchen, the farmer, who introduced himself as Farmer Domeney, put some soup on the fire and checked on his baby daughter, while the adventurers peeled off their muddy boots and cloaks. They gratefully sat down at the woodhewn table, polished with age and use, and accepted welcome hospitality of the warm fire. Farmer Domeney chatted to them as he filled simple clay bowls with a hearty soup and an end of hard bread.
“Feon,” he said, and the boy blushed and hunkered over his soup, ”he’s a clever lad who has a way with people and a head for business. Going to go far that one. He bought a golem from some new feller called Richard and was using it to make deliveries. I warned you it was unfinished clay, and the weather would get it, didn’t I? It was all you could afford, but, with the money you’ve saved up and the money from delivering the bookcase, I’m sure you can buy a better one, maybe wood this time? And who knows where you’ll be able to go from there.” he patted Feon tenderly on the shoulder. ”Inherited his spirit from his mother, I'm sure. Bless her.” He turned back to the pot and pretended to give it a stir while wiping his eyes.
When Tobias had heard the name Richard he’d made a grumpy noise, and Tameria, hoping to change the subject from the farmers dead wife, rounded on him.
“Who the heck is this Richard guy, and what has he done to you? You’ve been moaning about him all day!”
“What? I haven’t said anything!”
“Exactly.”
“Richard was one of the people we knew at school, he finished last year. He was my roommate at school, studying automatons and magic,” said Guilaan.
Tobias took up the tale. “He was (is?) a woodworker. So, while at school, I asked him to make a travel chest for me, out of pear wood. He said it ‘wandered off’ but I’m pretty sure someone stole it off him, if he had really even made it at all. I had paid him in full up front, and he only gave me half back, and to top it off, accused ME of taking it so I didn’t have to give him the full amount!"
Everyone sat awkwardly around the table, except for an oblivious Feon, who powered through his dinner with gusto.
“I need to get another golem.” Feon said, around a mouthful. “We should see Richard tomorrow.”
“Yes, I think it would be great to see Richard again.” Guilaan said.
“Well I’m not coming” said Tobias, crossing his arms and leaning back in his chair.
“Fine” said Tameria. “I would like to meet him, and make sure Feon stays in one piece.”
The farmer half-turned to them, poking the fire. “Your Nifkin can sleep in the barn." he said quietly. "I’m sorry, she seems nice enough, but I have a young one,” the baby in the other room gurgled, ”and I don’t want to risk it.”
“Uh, what?”
“Nifkin eat babies.” Randall said.
“Oh, right. Of course."
Wednesday, March 24, 2021
when fire was alive
Wednesday, December 2, 2020
the magician who could turn into a goldfish
Wednesday, March 11, 2020
the Zug under the rug
Monday, January 13, 2020
having a bath in the bathroom
Monday, December 16, 2019
Clean windows
Wednesday, September 7, 2016
Arcade update
A nice big scratch down the side of the case. I just need to respray it.
Hardware problems, the motherboard and screen have been in storage for 2 years and don't go any more. I've got a replacement board from an old work computer, but no screen yet.
A framebuffer issue with advmenu. The driver for the old board seemed to have a compatible framebuffer driver, but the current board doesn't. I did extensive research but was unable to find a solution.I believe the solution may be to either use svgalib or use an xwindows driver to allow advmenu to display. What I've done instead is install groovyarcade (after trying the advance CD distribution, which I couldn't compile). I've set up groovyarcade with all of my settings files, installed fceux and updated advmenu to the most recent version.
Even on groovyarcade, you need to run advmenu under xwindows (using the 'startx' command) as it has the same framebuffer issue. I'll test it out with svgalib and see if I can figure out how to get advmenu going with windows, as a window manager.
Tuesday, September 6, 2016
My Cardboard Rift/Moculous/Boxulous
My Cardboard Rift/Moculous/Boxulous
So, I have a cardboard rift which I am going to use for Skyrim (I'm very excited!)
I bought a google cardboard from the internet. It needs modification as I wear glasses and they get smushed when I am wearing it. Just some padding to keep it off my face should be enough.
To get Skyrim on my phone, I've used:
This is mostly cribbed from this post, with Trinus VR replacing Kainy
https://www.reddit.com/r/Android/comments/2bo4jx/google_cardboardbased_diy_rift_works_with_amd/
Trinus VR (http://trinusvr.com/) plus the android app: (https://play.google.com/store/apps/details?id=com.loxai.trinus.full)
I'm just using the free version at the moment, it gives an hour of use for free.
The interface is kid of ugly, there was a version before called Trinus Gyre which looked much better, but whatever. Trinus has built-in screen splitting, so no need for a screen splitter such as Tridef. It also doesn't play the audio through the headset, so it will play through the computer speakers or headphones instead. Trinus will let you play over Wifi or USB connection. I haven't experienced any latency with it yet.
I played with the mouse input with Trinus (which involves turning off the Windows application, changing the option and then turning it back on) but nothing worked.
To get the mouse tracking woking, I used FreePie (http://andersmalmgren.github.io/FreePIE/) and this script:http://pastebin.com/GUVfrbu7
I had an issue with the mouse not moving when FreePie wasn't focussed, but running it as admin as per this post (https://github.com/AndersMalmgren/FreePIE/issues/40) fixed that nicely.
I have yet to play an actual game of Skyrim, but its looking pretty promising.
Other applications to look into ( I tried these, I liked Trinus and Freepie best, they were simplest):
Tridef: screen splitter (https://www.tridef.com/cart/product.php?productid=3)
Kainy screen broadcaster (http://www.kainy.com/)
Riftcat screen broadcaster (https://riftcat.com/)
vireio screen splitter (http://www.mtbs3d.com/new-vireio-site)
Kinovr kind of worked, but would only run backwards
Update:
I have played skyrim, it's quite good fun! Some tips:
Set your interpupillary distance. I found the video quite blurry until it was changed.
The resolution isn't great still, so I'm going to have a play with the compression settings, it's currently (roughly) 75%.
Use a mouse. I thought I could get away with a mouse replacement, but at least in skyrim I still needed the mouse for autocentring/centring the screen, as well as using the mouse buttons.
I also will need some foam, as the Google cardboard squashed my glasses into my face. I also have the 2nd version of the cardboard, so I taped over the conductive button.
Saturday, March 19, 2016
On the road again...
On the plus side, the keyboard and joystick still work. I've redone the wiring so its no longer all tangled up.
I've found the hard drive and creaked out, because my install is no longer on it, and I thought all of my configs and files were lost! it turns out I'd installed windows 10 on the drive so I could get MarI/O to work. But now I have to reinstall debian and copy over the config files again.
And then check which key does what, so I can fix it all up. I'm not actually sure I got that far, having a quick look at the advancemame config, it all looks wrong. Hmm.
However, another bonus is I got the marquee printed up, and it actually looks pretty good when it is installed in the case! Plus I have (really ugly brown) rubber feet for the unit, which I purchased from a hardware shop. Yay me.
I'll have to make sure I take an image of the hard drive, so when it dies I can redo it more easily. The other option I was exploring was making a bootable USB. The current motherboard I'm using is so old it won't boot to USB (but it was free, so who cares, right?) This way I can update it easily with new ROMs when I like, or do patching or remove ROMs I don't like etc...
Tuesday, December 3, 2013
Blender + Freestyle
I've found some Blender files on Blendswap.com which have freestyle styles. However I can't register an account (you need one before you can download). The blend files are here: http://www.blendswap.com/blends/view/18954
more models here:
http://www.blendswap.com/search?term=freestyle
There are some tutorials for Freestyle here:
http://metalix.co.nz//?s=freestyle
This is the forum for BlenderArtists on Freestyle
http://www.blendswap.com/blends/view/18954
Freestyle node editing in the Blender Wiki
http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Freestyle/Python
Sunday, November 17, 2013
Mame arcade cabinet
When I started this project, I decided the cabinet should be made last. If I couldn't get the sticks and buttons, or get the actual software running, then all I would end up with would be an empty case at the end. Getting the bits to fit would be easier.
In planning my cabinet, I considered a couple of different designs: stand up, cocktail cabinet, and barcade. I decided on barcade because it was small and portable, and I could put it on a stand to make it a standup if i wished (though realistically, it's too small). I would have loved to have made a cocktail cabinet, but I wasn't sure I could get the glass for the top.
I also considered a couple of materials. I do woodwork, so I thought of wooden panels, or using plywood or MDF. We've got some spare MDF , so I used that.
Here is a picture of the cardboard version I made to make sure all of the bits would fit, and also that I could make the parts fit on the MDF I have.
I used these approximately these plans to make my cabinet pattern. However I didn't put the curve in.
http://www.koenigs.dk/mame/eng/stepweecade3.htm
Here are some other plans for barcades.
http://bartoparcade.katorlegaz.com/
A cocktail cabinet plan (Japanese style):
http://dannygalaga.com/mame.htm
http://members.iinet.net.au/~things/ihs/cocktail/index.html
http://web.archive.org/web/20050311053639/http://www.oblate-spheriods.demon.co.uk/mame.htm
Saturday, November 16, 2013
Roms and screenshots
I downloaded my Roms from a torrent site. It had large number of ROMs from different systems (dreamcast, megadrive/genesis, master system, playstation etc). However many of the the MAME ROMs didn't work with the version of MAME I had in Puppy linux, nor with the MAME version from Debian.
However, downloading the most up to date ROMs for MAME would be onerous, especially given the low datacap I have. There are 28 thousand games in the current release for MAME. This means 29 gig of ROMs, and about the same in CHD files. CHD files are extra information for the ROM files, eg graphics and music. Sorting through that number of ROMs to get only the few that I really wanted would be crazy, so I'd need to get them another way.
So what I've done instead is pick through the ROMs which work and then re-download the ones from my wishlist. I was considering getting Space Ace and Dragon's Lair, old school laser disc games, but I haven't added them yet. I have the rom files, but not the video files. It could be fun creating a video disc game of my own ( there are editors out there, I don't think it would be hard) but I lack the time and inclination at the moment. Daphne is the emulator for those games.
Gens - for Megadrive/Sega Genesis
Fceaux - NES
osmose - Sega Master System
mame - arcade
Gngeo - Neogeo
As stated above, many of the ROMs I had downloaded for MAME didn't work. I had a wishlist of games to get, and so I tried downloading them from a couple of ROM sites.
The best one I found was http://www.mamest.com/ You can search by game name, ROM name, or the names of files within the zip file. Thats really handy if you have a ROM which isn't going, and you need to download another file to fix it.
I downloaded my sega megadrive screenshots from here, and the NES ones too I think? It looks quite comprehensive for many systems.
https://www.dropbox.com/sh/8xuhgxahhk6pfk4/umSNUhRGC0
I got my NeoGeo screenshots by leeching this site (mostly because I wasn't sure the above site had them)
http://www.neogeosoft.com/?section=artwork&filter=mvs
I leeched this site for the Sega Master System, though many of the files needed to be renamed.
http://www.vgmuseum.com/
For MAME I used Hitf12:
http://www.mameworld.info/hitf12/
An ugly script to rename Rom files
Be warned! It may be buggy. I basically got it to the state where it would read the snaps and the ROMs. You can go back/forward in the ROM list, and skip back/forward by 10 in the snaps list. It displays one ROM and 10 snaps, you choose from the list which one to rename by typing a number from 1 to 10.
I'd strongly suggest running this against a copy of your snaps directory, and only copying it over once you verify the images are correct.
#!/bin/bash
#rename the file, then increment the lists?
#Neo Geo
Filename_Array=(/Roms/NeoGeo/roms/*)
RenamingThese_Array=(/Roms/NeoGeo/snaps/*)
##variables
#counters
Filename_Start=0
Rename_Start=0
skip_amount=10
array_end=$[${#RenamingThese_Array[@]} -$skip_amount]
function rename_files(){
echo
echo ----Original Rom File ----
echo ${Filename_Array[Filename_Start]}
echo
IFS="^"
a=$Rename_Start
b=$[Rename_Start+1]
c=$[Rename_Start+2]
d=$[Rename_Start+3]
e=$[Rename_Start+4]
f=$[Rename_Start+5]
g=$[Rename_Start+6]
h=$[Rename_Start+7]
i=$[Rename_Start+8]
j=$[Rename_Start+9]
names=(
${RenamingThese_Array[a]}
${RenamingThese_Array[b]}
${RenamingThese_Array[c]}
${RenamingThese_Array[d]}
${RenamingThese_Array[e]}
${RenamingThese_Array[f]}
${RenamingThese_Array[g]}
${RenamingThese_Array[h]}
${RenamingThese_Array[i]}
${RenamingThese_Array[j]}
next5 back5 previous_rom skip_5_roms)
echo ----Rename File ----
echo Press any other key to skip renaming the image file
PS3="Choose an image file (1-$skip_amount) to rename:"
select varname in ${names[*]}; do
if [[ -n "$varname" ]]; then
# chop off the filename from $varname, and from ${Filename_Array[0]}
echo ${Filename_Array[Filename_Start]}
echo $varname
if [[ $varname = "next5" ]]; then
Rename_Start=$[$Rename_Start+$skip_amount]
if [[ $Rename_Start -gt $array_end ]]; then
echo $array_end
echo $Rename_Start
echo "Reached the end of the list of images"
Rename_Start=$array_end
fi
break
fi
if [[ $varname = "back5" ]]; then
Rename_Start=$[$Rename_Start-$skip_amount]
if [[ $Rename_Start -lt 0 ]]; then
echo "Reached the start of the list of images"
Rename_Start=0
fi
break
fi
if [[ $varname = "previous_rom" ]]; then
Filename_Start=$[$Filename_Start-1]
if [[ $Filename_Start -lt 0 ]]; then
echo "Reached the start of the list of images"
Filename_Start=0
fi
break
fi
if [[ $varname = "skip_5_roms" ]]; then
Filename_Start=$[$Filename_Start+1]
break
fi
# get only the file name of the file
FILENAME_AND_EXTN=$(echo ${Filename_Array[Filename_Start]} | rev | cut -d"/" -f1 | rev)
FILENAME=$( echo $FILENAME_AND_EXTN | cut -d"." -f1)
VARNAME_AND_EXTN=$(echo $varname | rev | cut -d"/" -f1 | rev)
EXTENSION=$( echo $varname | cut -d"." -f2)
#EXTENSION=jpg
# get the path of the destination directory
ONLY_PATH=$(echo $varname | rev | cut -d"/" -f2- | rev)
echo mv "$varname" "$ONLY_PATH/$FILENAME.$EXTENSION"
mv "$varname" "$ONLY_PATH/$FILENAME.$EXTENSION"
#increment files to process
Filename_Start=$[$Filename_Start+1]
#Rename_Start=$[$Rename_Start+1]
# start over
#function rename
break
else
echo 'skipped renaming file'
echo $Rename_Start
Filename_Start=$[$Filename_Start+1]
break
fi
done
#echo $Filename_Start
rename_files
}
rename_files
Friday, November 15, 2013
Arcade controls for my homebrew arcade machine
Sticks and buttons
I got my stick and buttons off an online auction site (www.trademe.co.nz). They are all genuine arcade parts. I bought one Sanwa 8 way joystick, and four Streetfighter style buttons (which are concave, rather than convex). I prefer those buttons, as most arcade machines I played on had that style of button. I also bought two player 1/player 2 buttons with the intention of having a seperate (home made) coin mech for credits.
I only bought 4 buttons because I don't like fighting games, which usually require 6. There is a web page (I can't find it again) which shows stats for the number of buttons used, by far 3 or 4 buttons was the most common. I also bought only one stick, for a couple of reasons. Mostly, it was quite expensive, and I wasn't sure how successful my hack would be. Given the issues I've since had with the keyboard hack, I think if I was doing a multi-player cabinet I would get some actual joysticks. Keyboards don't seem to be designed for too many key inputs at once.
The keyboard that I used had a limited number of buttons which could be pressed at once, due to the way the key matrix is set up. I'd say that most keyboards are like that.
However, if I can modify my control panel so the buttons are removable, then I would happily set up something which would hot-swap a button/joystick panel for twinstick shooters.
Wiring a keyboard as a joystick + buttons:
I pulled apart an old ps2 keyboard. You could equally pull apart (or use) a USB joystick. I thought about buying one of -these- USB joysticks and putting it part, but ultimately decided to go with a keybaord.
Inside, there is a board which allows each key press to be interpreted as a letter.
I took 3 goes before I finally wired my keyboard correctly! I got instructions for wiring the keyboard from this instructible and soldered it up. However, I skipped step 4 (which requires using a multimeter to get the keycodes) and hooked the keyboard up to my computer. Using a bit of wire, I simulated pressing a key by shorting the contacts for each key, and mapped out each key on a piece of paper, in a grid.
I found out the keys pressed by running testkeys from the mame-tools package. This is better than just pressing keys on the console or a text editor, as it will display non-printing characters, such as shift (and even say if its left or right shift). The reason I took so many tries to do the joystick was because some of the keys would block other keys from being pressed. Eg (use example from the keycode matrix)
This page explains how keyboard matricies work. Effectively, I had hooked up my keyboard so the key A1 and A3 could be pressed at once: A1 was
"joystick left" and Button 2 was A3. The keyboard didn't know both keys were being pressed at once, and would only send the first input. So I couldn't move when I had a button held down. So I needed to pull out all of my connections and start over.
I started out with hooks made from paperclips, but ended up soldering it in the end, as I thought it might be more robust. If I ever redo it, I'll try drilling wiring holes in the circuit board, and solder the wires through, instead of soldering it directly on. I'll also use some kind of quick release system or something so I don't waste so much heat shrink tubing. Too many of the contacts either came off when I was resoldering, or got pulled off by the weight of the harness (or my impatience).
I did make quick release end bits for the switch ends of the wires, so I could rewire the switches if I needed to. They worked really well, though I used a lot of heatshrink tubing to make them neat and tidy.
I'm not sure what I would do for twinsticks, but I could have it so the second stick uses the same keys as the four buttons, and have the buttons/extra stick each on their own removable baseplate.
Or I could make another cabinet, for twinstick shooters :P
Tuesday, November 5, 2013
Emulator choice and sample Advancemenu configuration file
Emulators
My emulator choices were constrained by a couple of things. Firstly, I had downloaded a heap of ROMs (from a disk put out in 1998!) so they needed to work with them. Secondly, there aren't that many emulators for Linux (especially for NeoGeo!).
UUID=dac3b911-d2e7-462d-b0cf-d19aa4d1fa48 /Roms/MAME/ fat32 auto 0 0
Sample config file for AdvanceMenu, with comments
#updated by Zenoscope
config restore_at_exit
device_alsa_device default
device_alsa_mixer channel
device_color_bgr15 yes
device_color_bgr16 yes
device_color_bgr24 yes
device_color_bgr32 yes
device_color_bgr8 yes
device_color_palette8 yes
device_color_yuy2 yes
device_joystick none
device_keyboard auto
device_mouse none
device_raw_firstkeyhack no
device_raw_mousedev[0] auto
device_raw_mousedev[1] auto
device_raw_mousedev[2] auto
device_raw_mousedev[3] auto
device_raw_mousetype[0] pnp
device_raw_mousetype[1] pnp
device_raw_mousetype[2] pnp
device_raw_mousetype[3] pnp
device_sdl_samples 512
#updated by Zenoscope
#otherwise conflicts with what the emulators are using
device_sound oss
device_video auto
device_video_cursor auto
device_video_doublescan yes
device_video_fastchange no
device_video_interlace yes
#updated bu Zenoscope - fullscreen Advmenu
#device_video_output fullscreen
device_video_output auto
device_video_overlaysize 1024
device_video_singlescan yes
difficulty none
display_brightness 1
display_gamma 1
display_orientation
display_restoreatexit yes
display_restoreatgame yes
#updated by Zenoscope
display_size 800
#The emulators AdvanceMAME, AdvanceMESS, MAME, xmame, DMAME, DMESS and DRAINE
# are directly supported. All other emulators require "generic"
#updated by Zenoscope
# Xmame Arcade emulator
emulator "xmame" generic "/usr/local/bin/xmame.x11"
emulator_roms "xmame" "/Roms/MAME/"
emulator_roms_filter "xmame" "*.zip"
emulator_altss "xmame" "/Roms/MAME/snaps"
#Gens Megadrive/Genesis emulator
emulator "megadrive" generic "/usr/local/bin/gens"
emulator_roms "megadrive" "/Roms/SegaMegaDrive/roms/"
emulator_roms_filter "megadrive" "*.zip"
emulator_altss "megadrive" "/Roms/SegaMegaDrive/snaps"
#Mastersystem emulator
emulator "SegaMS" generic "/usr/bin/osmose"
emulator_roms "SegaMS" "/Roms/SegaMS/roms/"
emulator_roms_filter "SegaMS" "*.zip"
emulator_altss "SegaMS" "/Roms/SegaMS/snaps"
#NES emulator
emulator "NES" generic "/usr/bin/fceu -opengl 0"
emulator_roms "NES" "/Roms/NES/roms/"
emulator_roms_filter "NES" "*.zip"
emulator_altss "NES" "/Roms/NES/snaps"
#SNES
emulator "SNES" generic "/usr/bin/znes"
emulator_roms "SNES" "/Roms/SNES/roms/"
emulator_roms_filter "SNES" "*.zip"
emulator_altss "gens" "/Roms/SNES/snaps"
#NeoGeo
emulator "NeoGeo" generic "/usr/bin/neocd"
emulator_roms "NeoGeo" "/Roms/NeoGeo/roms/"
emulator_roms_filter "NeoGeo" "*.zip"
emulator_altss "NeoGeo" "/Roms/NeoGeo/snaps"
#Daphne a laserdisk game emulator, needs the video files to go as well.
#emulator "daphne" generic "/usr/local/bin/*****"
#emulator_roms "daphne" "/Roms/Daphne/roms/"
#emulator_roms_filter "daphne" "*.zip"
#emulator_altss "daphne" "/Roms/Daphne/snaps"
#These ones need OpenGL to go.
#N64 emulator
# needs open GL drivers
#emulator "N64" generic "/usr/local/mupen64plus-1.5/mupen64plus"
#emulator_roms "N64" "/Roms/N64/roms/"
#emulator_roms_filter "N64" "*.zip"
#emulator_altss "N64" "/Roms/N64/snaps"
#Dreamcast
#emulator "dreamcast" generic "/usr/bin/lxdream"
#emulator_roms "dreamcast" "/Roms/dreamcast/roms/"
#emulator_roms_filter "dreamcast" "*.zip"
#emulator_altss "dreamcast" "/Roms/dreamcast/snaps"
#Sega Saturn
#emulator "saturn" generic "/usr/local/bin/saturn"
#emulator_roms "saturn" "/Roms/saturn/roms/"
#emulator_roms_filter "saturn" "*.zip"
#emulator_altss "saturn" "/Roms/saturn/snaps"
#psx
#emulator "psx" generic "/usr/local/bin/gens"
#emulator_roms "psx" "/Roms/psx/roms/"
#emulator_roms_filter "psx" "*.zip"
#emulator_altss "psx" "/Roms/psx/snaps"
#menu organisation stuff
#mode list
#preview snap
event_alpha yes
event_assign up up or 8_pad
event_assign down down or 2_pad
event_assign left left or 4_pad
event_assign right right or 6_pad
event_assign enter enter or enter_pad
event_assign esc esc
event_assign space space
event_assign home home
event_assign end end
event_assign pgup pgup
event_assign pgdn pgdn
event_assign del del
event_assign ins insert
event_assign shutdown lcontrol esc
event_assign mode tab
event_assign help f1
event_assign group f2
event_assign type f3
event_assign exclude f4
event_assign sort f5
event_assign setgroup f9
event_assign settype f10
event_assign runclone f12
event_assign command f8
event_assign menu backquote or backslash
event_assign emulator f6
event_assign rotate 0_pad
event_assign lock scrlock
event_assign preview space
event_assign mute period_pad
event_mode fast
event_repeat 500 50
#group "Very Good"
#group "Good"
#group "Bad"
#group "
icon_space 43
idle_screensaver 60 10
idle_screensaver_preview snap
idle_start 0 0
include
input_hotkey yes
lock no
menu_base 0
menu_rel 0
merge differential
misc_exit normal
misc_quiet no
#updated by Zenoscope
mode_skip full, full_mixed, text, list_mixed, tile_small, tile_normal, tile_big, tile_enormous, tile_giant, tile_icon, tile_marquee
mouse_delta 100
#preview_default none
#preview_default_cabinet none
#preview_default_flyer none
#preview_default_icon none
#preview_default_marquee none
#preview_default_snap none
#preview_default_title none
#preview_expand 1.15
sort parent
sound_background_begin none
sound_background_end none
sound_background_loop default
sound_background_loop_dir "/Roms/SystemFiles/Music"
sound_background_start none
sound_background_stop none
sound_buffer 1
sound_foreground_begin none
sound_foreground_end none
sound_foreground_key default
sound_foreground_start default
sound_foreground_stop default
sound_latency 0.1
sound_samplerate 44100
sound_volume -3
#ui_background none
#updated by Zenoscope
ui_background /Roms/SystemFiles/Menu_Graphics/background.png
#updated by Zenoscope
ui_bottombar no
ui_clip single
ui_color help 000000 ffffff
ui_color help_tag 247ef0 ffffff
ui_color submenu_bar 247ef0 ffffff
ui_color submenu_item 000000 ffffff
ui_color submenu_item_select 000000 afffff
ui_color submenu_hidden 808080 ffffff
ui_color submenu_hidden_select 808080 afffff
ui_color menu_item 000000 ffffff
ui_color menu_hidden 808080 ffffff
ui_color menu_tag 247ef0 ffffff
ui_color menu_item_select 000000 afffff
ui_color menu_hidden_select 808080 afffff
ui_color menu_tag_select 247ef0 afffff
ui_color bar 000000 ffffff
ui_color bar_tag 247ef0 ffffff
ui_color bar_hidden 808080 ffffff
ui_color grid 247ef0 ffffff
ui_color backdrop 000000 808080
ui_color icon ffffff ffffff
ui_color cursor 808080 ffffff
ui_command_error Error running the command
ui_command_menu Command...
ui_command "shut down" "/usr/bin/shutdown"
ui_console no
#updated by Zenoscope
#ui_exit none
ui_exit normal
#updated by Zenoscope
ui_font "/Roms/SystemFiles/Fonts/freaky-fonts_liquid-kidz/lqdkdz_nospace.ttf"
ui_fontsize auto
ui_game snap
ui_gamemsg "Loading"
ui_help none
ui_menukey yes
#updated by Zenoscope (all skip configs)
ui_skipbottom 20
ui_skipleft 20
ui_skipright 20
ui_skiptop 90
ui_startup none
ui_topbar no
ui_translucency 0.6
group_include "
group_include "Good"
type_include "
type_include "Application"
type_include "Arcade"
type_include "Bet 'em Up"
type_include "Breakout"
type_include "Computer"
type_include "Console"
type_include "Fight"
type_include "Filler"
type_include "Flipper"
type_include "Gun"
type_include "Puzzle"
type_include "RPG"
type_include "Racing"
type_include "Shot 'em Up"
type_include "Sport"
emulator_include "xmame"
xmame/mode tile_normal
xmame/preview snap
xmame/sort parent
emulator_include "megadrive"
megadrive/mode tile_normal
megadrive/preview snap
megadrive/sort parent
emulator_include "SegaMS"
SegaMS/mode tile_normal
SegaMS/preview snap
SegaMS/sort parent
emulator_include "SNES"
SNES/mode tile_normal
SNES/preview snaps
SNES/sort parent
emulator_include "NES"
NES/mode tile_normal
NES/preview snaps
NES/sort parent
emulator_include "neogeo"
neogeo/mode tile_normal
neogeo/preview snaps
neogeo/sort parent
#emulator_include "psx"
#psx/mode tile_normal
#psx/preview snaps
#emulator_include "dreamcast"
#psx/mode tile_normal
#psx/preview snaps
#emulator_include "daphne"
#psx/mode tile_normal
#psx/preview snaps
#emulator_include "N64"
#psx/mode tile_normal
#psx/preview snaps
#menu organisation stuff
group_include "
type_include "
xmame/group_include "Good"
xmame/type_include "
emulator_include "MAME"
group "
group "Good"
type "
group "
group "Good"
type "
type "Application"
type "Arcade"
type "Bet 'em Up"
type "Breakout"
type "Computer"
type "Console"
type "Fight"
type "Filler"
type "Flipper"
type "Gun"
type "Puzzle"
type "Racing"
type "RPG"
type "Shot 'em Up"
type "Sport"




