DotNetMud: user verb actions, rooms with directions

image

  • This is a screen capture of my two browsers logged in.  Follow the arrows for when what happened, and you can see the messages delivered to the other player.

Implementation Details

There is now a structure by which items can state that they handle various verbs that the users could type in.   I use a JIT lookup to figure out what verbs are available to a player – verbs may be sourced from things in their inventory, in themselves, in the room they are in, or from other objects in the room they are in.

image

image

image

I created some more plumbing so that rooms are now aware of other rooms and can get directions to go to those rooms.

image

As a result, I added a tell_room driver level thing to make communication easier.  However, it needs to be updated to handle different messages, one for the person doing the action, and one for everybody else in the room.

Difficulties

The original mud was a single-threaded thing.  So whenever a command was executing, this_player() was “who was the command running for”. 

My version is multithreaded.  I have to pass around a lot more information – hence the “user action execution context” uaec above.  I had to know who the player was, what the verb was that was executing, etc.   There were several instances where I was using “this.SendOutput()” and the result was that user “Sunny” got messages intended for user “Bunny”.

I keep running into this problem – that I have to pass around “who the current player is”.  This will probably become a generic “execution context” like HttpContext is in web apps.

I also know that the verb system I have in place won’t work when we get monsters.   We need the ability to have a monster override a user’s ability to go in a certain direction easily.  The way this was done in the past was, the monster would override “east”.  In my current setup, this would not work as the dictionary of verbs wouldn’t get refreshed.       Then again, I’m leaving this whole verb things as a “Sample Mudlib” implementation, not part of the driver – all the driver does is get a command to the right user object and its done.

I also know that I need to create a MyStdObject that’s specific to the implemented mudlib.

Where Next

Probably the global player list – who – shout – say, emote, tell.

Possibly switch the client to be true HTML rather than monospaced font.    Philosophical question if I should do that or not.

And then, the hard bit:   Adding polling cycles.

If I can get polling cycles working here, then I’m ready for the space game version.

Code since the last blog post:    https://github.com/sunnywiz/dotnetmud2015/compare/7da38a6f…2497ec8

Upgrading SSD in Laptop

imageI have a Samsung Series 7 (2012) 8G as my daily driver.  The HD in it conked out, and I replaced it with the biggest SSD that I had at the time.. 64GB.   Not quite large enough.

Rather than spend the money buying a new laptop (I want to move up to a 17” gaming laptop with at least 16G of RAM), we decided to spend $150 to get a 500G SSD.  I waited to install it till after Holidays, because I needed the laptop functional for the holidays.  I don’t trust myself with hardware upgrades.

It all went well!

Step 1:  Should probably have been back up the existing harddrive.  In the future I’d probably use Hiren’s Boot CD, and part magic, and back up to an external USB.   However, I did not.   Luckily, I had gizmo to save me.  (gizmo pictured in picture)

Step 2:  Open up the laptop (thank you Youtube) and replace the Hard Drive.  Of course, I got left with an extra screw, that I have no idea where it goes.

Step 3: Download and burn a copy of Hiren Boot CD since I couldn’t find my other copy.  Beware copycat sites.

Step 4: Use the nifty HD-to-USB gizmo, mount the old drive, boot from Hiren,  and use CloneZilla to copy it to the new one.

Clonezilla was not easy to find.  I had to choose:

  • Boot Linux
  • Exit the linux menu to get to root prompt
  • type “clonezilla” (total guess) .. it worked.

image

image

Step 5: boot into windows and Extend the size of the NTFS partition to cover the entire drive (“Manage Disk” in start menu)

Step 6: Update windows (didn’t have space to do that before) and shortly, update Elite as well.

Step 7: Apply stickers to outside of laptop from recent trip. 

Glad I could clone it.   I have two currently active client’s VPN softwares, a bunch of client WIFI things, etc, all configured.  Didn’t want to have to redo all of that.

DotNetMud: Driver finding objects, singletons, etc.

