Flair Tags Added; Suggestions welcome
Well that's sorted. Lemme know if there isn't enough.
Sub's kinda under construction. Doing what I can to bring it up to snuff.
Well that's sorted. Lemme know if there isn't enough.
Sub's kinda under construction. Doing what I can to bring it up to snuff.
Because honestly? that one was pretty swanky. Turned out to be the big bang before the end.
Be a shame to lose it.
It has to either literally have the same stats as a standard leo and just embrace the meme.
or be UR.
There are no other acceptable outcomes.
Don't worry, it was under close supervision.
Disclaimer: This was AI-assisted/generated. I understand enough Python to modify things and debug them, but I am very much not an expert in Wayland, waydroid, Android input, or Linux input subsystems. I spent roughly a long throwing diagnostics at this problem until something finally worked because I wanted to play a game and the problem is above my pay grade.
OS: Linux Mint 22.1 (experimental wayland rendering engine)
Physical hardware:
Haswell Era i5
RX550
16gb ram
Problem I wanted to solve: Apparently Waydroid just tells liniage 'OK this is a mouse' and liniage goes 'OK I can work with that.' And for most things that works. F-Droid, Google play store, PiePipe, Gems of war, a few other things I tossed in to test. Gundam G Eternal? 'No I refuse to recognize this 'mouse' device.
I have accidentally built (For a given definition of 'built' given AI involvement) a mouse-to-touchscreen bridge for Waydroid, and I would like someone smarter than me to explain why the hell it works.
TL;DR: I have a game running under Waydroid that doesn't properly respond to normal mouse input. Waydroid's native Wayland mouse handling produces bizarre/inconsistent touch coordinates in this particular game.
So I wrote a Python script that:
evdevinput tap X Ymotionevent DOWN/MOVE/UPAnd... it works.
It works well enough that I can actually play the game. I can click things, hold things, and drag the game map/diagrams around.
The weird part is that Waydroid's own pointer handling was giving me a completely different result.
Here's the script:
#!/usr/bin/env python3
import subprocess
import threading
import time
from evdev import InputDevice, ecodes
# ------------------------------------------------------------
# Configuration
# ------------------------------------------------------------
MOUSE_DEVICE = "/dev/input/event2"
# How long the mouse button must remain down before movement
# is considered a drag rather than an ordinary click.
DRAG_DELAY = 0.15
# Minimum time between Android MOVE events.
# Prevents the mouse from flooding Waydroid.
MOVE_INTERVAL = 0.03
# ------------------------------------------------------------
# Mouse
# ------------------------------------------------------------
mouse = InputDevice(MOUSE_DEVICE)
# ------------------------------------------------------------
# Persistent Waydroid shell
# ------------------------------------------------------------
print("Starting persistent Waydroid shell...")
waydroid = subprocess.Popen(
[
"sudo",
"waydroid",
"shell",
],
stdin=subprocess.PIPE,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
text=True,
bufsize=1,
)
# ------------------------------------------------------------
# Cinnamon cursor position
# ------------------------------------------------------------
def get_cursor_position():
try:
result = subprocess.run(
[
"gdbus",
"call",
"--session",
"--dest",
"org.Cinnamon",
"--object-path",
"/org/Cinnamon",
"--method",
"org.Cinnamon.Eval",
"global.get_pointer()",
],
capture_output=True,
text=True,
timeout=0.2,
)
# Expected result:
#
# (true, '[497,872,16]')
#
text = result.stdout.strip()
start = text.find("'[")
end = text.find("]'", start)
if start == -1 or end == -1:
return None
coords = text[start + 2:end]
x, y, _ = coords.split(",")
return int(x), int(y)
except Exception:
return None
# ------------------------------------------------------------
# Android input helpers
# ------------------------------------------------------------
def android_command(command):
try:
waydroid.stdin.write(command + "\n")
waydroid.stdin.flush()
except (BrokenPipeError, OSError):
print("Waydroid shell connection lost.")
def android_tap(x, y):
print(f"CLICK {x},{y}")
android_command(
f"input tap {x} {y}"
)
def android_down(x, y):
print(f"DOWN {x},{y}")
android_command(
f"input motionevent DOWN {x} {y}"
)
def android_move(x, y):
print(f"MOVE {x},{y}")
android_command(
f"input motionevent MOVE {x} {y}"
)
def android_up(x, y):
print(f"UP {x},{y}")
android_command(
f"input motionevent UP {x} {y}"
)
# ------------------------------------------------------------
# State
# ------------------------------------------------------------
button_down = False
dragging = False
press_time = 0
last_move_time = 0
last_x = None
last_y = None
# ------------------------------------------------------------
# Startup
# ------------------------------------------------------------
print(f"Listening to: {mouse.name}")
print("Cinnamon-cursor Waydroid mouse-to-touch bridge running.")
print("Left click -> Android tap")
print("Hold + move -> Android touch drag")
print("Ctrl+C to stop.")
# ------------------------------------------------------------
# Main event loop
# ------------------------------------------------------------
try:
for event in mouse.read_loop():
# ----------------------------------------------------
# Mouse movement
# ----------------------------------------------------
if event.type == ecodes.EV_REL:
# Ignore movement unless left mouse button is down.
if not button_down:
continue
# Get the actual Cinnamon cursor position.
position = get_cursor_position()
if position is None:
continue
x, y = position
# If this is the first movement after pressing,
# determine whether we've crossed the drag threshold.
if not dragging:
if time.monotonic() - press_time >= DRAG_DELAY:
dragging = True
android_move(x, y)
last_x = x
last_y = y
last_move_time = time.monotonic()
continue
# ------------------------------------------------
# Already dragging
# ------------------------------------------------
now = time.monotonic()
if now - last_move_time < MOVE_INTERVAL:
continue
# Don't send redundant coordinates.
if x == last_x and y == last_y:
continue
android_move(x, y)
last_x = x
last_y = y
last_move_time = now
# ----------------------------------------------------
# Mouse buttons
# ----------------------------------------------------
elif event.type == ecodes.EV_KEY:
# Left button pressed
if event.code == ecodes.BTN_LEFT and event.value == 1:
position = get_cursor_position()
if position is None:
continue
x, y = position
button_down = True
dragging = False
press_time = time.monotonic()
last_x = x
last_y = y
# We don't immediately send DOWN.
#
# This lets a normal click continue using
# Android's reliable "input tap" command.
#
# If the button is held long enough and the
# mouse moves, we start a real touch sequence.
# Left button released
elif event.code == ecodes.BTN_LEFT and event.value == 0:
if not button_down:
continue
position = get_cursor_position()
if position is None:
position = (last_x, last_y)
x, y = position
hold_time = time.monotonic() - press_time
# ------------------------------------------------
# Ordinary click
# ------------------------------------------------
if not dragging:
android_tap(x, y)
# ------------------------------------------------
# Drag release
# ------------------------------------------------
else:
android_up(x, y)
button_down = False
dragging = False
except KeyboardInterrupt:
print("\nStopping...")
finally:
try:
waydroid.stdin.close()
except Exception:
pass
try:
waydroid.terminate()
except Exception:
pass
print("Stopped.")
So my question is:
This works. Can someone with two functional brain cells that know Python, Wayland, and/or Android input explain WHY it works?
And, more importantly:
How would you make it better?
Things I'd especially like to understand:
global.get_pointer() give me a better coordinate than Waydroid's native Wayland pointer handling?input tap X Y work reliably when Waydroid's normal pointer input doesn't?motionevent DOWN/MOVE/UP let me drag game areas even though ordinary Android scrollbars don't seem to respond?I'm not claiming this is good code.
I'm claiming it works, which is currently winning the argument.
Disclaimer: This was AI-assisted/generated. I understand enough Python to modify things and debug them, but I am very much not an expert in Wayland, Android input, or Linux input subsystems. I spent roughly a long throwing diagnostics at this problem until something finally worked because I wanted to play a game and the problem is above my pay grade.
OS: Linux Mint 22.1 (experimental wayland rendering engine)
Physical hardware:
Haswell Era i5
RX550
16gb ram
Problem I wanted to solve: Apparently Waydroid just tells liniage 'OK this is a mouse' and liniage goes 'OK I can work with that.' And for most things that works. F-Droid, Google play store, PiePipe, Gems of war, a few other things I tossed in to test. Gundam G Eternal? 'No I refuse to recognize this 'mouse' device.
I have accidentally built (For a given definition of 'built' given AI involvement) a mouse-to-touchscreen bridge for Waydroid, and I would like someone smarter than me to explain why the hell it works.
TL;DR: I have a game running under Waydroid that doesn't properly respond to normal mouse input. Waydroid's native Wayland mouse handling produces bizarre/inconsistent touch coordinates in this particular game.
So I wrote a Python script that:
evdevinput tap X Ymotionevent DOWN/MOVE/UPAnd... it works.
It works well enough that I can actually play the game. I can click things, hold things, and drag the game map/diagrams around.
The weird part is that Waydroid's own pointer handling was giving me a completely different result.
Here's the script:
#!/usr/bin/env python3
import subprocess
import threading
import time
from evdev import InputDevice, ecodes
# ------------------------------------------------------------
# Configuration
# ------------------------------------------------------------
MOUSE_DEVICE = "/dev/input/event2"
# How long the mouse button must remain down before movement
# is considered a drag rather than an ordinary click.
DRAG_DELAY = 0.15
# Minimum time between Android MOVE events.
# Prevents the mouse from flooding Waydroid.
MOVE_INTERVAL = 0.03
# ------------------------------------------------------------
# Mouse
# ------------------------------------------------------------
mouse = InputDevice(MOUSE_DEVICE)
# ------------------------------------------------------------
# Persistent Waydroid shell
# ------------------------------------------------------------
print("Starting persistent Waydroid shell...")
waydroid = subprocess.Popen(
[
"sudo",
"waydroid",
"shell",
],
stdin=subprocess.PIPE,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
text=True,
bufsize=1,
)
# ------------------------------------------------------------
# Cinnamon cursor position
# ------------------------------------------------------------
def get_cursor_position():
try:
result = subprocess.run(
[
"gdbus",
"call",
"--session",
"--dest",
"org.Cinnamon",
"--object-path",
"/org/Cinnamon",
"--method",
"org.Cinnamon.Eval",
"global.get_pointer()",
],
capture_output=True,
text=True,
timeout=0.2,
)
# Expected result:
#
# (true, '[497,872,16]')
#
text = result.stdout.strip()
start = text.find("'[")
end = text.find("]'", start)
if start == -1 or end == -1:
return None
coords = text[start + 2:end]
x, y, _ = coords.split(",")
return int(x), int(y)
except Exception:
return None
# ------------------------------------------------------------
# Android input helpers
# ------------------------------------------------------------
def android_command(command):
try:
waydroid.stdin.write(command + "\n")
waydroid.stdin.flush()
except (BrokenPipeError, OSError):
print("Waydroid shell connection lost.")
def android_tap(x, y):
print(f"CLICK {x},{y}")
android_command(
f"input tap {x} {y}"
)
def android_down(x, y):
print(f"DOWN {x},{y}")
android_command(
f"input motionevent DOWN {x} {y}"
)
def android_move(x, y):
print(f"MOVE {x},{y}")
android_command(
f"input motionevent MOVE {x} {y}"
)
def android_up(x, y):
print(f"UP {x},{y}")
android_command(
f"input motionevent UP {x} {y}"
)
# ------------------------------------------------------------
# State
# ------------------------------------------------------------
button_down = False
dragging = False
press_time = 0
last_move_time = 0
last_x = None
last_y = None
# ------------------------------------------------------------
# Startup
# ------------------------------------------------------------
print(f"Listening to: {mouse.name}")
print("Cinnamon-cursor Waydroid mouse-to-touch bridge running.")
print("Left click -> Android tap")
print("Hold + move -> Android touch drag")
print("Ctrl+C to stop.")
# ------------------------------------------------------------
# Main event loop
# ------------------------------------------------------------
try:
for event in mouse.read_loop():
# ----------------------------------------------------
# Mouse movement
# ----------------------------------------------------
if event.type == ecodes.EV_REL:
# Ignore movement unless left mouse button is down.
if not button_down:
continue
# Get the actual Cinnamon cursor position.
position = get_cursor_position()
if position is None:
continue
x, y = position
# If this is the first movement after pressing,
# determine whether we've crossed the drag threshold.
if not dragging:
if time.monotonic() - press_time >= DRAG_DELAY:
dragging = True
android_move(x, y)
last_x = x
last_y = y
last_move_time = time.monotonic()
continue
# ------------------------------------------------
# Already dragging
# ------------------------------------------------
now = time.monotonic()
if now - last_move_time < MOVE_INTERVAL:
continue
# Don't send redundant coordinates.
if x == last_x and y == last_y:
continue
android_move(x, y)
last_x = x
last_y = y
last_move_time = now
# ----------------------------------------------------
# Mouse buttons
# ----------------------------------------------------
elif event.type == ecodes.EV_KEY:
# Left button pressed
if event.code == ecodes.BTN_LEFT and event.value == 1:
position = get_cursor_position()
if position is None:
continue
x, y = position
button_down = True
dragging = False
press_time = time.monotonic()
last_x = x
last_y = y
# We don't immediately send DOWN.
#
# This lets a normal click continue using
# Android's reliable "input tap" command.
#
# If the button is held long enough and the
# mouse moves, we start a real touch sequence.
# Left button released
elif event.code == ecodes.BTN_LEFT and event.value == 0:
if not button_down:
continue
position = get_cursor_position()
if position is None:
position = (last_x, last_y)
x, y = position
hold_time = time.monotonic() - press_time
# ------------------------------------------------
# Ordinary click
# ------------------------------------------------
if not dragging:
android_tap(x, y)
# ------------------------------------------------
# Drag release
# ------------------------------------------------
else:
android_up(x, y)
button_down = False
dragging = False
except KeyboardInterrupt:
print("\nStopping...")
finally:
try:
waydroid.stdin.close()
except Exception:
pass
try:
waydroid.terminate()
except Exception:
pass
print("Stopped.")
So my question is:
This works. Can someone with two functional brain cells that know Python, Wayland, and/or Android input explain WHY it works?
And, more importantly:
How would you make it better?
Things I'd especially like to understand:
global.get_pointer() give me a better coordinate than Waydroid's native Wayland pointer handling?input tap X Y work reliably when Waydroid's normal pointer input doesn't?motionevent DOWN/MOVE/UP let me drag game areas even though ordinary Android scrollbars don't seem to respond?I'm not claiming this is good code.
I'm claiming it works, which is currently winning the argument.
Note: Tik is the border collie/pitbull in frame and is twelve. So definitely senior.
Yivan.... I could say your sister died well. Fought for her homeland.... any countless platitudes you will no-doubt hear on loop for... the next however long your government feels it convenient.
Yet that does not erase the fact I took your sister from you, and if that means that you hate me. I understand. But I wanted you to understand. She did not fight for a distant government, or promise of fame, or ... whatever gaudy thing they will try making her into now.
She fought for you to have better. She put on the uniform so you would not feel that you had to pick up a rifle to have a way out and forward. I fear what ha s happened means you will pick up that rifle, because you think it will honor her.
No Yivan. If you wish to honor your sister.
Live.
Return of the Grey Ghost. C'mon you can argue characterization or tone.... and the kids meal tie in was .... OK that was a thing, and i saw it too young, but... c'mon.
https://www.youtube.com/watch?v=lT9IwqveFVg
Didn't come up on spottify or even my offline playlist. I'm in Boravia right now.
I'm looking at a woman who tried to kill me and i'm telling the twins to leave her alone. Sargent Emili Loncar. She ... Posting details is wildly out of scope for the sub. i'm still processing. Yet sitting here? Seeing. My mind pulled music from when I was a boy, because she deserves that much.
That scene... that goddamned scene with the funeral march. Did it make sense?
No...
didn't have to. Burton wasn't telling a grounded story. he was making myth and in myth that is how the world works.
The mad tyrant dies, undone by their own hubris...
And those few who stayed when all others ran. The pitiful misshapen 'monsters' that were there when he was abandoned as a baby.... were there to walk him home one last time.
It started with a meme.
'What if we collectively flip the temu three stupids off?'
I got in when it was $6 a share. Others when it was $1.50. Others when it was $20 or more during those dips that happened last week.
I'm seeing people saying they can have three or four or even six months of rent and bills covered.
Another person bragging Bert's paid for his car getting fixed.
Another guy saying they've been able to pay off the leg breakers they owed money to.
And on through the posts I'm seeing, is a trend.
Nobody's going 'I'm rich!' Nobody's going 'I'm never having to work again!'
Certainly no 'I'm part of the three comma crowd!'
Just a lot of people, suddenly in a better place in life.
There is an irony here. The three stupids thought they were heroes by being delusional rich idiots.
Their stunt indirectly injected millions into Gotham's economy and got a lot of people into better positions so they're not terrified day to day of losing everything.
I kept one share because I plan on getting an official certification of ownership so I can frame it on my wall after they finish rebuilding the apartment block I lived in before it got burnt down.
[Video looks like it's being shot from a budget android phone]
[Pibald is standing at a table in what looks like an abandoned Eastern European diner]
Hey there. You can call me Pibald. My two assistants here are Hughinn and Munnin.
[Camera turns til two pibald marked crows are shwon at another table picking at a platter of peanuts sat next to a water bowl. One of the birds looks up at the camera and caws.]
[Camera then pans back to focus on Pibald.]
Alright then. Mostly wanted to do a face reveal up front because I know people are going to say this is AI. Now in the interest of full disclosure. I own stock in Bert's Canned Joker Fish. However the products being tested were provided by humanitarian air drop I had no part or say in, and Bert's Canned Joker Fish has no notice or influince in the opinions expressed in this review.
[Camera pans to show an array of canned products. Ranging from a classic flat sardine can, a can of minced salmon with a pull tab lid, canned anchovies, haddock, Cod, and several sauce jars. All bearing Bert's label of a cartoonish salmon bleached white with red lips grinning too wide at the customer.]
Tuna:
A classic. Honestly glad they went retro with the overal desig of the twist key/lid peel, but... as you can see as I peel the lid back, there's a stiff liner seperating the fish from the metal of the can. The canned on date is from about a year ago. So well within stable shelf life. Well...
Down the hatch.
[Surprised face. Thoughtful chewing.]
OK not my bag, but they keep awhile, the can design is basically a classic for a reason, and I mean if I had to, I could do something with 'em....
[To prove the point. Pibald dips a sardine into one of the included sauces]
OK... still ... not my favorite, but Yea OK that works.
Tuna:
Ahh yes. Tuna....
Like the sardines the can's got a healthy liner between can and fish. texture.... Honestly it's not starkist, but it isn't unappealing....
Plain? It's tuna. decent. Not great but decent.
[Pibald starts eating it with Avjar]
Alright now that adds a bit of punch. This sauce is more savory than sweet, which I view as a good thing. I'd add a boiled egg, but ... the twins over there might argue over dibs.
]The video goes on testing both fish and sauces. Ending with Pibald making a sandwich out of whole wheat and cheese with slamon spread overtop]
Y'know? I bought stocks both as a meme and to send a message. Is Bert's the best ever? Nope! But they're a local to gotham company and with their partnership with Standler's Sauces? Ya I can definitely see myself picking a few of these up when I'm not being shot at.... though the less said of the anchovies the better...
No offence but... Bleh. I'm sure they're fine. I just don't like the little greasebombs.
Considering I'm in Boravia and i don't have any financial guys I don't know what the 'natural' price for Bert's is, but as someone who's apartment building got firebombed by the three comma's wannabe fanclub because they were gonna be put under house arrest there?
As someone who currently is dealing with bruising from the plate carrier I'd been wearing doing its job (do not ever let anyone claim bulletproof means it don't hurt. All that kinetic energy has to go somewhere and man am I gonna feel this one tomorrow)?
I don't care. I spent enough money to buy thirty four shares when #nocommas started up because the message was the point.
Anyone thinking about selling? Unless you literally need the money right now?
Don't.
I haven't been right since reading that Nifty died.
Look. I didn't ask what her deal was. She'd shown it to me once. the whole.... Furball thing she did. Reminded me of those manimal things me and Doretta saw. Except she could turn back. Mousy slip of a girl when not wearing her game face. Svelte agile thing when going full bore.
It's like I could hear that last fight.
Four friends. They didn't have delusions they were the next big thing, but... 'we have an ability to act. Therefor we must act.'
Intel had said a meeting of the comma wannabies. The plan from Shep had been solid. Dragonfly did laps to make sure they didn't have anything flying overwatch while Mastermind monitored cellphone traffic.
Nifty was on point. She's handled bar fights before. Turf wars. She's the scary woman in the room that could hurl a guy's bike through the bar door to grab everyone's attention. that was the plan. Start by hurling something heavy through the front door, be loud, be angry. Maximum flash to disrupt.
I found myself staring at a 'detention center' near sunset as my mind processed all this. It was like I was in both the here and now, and yet.... they reached out to whisper their last moments.
Nifty threw a car into the warehouse, both making a door, and causing everyone inside to scatter.
I walked up to the checkpoint, and kept walking even when guns were pointed at me.
Dragonfly dropped from a high window as Nifty rushed into the chaos.
Hughinn and Munnin led a flock down to cause the soldiers to fire blindly, leaving them open.
Shep and Mastermind brought up the rear, flanking the hole Nifty hadm ade, weapons drawn.
More orders were being shouted. I felt myself being guided. Instinct that wasn't my own telling me how to move. I heard music.
Nifty saw that there were nearly thirty men there. Not the dozen or so flunkies intel said. It was a setup. She screamed for Dragonfly to drop smoke. She heard music.
My staff moved on its own. I knew vaguely what I was doing, but couldn't spare thought to take it in as I advanced.
Shep and Mastermind dove for cover, shouting for Nifty to pull back. Mastermind threw a goo bomb. The flunky that ate it in the face fell back. His hand spasmed and he clipped Dragonfly's flight harness, causing him to faceplant, breaking his neck.
I heard music as I moved. The crows were singing? No. I was singing? No. Yes. I don't know.
Nifty took a three round burst. Got up when she saw Shep eat a shotgun to the face.
I advanced into the hale of random gunfire. throwing smoke grenades. I dare not think. Thinking was death. Thinking would cause the moment to end.
Nifty howled when Mastermind died.
Her howl was cut short in another burst of automatic fire.
I howled in rage when I saw the detention cells. Eight to a room that I would call cramped for two to bunk.
I howled as i hunted down whoever was left.
Survivors began organizing. Taking what vehicles they could. I gave them directions to somewhere that might be safe, at least for the time being.
These are fathers, sons, mothers.... craftsmen. journalists.
Undesireables. All rounded up by a fearful regime that sees dissent as treason.
I'm grateful for the cloak and the gas mask as I talk to the refugees before they flee. The cloak hides my shaking hands, and the impact of clubs and fists and the near misses I am fool enough to have luck enough to survive. The mask hides my tears.
There is nothing I can do for them. Not as I am hunted and wanted. I do not know what of the men here in this place live, nor do I care.
I wander. Because that is my place here. On to where I am needed next.
ooc: Image Credit
https://www.bbc.com/news/world-europe-62970845
Article excerpt from Boravia Izvještajna Novinska Agencija (BINA):
....
Concerning the newly unearthed Subterannosauri population within Boravian boarders a ruling had been made to send millitary assets to provide security for our new neighbors against Amazonian aggression.
....Said aggression most recently taking the form of an unprovoked attack at a recently installed security checkpoint and processing center that had been erected to both assist in ensuring international criminal elements that had infiltrated our population are swiftly found, but any pathogens or biological terror weapons they may be trying to smuggle from contested županije to known safe areas.
While Amazonian aggression from both Themysciran and Egyptian elements has become depressingly common. What was new is the use of metahumans in their assault, suggesting perhaps they are capturing or coercing male metahumans to act as meat shields or shock troops.
Evidence is sparce, but enclosed is the apparent leader of the attacking force, at least the only one who intentionally let themselves be seen by cameras.
There was.... singing as this 'wanderer,' as the metahuman has been dubbed due to appearances across differing regions of Boravia's countryside, was seen leading criminals out from the fair and modern accommodations we had provided at taxpayer expense until their home countries could pay resittution for the troubles they had brought on us.
When questioned on where the amazonians were as video evidence was next to non-existent? Sgt Emili had the following to say.
'There was [explicite deleted] women chanting as my men were being butchered! There is no way this was one man short of the blue devil himself returning.'
Agents have posted an excerpt of the music sung in hopes that it leads to positive identification or other relevant clues to the reason of this apparent senseless assault.
The specifics are...well. Personal.
Point is meatspace has decided that my priorities need to shift away from reddit for awhile. I'll try to keep posting but if I fall off I didn't want folk to think I'd just lost interest.
here has been an entertaining bit of storytelling.
We have seen Ramaga's departing the divine realm for the demon realm.
We saw his mortal shell fade so that he could persist in some manner in spite of his wounding.
Where is Kayura and the three warlords from the end of the first series? They would have either taken the children in, or sent for Ryo and company the moment they realized this was something larger than war orphans of unknown providance.
If the yfell. How?
The fact the first cour uses Arago's dying *IN TOKYO* as a plot point on how Ramaga was able to infect and use the population by Tokyo effectivly being infused with Arago's lingering essence? Then the writers know about the end state of the original run.
Both the Last Namers and the hollow armors were said to be 'made from malice'.... yet show fear, love, hope, chamradere, joy, etc etc if the first namers of the ten braves are to be believed of their fallen fellows and the market scene in first ep of new cour is anything to go by.
'Made from Malice'
not 'Made Of-'
Huh. Could it simply be Ramaga made his disposables while embracing malicious desire?
What if someone used a different strong emotion? Love, fear, joy, hope, etc etc?
is the translation anywhere correct? This is an instance where specifics matter because details are thin.