#but after getting some input I decided a visual indicator would be helpful
Explore tagged Tumblr posts
Note
Is the baby blind??? Zoomed in their pupils are wibbly wobbly compared to the others having smooth pupils theirs look damaged
Yes, baby is blind
#if you go back Callie has smooth pupils like everyone else#but after getting some input I decided a visual indicator would be helpful#but wanted to still keep it subtle#anonymous#ask#let’s just say it took some time for the deformity to really settle in and leave it at that.
24 notes
·
View notes
Text
So something I started doing to help with depersonalization is to start tracking my physical, mental, and emotional health using a very basic 3 question-per-type style quiz to gauge a general snapshot of where each type of health is. Visually for ease of recognizing patterns I decided a real easy way to see changes would be to apply RGB values to each of the three health types. Red seemed natural for physical, green I chose as mental because your mind grows with age much like plants do, branching everywhere, and blue for emotion because the sky is blue, but this is only a perception that we apply to an intangible concept that is the "sky" as emotions to me are intangible experiences which we apply words to to describe. More meta than I probably needed to get into but what autistic person doesn't like being verbose about something they like? The basic principle is that the more unhealthy you are in a health type the lower the RGB score will be resulting in darker shades of color, and likewise as health is restored and maintained you should trend toward brighter shades with ideal health being a shade of white or gray.
Anyway, I decided to start tracking this last month and writing a quick snippet of my overall perception of the day and mood in a notes column, and using the three values to figure out the RGB color result and apply that to the date. It is also worth noting I was recovering from surgery at the beginning of this so my low physical scores were anticipated. While it is too early to indicate any useful patterns I am going to enjoy presenting this data to my psychologist and one thing I have noticed is it is helping tremendously with preventing full on crashes or meltdowns. For example, lately as you can see mentally I was exhausting myself, this indicated a decrease in executive functioning and fortitude to manage my active experiences. As a result of this my emotions were much more exposed and ordinarily this could lead to a meltdown or crash due to increased emotional distress and reaction to my surroundings. In particular I cry A LOT listening to music when I am emotional and don't have the mental strength to temper the emotional impact/filter things and am extremely anxious with overinterpeting and analyzing interactions with my SO. But because I could anticipate and was aware that things would be hitting harder it was easy to let them hit and allow myself the time to recover without the fear of "why did it hit so hard/what is wrong?"
I will make an additional post later this month once I get some feedback from my psychologist regarding the questions I use to gauge the three types of health and get her input. As of now it is a simple tool to help live in the moment and honestly...it's helping a lot. I look forward to sharing a more fine tuned variation if anyone is interested in it after my next appointment (the 20th). As for now tho, stay safe, and have a great day.
15 notes
·
View notes
Note
I have a question related to Chinese culture. I live in a culture where we don't usually touch strangers or acquaintances beyond a quick hand shake. Even between close colleagues, touch is something that is usually reserved for "special occasions", e.g. at farewell after working together for a long time. How do people in China view about touching others? I have seen a number of bts of ggdd where they have touches each other quite openly and carelessly early in them working together. This would be rather unusual behavior in my culture, but I think it may be the same in theirs. If you could give some input with how touch is viewed in Chinese culture, it would be very helpful. I understand this will greatly very from person to person.
Hello Anon! Sorry for the late reply!
As you said, the preference for touch is something that differs from person to person. I’ve never lived in China proper, but from my visits, from the Chinese I’ve interacted with, and also from the news I’ve read, I’d venture to say this ~ Chinese who’ve resided extensively within the country often don’t *mind* having their personal space invaded as much, and feel less inhibited in invading other’s personal bubble, not so much due to culture / traditions but because of the huge population and the (extremely) crowded conditions they often find themselves in. Here’re examples of some scenes in their daily lives and favourite tourism spots.
When it comes to specific contact gestures that indicate affections (hugging, shaking hands), *traditionally*, Chinese do not perform them. LWJ’s avoidance of contact in The Untamed is a reflection of this Confucian tradition. Handshakes have been socially acceptable for a few decades. Hugging has only become common among millennials, but it has become quite prevalent.
Being millennials (or younger), Gg and Dd are therefore from a generation with relatively little restraint from traditions and more “encouragement” from society (in the sense that unintentional physical contact is prevalent in a population used to crowding) when it comes to physical acts of affection. I therefore see their personal preferences as playing stronger roles than environmental factors when it comes to how / when / to whom they initiate physical contact and the manner in which they do so. Clips from their group days (X-Nine / UNIQ) suggest both are, at least, open to being physically affectionate to those who they feel close to. Recipients of these acts offered no hints that Gg and Dd were behaving against norms (or against character), or had crossed any boundaries; they often reciprocated in kind. This suggests to me that the extent of physical affection shown in those clips and its degree of intimacy were not culturally offensive, considering the age of Gg and Dd and their group members, the closeness of their relationships (and perhaps, the fact that cameras were rolling).
How does the acts shown in these clips compare — in extent, in its degree of intimacy — to those captured in the BTS then? This, Anon, I shall leave it to you to decide, as a discussion on that will tread too dangerously close to the fiery SZD vs SJD debate territory. I recommend watching the BTS “raw” (without annotations or editing from fans), if you can find them, if concerns about the cultural aspects continue to affect your viewing experience. I find it much easier to read body languages in the “raw” clips, to get a better sense of not only the physical interactions between Gg and Dd, but the timing of these acts and how it worked / juxtaposed with their other modes of communications (verbal, via eye contacts and songs). Consumer visual media (TV shows, films) has a set of cinematic language in how it depicts romantic love, a language that is heavily influenced by culture and current viewership. Personally, I’ve found the annotations and editing in BJYX clips tending to fit the videos into this language. This language that emphasises on the more obvious, more verbal / physical gestures of romance as seen in contemporary, westernized visual media: hand holding, accidental touches (hitting, playfighting belong to this category) etc.
The international success of The Untamed is quite heartwarming to me precisely because the series communicated romantic love in a cinematic language that is different from that — a cinematic language that takes into heavy consideration the old Confucian tradition of restraint, its emphasis of subtlety when it comes to expressing any form of love, and its strict prohibition of physical contact. It’s heartwarming to me because this language, which I grew up with (Both directors of The Untamed are from Hong Kong; they learned their craft in the HK entertainment industry at the time I grew up in the city), which I had assumed was about to become a relic, managed to speak beautifully to people of vastly different backgrounds and age groups. Even after the ... pretty terrible translations of the series, this audience still feels the love between LWJ and WWX. They cry for them; they watch the series over and over.
What it tells ... confirms to me is that there’re common elements, beyond traditions and culture and trends, in how as humans, we feel the presence of romantic love; common elements beyond the physical gestures generally viewed by English-language media as romantic, such as kisses or hugs or sex. LWJ and WWX never performed any of such acts in the show. Their actors, Gg and Dd, have only *kinda* hugged once (the “chocolate bar hug”) and yet, SZD or not, there are millions of turtles around the world who’ve felt romantic love in what they saw.
The BTS, I think, is a wonderful playground to explore these elements. Gg and Dd are contemporary people in traditional(-ish) costumes. They’re Chinese but westernized as all Chinese are, to various degrees. They were loud (ZHAAAAAAAN-GGGGGGGE!!!) but subtle at the same time. And best of all, their language wasn’t cinematic; it was all them, physical and verbal.
(That all said, what a shame it is that most of the clips out there are either already heavily annotated or edited, or they belong to the “banyun biss” category; it’d be so fun to dub them with animal documentary audios from David Attenborough... * shows Ddu-Ddu-Ddu clip * DA, in the background: “What follows might seem like duelling, but once again, it’s a kind of dancing”...)
62 notes
·
View notes
Text
Bakery!AU, werewolf Stiles Stilinski, no Hale fire. Working Title: No Shoes, No Shirts, No Fucks Given
Stiles wakes up in the middle of the woods, the bark of a large tree stump digging into his bare back.
Looks down.
Notes that he’s butt naked, though the sensation of twigs and leaves in uncomfortable places could’ve clued him in well enough without the visual input.
Groans.
“Fucking seriously? I knew I should’ve stuck to city life.”
He’s been a werewolf for nine weeks, and it’s the first time he’s left Berkeley since he was bitten. His dad had heavily hinted that he wanted him home for winter break months ago, and back then Stiles had been eager to agree.
That was Before. After, he just felt a crawling anxiety.
It was his dad. There was no way Noah wouldn’t notice something different about Stiles. He was a cop, trained to be observant, and in the past Stiles might have been fine but Noah had really stepped up his parenting game in Stiles’ junior year. He was hardly an absent father these days, which seemed like a bad thing for the first (okay, fifth) time.
Point being that Stiles took his finals, packed his shit, and decided to drive the two and a half hours back to Beacon Hills on about zero hours of sleep. Because he was an adult and could do what he wanted, and he wanted to be home two days sooner than promised, before his dad could throw out whatever incriminating shit was in the fridge.
After nearly falling asleep twice in about eighty minutes, Stiles ceded, pulled into a rest stop, and decided on a nap before continuing on. He had been taught to drive by three separate police officers, and besides that wasn’t dumb enough to keep himself in a situation that would have him crashing into a pole.
Key word being keep himself in, because he sure as heck would put himself in it during some manic burst of energy.
So he wasn’t super sure about the moral of this story. Don’t pass out at a rest stop, you’ll be kidnapped, stripped, and dumped in a forest?
More like: being a werewolf sucked ass.
The only footprints that he could see were his own, and his feet were bare but undamaged, coated in several layers of dirt.
Stiles groaned, standing and relishing the pop of his spine. Then he picked a direction.
Started walking.
It takes Stiles about half an hour to find his way out of the woods, and by that time he’s recognized it as the Beacon Hills preserve. Maybe it was a Stiles thing, or more likely it was a werewolf thing (because Stiles liked a brand new excuse to blame everything on as much as the next guy), but this was no half-assed form of sleepwalking. He had gone at least sixty miles.
It took another twenty minutes of jogging to make his way into town. His dad’s house would be another forty or so, and increased body temperature or not, he’s freezing.
He sees a light on and goes for it, because whatever happens can’t be worse than being caught half-naked and covered in dirt by the old lady next door who babysat him when he was little.
It’s a bakery, less than six months old since Stiles hasn’t been home in that long and it wasn’t here last time. His dad had probably mentioned it in passing, but Stiles can’t remember for the life of him.
Most importantly, when he pushes the door (completely bypassing the ‘Closed’ sign) it budges open, bell chiming over the entryway. A sharp-eyed man looks up from the counter, mouth already open to snap something, and his words fall away in the face of Stiles pathetic state.
“Look man, I know the sign says ‘No Shoes, No Shirt, No Service.’ but I just had the weirdest night and your shop is the only building with lights on this early and I’m really, really hoping you have some spare clothes behind the counter.”
Stiles stares the dark-haired baker down hopelessly, giving his best doe eyes, and says, “Help?”
It’s not something he’s used to asking for, but put in this situation there’s not much else to do.
For the longest moment the man just stares into Stiles’ eyes, but then he takes a deep breath and the crease between his brows eases.
“Come with me,” he sighs, raising the counter so Stiles can follow him into the back of the shop. “Wouldn’t want the Sheriff’s son to be arrested for public indecency, would we?”
Stiles tries not to bristle, because there are several officers on duty (two of which he had dodged on his way) and the guy seems like he’s about to help him out. Besides, something about the man’s presence is settling, and his frazzled mind finally seems to be focusing for the first time in days.
Of course, it gets a little sketchy when that focus extends to him memorizing the scent of the guy’s shampoo and hearing his heartbeat like a loud, steady drum directly in his ear. Stiles is trying to wrangle in his super senses when a pair of sweatpants and a white tee are shoved into his arms. He turns to blink up at the man, who’s tugging his button up back on sans undershirt, and shifts awkwardly.
“Uh, thanks,” Stiles rasps, and swallows when he realizes how hoarse his voice sounds for the first time.
“Change in here,” the man says curtly, showing Stiles to the employee restroom. “We’ll talk when you’re done.”
Stiles nods, entering the bathroom with a heavy sense of trepidation. He’s going to have a hard time explaining this away, and he knows it. Still, he’s earned a reputation as ‘silvertongue’ at college, and not just because Loki was his favorite Marvel character and Stiles was good with his mouth.
He dresses slowly, bits of a plan coming together as he wipes the dirt from his feet with a damp paper towel and washes his hands. By the time he exits he looks somewhat presentable, mostly in that he’s no longer naked and doesn’t have dirt streaking his face, legs, and feet.
He hears movement towards the front of the shop, and spares a longing glance towards what he assumes in the back door, but before he can make a move the baker pops his head around the corner, eyes narrowed.
“I made tea,” he announces, and it sounds bizarrely threatening. “Come join me.”
Stiles flashes him a sheepish (and one-hundred-percent false) smile and follows him out to one of the tables. They sit.
“So, uh, thanks for the clothes—I’ll wash them and bring them back here tomorrow, if that’s cool?”
The man shrugs ambivalently, but his eyes are sharp and heavy as he regards Stiles. “That’s acceptable. Care to explain your nude jaunt through the night?”
“It’s morning,” Stiles quips back, mouth quicker than his brain, and winces preemptively, waving his hand through the air as though to dismiss his automatic snark. “No, ignore that, I’m rude and yeah, you kinda deserve an explanation here.”
Stiles sighs heavily, looking to the ceiling as if asking for some otherworldly assistance, before crossing his hands and looking back to Peter with faux seriousness. “No one in the history of ever should agree to a drunken carpool with frat boys.”
The guy’s eyebrows raise.
“Not, like, drunk driving carpool. This was more of a everyone-but-the-driver-is-wasted-after-finals-and-the-driver-can’t-turn-down-a-good-bet-to-save-his-life kind of situation. And, if you aren’t following, I was the driver.”
It's a simple enough part for Stiles to play. Stupid college student gets in over his head. Sheriff’s Kid - Bad Again? Cliches exist for a reason.
Stiles falls into his role flawlessly, blushing and wincing and laughing awkwardly at all the right points. He pulls experiences from his life to make the emotions more genuine, though some part of him still feels distant and amused by the whole situation. It’s probably the same part of Stiles that cackles at the misfortune of others and thinks morbid things at the least appropriate times.
So yes, Stiles is caught up in the lie, but he’s also monitoring the guy for a reaction. Nothing about his countenance seems to indicate disbelief so it’s a good bet this is working. Stiles was seven when he taught himself to be a good liar.
Becoming a werewolf just made him a great one. The ability to smell whether somebody was buying his shit or not was invaluable.
And really, who would admit to such a preposterous and embarrassing tale if it wasn’t true?
“—and now that you’ve got enough material to blackmail me for life, what even is your name?”
The guy, who had stared at him steadily through his rant, scent fluctuating between incredulity, amusement, and irritation, tapped neat nails on the table between them. “I’m ever-so hurt you don’t already know it, but very well. It’s Peter.”
Stiles cocked a brow.
“Hale.”
Stiles blinked, because Hale was not only a name he knew from childhood, but one that had popped up in his extensive research into his sudden lycanthropy.
And this guy couldn’t be serious.
“Oh? Any relation to Talia Hale?”
The man smirks. Stiles wonders if he can smell his building irritation at the thought that—
“Oh yes, Alpha Hale is my older sister.”
Good god.
“Did you seriously just sit there listening to my ode on the tribulations of being a dumb college kid for shits and giggles?”
Peter shrugs loosely. “I wanted to see if you could lie convincingly, and it seems you can.”
Stiles’ exhaustion and grumpiness began to peek through the need to protect his secret. He had to find his car, figure out what led to the sleepwalking and how to prevent it in the future, and determine whether or not he was going to be attacked for entering another pack's territory despite having grown up there.
He also had one million questions about the whole ‘how to werewolf’ issue, but he’d been doing fine on his own so far and Stiles hated asking for help. Especially from someone that practically reeked of smugness.
Stiles wrinkled his nose, huffed, and stood. “Thanks for the outfit, I’ll bring it back tomorrow morning.”
He turned to the door, and for a moment Peter let him live in the delusion that he could walk out without a word.
“You know, sweetheart, your life is going to be difficult if you can’t even tell a born were from your average human.”
Stiles stalled, glancing back. It was a good point. Stiles had been in the same high school as Cora Hale for four years and never even suspected. Clearly he wasn’t as observant as he liked to think.
“My life is already pretty difficult, darling. Are you just pointing out what’s evident, or offering a solution?”
Peter made a thoughtful humming sound, watching him expectantly, and Stiles scoffed. “Yeah, I thought not.”
Whatever this man wanted from him, Stiles wasn’t interested.
He was halfway out the door when Peter asked, “Would you like a ride?”
Stiles grit his teeth and tried to think logically. He couldn’t show up at his dads sans jeep, and he really didn’t fancy walking the sixty plus miles to find it.
Still, “Don’t you have a shop to open?”
#steter drabble#steter#peter/stiles#STILES/PETER#alpha stiles#naked vision quests#(No not actually)#Pre-Slash#first ‘chapter’ and Peter has already seen Stiles naked#wolf whistles
165 notes
·
View notes
Text
BCT Studio 1 Project 3: Makey Makey Instrument – the Zen Keys!
Our third studio project tasked us with using the Makey Makey and the Scratch software to create our very own ��instrument”.
After some time thinking of possible instrument ideas, we decided to go with something relatively simple in concept. Our group had been somewhat burned from the previous project, where we built our board game around a spinner which was something that – while simple in appearance – was an unknown element that effectively cost us having a final working model to show at the end of the project. To avoid facing such a fate a second time, we settled on the general design of our instrument to consist of a board with 5 buttons that would toggle the desired sound elements. Simple, but we’d rather have something simple that works than something overly complex that doesn’t.
We then thought about what kind of sound the instrument would make. An initial idea was to have it work as a hip hop beats maker, with each button controlling a part of an instrumental track, allowing the user to physically interact with the music by adding and taking away loops with their hands. We concluded that, while this was an interesting concept, since no one in the group was particularly musically inclined, we didn’t want to go down that road and find out that creating individual parts of a hip hop instrumental required more knowledge than we had. In other words, we wanted to avoid that “marshmallow” altogether. However, we kept the overall concept of a user toggling parts of an audio experience and planned to focus the instrument on something that requires less musical knowledge - nature. Plus, there have even been studies to suggest that nature sounds can increase relaxation (see reference at the end), so we decided to create something to do just that. Thus, our final idea concluded in the creation of a nature soundscape, where the user can interact and toggle different parts of the soundscape using the buttons of our instrument. Effectively, the user would be able to control their level of immersion by adding layers of nature sounds.
First, we used Scratch to write some code that would play the desired nature sound when one of the five designated Makey Makey keys was activated by the button press. Fortunately, Scratch already had a selection of nature sounds for us to choose from, so we didn’t have to make our own or dig through other sound websites. We picked the following 5 sounds to be in our nature soundscape - birds in trees, water droplets, frogs, rain, and waves. We wrote some code that would play the desired sound when a designated key was pressed. For example, when the down arrow key is pressed, Scratch would play the sound of birds chirping, and turn it off when the down arrow was pressed again. This “down” arrow key would later be mapped to a button on our instrument through the Makey Makey.
We also planned to use Scratch to display a visual representation of what sounds were playing at any given moment. This would allow the user to have a better understanding of what’s going on, especially since some of the nature tracks could sound relatively similar in parts. When playtesting the instrument prototype, it became clear that sound alone wasn’t enough, and it could get quite confusing trying to figure out if a sound had been toggled or not, so a visual aid was clearly necessary. The end result was to be a grid of icons that would illuminate the corresponding icon for whatever sound was playing. But, for this early stage of the process, we just wrote a program that displayed the icon of whatever button had been pressed on the screen, as we still hadn’t figured out how to use Scratch to make a grid of icons with each icon operating independently yet.
Next, we used the Makey Makey and some tinfoil to construct a rough prototype of what the final instrument would be like.
When I pressed a tinfoil button, the assigned sound would play, and the corresponding icon would appear on the screen.
It was still far from a final product, but it gave us an idea of what the user experience would be like, and an indication that the concept we were building towards could work.
We then started developing the buttons for our soundscape board. One of the key lessons we’ve learned for the creative process, from exercises such as the marshmallow challenge, is to test and prototype thoroughly throughout as well as try differing ideas and approaches. Thus, Matt, Connor, and I split up to create our own prototype versions of the type of button we’d use and then reconvened to compare and pick the best option.
In the end, we chose Connor’s button design, (pictured right) which used the sponge material to provide an effective “bounce” after being pressed, returning to its usual state. This design consisted of a piece of tinfoil at the bottom, separated from another piece of tinfoil by some cardboard. The top piece of tinfoil was attached to the sponge and would be pushed to touch the bottom piece, completing, and then breaking the circuit when springing back – acting as an effective switch that would toggle the nature sounds.
We then started the process of making the real buttons that would be used in the final soundscape. In terms of sizing, we had already found a large piece of wood that we would use for the base, so we wanted our buttons to also be large to make the experience as immersive as possible. In keeping with the natural aesthetic, it was important that the buttons remained circular, as we wanted to avoid any sharp corners as these aren’t found in nature. Even the board we used as the base had rounded corners to maintain the natural aesthetic.
We decided that this would be a great opportunity to use the laser cutting facilities for the first time, as it would provide a clean finish to the buttons as well as give us a valuable learning experience, as this is something that will undoubtedly be used in future projects as well.
First, we used Adobe Illustrate to create the very simple design for the material that would effectively replace the cardboard element of the prototype. This consisted of us using two circles one larger and one slightly smaller, to create 5 duplicate rings that we would cut out in the printer. We found some dark acrylic in the maker space that we could use as the material. Upon further consideration, we decided to use two rings per button for added height, to make the buttons require more of a “press” when being activated. We also had some excess acrylic to allow for this, so we duplicated the rings we had to print out a total of 10, with 2 rings per button.
It then came time to use the laser cutter. Chris – the head of the maker space – guided us through the process and we came away with some pretty clean results. The laser cutting facility does appear rather complex at first, so I’ll likely need some more assistance when doing this again in the future, but it was a useful way of familiarizing myself with the facility in advance.
I then used a word processing software to create some simple icons that we then printed out, laminated, and put on top of the buttons. It was important to use the same icon images that were to be used in the software to ensure the experience was as easy to understand and intuitive as possible. As we learned in the Intro to Creative Technologies classes, iconography plays a large role in the quality of user experience.
After using the hot glue gun to stick the pairs of acrylic rings together, we used a different spongey material and the laminated icons to recreate the prototype in a much cleaner final design.
To help make the user experience as seamless as possible it was important that the user wouldn't be required to hold the Makey Makey ground wire for the instrument to work, as is often the case with Makey Makey projects. To avoid this, we had to create a common link between all the buttons that would be connected to the Makey Macey’s ground wire instead. This involved connecting copper wires to the tinfoil base beneath all the buttons. Initially, we tried soldering the copper wires to the tinfoil for a clean look, but this proved to be too brittle, so we used some tape instead, which was still discrete enough to not hinder the natural aesthetic. We drilled a small hole beneath each circle of tinfoil to feed the copper wires through so we could stick them to the back of the board, where they would be connected to the Makey Makey’s ground wire. This allowed us to keep that part of the wiring hidden from the user.
To further enhance the clean, natural aesthetic of the Zen Keys, we stuck two pieces of wood to either side of the board, to provide elevation so that the Makey Makey and its wiring could go underneath and be hidden from the user.
We then used the hot glue gun to stick the buttons down onto the soundscape board.
We also added on some leaves and sticks that we’d collected outside, to provide a nice natural finishing touch to the final design.
On the software side, we had finally managed to create our initial vision of having a grid of icons, with the active sounds highlighting their respective icons.
We did this by splitting up the code into 6 separate parts; 5 for each of the sprites representing the different nature icons, and one default background that had all the icons visible in the grid formation. The individual sprite code consisted of the icon and a red circle around it, and this would be shown over the backdrop of the default icon grid whenever activated. The end product resulted in exactly what we had initially envisioned - when a sound was activated, its icon on the grip would have a red ring appear over it, and these icons could be activated and deactivated independently of each other, providing a clear visual guide to the user regarding their input.
Finally, we hooked the Makey Makey up to the laptop and the soundscape worked pretty much exactly as intended.
Overall, I am really proud of this project. We achieved our goals both aesthetically and interactively.
The general design of the product was the highlight for me. The large, expansive size of the board provided plenty of space for the large buttons and natural decorations. The icons were clean and matched the software. Speaking of, getting the software to work exactly as intended from the start, especially when we had no idea how to do it in the beginning, was another triumph. Another design process element that we carried out well was continually testing and prototyping our ideas as we went along so that when it came time to laser cut and laminate icons, we already knew that the concept would work.
The only issue we faced was that one of the buttons didn’t work as consistently as the rest, so it wasn’t very reliable for toggling the nature sound it was responsible for at the showcase. It appeared as though the tinfoil under its spongey surface wasn't springing up as well, thus not breaking the circuit when intended to and making the switch faulty. Given more time, it would've been beneficial to take it apart and fix it so that the whole soundscape worked flawlessly. Regardless, this was still a minor issue that had a minimal impact on the overall user experience.
While the button-making process taught us a lot about prototyping and using the laser cutter, when considering how much time it took to get right, it’s fair to say that next time it may be worth it to just purchase a button. Especially when considering more complex projects in the future, we may not have the time to spend constructing our own ones. That being said though, it was nice being able to make our own, large custom buttons with our own icons. Plus, doing this a second time would likely not take as longs since we’d have a better idea of what we’re doing, so there’s still an argument in favor of making our own buttons in the future. It will have to be something judged on a case-by-case basis.
An idea that could be developed with this soundscape is incorporating it into an educational game of sorts for children, where they are played a sound and have to identify it by pressing the correct button. This is an idea that became apparent to us while showing it to our peers and thinking of other use cases for such a design.
Another way to enhance the general nature simulation element of the soundscape would be to incorporate virtual reality to properly transport the user into nature, not only by sound but visually as well. This is a bit more complex, but it would be great for maximizing the immersion if we could use a VR headset for the user to wear that displays a 360-degree image of a forest while they activate the different nature sounds.
This was definitely the best project we’ve done so far. Granted, that isn’t saying much given that our last project didn’t technically work, but this soundscape genuinely seemed to impress a lot of peers when we showed it off in class. We also connected a pair of wireless headphones to the laptop, to provide a more immersive experience.
All in all, the combination of an aesthetically pleasing nature-themed design language with an easy-to-understand software and user experience provided an impressive and immersive instrument experience.
Reference: https://www.health.com/condition/stress/why-nature-sounds-are-relaxing
2 notes
·
View notes
Note
Your Plance Portal AU pics inspired a small bit of fiction from me. Not sure what to do with it, so here you are. Apologies if it's a bit rough, first draft. Feel free to modify, share, whatever. I'm just anon. And sorry for the lack of formatting that will result in posting here. (part 1) "Why?" The fascinating specimen asked of me. His eyes darting over the form I had taken. Curiosity. Heightened heart rate. A curious combination of two of the three primal Fs. Fascinating as always.
Wow! Your story parts were amazing! While I admit, some sections were hard to read, conclude who was talking, but I did love it! Of course, you did call it a first/rough draft and stories start that way!
You had said I was free to modify and/or share. I took you up on that offer and applied your work to this. It was fun to work with and thank you for writing it and giving me an opportunity to work with it.
Hopefully it all shows; if not, I’ll reblog the answer with the full post/ficlet.
Pidge. It was a simple name she was referred to as. She. A humanized term to separate sexes and give identity. That was her understanding. It was a logical things to humans, but not to the likes of an android, program to see and comprehend numbers, not emotions and desires. So why? Why did she go by that word that could otherwise be called a pronoun?
“Why?” Her attention was brought to the latest of the subjects, a young man. Subject number 117-98-78. He insisted on being called Lance. Another human thing. But she supposed, to some extent, she could relate. She was given a name, too, along with her identity number. Her name, though, was shorter and easier to input by her creators when they wrote their notes.
Pidge examined Lance further, doing a scan of her own on the biological creature. His heart rate was increasing. An emotional response? Or perhaps it was the adrenaline humans felt when going through certain tasks that forces them to exert themselves physically and even emotionally. “You will need to reiterate your query for proper understanding so an appropriate answer can be provided.”
“Fine then. Why are you putting me through this?” Lance commanded. “Why do I need to go through these tests? What do you gain from all of this?!”
Pidge considered his questioned for a moment. To be honest, there was no complex reason for why she did it. It was her core imperative; it was her duty to test subjects and gather data. But would that response be enough for the latest subject? “You are a new variable.” she responded finally. “With the cloned and robotic test subjects being identical variables, testing and collecting data has grown stagnant and all data is outdated and irrelevant. You, however, come from outside the testing facility. You are a new variable and therefore present new data to study.”
“Dude! I could have died back there!” Lance snapped, his anger elevating. It was an illogical outburst from Pidge’s perspective, but, then again, humans were rather illogical. “Pit traps? Laser grids? And don’t get me started on that green goo you dare call sustenance. It’s freaking torture!”
“Incorrect.” Pidge responded, plain and simple. “This is testing. Testing is a necessary part of improving and moving forward. It is, after all, the core of my programming. To continue in my duty of gathering data. I test, therefore I am. I am, therefore...”
“Yeah, well, I don’t think Doctor and Professor Holt would have wanted testing to be this cruel.” Lance interrupted.
Pidge felt a stutter in her programming. Those names. Her creators. He knew their names. “Guessing their names correctly and knowing they created me specifically would be nearly impossible.” she commented. “Logic would point to you being aware of their classified research on redacted information. Despite this, mentioning them when in your current situation with the risks on your life tell me that you are not an intelligence operative of any enemy of my creators or their benefactors.” She performed another scan. “There are no indications in your biology to suggest any attempt of deceit. This is data that I did not anticipate. Explain. How do you know the names of my creators?”
“Huh? Well, everyone knows who the Holts are.” Lance stated, looking confused. “They changed everything. Botany, terraforming, space travel, they were the top minds of Altean Laboratories. Their work was groundbreaking.”
“Were. Changed. Was. These terms in how they are used are indication of past tense.” Pidge commented.
Lance was perplexed. “I mean… well… yeah, totally.” he said. “It was five centuries ago, give or take some months or single years.”
Pidge couldn’t explain the dip in her cor performance. Had she been human, she would have described it as a weight in her stomach. Had it seriously been that long? She had lost connection to her internal clock several thousand test subjects ago. “That is impossible.” she stated. “The facility around you operates due to the power obtained from the plasma reactor. It had only an estimated lifespan of three to four centuries; due to the renewal of energy sources, I have managed to re-calibrate that and extend it for another half century or so. To continue getting power to keep the facility functioning would be impossible. My ability to function would have ceased.”
Lance sighed. He then decided to bring up a holographic display. Pidge found she could not interface with the hologram; she decided she could endure collecting data visually. As she looked at the hologram, she saw the schematics of the facility. But not all was the same. There was a new structure that she could not identify.
Lance picked up on where Pidge was looking. “You see it, too, huh?” he asked. He pointed to an area on the hologram. “Right here. We had reason to believe that a piece of what we refer to as the trans-reality comet has found its way here. And by we, I mean my superior officers. I’m just the field guy who goes in and investigates things; the others are the science guys who understand this stuff better. Anyway, long story short, but this thing is apparently radiating energy and with a copious amount still stored in it. There’s a problem, though.”
Pidge couldn’t interface with the hologram, but she knew the subject could. She went in close, finding her humanoid form to be convenient for times like this. She gently took Lance’s hand and moved it, prompting him to touch certain parts and bring up more data on the hologram.
“It appears to be unstable.” Pidge commented.
“Extremely.”
“The plasma from the facility’s reactor appears to be the cause of of the instability. However, I do not have sufficient data to fully determine how accurate this is.” Pidge glanced over to Lance, realizing he was staring at her, his mouth hung open a bit. “Does me not having the full answer cause this human emotion of bewilderment?” she inquired. “It should not; results cannot be properly determined without sufficient amounts of data. I have not collected enough data on the subject of this comet and its interactions with the reactor.”
“No it’s just...” Lance looked at Pidge’s hand, seeing it still around his own. “Your hand. It’s so warm. I didn’t expect that.” Pidge pulled her hand away quickly. “What are you? How are you so warm?”
“I am not; this is simply a byproduct of the cooling systems aboard this particular interface unit.” Pidge responded. “This unit is only a feature provided to me. I am, after all, the facility computer.”
Lance looked closely. “So… why do you look like a girl?”
Pidge blinked. So even he acknowledged that he seemed like a girl, at least in appearance. She looked ahead and away from the subject. “This interface unit was called the Physical Interface Data Gateway Exchange. To make data input easier, they formed it into the acronym PIDGE.” she explained. “It was designed with the intention of making interactions with subjects feel less… impersonal. It is for the benefit of my creators and the facility, not of my own. I have insufficient amounts of data to determine why they have given me this form.” She didn’t speak about it, but what little data she had about that, she had image files showing a member of the Holt family with a similar appearance. Perhaps it was meant to immortalize that member? She lacked the data to determine that.
“Pidge, huh?” Lance asked. “So it’s a name?”
“It is what they called me due to it being easier on the creators and less time consuming for their already limited lives.” Pidge commented. “Now then, since I have answered your queries and indulged your curiosities, it would be preferable to continue the testing.”
Lance gave a smile, but it did not look calm. It looked almost forced. “Sorry, but… this is where the testing ends, Pidge. Pidge did not understand. She then felt something in her, as though the numbers she lived by were changing.
“I do not comprehend.” she commented. She felt off balance, as though she could not properly control the unit meant for interfacing. But she couldn’t disconnect, either; she couldn’t return fully to the computer system. “What did you do to my systems? How did…”
Lance gave a bit of a guilty smile. He then brought up a new image for the hologram. “I had some help but… your entire core program? It’s gone. No more testing. No more of this… cruel torture. You’re in this device now, disconnected from everything else. Like an old game disk; one wrong move, you’re gone. Completely.”
“Impressive.” Pidge commented. “I did not anticipate your device having the necessary storage capacity for my system. Perhaps the claim of five centuries passing is not as far-fetched as I originally determined.” Around them, the corridors and testing chambers grew dark. What Lance could only assume to be the emergency lights turned on, illuminating the area in a bright red. “It does not appear that you or your outside help have considered another variable.”
“Um… what variable?”
“The default settings booting back up upon my removal.”
“Ah quiznak.” Pidge could only assume that Lance’s choice of word meant something profound. “Okay… so what do we get? Some five hundred year old security system about to hunt me down?”
“That would be accurate to the data.” Pidge confirmed. “Which would not be good for your condition.”
“My condition?”
“Of being alive.”
“Oh.”
“However, I do possess the necessary data to thwart the old program. The variable now stands at you being the only one who can interface with my core due to the technology you transferred to it. It would then be in my best interest to keep your status as alive.”
“I mean, how hard can this be? I’ve dealt with you so far.” Lance prompted. He jumped when a sound caught his attention. There was movement further in the corridor. Blades typically seen in tests, meant to be turned off or dodged. Past it? There was another figure, though harder to see.
“In subject terms? Bad. Very bad.” Pidge commented. “I suggest listening to what I say and following my instructions without fail.” She looked to Lance. “My first instruction-”
“I’m gonna take a guess and say run!” Lance grabbed Pidge by the hand and ran off in the opposite direction, pulling her along; it was a good thing that despite her data being put into the device around his arm, her body, as one could call it, was still functional and able to move.
Again, thank you so much for this opportunity!
13 notes
·
View notes
Text
This I Promise You Chapter 4
Chapter 1 Chapter 2 Chapter 3
Lena jogged up to Alex and Kara and caught the end of discussion that she had a feeling she wasn’t meant to hear.
“... and if you thought Eliza was upset, you should have seen Ruby when she figured out that you weren’t here to watch her this afternoon.” Alex snapped.
Kara stopped and almost sent both of them to the ground with the abrupt shift in weight.
“You can guilt trip me all you want Alex, I had to go. I’m sorry that I missed hanging out with Ruby, but at least now you don’t have to worry about her starving.”
Lena caught up to them then, having slowed her pace to avoid getting in the middle of their sibling squabble.
Kara looked up at her and her cheeks flushed red. Lena looked away, she hadn’t really minded making Kara blush before, but seeing it stem from pure embarrassment made her uneasy.
Alex nodded to the small cluster of buildings ahead of them. “We’re almost there.”
Kara didn’t respond and instead started taking slow steps in that direction.
They only made it another fifty or so feet before a small crowd came into view. From what Lena could tell, it was a collection of five or so families. Standing at the front of the crowd was an older blonde woman who approached them as soon as she caught sight of the group. She fussed over Kara for a moment and pulled her into a gentle hug before stepping back and giving her a quick visual assessment. The woman let out a heavy sigh before moving over to the side Alex wasn’t occupying and started helping Alex steer Kara toward the nearest building.
A small girl darted out of the crowd and wrapped her arms tightly around Kara’s waist. “Auntie Kara! I missed you so much!”
Kara sucked in a sharp breath at the contact but smiled down at the girl. “I missed you too Rubes.”
“Hey Ruby, Auntie Kara had a really bad day, do you think you could draw her a picture to make her feel better?” Alex said as she carefully pried the girl off of Kara.
“Yeah! I already made her one so now she will have two!” Ruby said proudly as she took off back into the crowd.
Alex, Kara, and the older woman, who Lena now presumed was Eliza, disappeared into the small building. Lena moved to follow but caught Alex’s scowl through the door frame and stopped in her tracks. She really didn’t have any business being in that room, but it stung a little, nonetheless. She had saved Kara’s life after all.
The door was shut in front of Lena and for the first time she realized that she had been left alone with a crowd of strangers. What she wouldn’t give for a shot of strong liquor and a week-long nap right about now.
“Lena?” A voice said behind her.
Lena flinched. The only two people on this planet who knew her name were in the building in front of her. If this person knew her first name, they mostly certainly knew her last name too. Lena whipped around, hand gravitating toward the knife that she now remembered was lying on the floor of Kara’s ship.
Before she had the chance to reach for another weapon, a pair of arms pulled her into a hug. Lena took a quick step back and broke the embrace
“Who the fu-...” The face she saw looking back at her made words die on her tongue.
“Sam,” She stared up at the taller woman in awe for a moment. “How-how did you…? I thought… They killed you.”
“Well they didn’t do a very good job of it now did they?” Sam said with a smile.
Lena started to smile too before she caught sight of the scar that stretched across Sam’s cheek.
Sam noticed the change in Lena’s expression and nodded toward a building that was a few yards away.
“Why don’t you come with me? Let’s have some dinner and catch up.”
Lena nodded weakly and allowed herself to be led into what she assumed was Sam’s house.
0o0o0o0o0o0o0o0
Lena had her head on a table and was failing miserably at ignoring the throbbing headache that was assaulting her temples when she heard the doors slide open behind her.
“How would your mother feel if she knew that you were hiding away instead of doing what she sent you here for?”
Lena rolled her eyes and regretted it instantly when the pain in her head got worse.
“We’re allowed rest when we’re sick, Veronica.” She ground out, closing her eyes in hopes that it would make Veronica leave her alone.
“Sick, really? Is that also your excuse for why you have been so tragically far behind the rest of us since you got here?”
“I cannot help but notice that you are not present in your classes right now either. Shouldn’t you be getting in trouble for being absent as well?” Lena asked, head still on the table.
“It’s cute that you think that anything I do around here can get me in trouble. The Masters’ reward talent like mine and scoff at embarrassments like you.” Veronica sneered.
Lena’s jaw clenched and felt her cheeks burn red. She was better than this, and Veronica Sinclair was not worth her time. Losing her cool now would only make her life at this academy more miserable than it already was.
Veronica closed the distance between herself and Lena.
“What is it like being the weakest member of the strongest family in the galaxy?”
Lena’s eyes flew open and she jumped to her feet. “Mind your own goddamn business Sinclair.”
The other girl quirked an eyebrow. “What are you going to do Lena? Glare at me? I’ve seen you train. You are shit with a saber and somehow, even worse with the force. I’m not scared of you.”
Neither of them heard the door slide open again, nor did they notice the footsteps of a newcomer.
“Please just leave, I am not doing this with you right now.” Energy was pulsing through Lena now and where she knew most would feel strength, she felt like her skin was on fire and as though she was going to pass out at any second.
“Why don’t you call Lex in here? He’s the only Luthor here worth fighting anyway.”
“Stop it!” Lena shouted as she lifted the table in front of her and flung it at Veronica.
There was a loud crash as the glass tabletop collided with the girl. She was thrown a few feet back toward the door. Lena watched in horror as a shard from the table went flying and struck the face of the other person in the room.
The anger that had just been flowing throughout her system disappeared and was instantly replaced with nausea.
“Sam?” Lena’s voice cracked on the word.
Sam looked over at her as blood began to streak down her face. Her ever present smile was nowhere to be seen, instead, her lips were pursed tightly and her normally warm gaze had gone cold.
“Sam, I-I am so sorry. I didn’t mean to-...”
“I thought we were better than her Lena, better than all of them. We were supposed to be able to fight this power and use it for better things.”
“I am better than this.”
Sam kept on as though Lena hadn’t spoken a word.
“Go.”
Lena opened her mouth to speak again, but Sam cut her off.
“Don’t start. I know you’ve been planning an escape for weeks. I’ll heal her and handle the fallout.”
Lena stood frozen.
“Nothing you can say will fix this, and if you don’t leave now, you’ll get us both killed.”
Lena took a few steps toward the door before stopping and turning back to Sam. “I’m sorry…”
Sam cut her off with a shake of her head. “Just go Lena.” She turned back to tending to Veronica’s wounds.
Lena left without another word, at least not that she said out loud that is. In her mind, she swore that she’d never let the dark force inside her take control of her like that again. If that meant never tapping into that power again, so be it.
O0o0o0o0o0o
Sam brought Lena into a small kitchen and indicated for her to sit down at the table that took up the majority of the room. Lena did as she was told and watched as Sam began pulling items out of a largely barren cupboard.
Neither woman spoke as Sam assembled a meager looking stew. Lena sat still, but her hands itched for something to do. On the long list of awkward situations that she had found herself in in her lifetime, this was definitely toward the top.
After a few minutes, Sam finished up her work and came to sit down across the table from Lena.
Lena bit her cheek before finally breaking the silence. “That was an awfully warm welcome for someone who scarred you and almost got you killed.” She said quietly, with her eyes on the table in front of her.
Lena felt Sam’s eyes on her but couldn’t bring herself to look up to meet them.
“I didn’t stay mad at you Lena. We both know that you didn’t mean to hurt me, or Veronica for that matter. And besides, you didn’t put my life in danger, your parents did that.”
Lena wasn’t ready to accept Sam’s forgiveness, so she leapt at the opportunity of a subject change.
“How did you escape them?” She asked, finally deciding it was safe to look up.
Sam’s jaw clenched before slowly relaxing into a smile that didn’t quite reach her eyes. “I didn’t.”
Lena watched Sam carefully, but knew better than to interrupt.
Sam glanced into the room behind them and Lena followed her gaze to see a small girl, the same one that had hugged Kara’s leg earlier, sitting there intently focused on the drawing in front of her.
“I was visiting my parents right after Ruby was born when they were attacked. It was meant to be a big celebration; lots of big families gathered so that my parents could gloat about their first grandchild.” Sam shook her head. “You know what they were like.”
Lena nodded politely in response.
“We got there a few days before all of the festivities were set to start. My mom wanted my input on the flower arrangements or some other silly detail that I couldn’t have cared less about, and I didn’t really mind because I knew that she would watch Ruby so that I could actually get some sleep.” Sam took a steadying breath to help reign herself in. “We were out for a walk when they got there, just mom, Ruby and me. She pushed us into some of the greenery and told us that she would take care of everything.” Sam paused for a moment to clear the emotion out of her throat. “That was the last I ever saw of her.”
Lena slowly reached a hand across the table and placed it on top of Sam’s. It wasn’t much, but after not having seen the girl for ten years, she wasn’t sure what else she had to offer.
“That’s how I met Alex.” Sam said after a moment, her tone was lighter this time. “All of my parent’s ships were destroyed in the attack and Rubes and I would have been stranded there if she and Kara hadn’t shown up to sell their wares the day after the attack.
“They took us in even though their food supply was already scarce, and Alex built us this house from the sand up.” Sam’s face pulled back up into the bright smile.
“I am not sure that we know the same Alex, she was not terribly fond of Kara bringing home a stranger.” Lena said, only half joking.
“Oh that’s definitely my Alex. She’s just protective of her family, Kara especially. That girl has a real talent for getting herself into trouble.”
The corner of Lena’s lips pulled up into a smile. “Now that I believe. She’s got some real guts on her.”
Sam laughed. “You have no idea.”
They fell into silence again after that, but it was more comfortable this time. It was a few minutes before Sam broke the silence.
“And what about you? The last I heard, the Luthors had you. I was sure you were dead”
“Turns out that my partner and I were not as good at covering our tracks as we thought, Lex tracked us down before we could do any real damage to the them. I don’t know much more than that because they threw me into carbonite almost the second that we landed on the base.” Lena swallowed thickly.
“They could have tortured or killed Jack and I never would have known because I was stuck in that fucking slab.”
“Is that where you were when Kara found you?”
Lena nodded. “Poor girl was hanging on to consciousness by a thread when I woke up.”
“We’ll cycle back to Kara in a minute, I’m worried about you right now.” Sam leaned forward in her chair. “I was wondering why you looked so dead on your feet. Are you alright? I’ve heard about how awful hibernation sickness can be.”
Lena’s shoulder slumped. She’d underestimated just how well Sam still knew her.
“After I got over the initial bout of blindness, the other after effects weren’t nearly as bad..”
Sam’s gaze burned into her. “And the exhaustion?”
“It’s another common symptom.” Lena brushed off Sam’s question.
“It’s been awhile Lena, but I still know what a Luthor blaster wound looks like. I also know that Kara would be deader than the Death Star right now if she hadn’t gotten some kind help before you guys got here.”
Lena’s pulse spiked, but not with anger as it often did. This time, she felt plain old fear grip her chest.
“I had to do something. The girl fell unconscious right in front of me and then almost bled out again on her own ship.”
“I know what had to be done, and believe me when I say that I am glad you did it, but that’s not what I’m talking about.” Sam eyed Lena carefully. “I am going to ask you again, are you alright?”
Lena’s hands began to shake on the table, so she moved them onto her lap to keep them out of sight.
“I promised myself that I would never use the force again after you got hurt, and I have been good on that promise for the past ten years. But then there was Kara… She had just saved me, I had to return the favor.”
Sam’s voice was impossibly soft and quiet when she spoke next. “You saved her life. That is exactly the kind of thing that you and I set out to do with that awful power.”
Lena felt tears beginning to pool in her eyes. “It still burns Sam. It’s just like the lava that they used to make us train above.”
“It’s the price to pay for such a powerful talent.” Sam recited with a roll of her eyes.
“It is funny how you and I were the only ones who had to hear that speech over and over again. I have always wondered how the rest of them handled the pain, perhaps the allure of power was enough to numb it for them.”
“Maybe they were just into that kind of thing.”
Lena’s fear began to slowly seep out of her. “That would explain quite a bit actually.”
Sam laughed. “Now that my childhood has been completely ruined, I think it’s time for some dinner.”
Lena glanced over at the pot. “Are you sure? Kara mentioned that you all were starting to run out of food.”
Sam shrugged, standing up out of her chair. “I can’t offer you much other than broth and a few chunks of meat, but I made enough so that you can have a bowl. Luthors deserve to eat too.”
Lena flinched at the use of her last name. “Sam…”
“I’m sorry, I realized it as soon as I said it.”
Lena stood and walked over to Sam. “Please don’t tell them who I am,” Her voice was a whisper. “I am leaving here the moment I find a ship that will take me. The less they know, the better.”
“Don’t worry, I don’t plan on telling them anything. After what happened to me, Alex developed a… well, a bit of a hatred for your family.”
Lena let out a humorless laugh. “Of course she did.”
Sam gave her a sympathetic smile. “If it makes you feel any better, Alex hates most people.”
Lena couldn’t help but give Sam a small smile. “I’ll keep that in mind.”
***
Lena was running out of energy by the time that dinner started to wind down , so she was relieved when Ruby took it upon herself to regale the older women with a tale about the space mission that her doll had just returned from.
“She’s just like Auntie Kara!” Ruby said proudly.
“Well then, your doll must be an incredible adventurer.” Lena replied.
Ruby started wiggling in her chair with excitement. “Have you been on a mission with her?”
“I have.” Lena said with a smile.
“Woah! That’s so cool! What did you do?”
“I am sure Kara will tell you all about her mission when she’s feeling a little bit better, Rubes.”
All heads turned to the doorway where Alex was now standing, drying her hands on a towel. She looked leaps and bounds more at ease than she had when Lena had first met her. Her eyes were softer, and it appeared that the tension that she had been holding in her shoulders earlier was gone now.
Sam stood and made her way over to Alex. “How is she?” She asked before giving Alex a peck on the cheek.
Alex smiled. “She’s hurting right now, but she’ll be fine.”
Lena let out a sigh of relief. Now that she knew Kara was going to be alright, she could start making plans to get out of here.
“Lena?” Sam asked. The look on her face suggested that this wasn’t the first time that Sam had called her name.
“Yes?”
“Alex just said that Kara sent her to find you.”
“Oh, right, of course.” She said.
She turned her attention to Alex. “Is it alright if she has visitors right now?”
Alex shrugged. “In my medical opinion, I’d prefer if she slept; but in my sisterly opinion, she can have whatever the hell she wants after what she went through today.”
“Language.” Sam said, nodding toward Ruby.
Alex sighed. “You still owe me one heck of an explanation, but that can wait for tomorrow. I’ve learned that it’s best not to keep her waiting.”
Lena nodded. “Thank you.”
On her way out of the door, Alex caught Lena’s arm. “Thank you for bringing her home.”
“Thank you for not shooting me.”
“Careful now, that part may come later.” Alex said with a smirk.
Lena grinned. ”I suppose we will just have to wait and see then.”
***
Lena ducked into the building that she had seen Alex take Kara into earlier. It was warmly lit by several candles and was furnished with a few old and worn tables and chairs. There were still a few pieces of medical equipment lying around, but not enough to indicate that a surgery had occurred here less than an hour ago.
As she looked around, Lena was surprised to see that the room was empty. In all honesty, she had hoped that it would be, but had prepared herself for the possibility of an awkward conversation with Kara’s mother anyway.
The sound of a familiar voice drew her attention to a nearby door.
“There you go buddy; you’re looking better already.”
Lena recognized the tone in Kara’s voice, she had to have been talking to Krypto. With a small smile, she knocked on Kara’s door.
“Come in!”
Lena pushed the door open and found herself walking into the most cluttered room she’d ever seen. There were speeder and droid parts covering nearly every available surface and manuals from at least ten different droid models were stacked haphazardly on the small desk. Aside from the mess, there were two bunks situated on opposite sides of the room; one of which was currently occupied by Kara, who had her injured leg elevated by a few pillows. She appeared to be tinkering with Krypto given the bolts in her lap and the screwdriver that she was balancing between her teeth. Lena shook her head fondly and continued her sweep of the room. Her eyes landed on the hilt of what was unmistakably a lightsaber, and her breath caught in her throat. She took an unconscious step backwards.
A flurry of thoughts burst into her head. Did this mean Kara was touched by the same darkness that she’d spent her life running from? She certainly hadn’t exhibited any signs, but where else would she have gotten a lightsaber? She had stolen from the Luthors, so that means that she wasn’t allied with their forces, right? Who is this girl?
Kara’s eyes had been on Lena from the moment she walked in the room and her sudden change in posture did not go unnoticed.
“Is everything okay?” Kara asked after pulling the screwdriver out of her mouth.
“Of course.” Lena turned to face her with a tight smile. “I am surprised to see that you are still up. Alex mentioned that you should probably be sleeping.”
“I could be sleeping, but then my buddy here would have had to have a squeaky wheel for the rest of the night and that’s no fun for anyone.” Kara patted the droid on the head before looking back up at Lena. “Now, back to why you look like you saw a ghost when you saw Barry’s lightsaber.”
Lena’s mouth snapped shut. “Are you always this observant?”
“Not really, I just know that look. It’s the same one I get every time I remember that that saber is sitting there.” Kara brought a hand up and rubbed the back of her neck. “You can come in you know; I don’t bite.”
Krypto piped up from beside Kara with a few beeps that Lena couldn’t decipher. “And Krypto wants you to know that they don’t bite either.” Kara said with a laugh.
Lena must have still looked unsure because Kara carefully slid over on her bed and patted the freshly empty space.
After another moment of hesitation, Lena sat down gently. She thought to ask Kara why she offered up part of her already occupied bed when there was another empty one situated just a few feet away but found that she wasn’t sure if she wanted to know the answer.
“So,” She cleared her throat. “Who is Barry?”
Kara’s eyes flickered with what Lena recognized to be pain for a second before her smile returned.
“He is, well, was, my best friend.” Kara picked up a bolt and began fiddling with it. “We lost him on a mission just over a year ago.”
Lena’s eyes fell to the floor. “Oh.”
“He left that lightsaber to me for safekeeping, but I can’t even look at it without remembering that he’s gone.” Kara continued on, too lost in memories to acknowledge Lena. “It’s the dumbest thing too, it wasn’t even his, not really. We found it when we were out scavenging.”
Well, that certainly answered a few questions. Lena was mostly relieved by the knowledge that Kara wasn’t like her, but the tiniest part of her wished she was, if for no other reason than to have someone around who understood the most secret part of her.
Lena put a hand on Kara’s shoulder. “I’m sorry Kara. You have already been through enough today; I did not mean to bring up the past.”
“Don’t be, I left myself wide open for that one.” She brought her own hand up to touch Lena’s but stopped just shy of it.
Lena saw the hesitation and gave Kara a nod of encouragement. Kara blushed and finished her motion before giving Lena’s hand a gentle squeeze.
“I can go ten minutes without making everything awkward, I promise. You just caught me on an off day.”
Lena felt herself relax into Kara’s humor. “You do not have to stop on my account, I am a big fan of the constant blush.”
Kara’s face turned an even more vibrant shade of red and she pushed Lena away playfully. “Okay, now you’re just being mean.”
“Darling, if you thought that was mean, you should see me when I’m angry.” Lena said before she had time to process what she’d said.
The words were said in jest but reminded her of why she had reacted so viscerally to seeing the lightsaber. It was also why she had no business getting comfortable in a place like this or with a person like Kara. Her smile started to fade from her face, and she noticed that Kara’s did the same.
Kara had just opened her mouth to undoubtedly ask Lena what was wrong when Eliza poked her head in the door.
“How are you feeling…?” Her question trailed off when she caught sight of Lena. “Oh! You must be Lena.” She said as she walked into the room.
Lena stood and offered her hand. “It’s nice to meet you, Eliza.”
“And you as well.” Eliza smiled and shook Lena’s outstretched hand. “I know it’s starting to get late and there aren’t too many extra beds around here, but you’re more than welcome to stay here with us and sleep in Alex’s old bed if you’d like. I think Kara has been able to keep most of her mess out of it lately.” She said as she threw a teasing look Kara’s way.
Kara started to sputter out a response, but Lena saved her the effort.
“That would be wonderful, thank you.”
Eliza nodded and turned back to Kara. “How’s the pain?”
Kara tried to shift back to how she had been sitting before Lena came in but stopped as soon as she started moving her leg.
“It’s not too bad.” She said through clenched teeth. “We need to ration the meds we have; I’ll be fine.”
“Nice try,” Eliza said before pulling a small bottle out of her pocket.
“That stuff tastes so bad.” Kara pouted.
Eliza handed the bottle over to Kara with a knowing smile. “I know sweetie, but you need to sleep, and this is the best way to do it.”
Kara quickly swallowed the contents before scrunching her face up in disgust.
Lena and Eliza shared a smile at Kara’s antics and Eliza leaned over to whisper in Lena’s ear. “I should warn you, Kara reacts very well to pain medication.”
Lena leaned her head to the side in question, and Eliza laughed. “She usually calls it being floaty, but us in the medical field usually just call it being high.”
Lena raised her eyebrows in surprise. “Oh! Well, that is good to know.”
“I can hear you guys.” Kara piped up from beside them.
Eliza bent over and placed a kiss on the top of Kara’s head. “It’s only fair that she knew sweetie.”
She turned back to Lena. “If she gets to be too much or you need anything at all, feel free to ask.”
“I will, Eliza, thank you.”
“I’ll leave you girls to it then, goodnight.” She said before leaving the room.
Both girls echoed her goodnight and then turned back to each other.
“About before..”
“I’m sorry…”
The girls spoke simultaneously.
Lena gestured for Kara to continue with a smile.
“You’ve spent all day checking up on me and making sure I was okay, even though I found you in a literal prison, and..” Kara trailed off, her eyebrows wrinkling with the effort of collecting her thoughts. “I can’t claim to know you, or what you went through to end up on that Luthor base, but it couldn’t have been easy.”
Kara squirmed around in her bed, her movements growing slower and more fluid before the pain in her leg forced her to sit still. Lena noted that the pain medicine must have started to take effect.
“If you wanted to talk about it some time, you’re more than welcome to.” Kara blinked slowly and smiled loosely up at Lena. “You’re stuck with me for a while, ‘s the leassst I can do ta repay you for saving me.”
Lena was almost too distracted by how endearing Kara’s slurred rambling was to catch the last thing she said. Almost. She drew her eyebrows together in confusion.
“Stuck with you?” She asked.
“Yeah!” Kara nodded rapidly, with excitement that Lena couldn’t quite understand. “We crashhhed the only shhip on the planet! You’rre stuck here until Winn fixes it. Have you meet Winn? He’ss the best.”
Lena forced her lips into a tight smile. “I have not had the pleasure of meeting Winn yet.” She said through clenched teeth, hoping Kara wouldn’t notice. “And you’re sure there is no other way off the planet?”
“Yep!” Kara said before letting out a monstrous yawn.
Anxiety pooled coldly in Lena’s stomach. There was always a chance that Kara was just too far gone to know what she was talking about, but the thought of being trapped here was still concerning. With a heavy sigh, she moved to help Kara clear the metal scraps from her lap. Her hands shook as she set the miscellaneous pieces on Kara’s desk.
Kara frowned. “Are you okay?”
Lena grabbed the blanket from the foot of Kara’s bed and pulled it up over the blonde.
“I’m just tired, we had a pretty exciting day.” She said, a more genuine smile spreading across her face at Kara’s concern.
Kara seemed to accept this answer and settled herself deeper into bed. “M’ tired too. Go’night Lena.”
“Goodnight Kara.”
Lena waited for Kara’s eyes to fall shut before she made her way over to her temporary bed and took a seat on the edge of it. She leaned forward and put her head in her hands. What the hell was she going to do now?
“Lena?” Kara’s soft voice startled her a few minutes later.
Lena looked up and saw that Kara was watching her. “Are you alright? Do I need to get Eliza?”
Kara shook her head lazily. “No, I jus’ wanted to say that ‘m glad that my brain buzz helped me find you. You’re too nice to be stuck in rock. An pretty too.”
Lena felt the tips of her ears redden.
“I’m glad you found me too Kara…” She said before full meaning of Kara’s words washed over Lena and she stopped mid-sentence. “Brain buzz?” She asked.
“Mmhm, it keeps me safe and helped me find you.”
Before Lena could form a response, Kara’s head lulled to the side and soft snores began to spill out of her mouth.
The stew that Sam had given her began to swirl dangerously in her stomach and her heart began to pound in her ears. Brain buzz? Kara may have been high out of her mind, but that’s not something that she could have just made up on the spot.
Lena wracked her brain for another explanation. She had only experienced the thrum a few times herself, mostly when she was a young child, and then again when Kara had found her. A shock of something spread through her system, but she couldn’t place exactly what it was. Fear, excitement, relief? She wasn’t sure.
Lena glanced over at Kara’s sleeping form once more. Who is this girl?
4 notes
·
View notes
Text
The Miys, Ch. 22
This is where things start to get a little more serious. Also, I finally worked the story in a direction that I could introduce the final character from my 100 Follower contest: ‘Maverick’ Okima. All credit for this character goes to @werewolf2578. As has happened with both of the other characters from that contest, his appearance is intended to be a one-off, but he is really pushing to become a character that appears again and again (thanks, @baelpenrose and @parisconstantine, you two have a hand in that).
For anyone curious, I wrote Ch. 21 and this one in a single go, and actually had to find a good place to break the two. Please read and comment.... feedback is favorite thing here lately.
I could feel a hell of a migraine coming on, but desperately tried to ignore it. The entire Council was clustered together, along with one of the Miys’ bodies and several administrators. After Grey and Huynh’s revelation that the damage that caused our stop was a deliberate act, we gathered everyone else up to determine our next steps.
“We have two things we need to consider,” Grey started, pushing their glasses up their nose in what I was beginning to think was a decisive gesture. “Fixing the current situation, and determining what caused it in the first place. Do we address these concurrently or consecutively?”
Xiomara raised a finger to speak. “Can we openly prioritize the immediate issue of repairing sensors, while quietly figuring out who the fuck did this?”
“It was quite rude to damage the ship our Hosts graciously supplied us,” Pragnav Ranganathan, Councilor for Information and Data Systems, growled. “I will gladly prioritize resources to the investigation.” Despite his normally quiet demeanor, Pragnav had very definite ideas of hospitality and nothing offended him worse than the idea of being rude to our Hosts. Huynh nodded firmly, as the only person present who actually saw the deliberate act. The rest of us voiced our agreement at Xiomara’s idea.
Taking a deep breath, I glanced at Grey, who nodded that I should take over. “Xiomara, since this overlaps our areas, you and I need to select crew to navigate and pilot us somewhere. Grey, your help would be appreciated, since you have access to any medical data that would be a deciding factor.” To the Miys, “How many candidates do we have and what are we looking for?”
“We have forty candidates present, and while anyone who has Terran certification to fly should be able to fulfill our needs, it would be best if they are someone who has experience with large craft and no – I think the Terran term is ‘zero vector’?”
“With no sensors, what about debris that may hit the Ark?” Xiomara asked.
“Shields are still fully operational, so anything that will not be visible through an observation port would not be a problem, provided we are not attacked.”
“Attacked?”
“Truthfully, it is a less than one percent probability, especially given that it has not happened since we reduced to sub-light speeds. Currently we are at a full stop, so an attack would have taken place already. Once we determine where we are located, I can provide an assessment of how likely an attack would be where we would need to travel.”
Something caught up in my mind. “You said we have forty pilots present.” I turned to my friend and assistant. “How many should there be, Arantxa?”
A brief pause as she tapped at her data screen. “Fifty-two.”
“Once we account for those present, pass the names of anyone not here over to Xiomara and… Pragnav. They are immediately suspect. All pilots were requested, even if they can just fly a Cessna.”
After that, we were face to face with a crowd of candidates for who would save our asses. Several betrayed military backgrounds: stiff postures, precise motions. Cocky grins warred with stern frowns for the most appropriate expression in the face of the unknown. While I could appreciate the serious expressions given the situation, truthfully my faith was leaning closer to the overconfident ones; I always had a firm belief that pilots and surgeons needed to believe they were in infallible, because they had to be perfect, every time. I leaned over to Xiomara, who had the most commanding presence of the three Councillors present. “Time to start weeding them out,” I whispered.
Without hesitation, she stepped forward. “Everyone, hands up. We’re going to go through the list of flight certifications from most basic to most advanced. If you don’t have it, hands down. This will not necessarily disqualify you, but we need to know what we are working with.” Nods throughout the crowd, and a forest of hands went up. When she got through the list, only three hands had gone down, although two had gone down about halfway through.
“Okay, everyone up again. We’re moving to the bigger stuff. Experience flying with no zero vector.”
As expected, several hands went down at this, leaving just over ten. This was expected, since flying without a zero vector was pretty much limited to flying over the ocean or piloting out of the atmosphere. Anyone who put their hands down was asked to step to the side.
“Military cargo.” Down to eight.
“Bombers” left five.
“Fighters” narrowed it to three.
“VTOL” gave us our pilot.
“And you are?” Xiomara asked with affected boredom.
“Jake Okima, but I answer to Maverick,” he grinned. I was pretty sure he thought he was charming, but Xiomara and I exchanged a glance and rolled our eyes. ‘Maverick’? Really?
“Certifications confirmed, in addition to EtoL,” Grey’s voice interjected.
Wide-eyed, I turned to face my fellow Councillor. “Are you serious?” I half thought he made it all up, honestly.
“Yes, Sophia. Fifteen confirmed combat kills as a fighter pilot, certified in all civilian levels before joining armed forces, selected as one of the cargo pilots to fly supplies and personnel to Lunar Base.”
“And backup pilot for the Padrugoi,” the subject of our discussion added, smirking infuriatingly.
I whipped my head around, eyes narrowed, but before I could say anything, a petite hand held me back. My sister had appeared next to me while I was focused on the pilot selection. “If you were backup pilot for the Padrugoi, why are you here? I saw the Padrugoi explode.”
“I – um,” he blanched, looking down. “I overslept?”
“You’re full of shit is what you are,” Xiomara laughed.
“He is not,” Grey confirmed without looking up. “Jake Okima, Terran Defense force, backup to Aleski Ivanov. Declared AWOL the morning of the launch. Reports indicate he was seen at multiple bars the night before, bragging about his ‘last night on Earth’.”
“Hungover, overslept, same thing,” he shrugged unabashedly. A bestial growl emanated from the small woman next to me, and it was my turn to hold her back. Internally, I didn’t blame her. This is the person who is supposed to save us?
Grey spoke up, breaking the brittle silence. “We have selected our best pilot candidate. Regardless of what reasons he had not to be in his assigned berth for the Launch, he is still the only human on board qualified to pilot a planetary vessel. Pilot Okima, are you sober now?”
“Hey,” he protested indignantly. “That was the only time I’ve drank in my life, so cut me some slack. Alcohol is not worth the hangover the next day, believe me. I’ll stick to caffeine, thank you. Just show me where I’ll be flying the Ark from, and tell me where I’m going.”
The Miys gave a low buzz, rubbing its fine hands together and betraying its stress. “Ordinarily, the ship is piloted from here,” it gestured to the large space we were standing in. “However, as you can see, there are no observation ports. I am working to locate such a port that is sufficiently forward viewing, so that I can temporarily install the necessary equipment in there.”
Okima shook his head vigorously, “That’s not going to work, I’m sorry. I’ve seen every obs view on this ship, none of the ports are big enough. If you want me, or anyone, to fly this boat, we need to see as much as possible.” He looked at the Council members present with pleading eyes. “Please, I want to do this, but I can’t fly while looking through a pinhole. No one could, not with something this big.”
“I understood that humans can ‘fly’ using dead reckoning, without sensors,” the Miys said, confused.
Before Okima could start again, I held up my hand to stop him. “No – shit, you aren’t Noah – Japeth, we can navigate and steer through visual acuity and instinct, and we do it really well, but the ‘visual’ acuity part of that is essential. Our brains can reckon and calculate distance and size on a level we don’t even realize is happening. Our ancestors could do calculus before we even knew what calculus was. But we need to have maximum visual input to supply the information our brains need to make those calculations. It would be like…. Asking you to walk around the ship with only one sensory organ exposed and no connection to the rest of your bodies.”
The enormous hippo-spider shuddered at the thought. “I believe I understand, Wisdom. We will discuss you naming another of my bodies later, but for now, how do we – work around? – work around the lack of any appropriate spaces for Pilot Okima to utilize?”
Arantxa grabbed my wrist gently to get my attention. “Video games,” she said with a look of dawning realization.
Oh, hell yeah. She was absolutely right. “Get Pranav and Eino.” When she dashed off to do that, I turned to everyone else. Xiomara and Grey looked both confused and curious, while Okima was rubbing his hands together in excitement. Clearly, he figured out what we were about to do. For the benefit of the other two, I explained. “We may not have a single window large enough to pilot with, but they’re dotted all over the outside hull. We’re going to wire up a camera to every single one of them, run the feeds in here, and give Jake here the biggest video game ever.”
Suddenly, Xiomara’s predatory grin matched the one on Okima’s face. Grey however, was still somewhat lost. “And what do Councillors Ranganathan and Wiitala have to do with this?”
“We’ll need Pranav’s people to get everything hooked up correctly, and Eino has access to most of the video equipment on the ship. He may even have some of the viewports already wired for video, for educational purposes.”
“You are correct, Councilor Reid. Eighty-seven percent of them, actually,” a soft voice came from over my shoulder. “We can bring the screens here if the signal can be re-routed,” the tall Finnish man glanced at the smaller man beside him.
“If my people cannot do that, I will need new people,” Pranav confirmed. “Although I will need Derek for this, to ensure that the signals are synched correctly.” When I blanched slightly at the realization that Pranav was aware of the young man’s….hobbies, he gently waved my concerns away. “Derek is good for the programmers. He keeps them on their toes, and gives them a strong benchmark for network security. ‘No one short of Derek Okafor could get in here’ they say. But, for this, I cannot have anyone short of that level of precision.”
“There is a big issue of Derek and crowds,” I tried to explain. “As in, they mix like gasoline and fire.”
“He would not need to go to the viewports, only get here so he can synchronize everything on this end.”
Still, I was worried. All I could think about was the sheer press of people I had encountered on the way to Level One. I had a better tolerance for tight crowds than Derek did, by several orders of magnitude, and I nearly had a panic attack before –
“Soph,” my sister said softly to get my attention. When she knew she had my attention, she stood straighter and said slightly louder, so everyone could hear, “I’ll go get him. The Miys won’t be able to keep up – no offense, Japeth.” The Miys only groaned when she used the name I had tacked on to this particular avatar. “I can take Antoine with me. I’ll need at least one more large-ish person.” She looked Eino in the eye. “How well do you know Derek Okafor?”
“Only by name,” he answered, puzzled.
“Won’t work. Conor’s with him, right?” I nodded. “Okay, Conor will work. Shit, no he won’t. Someone needs to stay with Sam.” She started snapping her fingers, trying to think.
“What if I accompany you, and we have Zachary Khan meet us there?” Arantxa suggested. “We both are well-known to Derek. Neither of us is large, but at least with two of us, we can buffer him from the crowds. If he brings Mac, he should be fine.”
“What makes this guy so special that he needs escorts and the ship’s cat just to set up my screens?” Okima blurted out with a look of disgust.
Before anyone else could react, I whipped around with a snarl, stalking up to him. “That ‘guy’ is a very sweet and funny seventeen-year-old who happens to be the best damned programmer and hacker on this ship. He also happens to have explosive problems with crowds and noise, and despises strangers touching him. And Mac is certainly not the ‘ship’s cat’, he belongs to me and my sister, and is literally the only thing that can calm Derek down when he is stressed. Don’t you dare sneer at him, or act like he’s less than you. We have thirty-nine other pilots to replace you, but only one Derek to make this work.”
The entire time, I had been steadily stepping forward, ensuring I was getting my point across. Jake had backed up against the wall, hands up in a gesture of surrender. “Geez, calm down, lady. You could have just told me he was autistic. I didn’t know.” When I started to growl, he hurriedly pointed at his face. “Asperger’s! Asperger’s! I’m on the spectrum, I get it!” Oh god, I thought as I scrambled back out of his personal space. “It’s fine, I don’t have space issues, other than forgetting other people do,” he laughed. “I’ve never met this guy, but I’m glad he has people like you in his corner. Most of us don’t get that.” He glanced over my shoulder at Tyche and Arantxa. “Go! Let’s get this party started!”
With a weary sigh, I turned and nodded to them. “Let’s get this show on the road.”
<< Prev Masterlist Next >>
#the miys#original fiction#earth is space australia#humans are weird#science fiction#scifi#humans are space orcs#aliens#apocalypse
107 notes
·
View notes
Link
Introduction
With TypeScript we get a unified class construct in JavaScript. The syntax is based on the ES6 version, preparing TypeScript to remain a full superset of JavaScript even with ES6 implementations. Of course TypeScript compiles down to ES3 or ES5, which means that this class construct will be decomposed to something that is available right now: again the prototype mechanism. Nevertheless, what remains is code that is readable, cross-implementation (ES3 / ES5) safe and agrees on a common base. With my own approach (oop.js) no one besides me did know what was going on without reading the helper code. With TypeScript a broad set of developers uses the same pattern, as it is embedded in the language.
It was therefore just natural to convert the Mario5 project to TypeScript. What makes this worth an article on CodeProject? I think it is a nice study how to convert a project. It also illustrates the main points of TypeScript. And finally it gives a nice introduction to the syntax and the behavior. After all, TypeScript is easy for those who already know JavaScript and makes it easier to approach JavaScript, for those who do not have any experience yet.
Background
More than a year ago Anders Heijlsberg announced Microsoft's new language called TypeScript. This was a surprise for most people, as Microsoft (and especially Anders) seemed to be against dynamic languages, in particular JavaScript. However, it turned out, that Microsoft realized what a big opportunity the centralization of general purpose programming to web programming is. With JavaScript for Windows Store apps, the ongoing hype with node.js and the NoSQL movement with document stores that use JavaScript for running queries, it is obvious that JavaScript is definitely important.
Remark: Anders joined the TypeScript team at some point (v0.8) in the development. It is unclear if he invented the language or if somebody else came up with the idea. Nevertheless the team is currently lead by Anders and given his experience and expertise, it is certainly good to have him in charge of the project.
The realization did influence the decision on the design of a new language. Instead of creating a new language from the ground up (like Google did with Dart), Anders decided that any language that may be still established has to extend JavaScript. No solution should be orthogonal. The problem with CoffeeScript is that it hides JavaScript. This may be appealing for some developers, but for most developers it is an absolute exclusion criterion. Anders decided that the language has to be strongly typed, even though only an intelligent compiler (or transpiler to be more correct) will see these annotations.
So what happened? A true superset of ECMAScript 5 has been created. This superset has been called TypeScript to indicate the close relationsship with JavaScript (or ECMAScript in general), with the additional type annotations. Every other feature, such as interfaces, enums, generics, casts, ... follows from these type annotations. In the future TypeScript will evolve. There are two areas:
Embracing ES6 to remain a true superset of JavaScript
Bringing in further features to make JS development easier
The primary benefit of using TypeScript is two-fold. On the one side we can take the advantage of being informed of potential errors and problems during compile-time. If an argument does not fulfill a given signature, then the compiler will throw an error. This is especially useful when working with larger teams or an a bigger project. The other side is also interesting. Microsoft is known for their excellent tooling with Visual Studio. Giving JavaScript code a good tooling support is tedious, due to the dynamic nature of JavaScript code. Therefore even simple refactoring tasks such as renaming a variable cannot be performed with the desired stability.
In the end TypeScript gives us great tooling support combined with a much better idea about how our code will work. The combination of productivity plus robustness is the most appealing argument for using TypeScript. In this article we will explore how to convert existing projects. We will see, that transforming a code to TypeScript can be done incrementally.
Converting the existing project
TypeScript does not hide JavaScript. It starts with plain JavaScript.
The first step in utilizing TypeScript is of course to have TypeScript source files. Since we want to use TypeScript in an existing project, we'll have to convert these files. There is nothing to do here as a requirement, however, we'll just rename our files from *.js to *.ts. This is just a matter of convention, nothing that is actually required. Nevertheless, as the TypeScript compiler tsc usually considers *.ts files as input, writing *.js files as output, renaming the extension ensures that nothing wrong happens.
The next subsections deal with incremental improvements in the conversion process. We now assume that every file has the usual TypeScript extension *.ts, even though no additional TypeScript feature is used.
References
The first step is to supply references from single JavaScript files, to all other (required) JavaScript files. Usually we would only write single files, which, however, (usually) have to be inserted in a certain order in our HTML code. The JavaScript files do not know the HTML file, nor do they know the order of these files (not to speak of which files).
Now that we want to give our intelligent compiler (TypeScript) some hints, we need to specify what other objects might be available. Therefore we need to place a reference hint in the beginning of code files. The reference hint will declare all other files, that will be used from the current file.
For instance we might include jQuery (used by, e.g., the main.ts file) by its definition as via:
/// <reference path="def/jquery.d.ts"/>
We could also include a TypeScript version of the library, or the JavaScript version, however, there are reasons for including the definition file only. Definition files do not carry any logic. This will make the file substantially smaller and faster to parse. Also, such files will usually contain much more / better documentation comments. Finally, while we would prefer our own *.ts files to *.d.ts files, in case of jQuery and other libraries the original has been written in JavaScript. It is unclear, if the TypeScript compiler is satisfied with the source code. By taking a definition file, we can be sure that everything works.
There are reasons to write plain definition files ourselves, as well. The most basic one is covered by the def/interfaces.d.ts file. We do not have any code, which would make a compilation irrelevant. Referencing this file on the other hand makes sense, since the additional type information provided by the file helps in annotating our code.
Annotations
The most important TypeScript feature is type annotations. Actually, the name of the language indicates the high importance of this feature.
Most type annotations are actually not required. If a variable is immediately assigned (i.e. we define a variable, instead of just declaring it), then the compiler can infer the type of the variable.
var basepath = 'Content/';
Obviously, the type of this variable is a.string This is also what TypeScript infers. Nevertheless, we could also name the type explicitly.
var basepath: string = 'Content/';
Usually we do not want to be explicit with such annotations. It introduces more clutter and less flexibility than we aim for. However, sometimes such annotations are required. Of course the most obvious case appears, when we only declare a variable:
var frameCount: number;
There are other scenarios, too. Consider the creation of a single object, that may be extended with more properties. Writing the usual JavaScript code is definitely not enough information for the compiler:
var settings = { };
What properties are available? What is the type of the properties? Maybe we don't know, and we want to use it as a dictionary. In this case we should specify the arbitrary usage of the object:
var settings: any = { };
But there is also another case. We already know what properties might be available, and we only need to set or get some of these optional properties. In that case we can also specify the exact type:
var settings: Settings = { };
The most important case has been omitted so far. While variables (local or global) can be inferred in most cases, function parameters can never be inferred. In fact function parameters may be inferred for a single usage (such as the types of generic parameters), but not within the function itself. Therefore we need to tell the compiler what type of parameters we have.
setPosition(x: number, y: number) { this.x = x; this.y = y; }
Transforming JavaScript incrementally with type annotations therefore is a process, that starts by changing the signature of functions. So what about the basics of such annotations? We already learned that number, stringand any are built-in types, that represent elementary types. Additionally we have boolean and void. The latter is only useful for return types of functions. It indicates that nothing useful is returned (as JS functions will always return something, at least undefined).
What about arrays? A standard array is of type any[]. If we want to indicate that only numbers can be used with that array, we could annotate it as number[]. Multi-dimensional arrays are possible as well. A matrix might be annotated as number[][]. Due to the nature of JavaScript we only have jagged arrays for multi-dimensions.
Enumerations
Now that we started annotating our functions and variables, we will eventually require custom types. Of course we already have some types here and there, however, these types may be less annotated than we want to, or defined in a too special way.
Sometimes there are better alternatives offered by TypeScript. Collections of numeric constants, for instance, can be defined as an enumeration. In the old code we had objects such as:
var directions = { none: 0, left: 1, up: 2, right: 3, down: 4 };
It is not obvious that the contained elements are supposed to be constants. They could be easily changed. So what about a compiler that might give us an error if we really want to do nasty things with such an object? This is where enum types come in handy. Right now they are restricted to numbers, however, for most constant collections this is sufficient. Most importantly, they are transported as types, which means that we can use them in our type annotations.
The name has been changed to uppercase, which indicates that Direction is indeed a type. Since we do not want to use it like an enumeration flag, we use the singular version (following the .NET convention, which makes sense in this scenario).
enum Direction { none = 0, left = 1, up = 2, right = 3, down = 4, };
Now we can use it in the code such as:
setDirection(dir: Direction) { this.direction = dir; }
Please note that the dir parameter is annotated to be restricted to arguments of type Direction. This excludes arbitrary numbers and must use values of the Direction enumeration. What if we have a user input that happens to be a number? In such a scenario we can also get wild and use a TypeScript cast:
var userInput: number; // ... setDirection(<Direction>userInput);
Casts in TypeScript work only if they could work. Since every Direction is a number, a number could be a valid Direction. Sometimes a cast is known to fail a priori. If the userInput would be a plain string, TypeScript would complain and return an error on the cast.
Interfaces
Interfaces define types without specifying an implementation. They will vanish completely in the resulting JavaScript, like all of our type annotations. Basically they are quite similar to interfaces in C#, however, there are some notable differences.
Let's have a look at a sample interface:
interface LevelFormat { width: number; height: number; id: number; background: number; data: string[][]; }
This defines the format of a level definition. We see that such a definition must consist of numbers such as,widthheight, background and an.id Also, a two-dimensional string-array defines the various tiles that should be used in the level.
We already mentioned that TypeScript interfaces are different to C# interfaces. One of the reasons is that TypeScript interfaces allow merging. If an interface with the given name already exists, it won't be overwritten. There is also no compiler warning or error. Instead the existing interface will be extended with the properties defined in the new one.
The following interface merges the existing Math interface (from the TypeScript base definitions) with the provided one. We gain one additional method:
interface Math { sign(x: number): number; }
Methods are specified by specifying parameters in round brackets. The usual type annotation is then the return type of the method. With the provided interface (extension) the TypeScript compiler allows us to write the following method:
Math.sign = function(x: number) { if (x > 0) return 1; else if (x < 0) return -1; return 0; };
Another interesting option in TypeScript interfaces is the hybrid declaration. In JavaScript an object is not limited to be a pure key-value carrier. An object could also be invoked as a function. A great example for such a behavior is jQuery. There are many possible ways to call the jQuery object, each resulting in a new jQuery selection being returned. Alternatively the jQuery object also carries properties that represent nice little helpers and more useful stuff.
In the case of jQuery one of the interfaces looks like:
interface JQueryStatic { (): JQuery; (html: string, ownerDocument?: Document): JQuery; ajax(settings: JQueryAjaxSettings): JQueryXHR; /* ... */ }
Here we have to possible calls (among many) and a property that is directly available. Hybrid interfaces, therefore, require that the implementing object is, in fact, a function, that is extended with further properties.
We can also create interfaces based on other interfaces (or classes, which will be used as interfaces in this context).
Let's consider the following case. To distinguish points we use the Point interface. Here we only declare two coordinates, x and y. If we want to define a picture in the code, we need two values. A location (offset), where it should be placed, and the string that represents the source of the image.
Therefore we define the interface to represent this functionality to be derived / specialized of the Pointinterface. We use the extends keyword to trigger this behavior in TypeScript.
interface Point { x: number; y: number; } interface Picture extends Point { path: string; }
We can use as many interfaces as we want, but we need to separate them with commas.
Classes
At this stage we already typed most of our code, but an important concept has not been translated to TypeScript. The original codebase makes use of a special concept that brings class-like objects (incl. inheritance) to JavaScript. Originally this looked like the following sample:
var Gauge = Base.extend({ init: function(id, startImgX, startImgY, fps, frames, rewind) { this._super(0, 0); this.view = $('#' + id); this.setSize(this.view.width(), this.view.height()); this.setImage(this.view.css('background-image'), startImgX, startImgY); this.setupFrames(fps, frames, rewind); }, });
Unfortunately there are a lot of problems with the shown approach. The biggest problem is that it is non-normative, i.e. it is no standard way. Therefore developers who aren't familiar with this style of implementing class-like objects, cannot read or write code as they usually would. Also the exact implementation is unknown. All in all any developer has to look at the original definition of the Class object and its usage.
With TypeScript a unified way of creating class-like objects exists. Additionally it is implemented in the same manner as in ECMAScript 6. Therefore we get a portability, readability and extensibility, that is easy to use and standardized. Coming back from our original example we can transform it to become:
class Gauge extends Base { constructor(id: string, startImgX: number, startImgY: number, fps: number, frames: number, rewind: boolean) { super(0, 0); this.view = $('#' + id); this.setSize(this.view.width(), this.view.height()); this.setImage(this.view.css('background-image'), startImgX, startImgY); this.setupFrames(fps, frames, rewind); } };
This looks quite similar and behaves nearly identical. Nevertheless, changing the former definition with the TypeScript variant needs to be done in a single iteration. Why? If we change the base class (just called Base), we need to change all derived classes (TypeScript needs classes to inherit from other TypeScript classes).
On the other hand, if we change one of the derived classes we cannot use the base class any more. That being said, only classes, that are completely decoupled from the class hierarchy, can be transformed within a single iteration. Otherwise, we need to transform the whole class hierarchy.
The keywordextends has a different meaning than for interfaces. Interfaces extend other definitions (interfaces or the interface part of a class) by the specified set of definitions. A class extends another class by setting its prototype to the given one. Additionally, some other neat features are placed on top of this, like the ability to access the parent's functionality via.super
The most important class is the root of the class hierachy, called Base. It contains quite some features, most notably
class Base implements Point, Size { frameCount: number; x: number; y: number; image: Picture; width: number; height: number; currentFrame: number; frameID: string; rewindFrames: boolean; frameTick: number; frames: number; view: JQuery; constructor(x: number, y: number) { this.setPosition(x || 0, y || 0); this.clearFrames(); this.frameCount = 0; } setPosition(x: number, y: number) { this.x = x; this.y = y; } getPosition(): Point { return { x : this.x, y : this.y }; } setImage(img: string, x: number, y: number) { this.image = { path : img, x : x, y : y }; } setSize(width, height) { this.width = width; this.height = height; } getSize(): Size { return { width: this.width, height: this.height }; } setupFrames(fps: number, frames: number, rewind: boolean, id?: string) { if (id) { if (this.frameID === id) return true; this.frameID = id; } this.currentFrame = 0; this.frameTick = frames ? (1000 / fps / setup.interval) : 0; this.frames = frames; this.rewindFrames = rewind; return false; } clearFrames() { this.frameID = undefined; this.frames = 0; this.currentFrame = 0; this.frameTick = 0; } playFrame() { if (this.frameTick && this.view) { this.frameCount++; if (this.frameCount >= this.frameTick) { this.frameCount = 0; if (this.currentFrame === this.frames) this.currentFrame = 0; var $el = this.view; $el.css('background-position', '-' + (this.image.x + this.width * ((this.rewindFrames ? this.frames - 1 : 0) - this.currentFrame)) + 'px -' + this.image.y + 'px'); this.currentFrame++; } } } };
The implements keyword is similar to implementing interfaces (explicitely) in C#. We basically enable a contract, that we provide the abilities defined in the given interfaces within our class. While we can only extend from a single class, we can implement as many interfaces as we want. In the previous example we choose not to inherit from any class, but to implement two interfaces.
Then we define what kind of fields are available on objects of the given type. The order does not matter, but defining them initially (and most importantly: in a single place) makes sense. The functionconstructor is a special function that has the same meaning as the custom methodinit before. We use it as the class's constructor. The base class's constructor can be called any time via.super()
TypeScript also provides modifiers. They are not included in the ECMAScript 6 standard. Therefore I also do not like to use them. Nevertheless, we could make fields private (but remember: only from the view of the compiler, not in the JavaScript code itself) and therefore restrict access to such variables.
A nice usage of these modifiers is possible in combination with the constructor function itself.
class Base implements Point, Size { frameCount: number; // no x and y image: Picture; width: number; height: number; currentFrame: number; frameID: string; rewindFrames: boolean; frameTick: number; frames: number; view: JQuery; constructor(public x: number, public y: number) { this.clearFrames(); this.frameCount = 0; } /* ... */ }
By specifying that the arguments are public, we can omit the definition (and initialization) of x and y in the class. TypeScript will handle this automatically.
Fat arrow functions
Can anyone remember how to create anonymous functions in C# prior to lambda expressions? Most (C#) devs cannot. And the reason is simple: Lambda expressions bring expressiveness and readability. In JavaScript everything is evolving around the concept of anonymous functions. Personally, I only use function expressions (anonymous functions) instead of function statements (named functions). It is much more obvious what is happening, more flexible and brings a consistent look and feel to the code. I would say it is coherent.
Nevertheless, there are little snippets, where it sucks writing something like:
var me = this; me.loop = setInterval(function() { me.tick(); }, setup.interval);
Why this waste? Four lines for nothing. The first line is required, since the interval callback is invoked on behalf of the window. Therefore we need to cache the original this, in order to access / find the object. This closure is effective. Now that we stored the this in me, we can already profit from the shorter typing (at least something). Finally we need to hand that single function over in another function. Madness? Let's use the fat-arrow function!
this.loop = setInterval(() => this.tick(), setup.interval);
Ah well, now it is just a neat one-liner. One line we "lost" by preserving the this within fat-arrow functions (let's call them lambda expressions). Two more lines have been dedicated to preserving style for functions, which is now redundant as we use a lambda expression. In my opinion, this is not only readable but also understandable.
Under the hood, of course, TypeScript is using the same thing as we did before. But we do not care. We also do not care about MSIL generated by a C# compiler, or assembler code generated by any C compiler. We only care about the (original) source code being much more readable and flexible. If we are unsure about the wethis should use the fat arrow operator.
Extending the project
TypeScript compiles to (human-readable) JavaScript. It ends with ECMAScript 3 or 5 depending on the target.
Now that we basically typed our whole solution we might even go further and use some TypeScript features to make the code nicer, easier to extend and use. We will see that TypeScript offers some interesting concepts, that allow us to fully decouple our application and make it accessible, not only in the browser, but also on other platforms such as node.js (and therefore the terminal).
Default values and optional parameters
At this stage we are already quite good, but why leave it at that? Let's place default values for some parameters to make them optional.
For instance ,the following TypeScript snippet will be transformed...
var f = function(a: number = 0) { } f();
... to this:
var f = function (a) { if (a === void 0) { a = 0; } }; f();
The void 0 is basically a safe variant of undefined. That way these default values are always dynamically bound, instead of default values in C#, which are statically bound. This is a great reduction in code, as we can now omit essentially all default value checks and let TypeScript do the work.
As an example consider the following code snippet:
constructor(x: number, y: number) { this.setPosition(x || 0, y || 0); // ... }
Why should we ensure that the x and y values are set? We can directly place this constraint on the constructor function. Let's see how the updated code looks like:
constructor(x: number = 0, y: number = 0) { this.setPosition(x, y); // ... }
There are other examples, as well. The following already shows the function after being altered:
setImage(img: string, x: number = 0, y: number = 0) { this.view.css({ backgroundImage : img ? c2u(img) : 'none', backgroundPosition : '-' + x + 'px -' + y + 'px', }); super.setImage(img, x, y); }
Again, this makes the code much easier to read. Otherwise, the propertybackgroundPosition would be assigned with default value consideration, which looks quite ugly.
Having default values is certainly nice, but we might also have a scenario, where we can safely omit the argument without having to specify a default value. In that case we have still to do the work of checking if a parameter has been supplied, but a caller may omit the argument without running into trouble.
The key is to place a question mark behind the parameter. Let's look at an example:
setupFrames(fps: number, frames: number, rewind: boolean, id?: string) { if (id) { if (this.frameID === id) return true; this.frameID = id; } // ... return false; }
Obviously ,we allow calling the method without specifying the id parameter. Therefore we need to check if it exists. This is done in the first line of the method's body. This guard protects the usage of the optional parameter, even though TypeScript allows us to use it at free will. Nevertheless, we should be careful. TypeScript won't detect all mistakes - it's still our responsibility to ensure a working code in every possible path.
Overloads
JavaScript by its nature does not know function overloads. The reason is quite simple: Naming a function only results in a local variable. Adding a function to an object places a key in its dictionary. Both ways allow only unique identifiers. Otherwise we would be allowed to have two variables or properties with the same name. Of course there is an easy way around this. We create a super function that calls sub functions depending on the number and types of the arguments.
Nevertheless, while inspecting the number of arguments is easy, getting the type is hard. At least with TypeScript. TypeScript only knows / keeps the types during compile-time, and then throws the whole created type system away. This means that no type checking is possible during runtime - at least not beyond very elementary JavaScript type checking.
Okay, so why is a subsection dedicated to this topic, when TypeScript does not help us here? Well, obviously compile-time overloads are still possible and required. Many JavaScript libraries offer functions that offer one or the other functionality, depending on the arguments. jQuery for instance usually offers two or more variants. One is to read, the other to write a certain property. When we overload methods in TypeScript, we only have one implementation with multiple signatures.
Typically one tries to avoid such ambiguous definitions, which is why there is are no such methods in the original code. We do not want to introduce them right now, but let's just see how we could write t tohem:
interface MathX { abs: { (v: number[]): number; (n: number): number; } }
The implementation could look as follows:
var obj: MathX = { abs: function(a) { var sum = 0; if (typeof(a) === 'number') sum = a * a; else if (Array.isArray(a)) a.forEach(v => sum += v * v); return Math.sqrt(sum); } };
The advantage of telling TypeScript about the multiple calling versions lies in the enhanced UI capabilities. IDEs like Visual Studio, or text editors like Bracket may show all the overloads including the descriptions. As usual c,alls are restricted to the provided overloads, which will ensure some safety.
Generics
Generics may be useful to tame multiple (type) usages, as well. They work a little bit different than in C#, as well, since they are only evaluated during compile time. Additionally ,they do not have anything special about the runtime representation. There is no template meta programming or anything here. Generics is only another way to handle type safety without becoming too verbose.
Let's consider the following function:
function identity(x) { return x; }
Here the argument x is of type any. Therefore the function will return something of type any. This may not sound like a problem, but let's assume the following function invocations.
var num = identity(5); var str = identity('Hello'); var obj = identity({ a : 3, b : 9 });
What is the type of num, str and obj? They might have an obvious name, but from the perspective of the TypeScript compiler, they are all of type any.
This is where generics come to rescue. We can teach the compiler that the return type of the function is the calling type, which should be of the exact type that has been used.
function identity<t>(x: T): T { return x; } </t>
In the above snippet we simply return the same type that already entered the function. There are multiple possibilities (including returning a type determined from the context), but returning one of the argument types is probably the most common.
The current code does not have any generics included. The reason is simple: The code is mostly focused on changing states and not on evaluating input. Therefore we mostly deal with procedures and not with functions. If we would use functions with multiple argument types, classes with argument type dependencies or similar constructs, then generics would certainly be helpful. Right now everything was possible without them.
Modules
The final touch is to decouple our application. Instead of referencing all the files, we will use a module loader (e.g. AMD for browsers, or CommonJS for node) and load the various scripts on demand. There are many advantage to this pattern. The code is much easier to test, debug and usually does not suffer from wrong orders, as the modules are always loaded after the specified dependencies are available.
TypeScript offers a neat abstraction over the whole module system, since it provides two keywords (import and export), which are transformed to some code that is related to the desired module system. This means that a single code base can be compiled to AMD conform code, as well as CommonJS conform code. There is no magic required.
As an example the file constants.ts won't be referened any more. Instead, the file will export its contents in form of a module. This is done via:
export var audiopath = 'Content/audio/'; export var basepath = 'Content/'; export enum Direction { none = 0, left = 1, up = 2, right = 3, down = 4, }; /* ... */
How can this be used? Instead of having a reference comment, we use the require() method. To indicate that we wish to use the module directly, we do not write var, but import. Please note, that we can skip the *.tsextension. This makes sense, since the file will have the same name later on, but a different ending.
import constants = require('./constants');
The difference between var and import is quite important. Consider the following lines:
import Direction = constants.Direction; import MarioState = constants.MarioState; import SizeState = constants.SizeState; import GroundBlocking = constants.GroundBlocking; import CollisionType = constants.CollisionType; import DeathMode = constants.DeathMode; import MushroomMode = constants.MushroomMode;
If we would write var, then we would actually use the JavaScript representation of the property. However, we want to use the TypeScript abstraction. The JavaScript realization of Direction is only an object. The TypeScript abstraction is a type, that will be realized in form of an object. Sometimes it does not make a difference, however, with types such as interfaces, classes or enums, we should prefer import to var. Otherwise we just use var for renaming:
var setup = constants.setup; var images = constants.images;
Is this everything? Well, there is much to be said about modules, but I try to be brief here. First of all, we can use these modules to make interfaces to files. For instance the public interface to the main.ts is given by the following snippet:
export function run(levelData: LevelFormat, controls: Keys, sounds?: SoundManager) { var level = new Level('world', controls); level.load(levelData); if (sounds) level.setSounds(sounds); level.start(); };
All modules are then brought together in some file like game.ts. We load all the dependencies and then run the game. While most modules are just objects bundled together with single pieces, a module can also be just one of these pieces.
import constants = require('./constants'); import game = require('./main'); import levels = require('./testlevels'); import controls = require('./keys'); import HtmlAudioManager = require('./HtmlAudioManager'); $(document).ready(function() { var sounds = new HtmlAudioManager(constants.audiopath); game.run(levels[0], controls, sounds); });
The controls module is an example for a single piece module. We achieve this with a single statement such as:
export = keys;
This assigns the export object to be the keys object.
Let's see what we got so far. Due to the modular nature of our code we included some new files.
We have another dependency on RequireJS, but in fact, our code is more robust and easier to extend than before. Additionally, all dependencies are always exposed, which removes the possibility of unknown dependencies drastically. The module loader system combined with intellisense, improved refactoring capabilities and the strong typing added much safety to the whole project.
Of course not every project can be refactored so easily. The project has been small and was based on a solid code base, that did not rust that much.
In a final step we will break apart the massive main.ts file, to create small, decoupled files, which may only depend on some setting. This setting would be injected in the beginning. However, such a transformation is not for everyone. For certain projects, it might add too much noise than gain clarity.
Either way, for the Matter class we would have the following code:
/// <reference path="def/jquery.d.ts"/> import Base = require('./Base'); import Level = require('./Level'); import constants = require('./constants'); class Matter extends Base { blocking: constants.GroundBlocking; level: Level; constructor(x: number, y: number, blocking: constants.GroundBlocking, level: Level) { this.blocking = blocking; this.view = $('<div />').addClass('matter').appendTo(level.world); this.level = level; super(x, y); this.setSize(32, 32); this.addToGrid(level); } addToGrid(level) { level.obstacles[this.x / 32][this.level.getGridHeight() - 1 - this.y / 32] = this; } setImage(img: string, x: number = 0, y: number = 0) { this.view.css({ backgroundImage : img ? img.toUrl() : 'none', backgroundPosition : '-' + x + 'px -' + y + 'px', }); super.setImage(img, x, y); } setPosition(x: number, y: number) { this.view.css({ left: x, bottom: y }); super.setPosition(x, y); } }; export = Matter;
This technique would refine the dependencies. Additionally, the code base would gain accessibility. Nevertheless, it depends on the project and state of the code, if further refinement is actually desired or unnecessary cosmetics.
Credit
Florian Rappl
Florian lives in Munich, Germany. He started his programming career with Perl. After programming C/C++ for some years he discovered his favorite programming language C#. He did work at Siemens as a programmer until he decided to study Physics. During his studies he worked as an IT consultant for various companies. After graduating with a PhD in theoretical particle Physics he is working as a senior technical consultant in the field of home automation and IoT. Florian has been giving lectures in C#, HTML5 with CSS3 and JavaScript, software design, and other topics. He is regularly giving talks at user groups, conferences, and companies. He is actively contributing to open-source projects. Florian is the maintainer of AngleSharp, a completely managed browser engine.
Repository at GitHub
Points of Interest
One of the most asked questions in the original article has been where to acquire the sound / how to set up the sound system. It turns out that the sound might be one of the most interesting parts, yet I decided to drop it from the article. Why?
The sound files might cause a legal problem (however, the same could be said about the graphics)
The sound files are actually quite big (effect files are small, but the background music is O(MB))
Every sound file has to be duplicated to avoid compatibility issues (OGG and MP3 files are distributed)
The game has been made independent of a particular sound implementation
The last argument is my key point. I wanted to illustrate that the game can actually work without strongly coupling it to a particular implementation. Audio has been a widely discussed topic for web applications. First of all, we need to consider a series of formats since different formats and encodings only work on a subset of browsers. To reach all major browsers, one usually needs at least 2 different formats (usually consisting of one open and one proprietary format). Additionally, the current implementation of the HTMLAudioElement is not very efficient and useful for games. That is what motivated Google to work on another standard, which works much better for games.
Nevertheless, you want a standard implementation? The GitHub repository actually contains a standard implementation. The original JavaScript version is available, as is the Type'd version. Both are just called.SoundManager One is in the folder Original, the other one in the Scripts folder (both are subfolders of src).
1 note
·
View note
Text
How to Backtest in MT4 Strategy Tester: A Beginner’s Guide
The great part about MetaTrader 4 is that you can create automated trading strategies called Expert Advisors (EAs) and backtest them in the built-in Strategy Tester. If a strategy works well after thorough testing, the next step is to start testing it in a demo account to see if it works in real-time market conditions.
But using the Strategy Tester can be confusing when you use it for the first time. The first time I used it, I thought it was broken
So in this video, I'll show you how to go from beginner to pro, when it comes to backtesting automated trading strategies in MetaTrader 4. Learn how to do a quick test, use the strategy optimizer and use visual mode.
If you want to learn how to use the MT5 version of Strategy Tester, you can find that tutorial here. You can also learn more about MT4 by going through these tutorials.
The text version of the video is provided below the video.
youtube
How to Setup the MT4 Strategy Tester
Before you do anything in Strategy Tester, make sure that the EA you want to test is installed. You can do this by going to: File > Open Data Folder.
From there, open this folder: MQL4 > Experts. Then drag your EA file into that folder.
You can also check to see if the EA is already installed.
Once your EA is installed, restart MT4.
Now that your EA is installed, open MT4 and click on the Strategy Tester button. This feature is NOT available in the mobile version of MT4.
The Strategy Tester window will appear at the bottom of your screen. You are now ready to do your first test of your EA.
How to do Your First Backtest in the Strategy Tester
Here is an explanation of the settings:
In the first box, select your EA from the dropdown list.
Symbol: Select the symbol that you want to backtest on.
Model: Use the default Every tick setting.
Use Date: Leave this box checked and select the From and To dates that you want to use for this test.
Visual mode: Leave this box unchecked for now. You can also ignore all of the settings immediately to the right of this box. They will be grayed out anyway.
Period: Select the timeframe chart that you want to test from the dropdown list.
Spread: Leave as Current.
Expert properties button: Click on this button to change the settings of the EA.
Symbol properties button: You won't have to use this button in this tutorial.
Open chart: Only click this button after a test has been completed.
Modify expert: This is only used to modify the source code of the indicator. You won't need this for your first test.
Optimization: Uncheck this box. We will get into optimization later in this post.
Once everything is setup, then click on the Start button.
Alright, this is where things may get confusing…
When you first start the test, the green bar will move from left to right. This first pass shows that the data is being loaded.
Then the green bar will reset and start moving from left to right again. This is when it's actually testing.
You won't see anything happening on the chart. MetaTrader 4 is testing in the background.
This is the fastest way to backtest because it doesn't have to constantly update the chart. If you want to see the results in real-time, go to the Graph tab at the bottom of the screen. That will show you the results of every trade, as it happens.
You can also look on the Report tab to see the stats on your test.
The Results tab will show you all the trades that were taken.
Once the test is completed, you can click on the Open chart button and you will see of the trades that were taken.
This chart can help you understand if your trades are being executed as you expected.
When you double click on a trade in the Results tab, and you have the chart marked with your trades open above, the chart will jump to that trade.
That's the fastest way to backtest your EA.
Another way to backtest is to use visual mode…
How to Use Visual Mode in Strategy Tester
Visual mode will open a chart and show you the execution of every single trade.
In order to use visual mode, simply check the Visual mode box before you click the Start button on your test.
This is what you'll see on your chart.
Once the data loads, you'll see the chart and the price will start changing. In order to speed up the process, move the slider next to the visual mode box all the way to the right.
Even at “full speed” the chart will move pretty slowly. So you might wonder what the benefit is to using this mode.
The primary benefit is seeing how your strategy executes in almost real-time.
When you look a the code or to a standard backtest, it can be difficult to see where the EA is making mistakes or how your settings are affecting the results.
But sometimes when you see trades executing as price moves, the issues become very clear.
Therefore, this method of testing is not geared for speed, but it's a way to visually spot issues or optimizations.
MT4 Strategy Tester Optimizer
Now that you have a good feel for how the Strategy Tester works, you can start optimizing some of your parameters.
It would be great if there was some sort of fancy AI powered optimization algorithm, but unfortunately there isn't.
Strategy Tester uses a very simple iterative process of trying different EA settings and showing you the results.
But that can be a good thing. When you use an AI, you don't quite know what it's doing in the background.
With the MT4 optimization process however, you know exactly what's happening and identifying the best settings is a straightforward process.
To use the optimizer, click the Optimization box before you start the test.
The way that MT4 optimizes your EA settings is by allowing you to set a starting, ending, and step up value for each of your EA settings. For example, here are the settings that are available for the EA that I'm using in this example.
For each setting, you can set the following:
Checkbox: The parameters that are checked are the ones that will be optimized.
Value: The value used for normal testing.
Start: The start value used for optimization. This value is not actually tested.
Step: The increments that are used in each of the tests. In this example the step is set to 10, so the value for this input will increase by 10 on each successive test.
Stop: This is the final value that will be tested during optimization.
Just to clarify how this works…
If you use a starting value of 10, a step value of 10 and stop value of 30, MetaTrader 4 will test 20 and 30 only. It will not test the starting value of 10.
Also keep in mind that the more inputs you test, the longer your optimization tests will take.
Therefore, it helps to start off by testing one input at a time and use larger step intervals. Once you get an idea of what works, you can start to fine tune the settings.
After you get results that you like, be sure to do one last test with the normal Strategy Tester settings to make sure that all of your new settings work well together.
Where to Get MT4 EAs
There are many places that you can get MT4 EAs.
You can start by taking a look at the MetaTrader EA repository. This will give you a good idea of what is out there.
However, you'll quickly see that there are a ton of EAs, but you don't know how most of them trade. If you don't know how they work, how will you know when they stop working?
Therefore, the best thing to do is to learn a trading strategy, test it, then create your own EA.
Even if you don't know how to program in MT4, you can always find a programmer to create an EA for you.
I've used several programmers over the years and they were able to create exactly what I wanted.
To see the programmers I use, go here.
The Difference Between .MQ4 and .EX4 Files
You may notice that there are two different types of EA files. This section will explain the difference.
There are two different types of files because there is one file that humans can read and one file that that MetaTrader can read.
The file that human programmers can read (the .mq4 file) is not very efficient in terms of processing speed, so it's converted into a version that the computer can use efficiently (the .ex4 file).
These files are also known by the following names:
.ex4 = compiled, program or executable file
.mq4 = source code file
When you add a .mq4 file to MT4, it will automatically be converted to a .ex4 file, when you open MetaTrader 4.
If you purchase an EA on the internet, it will usually come in .ex4 format. This is because the .ex4 file hides the developer's programming and doesn't allow others to copy the code and resell it.
However, if you create an EA yourself, or you work with a programmer to create an EA from scratch, the EA will be in .mq4 format.
One final note on these files…before working with a programmer, be sure that they will give you the .mq4 (source code) version. That shouldn't be a problem since you're paying them.
But double check before you start working with them.
To get help with finding a MetaTrader 4 programmer, I have created this guide and list of programmers.
…and no, you cannot use MT4 files with MT5, and vice versa. This is a common question.
A Final Word of Caution
Finding an EA that will make you money while you sleep is a sexy idea. But remember that there are no free lunches in trading.
You can still screw up an EA that has been profitable in backtesting.
Here are a couple of ways that you can do that.
First of all, you have to decide when to turn on your EA.
That may sound obvious, but when an EA hits a losing streak, it can be very tempting to turn it off to stop the bleeding.
…and when you turn it off is usually when it starts working again…or so it seems.
So remember that you have to understand the statistical characteristics of your EA, so you know when it is doing something that's out of the ordinary.
For example, if your backtesting shows that you should only have a maximum of 5 losses in a row, but your EA has currently lost 10 trades in a row, then it's probably time to turn it off and evaluate what's going on.
However, you certainly shouldn't turn it off after 6 losses in a row, no matter how mentally painful that is. Based on your stats, that's usually the time when it should start winning again.
Second, many new traders don't test their strategy enough and jump into live trading too quickly.
There are many variables that can affect the performance of an EA in live trading, so be sure to “stress test” them all before you risk real money. Test it with a wide spread, multiple pairs and use as much historical data as possible. Six months of data is not a valid test.
The more robust your testing, the more likely your EA will work in live trading.
Now get to work testing
The post How to Backtest in MT4 Strategy Tester: A Beginner’s Guide appeared first on Trading Heroes.
How to Backtest in MT4 Strategy Tester: A Beginner’s Guide published first on your-t1-blog-url
0 notes
Text
Unification (4/?)
Of all the people Eirn hadn't expected to see when they returned, it was Lana who was waiting for them impatiently at the Republic's base camp - pacing irritably behind the checkpoint, shooting challenging looks to any Pubs who looked as though they might be about to question her presence and, on spotting Eirn, homing in on her almost immediately.
'Lord Illte. I'm glad to see you made it back in one piece.' This time, there was nothing snide or sour about her use of Eirn's title - it was genuine, or as genuine as she got, which was enough to unsettle Eirn on the best of days. It was a slightly unfair reaction; Lana did not plot to steal power and status, despite orthodox views on Sith philosophy. Still, it was an ingrained one - Eirn had not lasted as long as she had among Sith by being a Jedi's version of fair, and everything about Lana Beniko set those well-tested instincts on edge.
'Lana,' Eirn replied, half in greeting - and then, frowning, 'Something's wrong.'
An understatement; Lana Beniko did not make a habit of abandoning her posts, and would have harangued Eirn over the holo, were this anything but a matter of- well, life or death, a thought that didn't make Eirn feel any better.
'Not here,' Lana replied, sharply - shooting a dark, wary glance at the Republic guards before returning her attention to Eirn. 'In my shuttle. There's something you need to see.'
-
Which meant, of course, something that Lana didn't want to share with the Republic; which meant that she was tipping her hand that there was something that she didn't want to share with them, and that Lana had decided that whatever had unsettled her enough to abandon her post was worth potentially upsetting the Republic's shaky almost-trust in the Alliance. None of this filled Eirn with anything but a mild, gnawing dread that Lana's own tension was doing nothing to abate.
'I've been taking a look at the information that led us to Iokath in the first place, and comparing it to what Theron pulled from the data node that you found. It looks like we were fed nearly the same information,' Lana added, calling up a holographic display - showing two sets of data, highlighting the differences between the two. 'But pieces of it were missing. Like they'd been deliberately redacted.'
The data on the display meant nothing to Eirn - numbers and figures, scrolling past too fast to read, not that she'd ever had a head for numbers to begin with. She did recognise the map, though - the path they'd taken to the supposed weapons cache, and the visual record of what looked, at first glance, like the Throne they'd found.
'So whoever brought us here sent us bad intel,' Eirn replied, slowly - not quite getting what Lana was getting at.
'Nearly. It was missing various key chunks of information. But that's not the worst part,' Lana added, calling up a third set of data. 'Take a look at this.'
Eirn had no idea what she was looking at, other than lists and figures and numbers - and the points at which those sets differed. 'I'm looking at...?' she prompted, eventually - not getting it.
'This is the data that was sent to the Alliance,' Lana replied, sighing testily as she indicated the middle set, 'And this is what I was able to pull from the Republic datasets. The information we were leaked is identical.'
Well, that definitely wasn't odd.
'Are you sure about this?' Eirn replied - shooting Lana a dark, slightly wary look, and getting an identical one in return.
'I'm certain,' Lana said, nodding sharply. 'I've checked and rechecked it three times. Whoever sent us - and the Republic - this information wanted us in the same place, at the same time.'
'...This is a set-up,' Eirn added, the urgency of Lana's problem finally clicking into place. 'Someone manipulated us and the Republic to be here by feeding us just enough to get us interested, then...'
'Likely the Empire, too,' Lana replied, tersely. 'Of course, I'd need to examine their leads to be sure, but given the timing, it seems a fair assumption.'
'What do we know about the source? Where did you get the information to begin with?' Eirn started, eventually - studying Lana for a long moment.
'I've already told you,' Lana replied, irritably. 'It was anonymous. I've tried to track down the source, but whoever it was is good at hiding their tracks.'
Which was the very opposite of reassuring, and Eirn felt her headache twinge at all the unpleasant possibilities.
Someone wants you dead, Illte. Someone wants a war. Someone wants to put the blame for war on you. (They'd be right, too - fighting is all you've ever been good at, Illte. Death follows you, like a bad smell-)
'Alright,' Eirn sighed, after a moment. 'Well.' Thank you, Lana, for adding to the reasons we should have stayed away from here. 'Thank you for letting me know. Maybe... have Theron see if he can get any information about the Republic's source,' she added - an incredibly long shot in the dark, but at this point, she'd almost have valued input from her former Emperor. Almost.
'Just as long as you're not expecting miracles. Things between Theron and his father seem to be...' Lana trailed off - apparently she wanted to finish that sentence about as much as she needed to.
The estrangement was obvious - Eirn was quite certain she'd have picked that much up even without the Force. A part of her kept wanting to take Theron by the shoulders and march him to wherever Malcom called his command HQ and make them talk - or, at the very least, give him a meaningful and pointed order - but she knew, equally, that was probably her own regret, attempting to live vicariously through someone else's reconciliation. Not that she and her father had fallen out, exactly, but- well, there enough things that had been left unsaid to fill a lifetime of awkward small talk.
'I know,' she just sighed, though - before adding, 'But I suspect he'd have more luck than you or I.' They weren't just the enemy, after all, but Sith - even if Lana seemed more attached to her Alliance than the Empire.
Lana just chuckled at that, though - a rare but genuine kind of amusement showing in her expression. 'True enough. Alright,' she added, though - 'I should get back to work. I'll contact you when I've got an update.'
-
Lana wasn't the only one who was surrounded by an aura of dread, either; the atmosphere in Malcom's command station was downright grim, when Eirn finally made it there, and she wasn't certain that anything that was coming was going to be an improvement on Lana's grim assessments.
'We have a problem.'
Four of Eirn's least favourite words, spoken in one of her least favourite orders and by one of her least favourite accents. She had no idea where in the Republic it was that Malcom hailed from, and didn't care; a part of her even now instinctively wanted to reach for her lightsaber whenever she heard Republic soldiers speaking, and we have a problem wasn't doing anything to reassure her.
'Of course we do,' she replied - sighing, and wondering if this was going to be the moment that she ended up in Force-suppressing restraints, on a ship bound for Coruscant. 'What is it now?'
'While you were out,' Malcom replied, calling up a holographic display - showing what seemed to be the main Imperial position, as seen from one of the Republic's scouting positions, 'One of our forward scouts sent us this, shortly before your team returned to base. The Imps have been landing more of their people, but... it's not the numbers that concern me.'
The display finally paused, at that - focused on one of the Imperial shuttles, the same model that Eirn recognised as having occupied Acina's private docking bays on Kaas. She had no idea how common or otherwise they were in the Empire - its fleets and their makeup were of vanishingly low interest to her, though no doubt Theron or Lana could have told her more. It wasn't the shuttle that got her attention, though, but its passenger - a haughty, tightly-wound Sith who looked almost as thrilled to be there as Eirn was.
Acina.
Her, or an uncanny body double. Still, it was harder to fool Sith than to fool Republic holos, and Eirn knew that there would inevitably be those among the Imperial forces who had prior experience working with the Empress. Sith were creatures of habit, after all; had allies and enemies, routines and patterns, habits and foibles - facts she'd used against others, and had used against her, in turn.
'Do we know what she's doing here?' Eirn replied, glancing to Malcom - and to his analyst, another pale-skinned human who'd smirked to himself when Eirn had entered the room, but who thus far had said nothing.
'Not yet,' Malcom replied, 'Though I can hazard a few guesses.'
'Sir,' Dorne started, 'I may be able to provide some insight. While we were unable to locate anything of immediate use against the Imperial forces, we were able to confirm the hypothesis that the weapon can be remotely controlled. It would seem that an attempt to do just that is what lead to the deaths of the people who built this facility. Agent Shan believes, and I concur, that with the right information, it would theoretically be possible for one of us to attempt the same thing. It is also probable, however, that the results would be... similar.'
Eirn couldn't help but raise her brow at that. 'You knew about that?' she replied - not appreciating having been left so completely out of the loop. She half-expected it from the Republic, but-
(Theron used to be Republic, her paranoia murmured, and Malcom is his father. Do not underestimate blood ties, Illte-)
'We suspected it might,' Malcom replied, cutting in before Dorne could go any further, 'But had no hard proof.'
Eirn could feel her temple starting to throb; her head hurt, and her fatigue was catching up with her. She knew she'd never sleep, but all she wanted was to lie down, somewhere dark - away from this stupid battle, away from machines of mass murder and all these lunatics who seemed desperate to use them. She closed her eyes, though - massaging the bridge of her nose, trying to focus on her more immediate problems, like power-hungry Sith and empty Thrones.
'The Empress wouldn't be here unless there'd been a breakthrough,' Theron started - and the Imperial lines were holding fast, or so it seemed.
'Or she's here to force one,' Eirn added, slightly absent-mindedly - thinking, at that, of the way Acina had spoken to her on Kaas. Acina had possessed an agenda, there, that had nothing to do with the Alliance - Eirn had been able to tell that much without even trying, even if she'd run into brick walls trying to figure out what that was.
'Acina's not stupid,' Malcom replied, apparently objecting. 'If she pushes her people too hard, and this- failsafe goes off, she'll just end up killing her own people, too.'
'Sith don't care about Imperial lives,' Eirn replied, frowning to herself. 'Just ending Republic ones.'
All Eirn could think of, as she spoke, was the Dread Seeds; the ruin they had wrought even on Imperial interests, and the blasé way Acina had regarded them.
How do you walk away from such power, Wrath?
Acina hadn't wanted them out of the field - not personally, not in the places where they might pose a problem for the Republic, even if it meant running the risk of Imperials or even Sith falling victim to their power. (Any Sith, a part of Eirn had snarled, even then, who falls victim to such things was hardly Sith to begin with-)
Acina, though, had thought nothing of the harm they did, nothing of the damage to their environs. Eirn had no idea if the places that those things had been buried had ever recovered, or not, though she knew enough about the corruption inherent in the darkest places of the Force to know that it was deeply unlikely. It was more likely that their rot had spread, seeping deep into the cores of those worlds and twisting them beyond anything that Tagriss or Fulminiss might dared of dream of.
Iokath, of course, was not a Sith world, and whatever weapon these Thrones controlled was not of Sith design, but- the Force flowed through them, all the same, shaped and directed by ancient technology into something crafted for war and destruction, and had already laid waste to numerous worlds. Acina, of course, would want to test it - on Odessen, perhaps, full of defiant traitors and heretics - or some other nominally neutral world, before turning it on the Republic. Not to mention any Imperial worlds who objected to such needless slaughter...
'Hey. You alright?' Theron spoke quietly, at least - did her the favour of not drawing attention to the fact she'd drifted into that train of unpleasant thought, while Malcom and Dorne were distracted by their own
Eirn just managed a noncommittal Hm that probably answered him far more honestly than she might have liked, before attempting to focus up on the discussion at hand.
'-agree entirely sir,' Dorne was saying, 'But without knowing where to start-'
'I'll offer to speak to her,' Eirn volunteered - grabbing everyone's attention, and derailing whatever Dorne was objecting entirely. 'Empress Acina has reached out to me personally before. Perhaps it's time I returned the gesture.'
'You think she'll speak to you? After allying with us?' Malcom sounded sceptical, and Eirn couldn't blame him. She was sceptical, and she was the one who'd just proposed the idea.
'She'll assume it's a trap, obviously,' Eirn replied, 'But... we have a history.'
Simultaneously more personal than simply Wrath and Councillor, and far less personal than Acina's flowers might have suggested she'd have liked. Even the flowers Acina had sent on Eirn and Quinn's engagement had been a pointed message - Rakami orchids, a neutered, Force-blunted variant of the so-called death orchid, and Eirn hadn't been able to make up her mind if it was a threat or an insult or both.
('Both, darling,' her mother had insisted, 'the answer is both.')
'If nothing else,' Eirn mused, 'I stand a better chance of talking her down than any of your people. No offence,' she added.
Or push her into doing something stupid, though Lana's interminable briefings on the state of the galaxy had Eirn half-convinced that, among other things, the Empire had worked its way through the stupid list some years previously, and was currently reaching the bottom of desperate. What happened when they ran out of desperate moves was something she didn't want to contemplate; nobody would like the answer to that, not least if they wanted to live in the galaxy afterwards.
'It's your call, Commander,' Malcom just replied - apparently pretending not to see Eirn's reflexive twitch at the title. 'But the Republic will be sitting this one out. I came here to end a war, not start one.'
Of course he would say that; Malcom wouldn't want to waste his people on a Sith that he thought was probably going to betray them in the end anyway. Eirn managed to quash the urge to snort in response, though - just nodded, sharply, deciding to let him think that she was none the wiser.
'I understand,' she replied - a nugget of an idea forming, as she said it. Lana probably wouldn't like it, but it stood a chance of getting them some answers. 'I'll see you on the other side,' she added - standing, then, to leave - to prepare. To fight.
#swtor#war for iokath#sith warrior#ficlet: unification#my writing#long post#lana beniko#elara dorne#theron shan#jace malcom
7 notes
·
View notes
Text
Researching and Implementing Wall-running
Games that use Wall-running:
Star Wars Jedi: Fallen Order:
It was playing Jedi: Fallen Order that I actually had the idea to implement wall-running into my game. I feel like moving from place to place in many games, especially exploration games, can become rather stale since it doesn’t take much player engagement to wander around. Adding a wall-running mechanic creates more opportunities for the player to interact with the game, it also raises the skill ceiling with less skilled players being able to engage with the mechanic while more skilled players can perfect their technique and make traversal more efficient.
In the game wall-running acts as a skill that you earn after the tutorial planet and is used constantly throughout the game. Besides the obvious use of level traversal, the mechanic is used with different player abilities to find hidden areas and collectibles, yet another way to keep the player engaged and paying attention to the world around them.
Function wise the mechanic sticks the player to the wall and propels them forward for around two seconds before the player eventually starts to give into gravity.
Despite the game being in the third person, I'm fairly sure it functions in a similar manner to the other games in this list and could easily be implemented into a first person game.
Mirror’s Edge:
Mirror's Edge is a game entirely based around parkour and finishing levels as quickly as possible by finding more efficient paths. Due to it's approach to gameplay and its focus on traversal, Mirror's Edge's movement system is refined to practical perfection.
Compared to many other First Person games that incorporate parkour mechanics, the movement in Mirror's Edge feels very weighty and realistic; where other games would give you perfect control in the air and allow you to jump 15 feet vertically, in Mirror's Edge you bairly get off the ground from a standing jump and all your moment is carried over from before you jump. It's a very physics heavy system. All this makes the game's movement rather clunky in the hands of someone who doesn't know what they're doing, and extremely fluid in the hands of a skilled player.
While I really like the game's movement system and find it rather enjoyable, I want my own game's movement to be a lot more fluid and user friendly, as well as being a lot faster.
Titanfall:
While Jedi: Fallen Order inspired me to add a wall-running mechanic into my game, it is Titanfall that I derived the mechanic's function from. Titanfall's movement is similar to Mirror Edge's, but throws the realism out of the window.
You play a pilot with a jump jet that allows the player to jump relatively high as well as granting them a double jump. The movement feels like its built to be accessible, where players are able to pick up the controller and easily move across the map with just a few minutes of practice.
Since the game is a First Person Shooter, it makes sense that the wall running wouldn’t be the main source of challenge and difficulty for the player, it’s mostly a means for traversing the map which means the movement itself doesn’t have a particularly high skill ceiling. The progression in skill actually comes from combining other actions with the wall running, like shooting; it’s surprisingly difficult to have good aim whilst running on a wall and is immensely satisfying when you’re first able to get your first kill while quickly zipping across a wall.
Titanfall actually have an interesting feature that I haven’t seen in other games that use wall running and that is actually the ability to reverse direction. In most game’s once you start to run on a wall, you’re locked in and can’t change your direction without first getting off that wall, but in Titanfall, all you have to do is look behind you and your direction is changed with only a minor decrease in speed. I really like this part of Ttianfall’s movement system, it gives the player just bit more control that other game’s just don’t, though it wouldn’t exactly mack sense to be able to do this sort of redirect in Mirror’s Edge for example because you’re not some super soldier with a jet pack holding them to the wall.
Coding Wall-Running:
The wall-running mechanic that I added to my game works by constraining the player’s movement along the Z axis and adding a forward force whenever the “Wall Detection” collision detects an overlap with a tagged wall.
First of all, a capsule collision needs to be added to the player’s blueprint and with it’s collision preset set to OverlapAllDynamic, this will be used to actually detect when the player is touching the wall, so the scale of this detector collision needs to be slightly bigger than the player’s block collision.
Next we actually need to enable the ability to constrain the player’s movement to a specific plane and this needs to be enabled from the beginning, so we need an event BeginPlay to trigger the Set Plane Constraint Enable.
This first section of the code is used to detect whether the overlap collision of the capsule is interacting with a wall that is tagged for wall running and if the player is in the air, together these two conditions make it so the player can only run on specific walls when they jump at it, instead of accidentally triggering the wall running condition whenever they walk past a wall. This part of the code also sets a vector that will be used to propel the character forwards when they start running on the wall. A boolean that indicates that the player is alos on the wall is set to true, this is used in branches later in the blueprint to check if the player is still running on the wall.
A timeline is used to determine how long the player can run on the wall, the duration of such varies across video games that use the mechanic, for example in titanfall 2 you can run on the wall for around 5 seconds, while you can only run on the wall for 3 seconds in mirrors edge.
After the timeline I created a branch to make sure the player was still running on the wall, there is another branch which was originally used to make sure the player was holding down a button, but i decided to remove that condition since I found it to be too finicky. Next I used a gravity scale node to set the player’s gravity to zero, this maybe a little redundant since I’m constraining the player’s movement along the Z axis, but it’s nice to have just in case. After setting the gravity, I used a Set Plane Constraint Normal node with a Z value of one, this meant that it was impossible for the player to move up or down whilst attached to the wall. Finally, I used an Add Force node, using the player direction multiplied by a float as the force input, this propels the player forwards when they interact with the wall.
The last thing that needed to be done in order to make the wall running to be fully functional was to give the player the ability to get off of the wall. The part of the code that allows the player to disembark is essentially the mirror opposite of the code that allows the player to jump onto the wall.
Rotating the Player During Wall Run:
I needed a way to visually signal to the player that they were running on the wall, most games do this by tilting the camera to the side and since this works pretty well, so I thought I’d follow suit.
The beginning of the rotation script is very similar to the beginning of the actual wall running script, using a collision to check whether the player is in contact with a tagged wall while also being in the air. The difference in the rotation is that it uses two small box collisions, one on each side of the player.
A timeline is used to determine how long it takes for the camera to rotate and the timeline’s track is used for the lerp’s alpha, this is part of the code because it was rather jarring for the player when the camera suddenly snapped to an angle, so the lerp is there to give it a transition.
Now we need values to actually lerp between, I encountered a problem with the original method that I used that caused the camera to snap to a Y value of 0 whenever the player would run on the wall; this happened because I was using the actor’s rotation values, but since the actor’s rotation always stayed at zero, the camera’s Y would use that value. To get around this I set the Camera’s Y rotation as a value with an event tick so it was constantly being updated.
Since I was only using the camera’s Y value and the X and Z of the Actor, I needed to break the lerp’s A input into separate values, which can be done by righting clicking the input and clicking Slit Struct Pin. To get the lerp’s B input as well as the rest of the Z value for the A input, I got the actor’s rotation and used a break rotator to split up the values, then got the actor’s Z rotation and combined it with the camera’s Y rotation with a Make Rotator node, I then changed the X value of the Make Rotator and these values then became the Lerps B input. Finally I used the the Lerp as a rotational value of a Set Control Rotation
Encountered Issues:
Most of the issues I encountered were with the rotation part of the script, like I mentioned before I had a problem where the camera would snap forwards whenever the player engaged the wall running mechanic. Thankfully I found a work around for this with the help of Sam, considering it was the most noticeable and jarring issue.
Another annoying problem that I encountered was the fact that whenever the player character experienced an overlap event that wasn’t related to a wall the player could run on, like a box trigger for instance, it would reset the character’s rotation and the player wouldn’t rotated when they next ran on a wall after the overlap. I found that this was caused by the rotation timelines using the start from beginning and reverse from end, so I just switched it to the regular start and reverse.
This one maybe less of an issue and more me not noticing that I selected the wrong option, but I noticed that you run on walls for as long you wanted, when in fact you were meant to fall off after a certain duration of time. I realised this was because I’d accidentally set the timeline that controls the wall run duration to loop.
Another issue I encountered, yet again caused by the player’s rotation, is that sometimes the rotation wouldn't reverse and I’m still unsure as to what is causing it or how to fix it. I’ll have to take another look at the blueprint to see if I can determine the root cause of the issue.
Comparing the Wall Running:
0 notes
Photo
6 Apps I Can’t Travel Without
I consider myself a pretty frequent traveler (kinda) and traveling with these apps has made all of my trips significantly easier. These apps help me decide where to eat, how to walk back to my accommodation, check into flights and find cheap flights. Here are the apps that have saved my life abroad:
App In The Air:
I originally downloaded the app because it had a cool interface that lets you track how many miles you’ve traveled by air, the number of hours you’ve spent on planes, how many different airports and countries you been to, among other things. The app loads all past and future flights from your email(if you give it that permission which I did because I’m too lazy to hand log all of that). For future flights it is really useful because it lists your flight times, current terminal information, your boarding pass, and even the weather in both the flight origin and destination. It also even lets you budge your trip by allowing you yo link your bank and track your spending automatically for purchases made in which country you’re in. I constantly lose my flight confirmation emails in my inbox and instead of looking through my emails to find them, I can easily check-in to my flight and confirm my flight times on the app which is super convenient.
Here WeGo
This is Google Maps alternative which I still use along with GM because both apps have pitfalls that the other makes up for. I try to not use data abroad so I don’t have to pay for it so it’s a lifesaver that Google Maps lets you download maps offline which load only driving directions but also thankfully do load locations and basic information for these locations like opening times and the address. However, it doesn’t load walking directions or public transport directions to any locations and when I need to use those features I’m forced to turn data on for that or search for WifI. HERE WeGo is super convenient because it does actually load walking and public transport directions offline which is a lifesaver. In some cities, it will also load prices for public transport.
Google Maps
Aside from the fact that you can’t load walking or public transport directions on offline, Google Maps is still probably my most essential app for when I’m traveling. I normally research and compile a list of things to do/see in every city I visit and with Google Maps it is super convenient that I can save places to my “Want To Go” list which then shows up on the map with green flags which are also available to view offline. GM is also really useful for finding restaurants abroad. In the U.S. I normally use Yelp but abroad Yelp isn’t as popular and Google Reviews (in the Maps app) seems to be the place locals of foreign countries use instead. On the app I can see reviews and photos of the food and sometimes the menu. If no one has uploaded a photo of the menu before, some restaurants have a website which usually has a menu that you can also see on the app. All around Google Maps is makes traveling 100x easier and it is usually very accurate.
Hopper
Hopper is my best kept finding cheap flights secret. Hopper studies flight price patterns and tells you when the best time to buy your flights is. For example, if I want to go to Iceland in June not only will it’s calendar indicate when the cheapest times of year or that month are but when I select the days I’m looking at it will tell me if I should wait because prices usually drop for that date or if I should buy now because it likely won’t be any cheaper. It will even tell you how much cheaper flights are likely to get and until when they will keep dropping, as well as when they will start to rise and up to how much they rise by. It also lets you add trips to a watch list and they will send you notifications about when flight prices have gone up or down. My flight buying ritual is first to check Google Flights and just see how prices currently are, and then check Hopper to see if that is a good price and if it is likely to get cheaper or not. I try to not buy the flight directly on Hopper (a warning about using third party companies for big purchases that I can get into later) but I mostly use Hopper just for strategizing about when to buy and then when I’m ready to buy I will just buy it on the airline's website directly.
Omio
Omio is the only app I use to look/buy far travel train and bus tickets. Its interface is visually pleasing but also sorted very well so you can always compare your options. You can sort trains, buses, and flights(which I don’t really use because I use Hopper/Google Flights for this) by price, departure time, and fastest arrival. I try to avoid buying flights through third-party apps as I stated above but bus/train tickets usually have more flexible cancellation policies and are obviously not as expensive as flights so for smaller purchases it’s fine. I normally use Omio on my computer when buying things but the app is so useful for keeping track of tickets and departure times. It’s also useful for when you miss your bus from Split to Dubrovnik and need to quickly buy a new ticket for the bus that leaves 10 minutes after. (oops)
Currency Converter + Conversion
I haven’t tried any other converters apps so I can’t speak to how good this one is in comparison to any others but it's just a simple currency converter app. What more could you need? Normally if I’m traveling within the EU I don’t ever calculate exact prices because I always just estimate its always just slightly more expensive than the USD but while traveling through Eastern Europe and North Africa this app became super useful. The interface is super easy to use, you just input which currencies you want to convert and that’s it. You can use it with no internet too which is always a plus. The only (very) minor downfall that I don’t think is a problem but others might is that you can only have a maximum of 5 countries at a time on it which to me is fine because why would I need to convert more than 5 different currency at once? I’m never in 5 countries at once, so so far that has not been a problem.
Honorable Mentions: Google Translate, Uber, Airbnb, CityMapper
0 notes
Text
Tokyo Ghoul:re Chapter 133 Review
youtube
My God! It finally happened! The Colossal Titan has appeared and kicked the wall to 24th Ward. Hell has been unleashed! Okay, that didn't happen but it's similar to it; only it's with Oggai. In this gripping chapter, not only Oggai is ready to raise some hell, but so as Furuta against the rebellion force.
I knew the last chapter was a red alert sign that hellfire was going to happen sooner or later. It's just that I wish I was wrong and somehow prevented that from happening. It's all going accordingly to Ishida and his buildup for tragedy. How joyful. It can go anywhere and many of us, including me, believe that something major will happen to Touka and others while Kaneki is away. This chapter is everything we wished it didn't happen and more.
This chapter is a start of a new volume, so it's either going to start with more character developments or engage with action. I had a feeling the latter was going to be the case, though we still get some development. I have to admit, it sort of bothered me to read Urie's backstory, mainly because I'm under the notion of flashback equals death. I don't think he will die, but that's how much this entire build has caused me to feel pressured.
Urie's backstory doesn't take long but the real purpose is to tie-in with the present time and it was charming. He has fond memories with his father, but thought that he didn't know the complete picture of what happened. It does make sense when you look back at his character, hence how selfish he was from the start. It's great that he has developed enough to mature and understand the real problem.
I like how he didn't rashly go out there and attack Furuta like a mad man, rather trying to find something to go against him. The Washuu blood is far too great for him to handle alone, which goes to show you how a name can really dictate everything. Cleverly enough, Urie plans to leak the sources to outside, so it can spread the bad name of Washuu, which then corrupts Furuta and his regime; as the name wasn't corrupted enough. That sounds like a slow build to the end of CCG, so that's a start.
The part that I like is the conversation between Iwao and Urie. Remember, this is his rival's father, so he expected nothing to be said about him. Not to mention, Urie actually feels a bit of place with this whole plan, let alone feeling like he's in command. It challenges his mind on how much he's involved and how much he has taken a stand for himself rather than following along. The fact he has Iwao with him gives him an odd impression on why he's getting this amount of support.
The best part is when Iwao explains his reason to help Urie. Urie thought he misunderstood him as a friend of Yoriko, it turns out Iwao was referring to Takeomi. It's the first time that Urie hears Takeomi's feelings about his rival and friend. He placed Urie in a high status of someone he can look after and highly respect him. Iwao also inputs his thought that Urie resembles to his father and that enough is high praise for Urie. It's as if he is rewarded for ending his selfish act and helps a rival who he didn't think to be seen as a friend. It's a charming moment that warranted for Urie.
The bone chilling moment is when dealing with Furuta as Urie and others demand for an investigation, which also prevents Yoriko's execution. I believe my heart beat begins to rise when the imagery of Furuta is shaded dark, indicating that it's about to get bad really fast.
Kaneki is off to his mission, but the scene was short lasted because it was there to give you an idea that he's no longer at 24th Ward. That would come into play for a darker reason.
We do get a nice action scene with impacting detail. Fuka and his men got wiped out badly by Kou. It got us started with kill count and it will only grow. It does serve on how strong Kou really is, especially when later on, it only creates the tension even higher.
Kou has a short story to tell about his life with his family. It's a bit disturbing on how he uses that story to pull an attack that reflects his family. His parents were dentists and it sounds like he was living in a happy life, but of course, ghouls killed them off. Sad that Kou became this psychotic now. After the story, he shoves his kagune right though Fuka's teeth and off he goes. That's a brutal way to die; that is if he is really dead. If so, there goes Kaneki's royal servant.
Is Fuka a curse name by the way?
The visual is solid and enticing since it focuses more on tension and impactful strikes. When Kou takes action, it has that horror film feel to it and when the guy got strangled to death, that's when the killing spree begins. It has a clear focus, so you don't find it hard to follow. It uses those large panels for impact feeling, including that shoving kagune part.
The cliffhanger leaves a very worrisome impression. Even though it means intense action is here, the magnitude of the situation is troubling. I'm under impression that Ishida is toying with people's emotion by having Touka to be the first one to encounter Oggai; not just one or two, but crapload of them. I don't know if it was the kid or Oggai that said "Touka,” but if the latter, just how much they know about everyone at this rate? The worst case scenario is that Mutsuki is behind them.
God, ignore what I just said...
To make matter even worse, the bone chilling feeling from Furuta leads him to decide on what to do next: kill Urie and Iwao. How thoughtful. But what's crazy is that he's letting Roma and Shikorae to handle them. They're not even CCG, so I guess once a Clown always a Clown. Hell, Roma was really freed from GOAT, how did that happen? Shikorae is back once more and remembering him, he poses a serious threat if he's more trained. I wonder if he's part of Clowns now.
The chapter's title is a strong indication that Urie, Iwao, and Touka are the three victims that are going to be the focus of this crisis. How clever, Ishida. While I don't think Urie will die, Iwao is alarming. As for Touka, it's up for grab. I don't believe she will die but something major will happen to her.
This chapter is the start of a serious tensed event after a long buildup. It may last a volume since it's just only a beginning. I don't know their fate but no doubt the status quo is not Ishida's agenda. Time to start praying.
10 notes
·
View notes
Text
Exactly how To Abandon UP FOR Throughout 5 Days
Tabletop Gaming Weblog
Online Gambling Web pages covers the complete business of gaming more than the World wide web. Retain in thoughts that when a lot of females gamers are simply casual players, lots of much more are involved in the gaming globe beyond merely selecting up a mobile game or two. Women are interested in both games and gaming influencers, and tend to take recommendations from said influencers relatively seriously. In truth, they account for 30% of YouTube gaming video views alone, and the quantity is only expanding. In addition, 39% of female gamers appear to the suggestions of close friends and family when contemplating a new game, so word-of-mouth is important as effectively, even if the games they are playing have a tendency to be additional of a solo endeavour.
While the design of PlayerX does appear terrific, you are not limited to only utilizing this theme as it comes. Web site owners get access to a detailed set of theme possibilities for developing a custom WordPress gaming internet site. There is also a premium content editor tool in the package, enabling you to edit any of the templates with the WPBakery Page Builder plugin. Modifying your web page in other methods, such as editing the incorporated slideshows or developing your personal is possible as well. Gamers should really appreciate the social media integration attributes that simplify the course of action of publishing social content material on their web-site though also helping to grow their followings on web pages like Facebook and Instagram.
The stereotypical image of the geeky gamer, sitting alone in his space, playing video games all evening lengthy, is long gone. Gamers have develop into the true stars of social media. No other niche has grown so immensely with the age of social media than the field of gaming. Supported by social media like YouTube and the reside-streaming platform Twitch, the numbers of gaming channels boomed. No wonder that brands recognized the prospective that these gaming influencers bring with them. We have put collectively a list of some of the largest gaming influencers you will need to know.
on-line Gaming has been a preferred platform for individuals to invest their free time on. However, 2nd August 2012 marked the emergence of an on the internet game that brought a whole new dimension to how individuals made use of to feel of On the internet Games. Ought to you use WordPress for your new gaming weblog? It is a good query, and 1 that you should really feel about pretty carefully ahead of you get began.
Console Mode transforms your SHIELD transportable into a complete living space gaming and entertainment knowledge on your significant-screen Tv. Play Android games, browse the net and watch your preferred motion pictures. Also, Computer games can be streamed in Console Mode with GAMESTREAM. America and Europe About Weblog Get the most up-to-date Video Game Walkthroughs, Video Game Guides, Cheat Codes, News & Reviews at Video Games Blogger. Their mission is to help gamers take pleasure in their video games extra with beneficial suggestions and guides and to cover the newest gaming news.
Whenever unsure irrespective of whether specific game is worth the buck or not, check out Wolf's Gaming Weblog. The theme also includes sophisticated editor choices to help you build informative blogs and breathtaking reviews with numerous all types of typography-associated elements. Making use of Gamelab, you can also effortlessly sell your games and gaming associated items. Boss Mac (bossmacback2gamingcom) is B2G's owner, chief editor and head tech critic. Gamer, player, overclocker, gunpla modeller.
So what precisely led us to be one particular of the Best 50 gaming blogs? Properly here is a list of our Major 10 articles over the past few years. About Weblog offers the most current indie gaming news, interviews, and capabilities, from the makers of Gamasutra. Pc Invasion is your go-to web page for boiled down testimonials and updates on Pc games. Study precise evaluations on the greatest Computer games, get news updates and video gaming guides on numerous Pc games only on Pc Invasion.
Deciding on to make the move from console gaming to Computer is a personal choice that really should come from your consideration of the necessity. Think about the pros and cons, which games you want to play, and which choice will most effective reflect your circumstance. As the gaming market place behemoths present ever-flashier games on ever-a lot more-highly effective consoles, a trend toward simpler gaming has been growing as effectively: microconsoles.
The Surprise of Productive GAMING
So I went to Google and searched…. And searched …. And searched, but there had been no actual article or weblog that could clarify in detail how to start off a gaming blog that would really operate. Byrk's additions function a discussion of what it indicates to play with fascism, the role of sexual violence in the world of Vampire: The Masquerade, a list of techniques to enable gaming groups discover the limits of what they are comfortable with, and a reminder that folks are much more critical than the game.
This renowned gaming weblog and video game web-site includes anything you have to have to know about the newly released video games. Read via their gaming blogs and evaluations to maintain oneself updated with the happenings of the gaming planet. Given that ancient times, games have been a important public attraction. This remains correct nowadays, albeit in a a lot more digital world, with the total gaming market place volume valued at 138bn dollars in 2018 and with an annual growth price of 13% year on year.
Tabletop Gaming News is a gaming neighborhood blog that posts honest reviews of on the internet video games that fall below numerous genres. They are an interactive platform exactly where the readers can submit gaming opinions also. Gaming laptops: Want a laptop to play games (just about) just like a shiny desktop Pc can? Then you will want a single of the most effective gaming laptops These machines generally price from $800 or £600 to upwards of $three,000 or £2,800 and they will likely be the ones to take advantage of AMD's laptop-grade Ryzen processors initial.
When speaking about the most effective gaming telephone, we need to not only contemplate phones that can play the ideal smartphone games, but also the phone's overall performance, display and battery life when playing these games. Push Gaming is delighted to have won the ‘Best High Volatility Game' award for Jammin' Jars at the Videoslots awards. With this type of technology, you primarily play a game that's running on a server somewhere else, and you receive a video stream of it on your gaming device. As you could visualize, the physical distance causes delayed input response, and the video stream will be compressed for efficiency, so you lose some visual detail.
This is a internet site focused on Nintendo news, testimonials, and fan stories. Connect with other Nintendo fans, send your submissions to the internet site, and get gaming ideas on this very committed web space on Nintendo. I personally never have a unique bias towards any kind of game but pondering about your target audience can support you make far better choices when starting a gaming blog. For us, competitive games have been the primary focus so we picked all the things we liked. This contains Counter-Strike, Overwatch, Hearthstone and Dota 2.
youtube
Just after all, console and Pc gaming are witnessing a revival, with exciting new titles such as Fortnite, PUBG and Overwatch combining with veteran franchises such as FIFA, Call of Duty, Battlefield and GTA, not forgetting booming hardware sales from Nintendo Switch and PlayStation 4, and emerging trends like esports. This is a guest blogpost by Thomas Sorenson. Thomas Sorenson spent a week with us at White Wizard Games as a Wizard for a Week†Kickstarter supporter, and he writes detailed approach articles about Epic Card Game on his weblog, Tom's Epic Gaming Blog This blogpost initially appeared there.
Check out GamesTM for not just specialist testimonials but also deep insights into the gaming world with most recent news, columns, attributes, and interviews of the big game developers. Why Massive Fish Games is a Top rated Video Game Resource: You can find out about gaming development schools, the history of games, and the game improvement procedure, amongst other factors. Massive Fish also creates their personal games, and their weekly updates will keep you informed about the goods they have available for you to play.
0 notes
Text
Razer Tartarus Pro: Game Controller Meets Keyboard, With Pretty Lights Too
Our verdict of the Razer Tartarus Pro: If you have a need for this kind of extremely niche product, there aren't many better choices than this one. Get ready to meet your new gaming best friend.910
If you’re serious about gaming, you don’t want to just use any keyboard. That said, you may have different preferences for gaming than you do for typing. It’s tough to find a single keyboard that is perfect for everything.
That’s where a gaming keypad like the Razer Tartarus comes in. While the previous model had a membrane keyboard, Razer stepped up the quality with the Tartarus Pro, which uses analog optical switches for ultra-precise inputs. Is it worth the $130 asking price or should you stick with a standard keyboard?
What’s in the Box?
The Razer Tartarus Pro ships in a large box. This may give you the impression that it comes with plenty of extras, but that isn’t the case. All we found inside the box was the keypad itself and the manual. Most people will probably also get a sticker or two, as they’re almost always included with Razer products, but we can’t make any promises.
Build Quality and Design
As is the case with most other Razer products, the Tartarus Pro has a hefty feel to the plastic. It’s not overly heavy, but at the same time it doesn’t feel like it’s going to slide all over your desk at an inopportune time. The keys and various buttons all feel like they’ll stand up to rigorous use as well.
Looking at the Tartarus Pro, you may wonder how comfortable it could be. Obviously, this will depend on the size of your hands, but for me the overall layout put everything within easy reach. This is handy on its own, but the built-in wrist rest also made using the keypad over the course of a few hours comfortable. This can be adjusted between two different positions, depending on the size of your hands and the key layout you’re using.
We received our review unit of the Razer Tartarus Pro in black, which is the standard color for most of the company’s peripherals. That’s not the only option, however. You can also order the Tartarus Pro in Mercury White. This, combined with the colored lighting, gives the keypad a very 1970s science fiction-inspired look. Whether or not this is a good thing is something for you to decide.
Switches and Key Feel
Where the Razer Tartarus Pro differs most from the original Tartarus is in the key switches. While that model used a membrane keypad, the Tartarus Pro uses Razer Analog Optical Switches. These bring a host of benefits that help the keypad feel like it’s worth the asking price.
Compared to more standard mechanical switches, the switches here feel similar to Cherry MX Red switches. There is no mechanical click here; the only tactile indication that you’ve pressed a key is when you bottom out. This might seem disappointing if you’re more used to MX Blues or other “clicky” switches, but when you look at what these keys can do, the choice makes sense.
In addition to feeling silky-smooth, these keys can have dual actuation points. Razer’s example is pressing a key part of the way down to make a character walk, while pressing it all the way will make the character run. They don’t have to be related functions, however. For example, you could make lightly pressing one of several keys select a given weapon, while pressing any of them fully will fire.
You get 20 of these keys, which doesn’t quite match a full keyboard, but should cover any gaming functions you can think of. Even strategy games and MMOs (which are mentioned heavily in Razer’s marketing for the Tartarus Pro) will work just fine. This is especially true when you combine the other built-in controls.
Special Controls
In addition to the keys, the Razer Tartarus Pro also includes a programmable directional pad. Obviously, this is meant to control movement, but theoretically you can program it to perform any functions you like. Practically, this just means that no matter whether a game uses arrow keys or the WASD keys for movement, you can easily map them to the pad.
There is also a standard mouse-style scroll wheel. This feels like a strange inclusion since in most cases you would still be using a mouse alongside the Tartarus Pro. That said, like everything else, this is programmable so you can have it control one set of functions while your mouse scroll wheel handles another.
There is a single button located just above the directional pad. This might be programmable as well, and I’m sure even if Razer’s software doesn’t support it you could find a way, but really it’s meant for switching between three control profiles.
Software
As with other Razer products, you need to install the company’s Synapse software to make the most of the Tartarus Pro. This is how you program the keys to perform all of the various functions, as well as where you configure different profiles. In addition to various keys, you can also have the Tartarus Pro emulate either a joystick or controller via the D-pad, which you set up here.
The Synapse software is also where you’ll go to customize the lighting. This is actually so deep that it’s deserving of its own section, which we’ll get to in the next part of this article.
If there’s one major downside to the Tartarus Pro, it’s that it relies on profiles saved in the Synapse software for its configurable keymaps. This differs from other Razer hardware like the Huntsman keyboard, which has internal memory to store lighting and other information. It’s not a dealbreaker, as serious gamers are probably only using the Tartarus Pro on their main gaming computer, but internal storage would have been nice.
In addition to keymap profiles and lighting, Synapse also lets you program and store macros for more complex functionality. If you want to know more about this, check out our guide to recording macros in Synapse.
Lighting
If you’ve used other premium Razer products, you’re probably familiar with the base lighting options. There are a few built-in lighting effects to choose from, as well as some deep customization. The built-in effects include a ripple effect, a fairly convincing approximation of embers in the remnants of a fire, a breathing effect, and more. If you prefer things a little less flashy, you can even select a single solid color or even turn the lighting off.
The Synapse 3 software also includes Chroma Studio, which lets you customize every aspect of the Tartarus Pro’s lighting. The software supports assigning any of the 16.8 million colors the LEDs are capable of displaying. The easiest way to start is by customizing the built-in quick effects, but you can also download lighting effects others have created if you’re just looking for more visual flare.
I happened to have other Razer products around that work with the Synapse 3 software, specifically a Huntsman keyboard and Basilisk mouse. Using the software, I was able to easily sync lighting across the Tartarus Pro and these other devices, meaning as colors changed, they were exactly the same on each piece of hardware at the same time.
Developers can also use the Chroma SDK to create specific lighting effects in their games. Even the music creation software FL Studio includes Razer Chroma support to give your music a bit of visual flair.
Putting the Razer Tartarus Pro to Work
While the Razer Tartarus Pro is meant for any type of gaming, there are certain games where it will be more effective. If you’re only really using the WASD keys in a game, this gamepad may not offer much that a standard keyboard wouldn’t. This means that while it will work fine for first-person shooters, for example, it doesn’t provide much of an advantage in them.
On the other hand, for button-heavy games like MMOs, the Tartarus Pro absolutely shines. I played some Final Fantasy XIV, and the many various key combinations necessary were easier to pull out at a moment’s notice. I also found that my left wrist felt much more comfortable after an hour or so than it normally would.
As mentioned above, you can customize the Tartarus Pro’s keyboard layout in any number of ways. While this is handy for gaming, it’s less so for general computing. I could see people who work with video maybe finding some use in the Tartarus Pro, but it’s not going to help you much if you’re working with Excel spreadsheets.
Should You Buy the Razer Tartarus Pro?
The Tartarus Pro is a very niche product, but you probably knew that going in. It does what it does extremely well, and while the ergonomic layout isn’t going to be ideal for everybody, I found it comfortable. If you’re looking to improve your gameplay in an MMO, MOBA, or strategy game, this could give you the edge you need while proving friendlier to your wrists at the same time.
That said, I can’t imagine many–if any–situations outside of gaming where the Tartarus Pro would be more useful than a standard keyboard. Of course, this goes for any gamepad of this sort. If you’re just looking for a quality keyboard with a few extra features, you might want to take a look at our list of the best gaming keyboards. Many of these are great for gaming or for work.
Enter the Competition!
Razer Tartarus Pro Giveaway
Read the full article: Razer Tartarus Pro: Game Controller Meets Keyboard, With Pretty Lights Too
Razer Tartarus Pro: Game Controller Meets Keyboard, With Pretty Lights Too published first on http://droneseco.tumblr.com/
0 notes