image

 

In the original LPC land, the driver was the only way you could create an in-game object.  Along with this came several little things like:

  • The driver knew where every object was.
  • you could say new_object(“/path/to/object.cs”) and that’s how the driver knew where to grab its source.
  • the created objects were of two flavors – “/std/room/lobby” for example was the room that everybody would go to, but if you did a new_object on it, you’d get “/std/room/lobby#45”, which was a different object.  (this is called “prototyping”, and is also used by Javascript and Ruby)
  • you could USUALLY refer to an object by this string that represented the object.
  • Because of this deferment (string became an object), not everything in the mud loaded at the same time – there was some JIT loading going on.
  • The code was compiled at that point, so you could change the definition of the object and then create a new one of it.

In my DotNet world, I’m not limited by who can create which objects.    What to do?

Solution #1 – Don’t Manage it

Don’t Jit-Load anything.  If users want a singleton, they have to implement Instance.   All assemblies are loaded into the same appdomain. To change code, have to restart the mud.

This is doable, like a Diku, but not where I want to go.   Writing that Instance stuff over and over gets old.    Granted, there’s all kinds of C# stuff you could do, but the target audience for LPC was beginner programmers and game designers, not code poets.  Less code the better..

Solution #2 – Overmanage it

I could go with “all code is on disk and I run the compiler against it to generate it and then suck it in”.   Not going there yet either.

Solution #3 – Put in a layer of Find_Object etc.

This is the route I went. 

  • I decided that rather than “/path/to/object.cs”, I’d use a URI scheme. 
  • I’m using “builtin://TYPENAME” as my current implementation of “yo, go find me an object”.
  • I’m giving two different methods in the driver – one to find a “singleton” (if it already exists, reuse it, else create it), and another to create a new one every time.
  • I’ve set up some internal properties in StdObject that (supposedly) on the driver (and other responsible code) should set.

What I’m doing is leaving open some possibilities:

  • realm://sunnywiz/classname   — this could be a per-wizard realm pointer.  maps to an assembly, that might be loaded into an appdomain.  (appdomain = .Net version of forget this code and reload it)
  • persistent://DotNetMud.Mudlib.Room/WizardingHallway57 – this could be a stub that creates a standard thing of sort and then rehydrates it based on a tag stored in a database.

I’m also not saying “Everybody must use the driver to create their in-game objects.”  No, I’m saying “if you want to use the driver, you can, and I’ll track things, but if you don’t, I can’t guarantee I can keep track of it.”

The code referenced by this blog post is at this diff:  https://github.com/sunnywiz/dotnetmud2015/compare/blog20160106…blog20160107

Here’s some of it running:

 image

DotNetMud: Its Alive!

Code: https://github.com/sunnywiz/dotnetmud2015/tree/blog20160106

Heading back home today, vacation is about over.   For my little pet project, its been a nice little run.  Here’s what I got done:

image

  • Two different browsers
  • Logging in as two different users
  • Input_to() is implemented to get the user’s name.
  • I have a standard room object to house the players
  • the players each have their own mud-object
  • I’m currently hardcoding the verb/action stuff, only does look()
  • Using Signal/R as the transport between client (browser) and server

Server side tour:

image

Mudhub

This is the Signal/R Hub.  It currently only has two methods / routines / channels – SendOutput and ReceiveInput.  It deals with new players connecting.

It tries to offload everything it can to Driver.  

Driver

Driver is what used to be the driver (efun) level stuff in the old LPC muds.   Its where these kinds of things live:

  • What’s the list of players?
  • send a message to a user
  • find me an object matching a string X  (eventually)

However, Driver does not pretend to know what kind of mud you want to write.  So for that purpose, it relies on IGameSpecifics – which I only have one implementation of – to deal with things like “what object do players use” and “what to do with a new connection”.

IGameSpecifics / SampleGameSpecifics

