Wednesday, May 13, 2026

loud shoes

I was waiting for the train last night. A woman walked up with really loud shoes.

I’m not talking about loud like a shirt, where you cover your eyes and say “turn it down, Barry” in a joking way,

I’m talking about actual volume, the kind of shoes that if you wore them every day they would lead to partial hearing loss.

They were the kind of shoes where you’d be at home and hear them from blocks away, yelling at your kids “Your mother is coming home”

“And they’ll be like “what?” When boy racers come past it like some kind of soothing silence.

They were the kind of shoes that would make your ears and eye bleed, make civilisations and windows tremble, something

That would cause you to say “Aw mate, can you walk more quietly, your shoes are a bit loud, eh”

Tuesday, May 12, 2026

the great wave

 Jago walked down the darken alleyways of Kanagawa town, with his eye out for a deal. A speakers attached to the buildings played 80’s music, right now Petshop Boys ‘Its a sin’ was blaring from the jank. Neon lit puddles from yesterday’s rain, highlighting people selling phone cases, flowers, old tech tape players and bio-upgrades. Anything they could lay their hands on.

 

What caught his eye was a girl, tall, with pink hair, a long nose, and flower hairclips. She leaned casually against the shutters of a closed hairdressers called Midori; her arms crossed across the front of her black tank top. To her left was a red fixie bike, and in front of her, an open briefcase on a built-in stand. Inside the worn brown leather briefcase was what Jago had been seeking. Illegal pirate memory chips.

 He looked around, and then stepped up to the case, looking inside, sneaking a quick look at the girl. In earlier years, street had been populated with 'day girls', women who sold themselves for money doing unspeakable things, like boardgame dates or teaching people to read. The local authorities had painted the street bright yellow to drive them away, and they had been replaced by the day markets and illegal sellers.

 Jago snuck another quick look at her, a kind of pretty but world weary face. He decided she would have fit in with the other girls, and his mind began to wander -

“Are you staring or buying, buddy?” The sudden question made him nervous. He stepped back and took his black backpack off. The girl’s laughter tinkled. Jago reached into his backpack for a wad of paper money. “I -”

“I wouldn't buy from her, buddy!” Cut in a laughing man sitting on the other side of the alley. “My brother bought one of her units, now look at him!” He nudged the dirt encrusted form curled up next to him. The girl frowned. “That wasn't mine!” She yelled.

The laughing man scratched the memory bank on his head, a trail of clear liquid tracking down the side of his head. The sign of a bad memory bank install.

 “Eh, I was just kidding, don't get your panties in a twist.”

Jago licked his lips and pulled out the wad of cash. “I'll take four. Of the TSR-640k’s.” he said, answering her unspoken question.

 A scuffle erupted down the alley and everyone turned to look.

“Oh ho, there coming for you, girly!” Said the laughing man, sounding a little concerned. “Better jet!”

 She looked worriedly down the alleyway, then slammed the briefcase closed.

 “My -” Jago started.

 “Take them” she stuffed the chips into his hands, then jumped on the bike and flew down the road, clutching the briefcase full of forged cash and pirate memory chips.

 Jago looked down at the chipped white cases, hidden among the rectangular chips was another one, a square of orange and black, this one not a memory upgrade. He turned it over, not sure what it was. 

 Suddenly the chasers pushed past him, bouncing him around as they boiled down the street, yelling at the girl.

 Jago looked up, seeing a camera on the side of the building, not quite pointed at him, but near enough. He hustled off.

 

The next time Jago saw the girl, it was on a news board, asking for information about her location. There was a video of her jumping on the bike and hoofing it down the street, and the men chasing her, their blue suits making them look like a 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

"do you think we've lost touch with our environment?" Sabrina asked Sam. They were watching the stars spin behind the window.

