Now, Children, Fight Nicely
Green, crystal-like shards of magic shatter into the air, and Lucifer, in full demon form, bolts inside Barbatos' room, his expression twisted into a snarl as his foot comes flying into Barbatos' face at full force. The impact slams Barbatos into the opposite wall, his hair sprinkled with rocky debris. Blood dribbles from his mouth.
Lucifer: WHAT THE FUCK DID YOU DOSE HER WITH?!
Barbatos: ...
Lucifer: DO YOU THINK I WON'T FUCKING KILL YOU, BARBATOS!? AFTER DOING THAT TO HER?!
Barbatos: I anticipated that, and quite frankly, I'd rather it was you who did it. It seems fitting.
Tears start to streak down Lucifer's face.
Lucifer: How dare you... How dare you welcome death?! If you really feel so horrible about poisoning the love of my life that you came prepared to die for it, how could you do it at all?!
Barbatos: There are... futures that I'd rather not see. For her suffering, for yours, and for my lord's. Futures where she kills Lord Diavolo. Futures where the Devildom perishes in a sea of turmoil. And... futures where she dies at your hands.
Lucifer grits his teeth angrily.
Lucifer: You're fucking stupid for a person that can see the strands of time! I don't care if it's one possibility out of five billion! Step in and change it, you son of a bitch!
Barbatos: I can't.
Lucifer: WHY NOT?!
Barbatos: Ever since I was infected, I haven't been able to use that ability well, and it's been getting worse. I'm... at the point where I can't do much of anything.
Lucifer's expression shifts through several shades of frustration, and he grips his hands in his hair and screams in anger and despair. Moments later, Diavolo arrives in his nightclothes, disheveled but alert.
Diavolo: ...Barbatos, I am quickly becoming incredibly upset with you, and you have about five seconds to explain to me why you never mentioned what I heard from the hallway.
Barbatos: I apologize, my lord; I intended to solve this quietly, but I'm afraid... some things were simply beyond me...
Lucifer: God! Dammit! You're just like her! You always keep everything to yourself and it costs you everything!
Hello, Mr. Pot?
Lucifer's hair falls from his fingertips alongside his distraught tears. He crumples to the ground, picking up Annelie's head and letting his quiet sobs wrack his body.
Lucifer: Oh, Annelie... I'm so sorry... I'm so, so, so... hic... sorry... I promised, but I failed to protect you again, and now you're like this... I'm sorry... Please... I'll save you, so... Please don't die... please don't die... not again.... please...
I... can smell his tears, but I can't wipe them away... I hate this. He doesn't deserve this. Why am I always so...
Diavolo: Lucifer, stop blaming yourself. This isn't your fault. We'll find a solution... okay?
Diavolo looks like he's on the edge of tears himself as he squeezes his friend's shoulder.
That's an empty condolence and he knows it. Barbatos is too smart. I hate this.
Lucifer: ...is it going to be enough? What if she...?
I... hate this. I curse it. Future be damned; I curse it. This powerless self... I curse it and curse it with everything I have.
A black mist wisps around Annelie's body, sinking into her skin, and Barbatos, Diavolo and Lucifer all collectively wince. Diavolo sinks to one knee, gritting his teeth. Annelie's fingers twitch, and Lucifer latches onto them desperately, watching her face.
Her black eyes open to reveal that her irises have turned a radioactive shade of hot pink, punctuated by serpentine pupils. Almost immediately, she grabs hold of Lucifer and hugs him tightly.
Annelie: I'm fine... I'm fine.
22 notes
·
View notes
me, dusting off the blog after yet another 50 years of vanishing with a pack of caprisun: so, i’ve been rewatching most of d/anganr/onpa content and have the three games which i plan to replay because ahaha, gotta love myself being enabled by SOMEONE to play ‘em, again...you know who you are and i’m only reminded by the utter guilt and misery my girl, mikan, has to go through after waking up from her vegetative state in neo world program. having to accept the harsh reality of the horrible actions she’s done in the name of “love” for junko, which was never real. having to come to a horrible realization that SHE pushed nanami to her death....SHE brought her closest friends, the first friends she ever had, to watch their representative, who brought them together, get killed and succumb to despair. having to finally see the damage mikan has done to her ACTUAL LOVE this applies for any ship i have with her be betrayed by her after abandoning them for junko’s “love”... it’ll destroy her. completely, utterly destroy her with so much guilt...and she’s already mentally unwell, to begin with. it’s those awful realizations that have mikan initially distance herself, fully, from everybody. for the first time, mikan feels completely undeserving of any attention she’s craved for so long... for the first time, she feels undeserving of forgiveness.
it is only by the unconditional support from everybody that mikan does find her own footing, no matter how much time it took because they’ve all had an understanding, and come out of her miserable state just enough to at least redeem herself by saving the survivors of the final killing game, in hope arc. while mikan’ll never be able to get rid of these awful feelings nor thoughts, not even the grim reality of being unable to bear children due to removing her own womb in replacement of junko’s, she now knows they all have each other and she has done a contributable part in saving kirigiri’s life as well as everybody’s reputation by pinning the blame for what happened to future foundation on the remnants of despair. in her eyes, she is forgiven by those she’s come to rescue and it’s this reassurance that will keep her marching to an unforeseeable future.
tl;dr: pluto feels for d/anganr/onpa for the 139192992992929292929th time all over again, thx 4 coming 2 my TED talk.
7 notes
·
View notes
C — The Way It’s Written — Ranks & Bytes
This is part 2 in a series of posts about the C programing language, part 1 (and series details) can be found here
Well everyone, I hope you kept your copy of the free version of the standard from last time, 'cause that thing isn't going away any time soon. To give a quick rundown on what this part is going to cover, it's going to cover the rank of integer types, and it's going to go over the definition of a byte in the language and some of its consequences.
Rank
The “integer conversion rank” (6.3.1.1 p1, page 37) is a scale (or ranking) of all the integer types from _Bool to unsigned long long (and possibly implementation defined types). The definition effectively states that all integers have some rank, that the signed and unsigned version of a type have the same rank (and char’s rank equals that of its signed and unsigned versions), that a type with a greater precision (number of bits) will always have a greater rank than a lower one, and that even if two types have the same representation (ie. same width) one will always have a greater rank. It also gives us an outline of the rank of the fundamental (called the “standard integer types” in the document) integer types: _Bool, char, short, int, long, and long long, and it also handily gives us the info that any implementation defined types (such as say __int64) has a rank less than a corresponding standard type with the same rank (such as (possibly) long long). It also states that any implementation defined types with the same precision have some ranking between each other, this is important because it establishes a total order (any integer type’s rank is either less than or greater than any other type).
So what’s the deal with ranks? Well notice the full title contains “conversion”, ranks are very important for determining integer type promotion. Any type who’s precision (and as such rank) is less than an int will be transformed into an int (if its value would fit, unsigned int otherwise) when performing an arithmetic operation (add, sub, mul, div), a shift operation, a ‘sign’ operation (negation (- operator) or the + operator), or when passed “certain argument expressions” (usually var arg functions). Note this is simply a promotion in width only, the values contained within remain completely unchanged. What this means is that adding a char to a char will in fact actually become the addition of an int and an int.
Ranks are also very important for another conversion, arithmetic operations on differing types (6.3.1.8 p1, page 39). Firstly if one of the types in the expression is a floating point type long double, double, or float) then the other type is promoted to that floating point type (you don’t want to lose the fractional part just cause you added an int after all), but after that is where rank becomes important. If the types are the same nothing happens and the expression goes on as usual, but if the types differ then the type with the lower rank is promoted to the type with the higher rank (usually, there’s a caveat about precision that basically boils down to “if promoting it would cause signed data loss, then promote both types to an unsigned version”). What’s all this mean? Well it basically means that given any two types (say int and unsigned long long) any operation between them will cause the lower rank type to become the higher rank type (here the int becomes an unsigned long long).
These results are all bound to the definition of conversion (6.3.1.3, page 38). Long story short on that if you convert a signed type to an unsigned type then the value stored will have 2n (where n is the value bit width of the new type) added to it over and over until the result falls within range of the new type, however if you convert an unsigned type to a signed type and the value can not fit within the signed type its up to the implementation what happens (since its implementation defined it must be documented somewhere). Conversion also comes into play in a few other places, like assigning values of one type to another (ex. char to int) or passing arguments to functions (ex. passing an int value to a function expecting long).
Byte(s)
Ok this one is going to be a lot simpler (and more fundamental) than ranks, I’ve only put it after type introduction and ranks because it's easier to understand that way (at least for me, sorry if you find it otherwise).
Alright let’s get the big things out of the way first, a byte is simply defined as “addressable unit of data storage large enough to hold any member of the basic character set of the execution environment” (3.6, page 4), which just means it can hold all of the basic ASCII (printable) characters excluding ‘`’ (the backtick), ‘$’ and ‘@’ as well as some control characters like new lines and such. The other big thing is that a byte is at least 8 bits (5.2.4.2.1 p1, page 20), but can be more (there have been systems with 9 bit bytes before), and also that a char (and signed and unsigned versions) are exactly one byte, no more, no less.
The other thing is that any (non-bitfield) object (an object in C is defined in section 3 and is simply the value contained within some memory location) is composed of n continuous bytes (6.2.6.1 p4, page 34), meaning that the total width of the object in bytes is n multiplied by the number of bits in a byte. It also goes on to detail that any objects with the same bit pattern (except for floating point NaN values) will compare as equal, however not all objects that compare equal need to have the same bit pattern (ex. negative 0 and ‘normal’ 0).
Further down (6.2.6.2) we learn that any integer type (except unsigned char which is only value bits) can be divided into value bits (bits that contribute to the actual value of the number) and padding bits (bits that are just there to make the integer fill the full width of a n bytes), and that there need not be any padding bits. As expected an unsigned type can store any value between 0 and 2v-1, where v is the number of value bits, and a signed type can store between (at least) -2v-1 and 2v-1-1 (due to needing a sign bit).
All other objects have n bytes contained within them, however their usage of the bits will differ greatly depending on their use, for example floating point types need to divide their bits between sign, exponent, and mantissa, and structs use their bytes to hold other types and objects.
Conclusion
So that’s it, that’s ranks and bytes in the C programming language. Ranks determine how integer types combine together, and bytes make up every object in the language and determine their value.
Thank you for reading, once again I stayed up late to write this, except it's even worse since I have something critical tomorrow. If you have any comments, concerns, or ways to improve this series drop them in the replies.
4 notes
·
View notes