As mentioned above, this is effectively “master.cs” from the LPC days.   However, there’s not a lot of stuff in it about permissions, and stuff like that, as we’re not yet compiling C# code on the fly.

MudLib

These are all the things that would go into writing your own mud.  I have a standard room and user object, and a single room (Lobby).  The code for “look” is currently built into User, that will need to move out sometime.

Where to go

There are many places left to explore in this little codebase:

  • Standard rooms don’t yet have directions going to other rooms.  That’s probably the most important next thing.
  • Putting in a verb structure so that players, rooms, and objects in a player’s inventory, all get a chance to put in their own verbs.   (there’s many ways to optimize this, I’ll probably brute force it the first time)
  • There definitely is NOT any on-the-fly compilation going on.   Everything is precompiled.
  • I don’t have a method in place to covert a reference like “/core/Lobby” to an actual in-game object.  I have to make some design decisions there.    Do objects claim URI’s, or do I use the URI to detect where the code is at, or ..  ? This affects the next thing –
  • There is no database backend or persistence.  And there probably won’t be, because that’s not where I want to go, this is a sample.
  • There are player disconnections to be handled as well, and reconnections.
  • Once a verb structure is in place, there’s going to be ID() stuff where swords can say that they are the sword that needs to be picked up, for example.

Uh oh, time to go.   Lunch with the family.

DotNetMud: Client Server Poll Loops

The original muds didn’t need this because telnet, but with the spaceship game in mind, I need some way to sync game-data back and forth between server and client.

Without any hard work, the poll looks like this:

  • C:  “Server, hit me.  I got you some inputs: I1”
  • S: “Hit!  H1”
  • C: “Server, hit me, inputs I2”
  • S: “Hit!  H2”

So if you have a 200msec lag time, you get a hit every 400msec.  That’s assuming upload and download lag are similar.

If you go a little crazier you can work with intermediate frames

  • Setup: Real Time clock R = 0, corresponds to CT=1000 and ST=2000.   Neither server nor client can know R.   Upload lag 200ms, download lag 50ms
  • R=0, Client sends “hit me, CT=1000”
  • R=200, Server receives hit request at ST=2200.   maybe it takes 15 msec to put together the response. 
  • R=215, server sends H1 CT1=1000 ST1=2200 ST2=2215
  • R=265, client receivesH1 CT1=1000 ST1=2200 ST2=2215 at CT2=1265
  • Client now knows that round trip time is about 265 msec.   Maybe it takes 20msec to put everything where it goes
  • R=285, client sends “hit me H2 CT=1285  Intermediate frame: 133ms”
  • R=485, server receives the above request.
  • R=500, server sends H2
  • R=550, client receives H2
  • R=633, server sends H2.1 as requested
  • R=683, client receives H2.1

I haven’t coded it yet, but the client is in charge of throttling, and there’s going to be some interesting “what did I try before” “what shall I try now” logic. 

There’s also a limit.   If the client requested too many intermediate frames, the actual network transport might start bundling the frames together and/or delivering them out of order.     

Note that upload and download lag are different – so it might be completely plausible to have 2 or 3 intermediate frames before the client can actually send back its next update.

A more advanced algorithm would have the server asking the client for intermediate frames, but I don’t live in a reality where that needs to be solved.

There’s also some work in the above protocol to figure out server to client time offset.  Its not an easy question to handle.  And there are also drifting lag speeds – as I write this attached to a 3G Karma Go device.  which keeps going from 2 to 3 circles and back.

Dialing it back

I don’t need to solve it all now.  For starters – all I need is a simple loop.  When I get to space ships floating around and changing direction based on user input, then I’ll need the intermediate frame update stuff.     Just need to know it is solvable.

 

 

DotNetMud: Start?

I have had some wonderful things happen. 

The first is, I married my wife.  This happened 8 years ago (I asked her), and its been a fun trip so far.   But the best thing is, we keep growing.  In this case, I decided that I trusted her to a new level, and I asked her a question:    Would she be willing to design a schedule for me?