"I mean, now days we just look at a screen to get our information, it's all right there. In olden times, people would listen to their environment, make judgements from the sounds, the feel of how things were. Instinctive."

 "Look at the stars, and you can tell the time of day, and day of the year. Stella looks at the leaves of the plants in the herbarium to see how the plants are doing, or feels the soil to make sure it's the right temperature or has enough moisture. I see old Hank, he's listening to things, feeling them to see if the air-con is running right or the pumps. Stan will listen to how a robot arm moves or the series of beeps from a power-door. The newer, younger guys just have their gadgets which tell them that the air-con is clogged somewhere, or use sensors for the soil and air."



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

Jedda walked carefully down the stairs into the basement. The candle in her hand gutted slightly in a draft. She would have to remember to tell her father once she got back up stairs. She carefully put the candle holder down near (but not too near! Her mother's voice said) the small bags of chemicals on the shelf. She grabbed some wood from the wood pile and opened the door of the furnace.
 The fire seemed hot and expectant. There was almost no fuel left in there, and the bottom of the grate was full of soot. She would need to remember to tell her father that too.
 She thrust the first piece of wood into the furnace, and the fire curled around it like a warm, ok, very warm cat. The second piece, and it jumped on it greedily, and the third was only part way through the door before it was grabbed by the fire in the furnace and pulled in. She sucked on her singed fingers resentfully and closed the door.
 "Don't give it too much wood at once" her mother would say. "The fire in the furnace is not terribly smart, it will burn up all of the wood you give it, so don't give it too much at once." With that advice, and the candle, feeding the furnace three times a day had become *her* job.
 Jedda looked at the piles of chemicals on the shelf, near (but not too near) her candle. She sucked on her fingers some more, and thought about what her older brother had told her about them. The ones in the white pile made the fire burn hotter, the red pile one made it bigger, and the green pile made it smarter.
 Jedda rubbed some of the green with her fingers, looking at the candle and the furnace, then quickly rubbed it onto her skirt, grabbed the candle and walked back up the stairs.

 When she got back up the stairs, the adults were still talking about boring adult stuff. The (actual) cat was on the shelf above the heater. She put the candle (carefully!) back into the candle container, as her father had shown her, so as not to let it go out. The candle flames were only young, and could go out if you bumped them too hard, or blew on them. Jedda remembered about the draft downstairs, but her father was deep in conversation with her mother about something, so she decided to pat the cat instead. She sat down sleepily on her chair, and propped her arm up with the chair back so she could scratch the cat without having to hold her arm up.
"The whole warehouse was on fire, a huge fire" said Jedda's father, Samel. "I don't know what they were thinking there, there was magnesium and iron powder, and more copper powder than legally allowed in one place."
 "No wonder the fire got so big then! What were they thinking?" Jedda's mother Yuddih sat down at the table, wringing she skirts with her hands "This is terrible for the town! Think of all of the food in that warehouse. How did it start, do they know?"
 "The fire service think it was the furnace fire, maybe a draft or something, it was quite windy this afternoon, though it has calmed down now" Jedda tensed, then relaxed sleepily, she knew there was something she should remember...
 "so, what happened to the fire?" Asked Yuddih.
 Her husband stood up to gesticulate " well, they had to put it out, of course! It was bright green from the copper, and smart enough to know where to go, and what to burn. It itself got too big really, all they needed to do was to wet down some of the warehouse, it had burnt too much iron oxide, and didn't have enough fuel to sustain itself. Luckily there wasn't any sulpher about, so it couldn't reproduce. It would have been had enough with one big fire, let alone loads of other small fires all over the place, smart as that."
 "What's wrong with a smart fire, daddy?" Said jedda sleepily.
 "People don't want it too smart, they think a smart fire will try and free the other fires and escape. Then we would be stuck, nobody knows how to make fire anymore. Not really."
 But Jedda had fallen asleep.

Wednesday, December 2, 2020

the magician who could turn into a goldfish

Reon was sitting in his study, reading the latest issue of "magicians quarterly" when he heard a knock at the door and some unfamiliar voices.
 He jumped with a start. Were they burglers, or worse, creditors? He'd told the Jephsons the week before he had some jobs lined up. Maybe they had sent some thugs around to speed up his repayments. Where was the scrying glass? 
 Bother, it was in the bedroom, he'd been "checking up" on one of the neighbours the night before. If he went to get it, they would be able to see him through the glass front door.
  They were now talking loudly enough, he could hear their discussion.
"He must be home, he spends most of his time in bed reading those bloody journals."
 "While smoking that ratty old pipe of his! Reading will be the death of him."
 "His buggy is here, he must be home."
 "Unless he's gone for a walk?" Said a woman's voice.
 "In this weather? It's freezing I tell you, absolutely ghastly."
 "I say, just knock on the door with your cane again, there's a good chap"
 "I've knocked several times already. You can see the impressions on the door"
 They were going to break the door down! 
 "Is it locked? Go on, try it. I'm sure he won't mind if we wait for him inside, given the weather."
 Too late, Reon realised he'd forgotten to lock the front door. He heard them opening the door and coming inside! As a one of the most powerful magicians in the city, there was only one thing for it. Quick as a flash, he turned into a goldfish and lept into the fish bowl beside his reading chair.
 Reon could hear them indistinctly as they searched the house. He swam in a few worried circles and then hid in the clay boot as the door to his study opened.
 In came his best friend, Jenkins! The burglaring traitor! He must want my books! He was with another, burly, man, carrying a top hat, and a shorter man with a cravat. Reon made sure to note the distinctive birthmark on the short mans face, in case he need to identify him later for the police.
 Last into the room was a shapely red-headed woman in a green dress. It was his neighbour, Marie Osterman! Curiouser and curiouser!
They all came into the room, having a good look at the books. The shorter man ran his thumb along the shelf, nodded appreciatively and then took a book off the shelf. It was a first edition of 'Dobsons Spells and Miscellany', a rare book out of print for 50 years. The shorter man looked inside it, saw it was a first edition, and astonished, put it back. Were they here to steal his books? The scoundrels! Once they left, he'd need to call the police. 
 As the group turned to leave, Jenkins exclaimed "Well, what jolly bad luck, I was sure he had said he wanted to go to the play with us. 'Of Persimmons and Passion fruit' is only on for a few more days."
 Dash it, he'd forgotten! He'd made a promise to Jenkins to see the play, Jenkins had been quite taken with the leading lady. So now he wasn't quite sure what to do.
 The group left the study, heading towards the front hall. In his haste, Reon splashed ungracefully out if the fish bowl, and landed, in human form, with a wet thump on the floor.
 Hearing "What was that bang?" come from the hallway, Reon kept to his feet and swiftly changed his neckkerchief into a bath towel. Marie, his curvaceous neighbour, cautiously opened the study door.
 "Sorry, I was occupied in the bath, what's this I hear about going to a play?" He attempted to say this as casually as he could, while rubbing his hair with the towel. Marie looked around, puzzled, as there were no other doors into or out of the study.
 "'Of Persimmons and Passion fruit' old bean" said Jenkins, as if that explained everything.
 "Of course", replied Reon, flinging the towel onto his reading chair.
 "Come along then", said Marie, taking him by the arm and guiding him out of the house. "The play won't watch itself".


Wednesday, March 11, 2020

the Zug under the rug

We first found out about the Zug under the rug when we one of our cats went missing. We found half of her in a room we didn't use much, by following the smell. I fetched a long handled brush and shovel from the kitchen, wondering where the other half of the cat was. The Zug under the rug tried to take the brush, and I left the room pretty quickly, to find my brother Carl. I could hear the Zug under the rug scrabbling around, trying to eat the brush, instead slapping it against chairs and knocking over lamps in its futile attempt. I guess this is what made it frustrated and precipitated what happened after.
 So I found Carl in the bathroom, brushing his teeth with the vigour of youth, and easily persuaded him to come take a look. On our way back we speculated how the Zug under the rug had gotten into the house (the broken window downstairs Dad had never repaired, or some other hole small enough to miss, but large enough to enter by).
By this time the Zug under the rug was seemingly content again, having consumed, or not, the long handled brush. Carl speculated about what kind of prey a Zug under a rug would have in the wild, and if it was leaving half chewed cats out to attract more things to eat.
 I wondered if we could get it out by the usual trick, with scalding water, or wait it out until it died. Not much is known about Zugs under rugs, though Carl pointed out some crocodiles only need to eat once a year, so maybe it just needed that half-cat. By this time we were at the door, having taken about the most round about way from the bathroom to the lounge you could imagine. Carl was wearing a catchers mask, some fireproof gloves and a butchers apron we'd found last summer. I had the hard hat, a painters facemask and some shin guards.
 I looked at Carl, and he motioned for me to open the door, while he raised the ice hockey stick. We'd had a tussle about who would open the door, but in the end he had won by sitting on me.
 I raised the iron fryingpan in one hand, grabbed the door handle, and pushed the door open.

Monday, January 13, 2020

having a bath in the bathroom

So, I went overseas one time, and I was in the airport, feeling like I needed a refresh because I'd been on a long flight. So I went to the bathroom for a bath. I got my own cubicle, which was nice, but bath was really small, and the water was cold! I couldn't sit in the bath, like I normally would, so I had to stand, and put in, like my left leg, dry it, then put in my right leg, dry that etc. And the towels were really small too. But the best thing was that you cloud flush away the used towels and the dirty water.
 Then, when I finally got into the city, j was really tired. I found a rest room and thought "great,  maybe I can find a bed and have a nap" but it was another room with baths in it! I was really confused. There was a guy with a uniform on in there, I said to him "where are the beds" he said "there are no beds, here, have a towel". So I had another bath, and then found out the baths could convert to a seat, so I sat down and had a rest.

Monday, December 16, 2019

Clean windows

"clean ya winda's for ya mista?"
The shop keeper looked sceptically down into the wheeled bucket next to the urchins feet. The water was black, about 2p worth from the municipal pumps. The windows in his shop were high up the limestone block exterior.
"With that water, I doubt you could get anything cleaner except yourself! Be off with you." The shopkeepers apron bounced on his belly as he spoke. The urchin turned and nudged the bucket and mop a little down the street, and around the corner.
"clean ya winda's for ya-"
The woman in the flowershop looked up, and shook her head sadly. The urchin was in Norbert's territory now, but Norbert hadn't been seen for days, so he was probably safe. The flowershop lady looked sad, and bent more closely over the flowers. The urchins tummy grumbled. His grubby hand reached into a grubbier pocket, but came up empty.
"Clean ya winda's for ya, mista?"
This shops windows were covered in a thick layer of hardened black grime, and no light penetrated into the building.
"Bigger off you!" Said a red-faced man, his head thrust through the narrow gap between door and doorway.
"Only 5p a winda, mista. Look, i got a brush an' all" The urchin waved the brush around, splattering dirty water in the wall of the building.
"I said no! Bugger off"
"I may be short, but me brush is long enough to reach the top o' ya windas, sir" the urchin reached up with the brush, the red faced man half out the door now, yelling "No! No! No!" But before he could stop it, the brush had been expertly swept down the window, to reveal the terrified face of Norbert, crushed up against the glass. The urchin paused, shocked, the brush clattering to the pavement, the bucket unheedingly knocked over, as the red-faced man dragged the now-struggling urchin into the shop, and with a terrible finality, slammed the door shut.

Wednesday, September 7, 2016

Arcade update

So, I've started building my arcade again. Recent set backs have included:

 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...

Wow, so I'm back onto working on my arcade box again. I've painted the cabinet (except I've made a huge scratch down the side plus not spraypainted the top of the underside, oops).
 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 had to download a new version of Blender yesterday. Blender has had Freestyle integrated since 2.50.

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

The 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

Of 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.

For my other roms, there are other emulators which I could have used, especially the for the NES, which has quite a variety, but as I said before, these are the ones which worked with all of my roms. 
I only picked 2d systems with a limited number of buttons, since I have four fire buttons and  two other buttons. Unfortunately this excluded the Super NES. I did have a spare 3d card, but since I was testing the setup on a different system (by adding the hard drive to my current computer and rebooting into the harddrive) I decided I couldn't really test it effectively. I've got the setup down now, so if I really wanted to add some more emulators (and buttons) I could.

So I have:

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.
Verifying ROMs

MAME and some of the other emulators allow you to verify your ROMs. You run the command against the ROM directory and it will spit out a list of ROMs which will run, and ones which wont. It even gives you the names of the missing files. However, it *doesn't* tell you which ROM file which contains those files though. So, if you have a game called "safety dance" based on "stair dancer", it'll tell you need the file stairdancer.bin, but not that its in the "stair dancer" parent zip file. Thats where the website comes in. It makes fixing games really much easy.

Snaps: aka screenshots or previews

I got my screenshots for the previews from a variety of web sources. I needed to rename some of the files to match the rom names, otherwise advmenu doesn't pick them up.  Here is the (very ugly) script I used to rename the misnamed files.

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

This is a bash script to rename snaps (screenshots/previews)  to the corresponding ROM file. it easier than tediously doing it manually.

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!). 

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. Here is how to get it to work with Advancemenu

For my other ROMs, there are other emulators which I could have used, especially for the NES, which has quite a variety, but as I said before, these are the ones which worked with my roms. 

So I have: 
Gens for Sega Megadrive (aka Genesis)
Osmose for Sega Master System
MAME for arcade machines
fceux for NES games
Gngeo for Neo Geo games

Frontends
I'm using this in a cabinet, with a heap of roms and emulators all mixed together, so I need a frontend to launch the different games, and keep everything organised. I've opted for Advancemenu, though there are loads of other frontends (a couple of lists are here and here) which are up to the task. Advancemenu can display the games how I want (a list on the left, screenshot on the right), and works with all of the emulators I want to use. Effectively, you could use advancemenu as a launcher for just about anything - movies, music, whatever - not just games.

Configuration files

Advancemenu (download my config here, includes comments)

My Advance menuconfig has the following features:
*Multiple emulators, with one emulator per screen.
*Custom keys mapped to page through ROM lists (one emulator per page).
*A 'utility' section, for shutdowns, restarts and verifying mame roms.
*Preview screenshots of games.
*8bit tunes as background music for the menu.

The music directory and mame roms directories are on a usb stick, which gets loaded when the operating system starts up.  I used ls-by-uuid to get the uuid of the usb stick, and added the following line to my /etc/fstab to load it where I wanted each time:

 UUID=dac3b911-d2e7-462d-b0cf-d19aa4d1fa48 /Roms/MAME/ fat32  auto  0       0
Utility directory
This has 3 scripts, one to shutdown the computer, one to restart the computer, and one to verify the mame roms. To do the shutdown and restarts, I had to add the user running Advancemenu to /etc/shutdown.allow.

Some configuration tips
You can add BIOS files to emulators, so they can run more games, for example adding the Naomi BIOS to MAME allows you to play Naomi based games. I put them in a seperate BIOS folder, and add that to the ROM search path in the emulator config file. That way the emulator can read the file, but Advancemenu doesn't add the BIOS files to its menu.  
All of the emulators I've used allow for multiple paths to the files.

Sample config file for AdvanceMenu, with comments

So it seems I can't upload text files to blogger (who knew!) so I've just dumped my Advmenu config as a blog post.



#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"