YourLocalFax

LD31

Just one more week!

Obligatory “I’m in” post is obligatory.

I’m planning on being able to participate again and looking forward to it! I’ve decided to have a look through some of the themes in the slaughter and spend the next week working on a game based on one to test my tools and my ability to make a game based on a topic.

The topic I decided on was “Seasons”, and I’ll be using the following:

  • Language: Java and Score, my own scripting language, still in alpha stages but seemingly stable (enough).
  • Library/Engine: Artifakt, my own in-dev library built around LWJGL for quick game developing.
  • Graphics: Paint.NET, super nice image software.
  • Sound/Music: Ableton Live 9 for compositions and sounds and the internet for sounds I can’t create.
  • IDE: Eclipse, I’m comfortable in it and it’s good for quick development.

Whatever I make will only be published as runnable jars, I’ve never been a fan of Java applets so my library doesn’t support them (maybe in the future if I need to, eh?) I’ve never tried exporting for anything other than Windows (as it’s the only OS I actually use, I haven’t finished setting up Ubuntu and don’t have anything Mac) so I guess this’ll be the time for me to figure that out as well.

I’ve got a lot to work on and more to test, and I wish everyone luck in preparation for and participation in our next Ludum Dare 😀

Progress, and maybe MiniLD

I’ve been testing my tools and building up my languages functionality while thinking up a small game idea, and the language seems to be keeping up nicely (not like Java VM fast but calm down this just a baby language). I might find a way to make the game fit into the MiniLD theme or just say the theme comes from the fact that it was made for preperation, I don’t know.

I’m also setting myself a challenge: My Ludum Dare entry will be written ENTIRELY in my language, of course using the library behind it. This’ll give me ample oppourtunity to stress test the current features, critiqe the syntax and refine the direction I’m going with it for future features.

This Ludum Dare will be the most productive one I’ve had, even if I come out with little to nothing to show for it game-wise.

 

MiniLD Finished? Sure it is, let’s go with that.

So I got busy and ran out of time to work on the actual game, but I’ve submitted my MiniLD entry: a simple 2-button RPG with basically no gameplay. Cool things about it? The game logic is done completely in my personal scripting language. So that means preparation happened, yay! I managed to add some much needed features to the language while I was writing the game so I’m about 20% coo- uh, more prepared for Ludum Dare when it rolls around the corner.

Already In – What I’ll Be Using!

I’ll be programming in Java and Score, using my own libraries Artifakt and Curl.

For anyone who’d like to know:

  • Artifakt is my in-progress Java game library written around LWJGL 2. It’s being filled with a bunch of pretty features, but what’s important is the management of game states (scenes, as they’re called), input handling, OpenAL audio, a File wrapper similar to that of libGDX, and the an easy-to-use Sprite Batch for 2D rendering. It can do more, but that’s about all I plan to use this Ludum Dare so it’s all I care about mentioning.
  • Score is my also-in-progress scripting language written in Java for Java. It’s not the most advanced or well-optimized language ever, but it seems to perform well when I use it and it has some convenient features that I plan to expand upon more in the future.

If all goes well, I plan to write my entire Ludum Dare entry in Score to prove it can handle it (and to stress test it because I really need to do that before I implement much else).

Artifakt and Score are on github (Atmosphere and Score).

I will also be using Curl, my simple wrapper around Artifakt that allows Score to directly access Artifakt cleanly.

The most recent versions of these can be downloaded (as jars and native files) here.

Sharpening My Tools…

NOTE: So this right here turned out to be way more than I thought I’d be writing, sorry for it not being a 100% Ludum Dare topic. I will be using this language and my game library for future Ludum Dare events, though, so it applies well enough I guess.

This past Ludum Dare I got to use some very fun tools to create my game: A game library I wrote, Artifakt, with bindings to a scripting language that I also wrote, Score. Actually building something like a game using tools I’ve created, especially a whole language, is something I never thought I’d be doing. The event was fun, but not without struggle, so I’m glad I already had upgrades planned for the future.