I struggle with scheduling.    More specifically, I struggle with “how much should I be available for others” and life balance. 

I also told her of the desire within me to work on this game.   Its been an omnipresent inside push since 1991.   And there’s so much of it, in the past, when I open up the gates, it floods over and drowns out everything, and burns me out quickly.    And.. I don’t know if she understands, but she’s accepting of me, and nurturing of me. 

So,  I gave her the guidelines of what I had to fit into my life, and she drew me up a plausible schedule.  It includes:

  • Time for Us to Go to the Gym Together. (DATE!)
  • TIme for Us to Watch TV (DATE!)
  • TIme for Us to Eat Dinner (DATE!)

AND,  it also includes:

  • WORKING! like, to get income and pay mortgage and stuff. 
  • DAILY NAPS!  (omg)  (concession: I get home later in the evening)
  • PLAYTIME! (go work on my project or my latest game or whatever)

As it is wife-suggested, I believe it has a high WAF.  (Wife Approval Factor).

So with this established, I can now relax, and let this project flow.  It may flow slow, or it may go very fast, but its accounted for.

Managing the Flow

“Honey, what are you doing?”

“Coding”

As I sit there, leaned back, eyes closed.   That is how much stuff is shifting through my brain.   Its going very fast.   Its like a probe algorithm trying to sort things out.    How the heck do I capture this?

Well, in the end, its what gets committed to github:   https://github.com/sunnywiz/dotnetmud2015

But its also going to be blog posts here.   I run into a quandry.  Do I:

  • First do something, then write about it?  (and not change it ever again)
  • Think about it, and say “I think its going to be something like this” (and then run the risk of never doing it)
  • Write something, write the equivalent of documentation here, but put a caveat on it of “this might change in the future”

The 2nd and 3rd options seem to be the way to go.   In general, everything is “here’s what is intended at this time, things may change in the future”, kinda like pre-documenatation.

I’m going to tag them here with the tag “dotnetmud”.

Overall Project Desires: Intended

I want to write:

  • A very basic server engine.  This deals with client connections, disconnects, reconnections, some level of polling things, etc.
  • A very simple mud library: 
    • users logging in (no save choose your nickname)
    • in a room
    • can see other players in the room and on the global players list
    • can move from room to room
    • emote and say
    • shout
    • tell
    • using a custom web client
    • This is a “sample documentation” game to illustrate the various parts of the client/server communication, such as events and polling.
  • Using the above two things, a very simple space game:
    • users log in to a ship floating in space
    • can fly around in space (thrust, rotate)
    • can see other players’ ships as well
    • maybe will have some missiles to make it fun
    • using HTML5 canvas web client

Then, the fun stuff can happen, where I start making a more advanced game of sort, building on the above.  While trying to keep the above nicely packaged.   This is where my space game really happens, and/or my 2D mud game.

Topics Considered So Far

These could all be individual blog posts.   Either before, or after, code.  All of these have been handled already by industry, I want to expose them for my use with my game(s)

  • Using signal/R – how chatty is it actually, how fast can you poll?
  • server and client time sync –  when you’re dealing with “at server time ST, ship is at X,Y going at DX,DY velocity” => go render intermediate frames till next server update, you need to get very specific about Servertime ST vs client time CT.  There’s a lot of work around here.
  • server and client poll loops (next post, it got too long in here)
  • how generic or hard-coded to make events and polling – I keep waffling.  I start to write something generic, and then realize how much plumbing I’m putting off to the game, and then go back to hard coded.   It’s the difference between:
    • client->server: UpdatePlayerListRequest;   server->client: UpdatePlayerListResponse
    • client->server: Event(“UpdatePlayerListRequest”), server->client: Event(“UpdatePlayerListResponse”)
    • The former puts some game-specific code at the server level; the second avoids that problem but makes for a lot more argument marshalling and passing.  I keep going back to the first one.
  • In Space, dealing with unlimited-space addressing
    • enumerate the things within distance 10 from me from closest to furthest.
      • answer: its similar to voronoi indexing, but more like i-nodes in the original unix file system.

