Play the alpha! pastebin run FgAggvy1 <directory> <alpha>
If there are any OS's looking to include my game, your allowed to, given you inform me first, and receive my permission.
So, I've been working on MiniatureCraft, and I reformed it. Again.
The first time I did so was to make the game full of features. This time around, however, efficiency and performance are much more of a top priority.
And so, I give you MiniatureCraft: 2.x Alpha Edition. It's Github Branch can be found here.
I put the "2.x" as I'm not sure what version it shall be, as there are so many changes to the game. Making it something like "MiniatureCraft 3.0" seems rather silly to me.
So, here's a list of changes as of now:
Every API (Except for Chat) has been completely redone, optimized, and just cleaned up in general. APIs also have changed to return a table of functions.
APIs no longer have their functions injected into _G.
Error logging has been made nicer and easier for use by APIs and the game. You can find errors in the error folder.
require(), unload(), and reportError() (See above) are the only functions put into _G. These functions are used to load or unload APIs, or report errors.
The Menu and File API have been removed.
The following APIs have been added to the game: Noise, Client, Interface, Server, Keyboard, Keybindings, and Timer.
The Buffer API now supports shaders.
Commands can now be added to the game.
World generation has been completely overhauled. The world is now procedural and infinite. Though, players can only travel the overworld as of now.
The Player and Entity APIs now are more object oriented. You call the function Player.player(name) or Entity.entity(id) to get the player or entity object, and modify it directly (i.e. player.x = 1, player.color = colors.blue, etc)
The Client API is used for connecting to servers, and getting general info about the game state, such as being paused or not.
Mods now are required to return a table. Check the latest page for what parameters they can have.
The Noise API is used for generating the chunks.
The Server API is used for allowing people to play on your server.
The Interface API is used for drawing and updating interfaces and GUIs.
The Keyboard API is used for getting the currently held down keys.
The Keybindings API is used for setting and getting keybinds.
The Timer API is used for creating timers which don't require events to be used.
Many Assets have been tweaked, modified, etc.
Tiles and blocks can now have a tick() function which is called 20 times a second.
Here are the controls as of now:
WASD keys are used to move the player.
Left Shift is used to lock the player's facing direction.
R will unload all chunks from memory, without saving them. This will be automatic later.
E will exit the game.
Left and Right Click will place or break a block or tile.
The scroll wheel changes the asset you currently have selected.
I ask that you guys try out this new version, and give me your input on it. Thanks.
Here's the old post for version 1.98b-Beta:
Spoiler
So! I'm sure alot of you remember this from a while back. Recently, I had been remaking the entire game from scratch, and it seems to be working out fine so far.
Whats New:
* Much more sensible world generation code, cleaned up and made more efficient.
* Less memory consuming tables, and a complete overhaul of how maps work.
* Worlds can actually be any sized rectangle, as compared to the weird way of before.
* Blocks, tiles, items, or basically just about any asset can have (theoretically) an infinite amount of animations, and each individual block / tile in the world holds data for which animation its on, so not all of the same blocks / tiles change their animation to the same exact thing. (Though, they all change their animation at the same time, half a sec)
* Animations can also have different times assigned to them. One animation can happen once a second, up to twenty times a second, or anything in between.
* New generation tools, such as "brushes".
* Complete overhaul of the Player API. It's designed to be able to hold data for multiple players now, instead of just one. Useful so that when I make a server script, I can reuse the APIs available instead of making separate ones.
* Assets are no longer serialized in separate files, there is one file called "Assets" that adds a function which returns the assets. Why? Saves a ton of space compared to serializing it.
* Adding mods in is much easier, one universal function to do it.
* Once you reach the borders of the map, the offset will stop changing, so you wont see that weird drawing bug on the edges.
* Assets are no longer limited to IDs 1 - 1000. They are now limited to 1 - Infinity.
* The game now automatically checks for the directory it's being ran from. No more hassles when changing the location of the game.
* The game auto-updates whenever a new version is available.
* Faster buffer in general, at least 25 - 50% faster.
* Sandboxing of lua scripts and mods.
* Worlds save and load in binary, allowing for smaller file sizes.
* Added the ability to chat, and run commands from here as well.
* Better pocket computer support.
* Better and faster game engine.
* A lighting system.
* A time system.
* NoColor Support.
* More overall stability.
* Working entities.
* Better in-game interfaces.
* Plenty of new functions for modders.
* Blocks such as chests, which keep their content.
* Auto-save feature.
* And more! (Lots more of internal stuffs.)
Key Features:
* Loading / Saving your worlds.
* Survival / Creative Modes.
* A Time System.
* Crafting / Smelting.
* A Variety of Blocks and Items.
* Options menu for tweaking your character.
* Inventory Management.
* (Finite) Randomly generated worlds, which can be made from 64x64 to 256x256 when creating your world.
* Pick up and play controls.
* Modding.
* In-game animations.
* Entities.
* Auto-world saving.
* Trees grow, water flows, etc.
* Rather fast buffer.
Controls: Controls in game: W or Arrow Key Up: Up A or Arrow Key Left: Left S or Arrow Key Down: Down D or Arrow Key Right: Right
E: Interacts with the block your facing. If there isn't a block, then it opens your inventory. Shift: Keeps character from switching direction when moving. Space: Uses the currently equipped item on the block / tile directly in front of you. Backspace: Enters the Pause menu. T: Enters the chat. Similarly, "/"enters the chat as well, used for doing commands quicker.
F1: Hides the GUI / Exits the chat. F3: Shows / Hides Debug info.
Controls in menus: (Default, only changeable via editing code) W or Arrow Key Up: Moves up. A or Arrow Key Left: Moves left. S or Arrow Key Down: Moves down. D or Arrow Key Right: Moves right. E: Usually exits the menu.
Enter: Chooses the currently selected item.
Gray boxes are for text input. Click them to enter text as you normally would.
Considered / Planned / Upcoming Features:
* Ability to tie Lua scripts to just about any kind of asset.
* Revamped Menu API.
* Actual multiplayer.
* Better Entities.
* New assets as more of the game is put together.
* Better Lighting system.
* Ability to change key bindings. * Redstone: Should be possible, and easy enough to do. Gonna look into this. * The "Underworld": A nether like dimension.
* "Stream Mode": Says below.
* Fire: Because who doesn't like fire.
* TNT: Because who doesn't like explosions.
* Mob Spawners: Because the caves need some kind of meanies.
* Dropped items as an entity.
* The ability to make mobs and blocks larger than 1 pixels, because reasons.
* Particles: The ability to define and add particles as an asset, because that might be cool.
* Game Launcher: Ideally, from here, you could look at the latest MiniatureCraft news, download mods, and look at errors the game throws back.
* Fishing: Everyone likes fish.
* Held Torches: Walk around with more light.
* Your suggestion here, if you post it, and I like it.
To-do (To next release):
* Make the chat commands have more restrictions!
* Make it so that you can add new dimensions instead of just modifying current ones
* Finish the lighting system so it works with blocks.
Just to get an idea of some of the changes compared to the old MiniatureCraft, here's a sample of a 128x128 map generated by the current code: (Levels are like layers, the higher number being the higher "layer.")
Spoiler
This is "The Outerworld," or level 1. Here, clouds and cacti spawn naturally. The black tiles are "Infinite Fall Tiles," and touching them is like falling off the "Clouds." They do similar damage to lava.
Spoiler
This is "The Overworld," or level 0. Here, stone, coal, water, sand, flora, trees, and cacti all naturally spawn. There are also "Staircases" leading up and down each level.
Spoiler
This is "The Upper Caves,", or level -1. Here, dirt, stone, iron, and coal spawn naturally.
Spoiler
This is "The Midpoint,", or level -2. Here, stone, coal, and gold spawn naturally.
Spoiler
This is "The Lower Caves," or level -3. Here, stone, coal, gems, bedrock, and lakes of lava spawn naturally.
Spoiler
Final Notes on World Generation: * As you go deeper into the levels, caves are less likely to spawn. * Certain ores can only be found on their respective levels. * It's just about complete. I may add a "Underworld" in the future with a nether-like feel, but for now, the necessary levels have been made.
So again, let me know what you guys think, what you do want to see, and what you don't want to see. Thanks!
Edited by Detective_Smith, 01 November 2015 - 10:41 PM.
Hey. It's been a bit since I made my last post, so I'll just do a quick update on the game.
I've added A LOT more stuff, but again, it's mostly internal code rewrites. It should be alot more efficient than the old game, less clunky, and easier to understand. Though I won't go into detail about all that was added simply because it was internal, here's a sneak peak at whats done so far.
Hey. I finally made it so that there is a function to update the world, similar to what chunk updates do in minecraft.
Now, water and lava are able to "flow" into holes tiles. Grass is also able to (slowly) creep onto dirt blocks.
I'll be adding the ability for trees and crops to grow, too.
Right now, the method of checking what things should flow or grow right now is hardcoded. In the future, I'll make it so that any asset with the type "liquid", "sapling", or "seed" will be able to grow or flow anywhere, regardless of it being in a mod or not. This should be easy enough to do, and you expect this to be done by the time the game is released.
I would make a screenie or a gif, but I'm too lazy
P.S. It's okay guys, you can post here too. Besides, how else will I know if anyone is actually gonna play this or not? Though, I expected other posts by now.
Edited by Detective_Smith, 04 January 2015 - 07:31 PM.
Modding is probably gonna be one of the funnest things you can do with the game.
At the game's completion, you'll be able to do:
* Add your own assets (Ofc)
* Tie scripts to block and items
* Create new and customized entities with their own behavior
* Create plugins for the server script
* Change / add in your own world generation code
* And other stuff I can't think of at the moment
EDIT: Basically, just about anything I do in the game is do-able by mods.
Right now, I'm tackling a bug with the player not centering in the screen correctly, as well as the player being unable to place blocks / tiles.
Should be fixed soon though, and then I can get back to completing the interfaces.
Edited by Detective_Smith, 04 January 2015 - 09:41 PM.
Automatic updates? yes. Depending on internet connection? no. I think that having the program download all files it need on each run is a bad thing. It's slow, it's eating internet and if you restart it a lot you will only get frustrated by the speed of your internet connection. Also, that would mean you wouldn't be able to play the game offline.
MKlegoman357, on 07 January 2015 - 10:38 PM, said:
Automatic updates? yes. Depending on internet connection? no. I think that having the program download all files it need on each run is a bad thing. It's slow, it's eating internet and if you restart it a lot you will only get frustrated by the speed of your internet connection. Also, that would mean you wouldn't be able to play the game offline.
Actually, the game isn't THAT big that it will take 10 minutes each run. It'll be around 5 - 10 seconds, as compared to the 1 second needed if the files were actually there. In fact, as of now, the game is only ~100 KB.
Also, this is just an option, meaning it won't be the only way to play the game. I just want input on if it's worth adding.
I'll clarify anything that's asked, though.
Detective_Smith, on 07 January 2015 - 10:45 PM, said:
Actually, the game isn't THAT big that it will take 10 minutes each run. It'll be around 5 - 10 seconds, as compared to the 1 second needed if the files were actually there. In fact, as of now, the game is only ~100 KB.
Also, this is just an option, meaning it won't be the only way to play the game. I just want input on if it's worth adding.
I'll clarify anything that's asked, though.
Oh, I thought you wanted to make this the only way to play the game. Well, personally I think that downloading files on each run is a bad program design, if it is going to be just an option, then ok, do it, as long as it will be able to boot without internet connection, or downloading any files.
EDIT: also, it's not just about how big the game is, it's actually more about how many files there are and what internet connection you have.
Edited by MKlegoman357, 07 January 2015 - 10:51 PM.
Alright then. Again though, any last minute ideas / suggestions / criticism? Still taking any if any of you have creativity to share.
If not, I guess you guys can sit on back for the release. Hopefully, this game will be as fun (and as popular) as I aim it to be.
Edited by Detective_Smith, 07 January 2015 - 11:08 PM.
Y'know, the streaming idea kinda meshes in with another plan I've been thinking about - simple file compression applied to pastes. Main thing that's been putting me off is RAM constraints, but it'd make it quite simple to turn the entire contents of a drive into one single download.
Another thing I'd been considering was making a "RAID" out of floppy disks, though someone beat me to it. Not sure if they got their project working, though.
On the whole, though, I agree that downloading the script every time you run it is a bad idea, no matter how small it is. Server's gotta open a connection to Pastebin and so on. Having the program look for a /update parameter on launch wouldn't hurt, though.
If you want this script to be seen, I'd suggest making a short YouTube video showing it in action and putting that up on eg the FTB GD forum. There's a lot more traffic in those parts. Likewise, as many people are tied to certain ComputerCraft versions (as the only reason they have it installed is because they're using certain modpacks), ensuring your code runs on CC 1.5 (MC 1.4.7) all the way through to 1.65 (MC 1.7.10) would help as well.
Location[string "FindMe"]:23143: bad argument #1 to 'returnPos' (vector expected, got nil)
Posted 08 January 2015 - 07:34 PM
You could have a file download peer to peer system, sort of like Pando Media Booster. Imagine this. Someone in your vicinity running the program with a wireless/wired modem connected to you. You broadcast an "update check". They receive it then broadcast their version and you broadcast your version. If either one of you has a higher version number they will begin to transfer data over.
Requiem of Silence, on 08 January 2015 - 07:34 PM, said:
You could have a file download peer to peer system, sort of like Pando Media Booster. Imagine this. Someone in your vicinity running the program with a wireless/wired modem connected to you. You broadcast an "update check". They receive it then broadcast their version and you broadcast your version. If either one of you has a higher version number they will begin to transfer data over.
Alert: turn on your sarcasm detector
So an easy way to let hackers inject a trojan into your computer? Sure, why not! I'd love to hack into some computers and steal their personal info
I think I managed to have blocks have scripts now.
Any tile/block/item or alike that has a script attached to it will be sandboxed for better client protection.
Trees grow! It's fun to watch. (Not really, you'll be waiting for a 1/1000 chance every half second, 1/500 chance each second)
Detective_Smith, on 10 January 2015 - 04:47 AM, said:
I think I managed to have blocks have scripts now.
Any tile/block/item or alike that has a script attached to it will be sandboxed for better client protection.
"Sandboxed" how?
Do they get access to term and events and so on?
That is to say, can/will there be computer blocks?
When I say sandboxed, it will have access to some APIs.
For example, the APIs fs or io won't be accessible. However, file writing and reading will be done via the File API.
To get access to events and alike, you would need to make yourself an interface. As for term, any drawing to the screen should only be done in scripts for an overlay.
And lastly, it is (theoretically) possible to implement the whole computerseption thing. I was planning on doing it myself, actually. I'm just not sure if I should have them run on lua, or a BASIC interpreter.
For anyone one who is interested, there is a (As of now, not fully finished) API documentation on my github page. Feel free to check it out every now and then. All the functions there will be available to modders.
Sorry if progress has been rather slow lately. On regular school days, I get a freaking ton of homework to do, not leaving me much free time. You can expect to see lots of progress done over the weekends.
Requiem of Silence, on 12 January 2015 - 07:24 PM, said:
Could you port this to CClights2?
I've never used CCLights before, so I wouldn't know how at the moment. Besides, I'd rather finish the game before making a port of it.