Archive:

June 20 – Omni Update

Recently, I’ve been occupying myself with little odds and ends and helping other people.

Yesterday, I did a few Lua enhancements. Now you can access the aimPosition of your owner if you’re an item. And everything that has access to root callbacks now can query the image metadata database, which contains information on image sizing and tile placements.

I’ve been working on Parrying (with two handed weapons), but so far it’s still incomplete. So I used today instead to fix some one off issues with the Text Painter and the Wire Renderer. The Wire Renderer still needs some major restructuring, but I’ve started the process. The issue used to be that some wires wouldn’t show up unless the inbound node was within 64 blocks of the screen. Which is hacky and ick.

I removed the 64 block extra area. And made it so it will render also if the outbound node is on screen. This exposes another problem though, which is if the wire merely crosses through the screen, but neither node is within. To fix this, will take a bit more work, (storing the wires themselves, rather than the nodes and connections,) and present an interesting challenge (efficiently querying the world for lines that pass through a particular rect, rather than points), and as such that will need to be solved on another day.

As far as the text painting bugs, I simplified the rendering result to merely return a Rectangle where the text was rendered, rather than a width, height and number of lines, (which doesn’t actually give us information about *where* the text was rendered.) This fixed a few flickering text bugs in the AI’s scrolling text. Slowly but surely we’re dragging our frontend code into something respectable.

Comments »

June 13 – Just some dev chat

If you ever wondered what it’s normally like in the developer chat and the shit we talk about all day, I’ve copy pasted some stuff here without further comment.