So, yeah, my brain is alive with the sound of code self-organizing.    Easy there big boy .. need to do the long haul, not the short burnout.

And I love my wife.  She is awesome.

Elite Dangerous: Sunny Goes Mining

I tried mining.  I’m enjoying it.   it is somewhat lucrative.. it is more variable (never know what the next asteroid will bring).. it has some interesting parameters.

In order to mine with ease, you need: 

  • A Prospecting Limpet Controller
  • A Collection Limpet Controller
  • A Refinery.

They made it so that both the Refinery and the Collection controllers want a larger-sized bay – this is where they make you choose.    You can go with a smaller collector, you’ll just have to slow down the mining so the collectors can catch up. 

They also made it so that the limpets (ammo) for prospecting and collecting take up cargo space  – 1 ton per limpet.   So you have to choose your balance of how many limpets to take vs the amount of ore you bring back.

The build I’m going with for now:

[Type-6 Transporter]
S: 1D/F Mining Laser
S: 1D/F Mining Laser
5: 5E Cargo Rack (Capacity: 32)
5: 5E Cargo Rack (Capacity: 32)
4: 4B Refinery  (9 Bins) 
4: 3A Collector Limpet Controller (2 Collectors, 1300 seconds or something ridiculous like that)
3: 3B Shield Generator
2: 1A Prospector Limpet Controller (1)
2: 1E Standard Docking Computer
Cargo : 64 T

I chose to keep a Shield Generator and Docking Computer this time. I tried without them on my Cobra, and it can get scary when you bump into the asteroid.

How it works out:

  • Playing for 45 minutes or so?   Some of it was outfitting and travelling.
  • I used 2 collector drones  … they last me for 2 asteroids.
  • I used 2 prospector drones .. one for each asteroid.
  • I netted 33 tons of ore: 2 Bertrandite, 10 Gallite, 7 Gold, 9 Osmium, 4 Silver.

Given my 64 tons of cargo space, means I could probably go through 4 asteroids or so and then return home with a full hold.   If so I would need to leave with 8 limpets, maybe 10 limpets total to have a little bit extra.

I had a bit of trouble trying to flush out useless materials – the collectors kept grabbing it and bringing it back.  I think I need to fly away, disable the collector in the modules panel, dump them, fly back, re-enable the collector. 

It seems like asteroid sizes and yields are fairly consistent, so far.  All about the same size, all about the same yield.  Might change in the future.

I suspect in the future with a bigger ship and a bigger prospector controller, I could control several limpets – so I could sample several asteroids before going back to a previous one.

The Chart of Money

image

  • One of the mining tutorial videos I watched named “Bertie” as being worthless.     I think for me my line starts at Coltan or so.
  • This was generated using data from eddb.io, sucked over to Excel.   Prices differ from station to station.
  • Some of them – the 3 P’s, and Osmyium, can be used to fulfill missions, and thus can be upwards of $100k / ton.

Where to go Mining

There’s a wiki page listing pristine metallic reserves.  I galactic mapped each of them till I found one near my home system (near Lembava).

Well done, Frontier.    Enjoyed this so far.

Resistance to starting a semi-large project for fun

I have 2 projects floating around in my head, and 1 deployed but incomplete.

I’m on NYE break.. another 5 days or so of vacation.    This would be a perfect time to work on these projects.   If that is what I want to do.

Yet, I find I am reluctant to start.  I get more enjoyment out of thinking what I could do, rather than actually doing it?

Its probably similar to the idea of not-running while on vacation.   If I’m going to do it, it needs to be part of normal-life, I think, not trying to beat it into submission with the vacation-card.

Idea #1 – “Burndown”

