@Phrancis libGDX is not intended to contain much logic, only a client interface that connects to the server. We're using quite a lot of Java 8 features in the logic/core/server code already, so game logic and libGDX is already a no-no.
As for modding a client-side interface, libGDX can read files. If we find a nice file format that can be used for client-side interface modding, then it could be worth investigating. Until then, client-side modding is entirely Java-based.
@Phrancis I think we have found a programming language that you know much better than me!
You should definitely write something in ChucK and get it reviewed ;)
For each second that is divisible by three, you make a BOING, for each second that is divisible by five, you make a BLEEP, if it's divisible by both you make a BOINGBLEEP
@Phrancis About client-side modding, I think we should do like I often do in coding. First make some different mods using Java-based code, and then find the commonalities between them and start refactoring, and see how things can be made more moddable.
It is probably possible to make it very moddable. Just need to figure out how.
I'm thinking of a FizzBuzz but if/when I do, it's not going to be a printline thing (too easy) so if I can make it sonic/musical and interesting I might end up creating the chuck tag.
I wouldn't be surprised if I could come up with an interesting way to integrate it into Cardshifter, at some point
@Phrancis The server is capable of running Java 8 and contains the logic, the client is only able to run Java 6 (possibly restricted due to LibGDX) and doesn't contain logic
Our mod is the logic, the Nashorn ScriptEngine only runs on Java 8, so that's how we can still use it on the server
The only "logic" the client part of the mod contains is how to draw stuff and images, most likely, though that's still to be considered, for now in Java 6 (LibGDX-compliant)
@SimonAndréForsberg I have heard about apple rejecting apps that have a letterbox of any kind. Do you know of a way to detect device information with libGDX? I've been using StretchViewport but it doesn't always look good
letterbox like if you use FitViewport and the device is not the same size as your screen width and height, there is a black border
hey @Phrancis when you are around, I downloaded that chuck and I did code up a version of fizz buzz.. I would post it but I figure you should come up with your own version too. Also, it sounds horrible :)
// sine to dac
SinOsc s => dac;
// let's turn down gain, for this can be loud and annoying
.15 => s.gain;
// infinite time loop
0.0 => float t;
while( true )
{
// modulate
30 + ( Math.sin(t) + 1.0 ) * 10000.0 => s.sfreq;
t + .004 => t;
// advance time
1::ms => now;
}
@Phrancis I finally find a way somewhere (can't find the tutorial anymore) to only have 1 template and include the content. So we would have the same number of html files, but no more template duplication. Since now each files would only contain the content.
In fact, we would have one single template file: like template.html that would contain the main template ( top bar, footer, side bar). In that file, there would be a content div where we will insert the content depending on a variable sent by the controller.
@Marc-Andre Ohhh, so it would be more like the "content" pages would be injected into the template, rather than the various templates being injected into the content pages?
@Marc-Andre That does make more sense! Wouldn't it just be a matter mostly of rewriting the references in the controller? If I can help with anything I'd be more than happy to
@bazola Available as rubberduck on games for a moment? ;)
I'm wondering about items in RPGs/MMORPGs
The game I play now (FFXIV) has a few items available (item lv 100, 110, etc.) but once you hit the max item lv. 135 then every weapon is exactly the same, there's no way to customize it
I also played another game earlier (Granado Espada) where there were also different item levels, but you needed to enhance, enchant and socket your weapon, it was always unique... The monsters had a certain racial status (daemon, undead, etc.) and a weapon would max be 40% atk 100% daemon as enchantment, but often you would get 30/90 and be happy with it
Also FFXIV only has interesting, 4-, 8- or 24-man content, so your damage output matters little in the end
whereas in the other game there was a lot of solo stuff and competitive world bosses, where you really needed every point of damage
I'm thinking that the approach of Granado Espada is better and want to add that to my game, what are your opinions? I think one reason I always wanted to make a new weapon in GE is because your current one was never perfect, it actually mattered for solo content how fast you could clear it and was useful on world bosses
To the same point I'm wondering about how many items you want (traditional weapon, head, chest, legs, feet) or something simple as weapon + armor
In the former upgrading a piece is rather meaningless, whereas in the latter it would improve you a lot
@skiwi the game i played similar to that was Diablo 2. You were always chasing after a more perfect version of the item. I definitely like games with random item generators
But with D3 1.0 the random generator was not very good at making relevant item. So you need to be sure that you're random items generators do make viable items.
@bazola Diablo 2/3 and Torchlight 1/2 also work for that, yes
@Marc-Andre In the case of Granado Espada you had an item (say a weapon) and enchantment chips for that weapon level, and normally you'd farm/buy like 100 and then try to get something useful
@skiwi buying/farming is not that important in regards to what I wanted to point. If the dropped have some non sense like a sword for strength character only with intelligence, then it will greatly reduce the fun of farming!
D3 now offer to re-roll one of the stats of your items (locking the item), so if your item is perfect except for one stat you can use this to get something even better
@bazola Ah... good one, I honestly haven't thought about that yet
@bazola You always control a team of 3 characters (some exception where you could only use 1 character), in a RTS-like way (click-to-move) and had those 5 skills associated with a certain stance
what I really miss from gaming these days is that in a game like Diablo 2, you could get stats on an item that added to the level of one of your skills, and then by doing so you could max out that skill to the extreme, and even add abilities to it such as summoning more skeletons or shooting more lightning bolts
@skiwi probably like 2006 or 2008? it was back when I was done with WoW and trying out every new MMO
@skiwi games these days are all about just increasing your base stats, or maybe some bonus stats, but never about the stats changing the way that you play very much
@skiwi i think these games are pay to win because thats the only way that anyone would actually pay money for them (in order to be the toughest character vs a bunch of free to play people that are worse)
Hence why I only play mainly sub-based MMORPG's nowadays :p
For the game I intend to start with I've been thinking about a payment model, I'm still thinking to start it as free to play with donation possibility, don't really have interesting monetization plans without it harming the actual development
I was into MMOs in the past, but I've quit them because they are such a massive time sink... I prefer to play console games like racing and such that you can just pick up and play for a bit then go do something else
@bazola True, I'm thinking about some cloud solution though, but for that I do need some guaranteed revenue indeed
@Phrancis That actually was the case with Granado Espada, I'd often find a good location to put my characters on and made them auto-attack (just a function of the game, not a bot) and there also was a pet that automatically looted items for you
Only at some point for a period of a few months it was actually more profitable to be afk than to be actually active in the game doing stuff, "Oops"
Seems like I have enough reasons to actually make something... one day
Not as fast as @bazola can ;)
There's also HearthMonitor which absolutely must get a release, eventually
I still intend to be able to load effects via xml/json/java/javascript (unless @SimonAndréForsberg has finished that, as he was also working somewhat on it?), I absolutely need it for HearthMonitor eventually
I'm trying to maintain a balance between programming things for fun and them becoming some sort of chores
Unfortunately I seem to get fun from making really weird things
@skiwi feel free to work on loading effects from some sort of file, or on one of the open github issues about JavaFX, or make a brand new mod for Cardshifter, or some other github issue...
@skiwi i think that its all about trade-offs. if I think that whatever I am doing is too hard to understand, then i will definitely make it a point to refactor it
@bazola LibGDX is a bit more tricky to test than regular Java programs because if you want to do anything that has to do with LibGDX, you almost certainly need a LibGDX context, which I was able to create in my Connecting-Blocks tests
This is based on libGDX 1.5.3:
A solution to this is to use a NinePatch as the background image for your Table.
NinePatch patch = new NinePatch(new Texture(Gdx.files.internal("background.png")),
3, 3, 3, 3);
NinePatchDrawable background = new NinePatchDrawable(patch);
Table table = new Ta...
it seemed like it was finding the necessary imports but then I moved stuff around and it can't find them again
i got it this far:
[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks:
[sts] test
[sts] -----------------------------------------------------
Configuration on demand is an incubating feature.
:core:compileJava UP-TO-DATE
:core:processResources UP-TO-DATE
:core:classes UP-TO-DATE
:core:compileTestJavawarning: [options] bootstrap class path not set in conjunction with -source 1.6
/Users/baz/Documents/walkaboutMMO/core/Test/TestTradeBulding.java:10: error: class TestTradeBuilding is public, should be declared in a file named TestTradeBuilding.java
yeah that pretty much fixed it, still needed to import junit again though
seems to be working now and reporting failed tests:
1 test completed, 1 failed
:core:test FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':core:test'.
> There were failing tests. See the report at: file:///Users/baz/Documents/walkaboutMMO/core/build/reports/tests/index.html
:core:compileTestJavawarning: [options] bootstrap class path not set in conjunction with -source 1.6
/Users/baz/Documents/walkaboutMMO/core/test/TestTradeBuilding.java:21: error: incomparable types: Class<CAP#1> and Class<Building>
assertTrue(tradeBuilding.getClass() != Building.class);
^
where CAP#1 is a fresh type-variable:
CAP#1 extends TradeBuilding from capture of ? extends TradeBuilding
it lets me do tradeBuilding.getClass() == TradeBuilding.class
Checking with == resp != won't work for objects anyway, not sure about class literals though
I didn't know you cannot do == / != check if objects are both of different type
The problem up there is that tradeBuilding.getClass() == Class<? extends Building>, whereas Building.class == Class<Building> and apparently that's not allowed
:core:compileTestJavawarning: [options] bootstrap class path not set in conjunction with -source 1.6
/Users/baz/Documents/walkaboutMMO/core/test/TestTradeBuilding.java:20: error: incompatible types: Class<TradeBuilding> cannot be converted to String
assertTrue(TradeBuilding.class, tradeBuilding.getClass());
^
/Users/baz/Documents/walkaboutMMO/core/test/TestTradeBuilding.java:21: error: incompatible types: Class<Building> cannot be converted to String
assertFalse(Building.class, tradeBuilding.getClass());
@bazola The assertTrue(tradeBuilding != null) is not useful, as calling tradeBuilding.getClass() would throw the NPE, also you'd normally use assertNotNull