<OmnipotentEntity> kyren, did we ever implement an ordered set?
<kyren> yes!
<kyren> I just did actually
<kyren> it's not comitted yet
<kyren> but I'll hopefully be committing it today
<OmnipotentEntity> ok cool
<OmnipotentEntity> I need to use it too
<kyren> do you need it right now?
<OmnipotentEntity> if it's not too much trouble
<kyren> okay, let me make sure it works then
<kyren> I'm debugging now anyways
<kyren> I'd actually just like to merge
<kyren> but it will require some debugging
<OmnipotentEntity> ok
<kyren> I could push and you could help me debug all the problems
<OmnipotentEntity> that's fine
<OmnipotentEntity> yeah
<OmnipotentEntity> I think that will be great
<kyren> well, let me make one pass on it at least
<OmnipotentEntity> that's definitely better than what I'm working on right now
<kyren> because it's really REALLY not working yet
<kyren> like the title screen doesn't work
<OmnipotentEntity> that's fine
<Tiy> hey metadept
<metadept> hey
<Tiy> would you mind doing a post today
<metadept> sure!
<metadept> i'll get right on that
<kyren> hey omni, I'm almost ready to push the thing
<kyren> I just need to make sure it mostly works
<kyren> and then I'm going to go get something to eat
<kyren> and come back and we can debug it
<OmnipotentEntity> ok
<kyren> also, I want to push it because I really want your feedback
<OmnipotentEntity> roger
<kyren> will anybody be super mad
<kyren> like metadept
<kyren> if I push something that is somewhat broken
<kyren> but still playable
<kyren> so omni and I can team debug it
<metadept> nah i won't be mad
<kyren> omni needs a thing
<metadept> will i be fine if i don't rebuild or is it still going to be broken?
<kyren> and this phase is nearly done-ish
<kyren> eh... I THINK it's fine if you don't build again
<kyren> I don't think I changed assets much?
<kyren> oh, maybe I did
<metadept> don't worry about it in any case
<kyren> okay it's still pretty broken but
<kyren> I'm going to push because I have to leave, and I'm going to continue working on it when I get home
<kyren> like haha
<kyren> the HUD items are key dismissable now
<kyren> that's not really too good
<metadept> i'm on the fence between saying you should wait on the nightly builds, and saying you should start nightly builds right now so players know how bad it's going to be lol
<kyren> pff, no that won't be for long
<kyren> it's literally
<kyren> everyone wants to go eat burgers
<kyren> and I'm hungry
<kyren> and then when I get back home I'm going to fix it all
<kyren> but omni needs a class in it, and I want omni's help in stuff, and blah
<kyren> so I'm going to push it in the meantime
<Katzeus_> is the plan to do nightly builds just to bridge the time until progression goes to live?
<metadept> yeah i'm at least half joking
<metadept> go forth and eat burgers
<Katzeus_> or like ongoing
<kyren> ongoing
<kyren> there pushed, god help you all
<kyren> brb
<OmnipotentEntity> kyren liar
<OmnipotentEntity> I thought you said that the title didn't work
<OmnipotentEntity> the only bug I've found thus far is if you press escape a bunch it takes away part of your UI
<metadept> hey OmnipotentEntity, kyren, what do you guys think of a 'fixed camera' mode?
<metadept> it would be really helpful for recording gifs
<OmnipotentEntity> fixed camera?
<OmnipotentEntity> hmm...
<metadept> just having the camera locked to world position instead of player
<OmnipotentEntity> yeah useful for dev work
<OmnipotentEntity> I'll add that right now
<OmnipotentEntity> it's super easy
<metadept> also i could see it being used for machinima
<metadept> i figured
<OmnipotentEntity> hi there kyren
<kyren_> Hello
<kyren_> Set up phone irc
<kyren_> How bad are things
<kyren_> I know you can dismiss hud elements at least
<kyren_> Which is bad
<OmnipotentEntity> that's it that I've seen
<OmnipotentEntity> and I think that's like, one configuration line to fix
<OmnipotentEntity> I was waiting on you to get back so I could ask you what you were talking about with the title screen
<kyren_> Oh i fixed that i think
<kyren_> O
<OmnipotentEntity> what's up?
<kyren__> hello again
<OmnipotentEntity> hi there again
<OmnipotentEntity> welcome back
<kyren__> so, okay things that have changed
<kyren__> mostly center around PaneManager
<kyren__> and I have some questions
<kyren__> for example, key dismissing windows
<kyren__> do you think that maybe like
<kyren__> instead of setting key dismissable in the Pane
<kyren__> you should set it key dismissable in the pane manager?
<OmnipotentEntity> that's probably better
<OmnipotentEntity> I think the reason why it was in the pane was so that it didn't become desynced
<kyren_> also, how much policy should there be on each layer
<kyren_> right
<kyren_> so, as far as policy on each layer
<OmnipotentEntity> what do you mean by policy?
<kyren_> each layer is just like.. A layer
<kyren_> well, okay for example
<kyren_> I need to set up the modal layer differently
<kyren_> IF there is anything in the modal layer
<kyren_> THEN only send input to the TOP of the modal layer
<kyren_> and ignore all other windows
<kyren_> that's like.. the modal layer is special
<kyren_> so, what if
<kyren_> by policy, we just made all windows and modal windows key dismissable
<kyren_> then we don't even need a falg
<kyren_> flag
<OmnipotentEntity> well, a quest dialog shouldn't be key dismissable for instance, right?
<kyren_> the only thing I think that even uses key dismissable is like
<OmnipotentEntity> you don't want to accidentally fuck yourself out of a quest
<kyren_> right, I suppose so yeah
<kyren_> right
<kyren_> I forgot about quests
<kyren_> okay, well then the modal layer still has policy tied to it
<OmnipotentEntity> right
<kyren_> for modal windows
<OmnipotentEntity> I can't think of modal windows that you shouldn't be able to key dismiss
<kyren_> why don't we make quests modal windows
<kyren_> and
<kyren_> make it so that modal windows cannot be key dismissed
<OmnipotentEntity> well
<OmnipotentEntity> hmm...
<kyren_> well, no that doesn't work either
<OmnipotentEntity> yeah, because
<kyren_> what about if there's a special layer for windows that cannot be key dismissed
<OmnipotentEntity> if you have your escape window up
<kyren_> right, the escape window doesn't work
<kyren_> what if we split it into 5 layers
<kyren_> first layer hud, cannot be key dismissed
<kyren_> second layer normal windows, can be key dismissed
<kyren_> third layer essential windows, cannot be key dismissed, fourth layer modal can be key dismissed
<kyren_> fifth layer tooltip, cannot be key dismissed
<kyren_> so only normal windows and modal windows can be key dismissed
<kyren_> OR we could have a flag, the thing is
<kyren_> it's kind of redundant
<kyren_> like, HUD windows should NEVER be key dismissable
<kyren_> and tooltips should never or always be key dismissable I can't decide but it will always be the same
<OmnipotentEntity> right
<kyren_> so I could just encode that into the layer
<kyren_> also
<kyren_> like, the quest dialog
<kyren_> should stay on top haha
<kyren_> so, maybe call it StickyWindows?
<OmnipotentEntity> hmm...
<OmnipotentEntity> it seems weird having a modal dialog that's above all windows
<OmnipotentEntity> and then StickyWindows which are also above all windows,
<kyren_> yeah, I suppose
<kyren_> but
<OmnipotentEntity> but not above modals, and there can be several of them instead of just one
<kyren_> I feel like maybe eh
<OmnipotentEntity> it just seems strange is all
<kyren_> what if
<OmnipotentEntity> I'm not saying it's wrong
<OmnipotentEntity> it's just really hard to model
<OmnipotentEntity> like,
<OmnipotentEntity> it seems to resist whatever model you assign to it
<OmnipotentEntity> because there's so many damn exceptions
<OmnipotentEntity> anyway
<OmnipotentEntity> I love the idea of policy
<OmnipotentEntity> and then forcing policy onto the windows
<OmnipotentEntity> because that simplifies this entire problem drastically
<OmnipotentEntity> like
<OmnipotentEntity> key dismissable quest dialogs are not a complete disaster
<OmnipotentEntity> if you can regain the quest dialog somehow
<kyren_> right, eh.. I think I'm going to try this
<kyren_> and see how it looks
<OmnipotentEntity> Roger

