Initial Commit
This commit includes the initial state of the "Emacs" theme version of the site. This is dependent on an Org publish configuration in my init-file.
This commit is contained in:
commit
ee688afd04
|
@ -0,0 +1,262 @@
|
||||||
|
#+TITLE: For Want Of A More Limited Computer
|
||||||
|
#+DATE: <2023-01-26 Thu>
|
||||||
|
#+DESCRIPTION: A lament against certain design trends in computing that has caused the apparent loss in a few of the things I found fascinating about computers in the first place. Or, in other words, a verbose "Damn it, I missed the cool stuff!"
|
||||||
|
Modern computing is truly a marvel. I have a device sitting in front of me that
|
||||||
|
at my beck and call can send a request halfway around the world for 2 million
|
||||||
|
bytes to come screaming down a complex system of connected computers, which is
|
||||||
|
then decoded and displayed on a monitor refreshing one hundred and forty-four
|
||||||
|
times a second, all taking less than the time it takes me to blink. All of these
|
||||||
|
computers working in unison, to deliver to some random guy a distorted image of
|
||||||
|
the actor Bob Odenkirk with the caption: "Your Honor, do you expect the jury to
|
||||||
|
believe that a shrimp fried that rice?"
|
||||||
|
|
||||||
|
/What the actual hell?/ Sixty years ago, the idea of a /personal/ computer that
|
||||||
|
could fit in a house was pure science fiction! Then when /microcomputers/ came
|
||||||
|
along, it was still preposterous to imagine the average consumer could afford to
|
||||||
|
have a computer, much less access to a worldwide network with "free" (more on
|
||||||
|
that, later) services and information which can be summoned at a moment's
|
||||||
|
notice. And then you look at today's reality, and this amazing technology is
|
||||||
|
/real/ and /available/! So what have we all done with it?
|
||||||
|
|
||||||
|
* Part One: One Man /Can't/ Know It All.
|
||||||
|
I suppose I better start with what I've done.
|
||||||
|
|
||||||
|
I've been fascinated with computers ever since my family's first computer, which
|
||||||
|
sadly I do not recall the model of. It was a generic enough Windows XP machine,
|
||||||
|
that's all I can remember. But it was more than enough to get me hooked. Here was
|
||||||
|
a machine that could do many, /many/, things, and my child mind was determined to
|
||||||
|
know /everything/ about it. Many a night was spent poring over menu options,
|
||||||
|
trying to find every little thing I could learn about. Broke the thing, a couple
|
||||||
|
of times.
|
||||||
|
|
||||||
|
I pored over that machine, hoping that I'd be able to understand every little
|
||||||
|
thing about it. Granted, I wasn't suddenly going to grasp the intricacies of
|
||||||
|
networking, or operating system design, or hardware architecture, especially not
|
||||||
|
by just clicking buttons in a Windows XP install. But it did leave me with my
|
||||||
|
main hyperfixation: All things computers.
|
||||||
|
|
||||||
|
I began to program when I was in third class, when my teacher at the time
|
||||||
|
recommended CoderDojo to my parents. I played around with some Scratch, which
|
||||||
|
was fun, plugging together little games, I did a bit of HTML and CSS, which
|
||||||
|
wasn't really for me. I wanted to know *more*, though.
|
||||||
|
|
||||||
|
I started to read a bit about programs I used and games I played. And one day, I
|
||||||
|
found something really interesting: The /source code/ of Quake III Arena. It was
|
||||||
|
my first time looking through a codebase of that scale. I glanced through it,
|
||||||
|
until I came across quite a famous function. Fast Inverse Square Root. I was
|
||||||
|
utterly mystified. This was the kind of thing I was enamoured with. A solution
|
||||||
|
to a problem that was a mystery itself. "0x5f3759df"? "Evil Floating Point bit
|
||||||
|
level hacking"? It was from there I knew I wanted to work with computers, in any
|
||||||
|
capacity possible. (It also started my love of arena shooters, because who looks
|
||||||
|
at the source code of a game without playing it?) It was also there that I began
|
||||||
|
to learn about Free Software, as the GPL was what allowed me to have my little
|
||||||
|
revelation. I saw how people could collaborate, improve on each other's work,
|
||||||
|
and create something together. I steeled myself, sat down, looked up some
|
||||||
|
programming tutorials, and dove in.
|
||||||
|
|
||||||
|
At this point I made a pretty big mistake: I started bouncing around languages,
|
||||||
|
depending on whatever mood took me. I never got any further than implementing
|
||||||
|
something trivial for a few years. I still regret that. I should have realized
|
||||||
|
that I wasn't really learning anything new, or developing any useful skills. I
|
||||||
|
finally dug in, and picked C to learn "properly", with the goal that it would
|
||||||
|
help me understand "what's /really/ going on."
|
||||||
|
|
||||||
|
It did that, somewhat. I tried to learn some x86-64 assembly, to get an even
|
||||||
|
deeper look, and was scratching my head at the sheer size of the instruction
|
||||||
|
set. But then I finally made my realization: modern personal computers are far
|
||||||
|
too advanced for one person to understand, fully. You can understand the general
|
||||||
|
concepts, even know a few "secret sauce" tricks, but at the end of the day, you
|
||||||
|
can't truly understand everything. Not for lack of trying: even if you were a
|
||||||
|
genii, you'd have to work at numerous companies to gain access to the documents
|
||||||
|
and designs you'd need to do so. Bit too much of a time-sink, even for the most
|
||||||
|
dedicated individuals, for what is ultimately a child-like goal. I could try to
|
||||||
|
develop my own operating systems, but the GPU that's sitting in my PCI-e slot is
|
||||||
|
far beyond my capabilities to work with. I wouldn't ever understand every
|
||||||
|
instruction that my CPU could run, nor am I meant to. No matter what I wrote, I
|
||||||
|
could never be sure that I was in full control.
|
||||||
|
|
||||||
|
Granted, I could do a project like jdh's computer and graphics card from
|
||||||
|
scratch, but that's an altogether different goal. (That can be found on
|
||||||
|
YouTube) Designing a computer isn't the same as learning everything about a
|
||||||
|
computer you have, though it is perhaps just as or even more impressive. It was
|
||||||
|
somewhat possible in the days of 8-bit home computers to understand everything
|
||||||
|
about your computer, not easy, but possible. At the end of the day, I have to
|
||||||
|
concede to trying to understand quite a bit about my computer, which just
|
||||||
|
doesn't have the same /ring/ to it.
|
||||||
|
|
||||||
|
Sometimes I wish I did grow up in the time of the 8-bit home computers, and to
|
||||||
|
be able to have my child-like wonder satiated by manuals, schematics, and
|
||||||
|
software, to explore and squeeze every last bit of performance out of one of
|
||||||
|
those little machines. To this day I'm still fascinated the demoscenes of
|
||||||
|
devices like the Commodore 64, or the ZX Spectrum, and have often considered
|
||||||
|
trying my hand at them, but ultimately, I've just never gotten around to it.
|
||||||
|
|
||||||
|
I hope that in the future, both libre hardware and software will be able to
|
||||||
|
create a new useful computer that I /can/ fully understand, but I'll have to wait
|
||||||
|
and see on that one. It's simply a fact in our complex, modern computers, that
|
||||||
|
there's too much for one man to know.
|
||||||
|
|
||||||
|
Then again, maybe it's me that's not smart enough.
|
||||||
|
|
||||||
|
* Part Two: The Internet /Was/ A Big Place.
|
||||||
|
For almost as long as I've used computers, I've had some form of Internet
|
||||||
|
access. From a USB mobile broadband modem, to a mobile broadband hotspot, to a
|
||||||
|
terrible copper-wire router with an attitude problem and a tiny data cap, to
|
||||||
|
a finally tolerable router with unlimited data. My earliest memories were of
|
||||||
|
playing random flash games, and very little else. Had I found the right
|
||||||
|
resources when I was younger, I may have been much farther along in my
|
||||||
|
programming journey by now, but that would have been difficult enough.
|
||||||
|
I wasn't too much of an explorer in the early days of the internet, holding
|
||||||
|
myself back due to tall tales of the dangers of the web, keeping under the
|
||||||
|
limited data caps, and most of all, avoiding the anger of my parents, afraid
|
||||||
|
that I'd provoke anger by discovering... something. I wasn't sure what at that
|
||||||
|
age, but I played it safe. My parents were right, of course. There was a lot of
|
||||||
|
stuff I wouldn't have understood at that age and likely would have been harmful.
|
||||||
|
|
||||||
|
Had I been older at the time, I would have been able to experience the death
|
||||||
|
of the Web 1.0, and the transition of content to social media. I personally
|
||||||
|
think that this is what made so much of what toxic, harmful design we see
|
||||||
|
today possible. But more than that, this made the internet feel a /whole/ lot
|
||||||
|
smaller. No longer are you able to stumble across niche communities by chance,
|
||||||
|
not with search engines pointed squarely at the landfill of garbage and
|
||||||
|
mind-numbing content perpetuated by whatever platform was "in" at the time.
|
||||||
|
|
||||||
|
And that's what I think is sad about the modern internet. Yes, you can find
|
||||||
|
cool sites from time to time, but with everyone's eyes glued squarely to
|
||||||
|
hostile sites designed to grab their attention for longer and longer, these
|
||||||
|
cool sites are cast to the wayside in exchange for the next generic blob of
|
||||||
|
popular "culture." I wouldn't feel so annoyed at this if it were the good
|
||||||
|
content on these platforms rising to the top, like the layer of foam on a
|
||||||
|
soft drink, but it's often the most mind-numbing, low-effort,
|
||||||
|
just-entertaining-enough tripe that ends up the algorithms fancy for the
|
||||||
|
increasingly shortening attention span of the users.
|
||||||
|
|
||||||
|
And it's this plainly *hostile* design that makes me sick to my stomach. These
|
||||||
|
platforms are so clearly designed to create addiction in their users, through
|
||||||
|
slimey techniques like infinite scrolling and push notifications, where systems
|
||||||
|
are built solely for the purpose of maximising the time a user spends on the
|
||||||
|
platform, through the mining of data of millions and millions.
|
||||||
|
|
||||||
|
I'm not going to pretend I'm a veteran of the older internet and that I know
|
||||||
|
exactly where it all went wrong, nor do I intend to gatekeep something I have
|
||||||
|
no right to gatekeep. I will, however, say that making content easy to publish
|
||||||
|
on the Internet, albeit inside a walled garden, seems like a great way to
|
||||||
|
allow creative people to do their thing and show it to an audience, but it
|
||||||
|
also allowed people who just wanted to grab a brief moment of fame to trumpet
|
||||||
|
in and throw whatever at an audience to see what stuck to do so. It created a
|
||||||
|
culture of fleeting attempts at striking it big quick, which leads to a deluge
|
||||||
|
of garbage flooding the public conciousness.
|
||||||
|
|
||||||
|
But this is just a secondary effect, this dilution of quality and
|
||||||
|
creativity. The primary effect of this transition was taking a decentralized
|
||||||
|
system and centralizing it into hubs, where a singular corporation would have
|
||||||
|
jurisdiction. *This* makes me angry. The freedom of information that is the
|
||||||
|
promise of the internet isn't possible with a single party in control of said
|
||||||
|
information. Yes, it's more possible than ever to host information outside of
|
||||||
|
these networks, but the network effect is a powerful thing. People don't hear
|
||||||
|
about things if it isn't on their various newsfeeds. It's created a partition
|
||||||
|
between an average user and one which is aware of communities outside of that
|
||||||
|
bubble. It's not the users fault, not at all. Once the right person had the
|
||||||
|
idea of creating that bubble, there wasn't much anyone could do to stop
|
||||||
|
them. Of course people were going to use something that made the hot new thing
|
||||||
|
easy for everyone. Of course buisnesses were going to flock to try and make
|
||||||
|
money in this new frontier. Of course it was going to become harder and harder
|
||||||
|
to find the good from the bad. I speak with hindsight, and I know it wouldn't
|
||||||
|
have seemed obvious from that point in time, but yet I still find myself
|
||||||
|
annoyed.
|
||||||
|
|
||||||
|
Yes, that's probably a me problem. I'll go touch some grass, now.
|
||||||
|
|
||||||
|
* Part Three: Holy Hell, It's Getting /Worse/?!
|
||||||
|
It's easy to look back at technology with rose-tinted goggles. Taking those off
|
||||||
|
for a moment, I remember my first computer being slow and unresponsive. I could
|
||||||
|
stare at the Windows XP logo long enough that it would leave a ghost image on my
|
||||||
|
eyes afterwards. I'm rather surprised that I managed to get anything done on
|
||||||
|
that computer at all, a younger me having much less patience. Thankfully, now in
|
||||||
|
2022 I have a reasonably powerful computer, so all my applications should run
|
||||||
|
quickly and snappily.
|
||||||
|
|
||||||
|
Right?
|
||||||
|
|
||||||
|
/Not a hope in hell./ Somewhere along the line, computers became powerful enough
|
||||||
|
that optimization was not the be all and end all. Of course, I can't hold that
|
||||||
|
against anyone. Not everyone is going to be the super hacker that does
|
||||||
|
pico-optimizations to save a grand total of 3 CPU cycles in a massive
|
||||||
|
application like a CAD program or a web browser. But it seems more and more like
|
||||||
|
modern programs do everything BUT optimize themselves.
|
||||||
|
|
||||||
|
I think the biggest example of what I mean comes from Electron; a nice idea in
|
||||||
|
concept, by allowing web developers to create native applications with the
|
||||||
|
languages and design capabilities that they're used to. Certainly, it's easier
|
||||||
|
to theme and design than something like GTK, that's for sure. But it comes with
|
||||||
|
the trade-off of running an entire browser engine to use your application. At
|
||||||
|
that point, I'd rather just run your application in my actual browser. I think
|
||||||
|
the most egregious examples come from applications which require you to be
|
||||||
|
connected to the internet to use anyway: for example, chat programs. However,
|
||||||
|
the one that really took the cake for me was Balena Etcher; an image-writing
|
||||||
|
program that uses Electron to provide a pretty GUI. Not the worst goal, but to
|
||||||
|
run a browser to copy some bytes? /Really?/
|
||||||
|
|
||||||
|
And if you ask me, optimization is even more important nowadays. I don't want to
|
||||||
|
be wasting cycles to display an application that could be native when I'm on a
|
||||||
|
machine with a battery, whether that's a phone or a laptop. At least offer me
|
||||||
|
the option to use a native window toolkit or other solution, or if you're
|
||||||
|
running a service, to be able to use my own client.
|
||||||
|
|
||||||
|
But I'm sure it's just me that needs to get a better computer. Or I just need to
|
||||||
|
update for the 50th time today. I'm sure whatever "various bugfixes" have been
|
||||||
|
done will solve all of my problems!
|
||||||
|
|
||||||
|
* Part Four: Privacy, or what's /left/ of it.
|
||||||
|
Privacy is something that's important to me. Do I have things to /hide?/ No more
|
||||||
|
than any other person. I don't want people to know things like my bank account
|
||||||
|
information, or the amount of times I listened to the /Wrath of Khan/ theme loop
|
||||||
|
in a single sitting. But what I don't understand is the reaction people give
|
||||||
|
when you tell them you'd prefer not to be tracked by gigantic corporations who
|
||||||
|
log everything you do on your devices and on the internet.
|
||||||
|
|
||||||
|
Suddenly, you're accused of being some kind of conspiracy theorist, or you get a
|
||||||
|
response along the lines of "But why would they want my data? Who cares?". The
|
||||||
|
simple fact of the matter is they do, and they use it specifically to try to
|
||||||
|
manipulate you, either through ads, or as we found out about companies like
|
||||||
|
Cambridge Analytica, manipulate your political opinions to match whatever the
|
||||||
|
highest bidder wants.
|
||||||
|
|
||||||
|
And so, as I began earlier, most "free" services you see on the internet aren't
|
||||||
|
free at all. It's a transaction. "Let us track you relentlessly in order to
|
||||||
|
learn as much as possible about you and the people you connect with, so we can
|
||||||
|
sell that data and manipulate you, and you can put funny pictures over your face
|
||||||
|
and send them to your friends." Sounds like a much worse deal now, doesn't it?
|
||||||
|
|
||||||
|
And really, it /is/ becoming worse and worse. With the advent of machine learning
|
||||||
|
and related technologies, who knows what fun new ways to track and analyze us
|
||||||
|
corporations are working on? How much can you manipulate a person by knowing how
|
||||||
|
their eyeballs move inside of a VR headset, for example? There are people who
|
||||||
|
likely have a highly paid job right now to figure that out.
|
||||||
|
|
||||||
|
As a rule of thumb, if you or that computer-savvy friend you have can't find the
|
||||||
|
source code somewhere for whatever service you're using, or the Privacy Policy
|
||||||
|
reads like /Finnegan's Wake/, you're going to have to do a lot of work to not be
|
||||||
|
tracked. If it's not critical to your life, I'd say drop it, or start
|
||||||
|
researching how to minimize the collection of data from that service. It's
|
||||||
|
incredibly fortunate that there are dedicated people who develop software to
|
||||||
|
help with things like that.
|
||||||
|
|
||||||
|
Or, I suppose, you could wear a tinfoil hat. I'm sure that'll be just as
|
||||||
|
effective.
|
||||||
|
* Part Five: So what are you going to /do/ about it?
|
||||||
|
To be frank, I can't change all of this. This is the route that design has gone
|
||||||
|
down, and after a certain point you can't really fight against the tide. I will,
|
||||||
|
however, try not to worsen the problem. And at the end of the day, it's still
|
||||||
|
really cool, and I'm still going to try and learn as much as I can.
|
||||||
|
|
||||||
|
Just because you can't know it all doesn't mean you get to throw in the towel,
|
||||||
|
and so I'm not going to. I'll just write my programs, and hopefully, they'll be
|
||||||
|
useful to someone.
|
||||||
|
|
||||||
|
But all the while, I'll feel the want of a more limited computer. One that I can
|
||||||
|
understand, fully, top to bottom, back to front. One that is not limited in
|
||||||
|
usefulness, but in design sprawl. One that I can run software on that doesn't
|
||||||
|
trample over my privacy or pin my processor to 100 percent.
|
||||||
|
|
||||||
|
Or I could scrounge up a fortune and become one of those diehard /Amiga/ fans.
|
|
@ -0,0 +1,77 @@
|
||||||
|
#+TITLE: Realizing You Need To Start Over
|
||||||
|
#+DATE: <2023-07-28 Fri>
|
||||||
|
#+DESCRIPTION: Sometimes, it's better to start fresh, than to continue forward.
|
||||||
|
Recently, I've been trying to work up the effort to work on one of my side
|
||||||
|
projects. This side project, SilverMUD, is something I've been wanting to make
|
||||||
|
for ages, and think about often. Yet when I try to work on it, I find myself
|
||||||
|
unmotivated and unproductive. Why would I not /want/ to work on the thing I /want/
|
||||||
|
to work on?
|
||||||
|
|
||||||
|
* Figuring Out /Why/ I Don't Want To Work On It.
|
||||||
|
I decided to sit down and really think about why I couldn't find the motivation
|
||||||
|
to work on it. I sat staring at the codebase, and wondering why all of the ideas
|
||||||
|
that were bouncing in my head just didn't seem to want to become lines of C and
|
||||||
|
Scheme. I eventually began thinking about what my original goals were when I
|
||||||
|
started it. To put it simply, they were:
|
||||||
|
|
||||||
|
|
||||||
|
- Learn a load of new concepts like network programming, multi-threaded
|
||||||
|
programming, and more.
|
||||||
|
- Use them to build a programmable multi-player role-playing game.
|
||||||
|
|
||||||
|
|
||||||
|
Very vague, I know. I've simplified them here, but that is the essence of
|
||||||
|
it. So how did it go? It went well, really well... for the first goal. The
|
||||||
|
second, however, went somewhat poorly. I had a general idea of what I wanted to
|
||||||
|
build, a setting-agnostic role-playing system that is enjoyable over a
|
||||||
|
text-based interface, inspired by text-adventures and multi-user-dungeons of the
|
||||||
|
early days of computer entertainment. I never took steps towards building it
|
||||||
|
until much later in the project's design. Therein lies the crux of the issue.
|
||||||
|
|
||||||
|
I spent my entire time focusing on the one design goal, which was to learn. I
|
||||||
|
was excited by the new concepts, and I got right down into it. A perfectly fine
|
||||||
|
approach for a learning project. However, I structured the program in a way that
|
||||||
|
wasn't really easy to add a game on top of. To get straight down to the point; I
|
||||||
|
took a wrong turn with the design. While the goal of learning the concepts was
|
||||||
|
going excellently, I wasn't considering game design or programming at any point
|
||||||
|
during it, with the assumption that I can do it later.
|
||||||
|
|
||||||
|
The weird part is that assumption is true. I could continue with the current
|
||||||
|
state of the codebase. However, it's going to require essentially restructring
|
||||||
|
the program entirely to do it well. At that point, I may as well consider what
|
||||||
|
I've learned since starting, and start again!
|
||||||
|
|
||||||
|
That's what I think is best to do in this scenario. Start again. The reason I
|
||||||
|
felt like I wasn't able to work on it was because I was trying to avoid
|
||||||
|
"throwing away my progress". But that progress was built on a mistake, a misstep
|
||||||
|
in terms of design. I had thought about how I would like to build the gameplay
|
||||||
|
systems, but I had made no attempt to implement those plans during the design,
|
||||||
|
and considering that is the whole point of the program that was a /big/ mistake.
|
||||||
|
|
||||||
|
Then, after considering it further, I realized I'm not throwing it away. I'm
|
||||||
|
merely doing the same task I'd have to do if I soldiered on, but this time I can
|
||||||
|
start from a clean slate and make better decisions.
|
||||||
|
|
||||||
|
* What I Have Learned.
|
||||||
|
Sometimes, you have to take a step backwards to try a different route. It feels
|
||||||
|
annoying, and can feel like you're not making progress, but that isn't the
|
||||||
|
case. The really annoying part is that I normally iterate in this way, and leave
|
||||||
|
my programs open to that iteration. But this time I just happened to build
|
||||||
|
things in such a way that that iteration became difficult and awkward, not
|
||||||
|
taking full advantage of the concepts I was learning. I had a gut feeling about
|
||||||
|
that when I was writing it, but I found myself having too much fun playing
|
||||||
|
around with whizzing bits and bytes up and down wires to stop and do the work
|
||||||
|
when it would have been best.
|
||||||
|
|
||||||
|
So to sum it up, if you have the gut feeling that something needs to be changed
|
||||||
|
as you're writing it, and you have all the time in the world, do it. Otherwise,
|
||||||
|
do it soon as. Otherwise you'll have something built and have to tear it all
|
||||||
|
down and start again.
|
||||||
|
|
||||||
|
Starting again isn't the same as starting for the first time. You can take what
|
||||||
|
you have learned, and build better, build faster. But this time, I have to start
|
||||||
|
again. Which is really annoying, because usually I make great effort in making
|
||||||
|
the exact opposite happen. Oh, well, can't win 'em all.
|
||||||
|
|
||||||
|
And I've basically gotten a chat program out of it, too. A little rebranding,
|
||||||
|
and bish bash bosh, poor man's encrypted IRC.
|
|
@ -0,0 +1,4 @@
|
||||||
|
#+TITLE: Article List
|
||||||
|
|
||||||
|
- [[file:realizing-you-need-to-start-over.org][Realizing You Need To Start Over]]
|
||||||
|
- [[file:for-want-of-a-more-limited-computer.org][For Want Of A More Limited Computer]]
|
Binary file not shown.
|
@ -0,0 +1,211 @@
|
||||||
|
@font-face
|
||||||
|
{
|
||||||
|
font-family: ibmplexmono;
|
||||||
|
src: url(IBMPlexMono-Medium.ttf);
|
||||||
|
}
|
||||||
|
|
||||||
|
html
|
||||||
|
{
|
||||||
|
background-color: #9DA9A0;
|
||||||
|
color: #D3C6AA;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
text-align: left;
|
||||||
|
font-family: ibmplexmono;
|
||||||
|
}
|
||||||
|
|
||||||
|
p
|
||||||
|
{
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
body
|
||||||
|
{
|
||||||
|
border: 2px solid black;
|
||||||
|
position: fixed;
|
||||||
|
top: 0.5%;
|
||||||
|
bottom: 0.5%;
|
||||||
|
left: 2.5%;
|
||||||
|
right: 2.5%;
|
||||||
|
background-color: #272E33;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: 2px 2px 5px #272E33;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 1.5em;
|
||||||
|
background-color: #1E2326;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-tab-list
|
||||||
|
{
|
||||||
|
display:inline;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.tab-bar-active-tab
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
background-color: #272E33;
|
||||||
|
display:inline;
|
||||||
|
border-top: 0.10em;
|
||||||
|
border-bottom: 0.15em;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: #8DA101;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-color: #272E33;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
background-color: #1E2326;
|
||||||
|
display:inline;
|
||||||
|
border-top: 0.10em;
|
||||||
|
border-bottom: 0.10em;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: #1E2326;
|
||||||
|
border-bottom-color: #8DA101;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited
|
||||||
|
{
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:link
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:visited
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:link
|
||||||
|
{
|
||||||
|
color: #9DA9A0;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:visited
|
||||||
|
{
|
||||||
|
color: #9DA9A0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.mode-line
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
background-color: #374145;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-line-buffer-name
|
||||||
|
{
|
||||||
|
background-color: #8DA101;
|
||||||
|
color: #FFFBEF;
|
||||||
|
float: left;
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 1em;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
top: 1.5em;
|
||||||
|
bottom: 3em;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
-ms-overflow-style: none; /* IE and Edge */
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
padding: 1em;
|
||||||
|
overflow-y:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-line-mode-name
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
margin-right: 1em;
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px)
|
||||||
|
{
|
||||||
|
body
|
||||||
|
{
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,215 @@
|
||||||
|
@font-face
|
||||||
|
{
|
||||||
|
font-family: ibmplexmono;
|
||||||
|
src: url(IBMPlexMono-Medium.ttf);
|
||||||
|
}
|
||||||
|
|
||||||
|
html
|
||||||
|
{
|
||||||
|
background-color: #9DA9A0;
|
||||||
|
color: #D3C6AA;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
text-align: left;
|
||||||
|
font-family: ibmplexmono;
|
||||||
|
}
|
||||||
|
|
||||||
|
p
|
||||||
|
{
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
body
|
||||||
|
{
|
||||||
|
border: 2px solid black;
|
||||||
|
position: fixed;
|
||||||
|
top: 0.5%;
|
||||||
|
bottom: 0.5%;
|
||||||
|
left: 2.5%;
|
||||||
|
right: 2.5%;
|
||||||
|
background-color: #272E33;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: 2px 2px 5px #272E33;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 1.5em;
|
||||||
|
background-color: #1E2326;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-tab-list
|
||||||
|
{
|
||||||
|
display:inline;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.tab-bar-active-tab
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
background-color: #272E33;
|
||||||
|
display:inline;
|
||||||
|
border-top: 0.10em;
|
||||||
|
border-bottom: 0.15em;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: #8DA101;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-color: #272E33;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
background-color: #1E2326;
|
||||||
|
display:inline;
|
||||||
|
border-top: 0.10em;
|
||||||
|
border-bottom: 0.10em;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: #1E2326;
|
||||||
|
border-bottom-color: #8DA101;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited
|
||||||
|
{
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:link
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:visited
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:link
|
||||||
|
{
|
||||||
|
color: #9DA9A0;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:visited
|
||||||
|
{
|
||||||
|
color: #9DA9A0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.mode-line
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
background-color: #374145;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-line-buffer-name
|
||||||
|
{
|
||||||
|
background-color: #8DA101;
|
||||||
|
color: #FFFBEF;
|
||||||
|
float: left;
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 1em;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content
|
||||||
|
{
|
||||||
|
-ms-overflow-style: none; /* IE and Edge */
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
padding: 1em;
|
||||||
|
overflow-y:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.mode-line-mode-name
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
margin-right: 1em;
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px)
|
||||||
|
{
|
||||||
|
body
|
||||||
|
{
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
top: 1.5em;
|
||||||
|
bottom: 3em;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
|
@ -0,0 +1,215 @@
|
||||||
|
@font-face
|
||||||
|
{
|
||||||
|
font-family: ibmplexmono;
|
||||||
|
src: url(IBMPlexMono-Medium.ttf);
|
||||||
|
}
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
html
|
||||||
|
{
|
||||||
|
background-color: #9DA9A0;
|
||||||
|
color: #D3C6AA;
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
text-align: left;
|
||||||
|
font-family: ibmplexmono;
|
||||||
|
}
|
||||||
|
|
||||||
|
p
|
||||||
|
{
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
body
|
||||||
|
{
|
||||||
|
border: 2px solid black;
|
||||||
|
position: fixed;
|
||||||
|
top: 0.5%;
|
||||||
|
bottom: 0.5%;
|
||||||
|
left: 2.5%;
|
||||||
|
right: 2.5%;
|
||||||
|
background-color: #272E33;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: 2px 2px 5px #272E33;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 1.5em;
|
||||||
|
background-color: #1E2326;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-tab-list
|
||||||
|
{
|
||||||
|
display:inline;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.tab-bar-active-tab
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
background-color: #272E33;
|
||||||
|
display:inline;
|
||||||
|
border-top: 0.10em;
|
||||||
|
border-bottom: 0.15em;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: #8DA101;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
border-bottom-color: #272E33;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab
|
||||||
|
{
|
||||||
|
position: relative;
|
||||||
|
top: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
background-color: #1E2326;
|
||||||
|
display:inline;
|
||||||
|
border-top: 0.10em;
|
||||||
|
border-bottom: 0.10em;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: #1E2326;
|
||||||
|
border-bottom-color: #8DA101;
|
||||||
|
border-bottom-style: solid;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited
|
||||||
|
{
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:link
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:visited
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-active-tab a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:link
|
||||||
|
{
|
||||||
|
color: #9DA9A0;
|
||||||
|
transition: text-shadow 0.2s;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:visited
|
||||||
|
{
|
||||||
|
color: #9DA9A0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-bar-inactive-tab a:hover
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
text-shadow: 0px 0px 2px #D3C6AA;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.mode-line
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
background-color: #374145;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-line-buffer-name
|
||||||
|
{
|
||||||
|
background-color: #8DA101;
|
||||||
|
color: #FFFBEF;
|
||||||
|
float: left;
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 1em;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title
|
||||||
|
{
|
||||||
|
color: #FFFBEF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content
|
||||||
|
{
|
||||||
|
overflow-y:auto;
|
||||||
|
-ms-overflow-style: none; /* IE and Edge */
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.mode-line-mode-name
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
margin-right: 1em;
|
||||||
|
color: #8DA101;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px)
|
||||||
|
{
|
||||||
|
body
|
||||||
|
{
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
overflow: scroll;
|
||||||
|
top: 1.5em;
|
||||||
|
bottom: 3em;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 284 KiB |
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
|
@ -0,0 +1,11 @@
|
||||||
|
#+TITLE: Barra Ó Catháin's Website
|
||||||
|
#+SUBTITLE: Homepage
|
||||||
|
* Welcome!
|
||||||
|
Hi! I'm Barra. Here you can find my projects, or anything I happen to mull over
|
||||||
|
long enough to write it down. I'm currently pursuing a Bachelor's degree in
|
||||||
|
Computer Science, and developing a hackable "terminal-top" role-playing game
|
||||||
|
engine.
|
||||||
|
|
||||||
|
The tabs at the top of the page can be used to navigate to the various sections
|
||||||
|
of the site. Clicking them will bring you to the list of pages in that section.
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#+TITLE: Client-Side Prediction Test
|
||||||
|
* A Simple Simulation For Learning Various Netcode Techniques
|
||||||
|
I realized that the current net-code of Spacewar was fine for simply running two
|
||||||
|
instances of the game on the same computer; but it would not hold up to
|
||||||
|
latencies of actual networks nor would it be able to do any structured
|
||||||
|
communication due to being entirely over UDP. I knew this when writing it, but I
|
||||||
|
needed to learn how to do it properly first. Hence, this repository. I will be
|
||||||
|
keeping notes on the techniques and a devlog as I come up against any issues.
|
||||||
|
|
||||||
|
- [[https://undercroft.ocathain.ie/barra/Client-Side-Prediction-Test][Source Repository]]
|
|
@ -0,0 +1,9 @@
|
||||||
|
#+TITLE: SilverMUD
|
||||||
|
#+ATTR_HTML: :width 75%
|
||||||
|
[[file:../images/SilverMUD-Logo.png]]
|
||||||
|
* SilverMUD: The Hackable Terminal-Top Roleplaying Game
|
||||||
|
SilverMUD is a text-based multiplayer role-playing game, where gameplay content
|
||||||
|
can be created in the programming language Scheme. SilverMUD is currently under
|
||||||
|
active development.
|
||||||
|
|
||||||
|
- [[https://undercroft.ocathain.ie/barra/SilverMUD][Source Repository]]
|
|
@ -0,0 +1,8 @@
|
||||||
|
#+TITLE: Spacewar!
|
||||||
|
* A Space Combat Game, Based On The First (popular) /Computer/ Game!
|
||||||
|
"Spacewar!" is a 2D multiplayer space combat game, where players orbit a black
|
||||||
|
hole and attempt to shoot each other down. "Spacewar!" is currently under active
|
||||||
|
development, and I'm currently in the process of learning how to write good
|
||||||
|
netcode for action games with Client Side Prediction Test.
|
||||||
|
|
||||||
|
- [[https://undercroft.ocathain.ie/barra/Spacewar][Source Repository]]
|
|
@ -0,0 +1,5 @@
|
||||||
|
#+TITLE: Project List
|
||||||
|
|
||||||
|
- [[file:Client-Side-Prediction-Test.org][Client-Side Prediction Test]]
|
||||||
|
- [[file:SilverMUD.org][SilverMUD]]
|
||||||
|
- [[file:Spacewar!.org][Spacewar!]]
|
Loading…
Reference in New Issue