I’ve had this for several years.  It’s a cross between smartsheet, and Rally, and “always remembering historical scope and left” to generate burndown graphs for any node in the tree.   Its meant to be a multi-person hierarchical task-for-a-project list.    In advanced mode, with templates and stuff.

The trick to make this one work is to have the UX be as easy to get things done as possible.

Idea #2 – “Muddy Sky”

Except, I want it so that I could write a multiplayer version of Endless Sky or even Elite, but with Mud-like conventions on the server side ..  your spaceship is “floating” within a “room”, and interacts with the other objects in that room, and all the client/server stuff is handled over Signal/R, probably using javascript fro the client. 

The solution in my head currently consists of:

  • javascript Canvas on the client side, with translation for rotating ship graphics
  • signal/r for payload transfer from server to client
  • property transfer dictionary of object / key / value for transfering game state from server to client
    • the “player” object on the server side remembers what was sent before.
    • the player object on the server gets called to collect what it thinks its client is interested in
    • some code to compare that against what was sent before so that only changed values get sent down in a client update
  • different kinds of messaging
    • “the world has changed” server->client (described above) to provide client with the latest that it needs for rendering
    • “event” server->client – this would be stuff like “something blew up”, or “somebody said something”.
      • on the server side, would broadcast to a room or to a particular player object
    • “command” client->server – this is stuff like thrust, turn left, turn right, etc. 
      • I can already tell that will likely need to do “thrust for 1 sec” etc because I’m not sure how time sync would work.

Challenges:

  • latency – I don’t know that signal/r will be fast enough to get the latest updates from server down to client.  I’m also not sure that the code for reducing payload size is worth it.  And I haven’t written any code yet!!!!
  • time tracking – client has to deal with different FPS, server has to deal with different tick-per-sec.  
    • I was thinking that all commands / events etc are stuff like “at tick XXXXX, thrust at 50% for 3 ticks”
    • server deals with things in desired-tick order, possibly one tick at a time (or set server interval.  100ms?)
    • start off with fixed time intervals, and then auto-tune from there
      • auto-tune: how fast can the client update its screen – no need to get updates from the server any faster than that.  Let the server know that.
      • auto-tune: how much has changed, does the server need to send an update to this client yet?    Note that stuff that changes, can stay in the buffer to be sent, doesn’t have to be re-detected. 

Gameplay challenges:

  • I want it to be like endless sky… 
    • It’s a 2D world
    • things overlap each other, (mostly) no collision
    • basic operations are thrust, rotate
    • there are ship computers for dealing with more complicated things
  • except that, kindof in order:
    • no speed limit.   thrust one way, thrust the other way 
      • this is why you want an AI to guide you to someplace
    • don’t fly over a star, you’ll overheat and explode
    • there COULD gravity
      • I’ll suspend belief, and have the planets/sun/etc not do the gravity simulation bit, but I want the ships and torpedos to be affected by gravity.
      • However, then there’s a discrepancy .. so maybe planets do orbit via gravity.  
      • There would have to be something like “I want a planet of mass M=x to orbit that star with a Aphelion,Perihilion=y,z” and it calculates the starting x,y and velocity or something.    And then just calculate where the planet will be at a given time T and what its velocity will be. 
    • If we go with Gravity, then there will be bigger distances between planets
    • HYPERSPACE is a different space that your ship can enter
      • masses exert anti-gravity.  Ie, you get pushed away from planets, suns, etc.   r^3 instead of r^2?
      • this will probably cause some interesting “focus” points where everything gets pushed towards.
        • I wonder how those focus points would move as things orbit each other in normal space?
      • I want velocity in hyperspace to be exponential, like it is in FSD in Elite.   Ie, you control your acceleration up/down.    You can then get to insane levels of acceleration .. in a certain direction. 
        • You will really need a computer to guide you in this world.
      • “Interdiction” ala Elite would be done by firing interdiction missiles through hyperspace at your target.. possibly homing?