Comments »

I’ve been working on a few nice things for the behind the scenes stuff.

First thing I did was make a few of the admin commands nicer. Banning now can take an optional timeout and unban automatically once the time is done. The cavaets are that the server needs to stay running, because temp bans aren’t stored, yet (perm bans are of course). This is useful for short term bans for someone to cool off, like 10 minutes or a few hours.

Next, I retooled a bunch of the duplicate admin commands to take a playerSpecifier instead. See my player specifiers post on the forums for more detail on how they work.

Then I changed /listcid to simply /list and modified it to also display the player’s UUID and if the player has characters that can’t normally be displayed by our font it will display the UTF escape code for the character instead. So if you have someone named “😀☃” you won’t be able to read their nickname normally but the list command will output them as $3 : \ud83d\ude00\u2603 : $$(uuid goes here).

You can use the unicode escape sequence to address them to any admin command.

Notice that I’m using the \u not the \U unicode escape sequences, which means much of my time this morning was taken up writing an encoder and decoder for UTF surrogate pairs and redoing bits of the parser to handle them better. This will save a lot of keystrokes though, because that sort of huge unicode codepoint is rare.

Next, I stuck a lua script hook into the command processor. Now you can define your own admin commands. There isn’t much to the lua API yet, but that will change as we figure out what you need.

Finally, I changed the format of the Lua callbacks so that Doxygen can parse them (some of them anyway, there’s still a lot to do), then I changed our doxygen settings to make documentation fit for public consumption (remove verbatim_headers and full_source).

You can find public documentation at: http://doc.playstarbound.com.

Currently it’s updated manually whenever I fancy it. But once we get the nightlies system working, I’ll make sure that the script that uploads the nightlies also updates the documentation. Enjoy modders.

Comments »