I’ve been working most on the language, rewritten completely from scratch it’s a lot more efficient when it comes to maintaining proper control of the program and has more flexibility when it comes to the more complicated features I’ve wanted. While the new Score lacks it’s own proper class system like the old one had, the current functionality is actually far greater. Functions, for example, are much more useful and manageable than before.

Here’s a quick example of some of the fun things Score can do, because why not.

score_screenshot_0

 

This might be a little confusing at first glance, so I’ll go ahead and walk through it.

  • Lines 1 and 2 import classes from Java for this script to use.
  • Line 4 starts defining a table value. A table in Score is similar to a table in Lua, it stores data in key/value pairs. By default a table doesn’t care about the type of an object.
  • Line 5 sets the key in to a new Java Scanner object in the table.
  • Line 6 sets the key Input to a lambda function, more on that in a second.
  • Line 12 defines two values as the return values of the Input function.
  • Line 13 prints stuff. The string concatenation is pretty standard, and the comma separation concatenates the values with a space between them.

So more on that lambda, there. For reference that could just as easily be written as a standard function, putting Input right before the parameter list. Anyway, there’s a lot going on there.

First of it’s defined with the keyword “func” and followed by a list of variables in brackets. This first list is optional and defines specific return values for this function. If no return list is given any number of any type of object may be returned. If a list is given with no names for the values then only values of those types can be returned. here we have types and names, so the state of those variables is what gets returned whenever the function terminates. In this case the function terminates at the end with no early break. These return types, if given names, can have default values. Those work how you’d think they do, they’re initialized to that value rather than null or a type-specific default value (i.e.zero for an int.)

After the return type list comes the parameters, which functions just about how any other parameter list would. You define values separated by commas and have the option of giving them defaults. What’s good to note is that Score will automatically default parameter values if no argument is passed for them, so default assignments have no restrictions on where they can be used.

After the parameters we have the function body. A neat thing that Score allows is that for single line functions the curly braces are optional: func PrintValue(var value) println value; is valid syntax. Functions can also use a fat-arrow to bypass the return statement: func Add(int a, int b) => a + b; will return the sum of a and b. Moving on from things not in the example, this function will first print the given message (or “Input: ” if no message is specified) and then request input through Java’s Scanner class and assign that input to the res return value. When the function returns after that, the value of res and code are returned.

Notice how in is a part of the table but Input can access it without having to reference the same table. In Score, when a function is assigned to an object (or a part of a class, but we don’t have classes yet…) that function has access to it’s container through a this parameter. Access to this is also delegated automatically as if its contents were local variables. Because of this the Input function has direct access to in.

LD32

I’m In, +Round 4 Votes

So I haven’t liked these last two rounds of voting, why not share the last one?

Anyway, semi-obligatory “I’m in!” post. This will be, I believe, my fourth Ludum Dare. I’ll most likely be forgoing my current games library in favor of LibGDX since I’ve recently re-introduced issues and bugs into mine.

I’ll be using:

  • Java for the engine
  • Laye for any scripting/configuration
  • Eclipse for Java code
  • Sublime Text 3 for Laye code
  • LibGDX, self explanatory
  • Ableton Live 9 for music/effects
  • Paint.NET for graphics

Sounds like a fun time to mention what Laye is, too. Laye is my own scripting language written in Java. It’s by no means finished, it definitely needs some good refactoring and optimizing, not to mention all the features that I have yet to implement (it’s currently only at variables, basic control flow, functions, variable references, and simple data structures but that’s more than enough to do some things <3) Laye is the spritual successor to Score[Flat] and Hikari, two other languages I never finished. Laye is essentially the same thing as Hikari, tho, so I guess it’s less a successor and more just a name change…

So that’s how I’m planning to do things, hopefully the theme is good xD

I’m In! – Part 2

I’ve begun setting up my project (can be found here, because sources) and I’m adding simple startup code (driver and a main game class) so that it’s an easy start when Ludum begins. All changes will be synced with Git on my GitHub so it’s all valid base code, don’t worry <3

First Update – Still No Name

imgif

 

We’ve got our five characters figured out, woo! Might get them cleaned up a bit soon, but for right now we’re good.

Comments

Shades
18. Apr 2015 · 16:48 UTC
Snazzy!