See, there are so many places I want this to go.  Hence, I want a nice development system, in C#, similar to how we used to run LP-Mud’s.. where I can play with these different mechanics (server side).. and provide all the hooks that others might need to make the game interesting.

Based on the amount I’ve typed, I know that the game is the one I want to work on the most.

But I also know that vacation time is not enough to get this to where I want it to be.  Sure I might get some stuff knocked out, but it won’t be the juicy stuff.    So, I’m loathe to start.

Maybe I’ll go mine some more asteroids in Elite.

Or maybe I’ll set up mini-simulations of what the game play would be like, and just do that rather than build the game.

Maybe I need to start visiting the game-development groups in Louisville on a more regular basis.

Elite Dangerous Revisited

My blog post from Dec 6th, I was just getting into ED.   I was going to do so many things…

Well, I joined a Power Play faction.     LYR, to be specific.  I wanted their fancy doodad drunk missile launcher.

And the game went from fun to a time-sucking soul-less grind.

Here’s the problem:

  • I am not particularly good at combat.  Even worse when I don’t have my HOTAS, just mouse and keyboard.
  • As a member of a faction, there’s these NPC’s who spawn specifically to kill you.  
    • Thanks to _AlliN_, I got clued in that these NPC’s are.. pretty hard.
    • I don’t have a good cargo+fighting ship – haven’t earned enough yet. 
  • Every hour became “I could do this other thing, or I could grab my next allotment and deliver it”. 
  • I calculated I’d have to play for minimum 2.5 hours a day to make my goal, doing nothing other than grinding.
    • 750 merits => 400 per week to maintain; assume 60 merits per day
    • with a 40t hold, that’s GET wait 30 GET deliver return wait 8 GET wait 30 GET deliver return.

After getting blown up in my T6, loosing about 33% of my assets.. in my power’s home system, no loess..  things became sober, and somber.   I tried making a go of it with a Cobra MK3, but with only 40T of cargo space, my favorite way of making cash was handicapped.   If I let go of shielding and a docking computer, I could get 60T..

I made a decision 2 days ago to quit my faction after grinding it out with them for two weeks.   I’ve already recovered an additional million (because now I can use a T6).. I intend to get up to about 25 million, then get an ASP (fully kitted out), and then MAYBE join a faction again.

Listening to Lave Radio (Podcast) episode 92, they talk about the grindyness of Power Play.    Glad I was not the only one.

Things I’m interested in next:

  • Looks like folks are reporting being able to play Horizons with low settings on graphics cards on laptops.   This is good; I might get Horizons – then I’ll have more places to land.
  • There was a new mining guide released, I’ll have to try that in my Type 6.   I found some pristine metal-rich rings.
  • I have 2 ships now.  I might try to do some smuggling in my Cobra – something small, that I could afford to fail.

I am, however, going on Christmas/Winter break (I’m on it now!) and this involves Florida and no HOTAS .. so, yeah.   Don’t know for sure what might happen.   Definitely won’t involve combat.

Karma Go: Fail for us (so far)

Wife and I recently invested in (paid for 3 months of) a Karma Go.     We’re going to be using it in Florida for a week.. the place we’re staying doesn’t have an internet connection.  Its perfect for that..

However, we were wondering if we would be able to ditch our at-home TWC connection as well in favor of it.

No.

a) Its Open-WIFI only – ie, “web site login page” to enable access – and 3 device maximum.     This means that things like the Apple TV cannot connect to it.

b) The “unlimited bandwidth” is capped to 3G – which means, some video, doesn’t play so well.  Other video works okay.    Seems to be playing video from our iPhones is not optimized – it doesn’t scan ahead, stutters, etc.  

c) I tried “cheating” and putting my windows 10 laptop into “bridge” mode, trying to drive a router from that – but nope, 20 minutes of farting around with it, didn’t solve it.

So..   Karma Go won’t be replacing our TWC connection, which means we’ll pretty much have it for vacation times only.  

Having test driven it for a few days, though, I can report that I can play Elite Dangerous while connected to it.