Games::Construder

Construder is a 3D game written in Perl and C, featuring a dynamic infinite world of cubes to explore and change. In an artificial infinite structure the player has to gather resources for construction purposes and his basic survival. It's 3D engine and basic game play is inspired by Minecraft and Infiniminer.

The goal is to get 10,000,000 score points and get the "Construder" rank. There are multiple ways to gain score points: building blocks in the world (for example for your home base), constructing items (such as teleporters for easier travel, message beacons for navigation or even programmable robots - which you can program to help you building things or gathering resources). Another way to earn many score points is to finish construction assignments.

Dangers the player might run into are starvation, as all his actions require biological energy and the randomly appearing robot drones, which - on a task to cleanup the world - teleport the player far away.

<<<Windows Download>>>
Click on the link, download the zip file, extract it, start "server" and then "client" and/or read the quickstart!

Table Of Contents

News

  • 2011-09-15

    Just for the interested people: I'm currently very occupied with my studies and final exams are ahead. So currently I can't devote much time to programming projects. If you want to hack your self on Construder just do it! If you have questions, just ask, I will be around on IRC and usually react to highlights. Alternatively you can reach me via mail!

  • 2011-08-04

    Hey folks, I'm back from vacation now. My next tasks are to make binary linux packages. But other projects also keep me busy now, so expect a slight increase in the intervals between the news.

  • 2011-07-21

    Not much news, a minor patch was added to the code. I'm going on vacation next week, so I might not be very reactive on IRC or E-Mail. I'll be back around the end of next week. Have fun! :-)

  • 2011-07-19

    Mithaldu made a new binary package for windows yesterday evening. Make sure to check it out! The improvements and bugfixes mentioned in the last news entries should be included.

  • Screenshot:
    construder_36.png
    2011-07-18

    The weekend was more or less lazy, got to do some preparations for my vacation next week. But still, there were some memory leaks to be cleaned up in the server and client which showed to be quite a strain on the system after a few hours of play. Linux people should update to the recent version from the git repository and the rest should wait for a new package and/or CPAN release.

    Today, after fixing the remaining memory leakage, I added "Jumper" devices, that teleport the player once into a configurable direction. There are multiple types to choose from. See the screenshot for an example of the "Jumper A+".

    Also released version 0.95 to CPAN today. Have fun! Also watch the old introduction videos I linked in today, see the "Videos" section below!

  • 2011-07-16

    Updated the IRC chat contact. You can find me now on irc.perl.org in the channel #construder (nickname elmex). And also added a small installation manual for Linux users out there. See the "GNU/Linux or CPAN Installation" section below.

  • Screenshot:
    construder_34.png
    2011-07-15

    There has been quite some development, I recommend looking at the commit logs. The new world structure has been revisited and polished up. I also uploaded a video which shows all the kinds of sector types you will find out there, check it out: Construder - Sector Structures of the World.

  • Screenshot:
    construder_33.png
    2011-07-14

    Redesigned the website a bit. So the windows people find the download a bit easier. Users can be complicated sometimes :)

    In Construder I finally implemented a proper logging mechanism, which means you only see the really important messages now. There is still some debugging output here and there, which I will remove when I notice it. The maximum ambient light was raised a bit, in case you have some really dark screen. The server player queue has been capped, so that the server has a chance to keep up with updating the client.

    I also redesigned the world today: The World is now a gigantic sphere hull which is 100 sectors thick. There is a center at sector 0,0,0 from which X, Y and Z axises are expanding 131 sectors in each direction. The center has a nice golden pyramid with a diamond core at the moment. The player starts at the top of the sphere at Sector 1,130,1. With this the player has some free space to fill.

    Before I forget: Construder now also has a Freshmeat Project Page!

  • 2011-07-13

    Ok, I moved back to ExtUtils::MakeMaker: The problem was the outdated META.json generation (non existing one maybe fits more). And with File::ShareDir::Install any reason for me for Module::Install just vanished into thin air. Now I can also specify the C build flags much more straight forward.

    Added a bio energy intake feedback, where the bio energy material is displayed right next to the bio energy. I hope it helps a bit in understand how eating works.

  • Screenshot:
    construder_32.png
    2011-07-12

    Today I researched App::Staticperl and how I might be able to use it to build linux binaries from Games::Construder. I had quite a lot of success packaging my other utilities, like my schedule/organizer/note-manager I wrote with AnyEvent::HTTPD. You just put in a list of modules you depend on, give it your main application script, and BANG, you have an executable that depends on not much more than the libc of your system. I hope with that tool I can soon package Construder for Debian, Ubuntu and hopefully other Linux systems too.

    A good friend today suggested I should try out dark fog, which I did. You can see the results in the recently uploaded YouTube video. In the screenshot you see the dark fog too, and the configuration dialog I added.

    Oh, and RogerDuran was so kind to make a package for archlinux. Scroll down to the Downloads / Packages section! Big thanks!

  • 2011-07-11

    Today I fixed a bug with resizing the client on Windows. Also added more documentation to the PCB programming language. If you have questions about it, best is to ask me :)

    Oh, and for you github-guys out there, I made a github repository for you: https://github.com/elmex/Construder, I will regularily push my changes there. But be aware that my main repository will be at git.ta-sa.org and I disabled the Issue Tracker because I have my own ways of keeping track of bugs.

  • 2011-07-10

    The weekend was not much action. Some windows related debugging and bug hunting. Thank go to the folks on irc.perl.org #sdl for the debugging sessions! Mithaldu even made a binary package for windows! See also the Download / Packages section below!

  • Screenshot:
    construder_31.png
    2011-07-08

    Wow, received many comments to the one youtube video that was linked in the blog. Anyways, today I fixed quite some bugs that prevented the game to run on windows. It should finally work for some people! I also made a new intro video, which you should watch on youtube: Construder - Version 0.9 - Introduction to the HUD and basic gameplay.

    Oh, and before I forget, someone linked to the YAPGH Blog Construder entry from ycombinator. Many greetings to the folk there! :-)

    PS: Added a rss feed for this page. So you can keep up to date with your feed reader!

    PPS: Found some other links to this page: Games::Construder - Sandbox-Game in Perl/C on aptgetupdateDE. Looks like he is interested in making it work on MacOSX. Would be awesome if someone could do that work, as I don't possess a running MacOSX. There seems to be more discussion in german going on at www.perl-community.de: http://www.perl-community.de/bat/poard/thread/16507. Greetings guys!

  • Screenshot:
    construder_30.png
    2011-07-07

    Today I decided on the license Construder should have and it boilt down to the AGPL. Aside from that I finally implemented that you can safely shutdown the server now.

    Thanks a lot also to garu who wrote a great blog post about me and Construder on the SDL Perl Blog "Yet Another Perl Game Hacker (YAPGH)".

    Oh, and I finally took the time and upload the videos to YouTube. See elmexable's YouTube Channel.

    Todays screenshot just shows more experiments with the PCBs I recently implemented.

  • Screenshot:
    construder_29.png
    2011-07-06

    Today I relaxed a bit, but I still couldn't let my fingers off the code and implemented an idea I had sice the early stages of Construder: programmable robots that you can program to help you with constructing things. See the screenshot for this, on the left you can see the "Programmer", which has the program opened that was recently executed by the robot you can see on the right at the "P".

    Those robots can do even more than the player: It can quickly build with constant speed, and vaporize it's way through any block easily. However, their energy is limited and will eventually run out.

  • Screenshot:
    construder_28.png
    2011-07-05

    Most of todays time was devoted to documenting the source code a bit. But aside from that I finally implemented the trophies and fixed the assignment dialogs. The ambient light setting was added to the client and some small bugs were fixed too.

    As you might noticed I added a "Time" entry to the status window (see the screenshot), it displays the time you spent playing. The time is recorded when you get a new trophy and the trophy will display the score milestone along with the play time. I hope this gives the score a bit more purpose and sense. In the screenshot you can also see how the trophies look like. When you query the trophy for information further information about it is displayed.

    I finally begin to see the light at the end of the tunnel and feel that the game is nearing completion (for some values of "completion").

  • Screenshot:
    construder_27.png
    2011-07-04

    GUI theme has been completed now. I also fixed the last bugs in the collision detection. And cheating has been officially made available for player now. However, it will be marked in your score display if you use it.

    CPAN release is my next target. Before that is possible I want to write a few lines into every source code file to explain it's purpose.

  • Screenshot:
    construder_26.png
    2011-07-03

    Okay, I finally figured it out! I was optimizing the engine all over the place. Chunks are now uploaded to the graphics card depending on the time left after rendering a frame. Also neighbour chunks are not updated needlessly anymore. But all those small optimizations couldn't fix the glitches and hangs in the client. The symptom was as if multiple frames were just missing and moving the mouse became really hard.

    So the problem couldn't be that rendering frames took too long, but the time between the frames was filled with too much work. After I added some profiling code to the GUI it became clear, the problem was the naively implemented window drawing. After I optimized that everything became WAY more playable again.

    As a sideeffect of all the work on the engine the last days I was able to cut down the network bandwidth to 30-40kb/sec peak. This should be well playable over LAN, and probably even over fast internet connections. The game should be in a well playable state now again.

    The screenshot shows the 16 different colors you can use to tint built blocks.

  • Screenshot:
    construder_25.png
    2011-07-01

    Just a short notice. I hope at least some people read this at all :-) I'm working on consolidating the GUI and making a nicer friendlier theme on it. On the right you see the new theme and the added documentation. While I was testing I noticed that the current server is too naive with regard to updating light and chunks. So I'm working on optimizing that. In my local branch I'm making good progress. I also managed to cut down the traffic bursts on the wire, which means that Internet play will not be as crippled. However, the game is mostly thought as single player or multiplayer over lan at the moment. Internet multiplayer requires much more optimization, which I might not have time to implement anytime soon. Stay tuned...

  • Screenshot:
    construder_24.png
    2011-06-30

    The memory issue is fixed now. In exchange the server now eats a bit more CPU when generating sectors, so don't be surprised if it lags a bit when you enter a new sector. However, in exchange the complete structure of chunk updates to the client was rewritten and bandwidth can be optimized in future a bit easier.

    While I was at it I fixed some gameplay issues: Nuclearcell pattern was not buildable. Position of the message beacon list was overlapping with the FPS counter. And the pattern storage couldn't be displayed in the inventory. I also changed the fog color to a more friendly blue. It does not look as depressing as the dark grey. If someone likes to, he could make a client menu to configure the color ;-)

    Hi reddit! There seems to be some chatter about Construder on reddit: Construder, a 3d Game written in Perl Let me send my greetings this way, as I don't have a reddit account :-)

    I also worked a bit on this page. Please notice the Bugs and Forks and Links section!

  • 2011-06-29

    All shared files are now properly installed via Module::Install::Share and found via File::ShareDir. The game now properly install itself as Perl module with scripts.

    Also uploaded some new screenshots you see on the right and updated the required dependencies to install/build the game below on this page.

    Note: There is a known issue with the server eating lots of RAM. This will be the next thing that will be fixed.

    Hunting the last memory leaks in the server. It's not an accidental leak, I just was to lazy to cleanup. And after the recent lighting changes when generating sectors the memory issue became very urgent. My changes made the server now stay within 100mb, where before it grew far beyong 200mb up to 2gb. Shame on me :-)

    Note: These fixes are still only in a branch here. I first want to test them and further tune them a bit.

  • 2011-06-28

    Please note: The git repository can now be found at:

          # git clone http://git.ta-sa.org/Games-Construder.git
       
    Please change your git repository config to adapt to that or re-clone it.

  • 2011-06-28

    If you had problems on 32 bit architectures with yesterdays repository you should fetch the newest version. The algorithms for random map generation have been fixed and also a segmentation fault was fixed.

  • 2011-06-27

    The engine is finished and 90% of the game logic has been implemented. Balance needs to be reviewed sometime in the future. Main issues are currently that there is no built distribution for easy installation and startup.

    Multiplayer capability is currently not internet ready, as there is still a huge bandwidth burst when new chunks are sent to the client.

Screenshots

Unsorted collection of screenshots. For more comprehensive overview see the videos below.

Videos

See elmexable's YouTube Channel.

But here are some old introduction videos I recorded when the game was still much younger. But most things still apply more or less:

Download / Packages

If you are looking for the source code, skip further down on this page to the Git Repository section!

Mithaldu's Windows Packages

Here I link to the Windows package that is ready for download, unpack and running the server and client out of the box. Mithaldu is a guy from the irc.perl.org #sdl IRC channel, who provides some regularily updated packages for the code from my git repository. If you have windows specific bug reports he might be able to help or redirect them to me.

<<<Windows Download>>>
Click on the link, download the zip file, extract it, start "server" and then "client" and/or read the quickstart!

A list of old versions can also be found here:

Mithaldu Windows Package Download Here

For an introduction to the gameplay have a look at Mithaldu's quickstart and the YouTube video(s) above!

RogerDuran's archlinux

RogerDuran was so kind to make a package for archlinux.

RogerDuran's archlinux package

GNU/Linux or CPAN Installation

Here are some instructions that were put together by "scar" from the IRC channel for all the Linux users out there:

   $ sudo apt-get install build-essential freeglut3-dev libxmu-dev libxi-dev
   $ sudo cpan CPAN YAML Capture::Tiny OpenGL Games::Construder

   [many interactive prompts]

   answer 'yes' to follow prerequisites and prepend them to the queue

   answer 'yes' to PACKAGE just needed temporarily during building
   or testing. Do you want to install it permanently?

   when it gets to installing SDL, you'll be asked
   "You have the following options:"
   chose [2] Source code build: SDL-1.2.14 & co. + all prereq. libraries

   continue answering 'yes' to the interactive prompts

   you'll be presented with an OpenGL test. when satisfied OpenGL
   is working properly, push q to continue

   continue answering 'yes' to the remaining interactive prompts

The cpan utility comes usually with your Perl distribution. On Debian GNU/Linux that would be apt-get install perl, but usually most systems have that already installed. If you run into any problems with that cpan installation utility, check that you have a gcc installed and that you might need libgl-dev, libsdl-dev, libsdl-image1.2-dev, libsdl-ttf2.0-dev, libfreetype6-dev.

If all fails you can still try to boot a Windows and try the binary package or wait until I succeeded in building a binary package which runs on most Linux systems.

Features

  • (Almost) infinite worlds.
  • Score oriented gameplay, to give at least a small amount of motivation to change the world.
  • Blocks in the game world can be colorified when builing them, offering almost infinite ways to design your buildings to your imagination.
  • Networked architecture that was implemented with and eye towards multiplayer gaming.
  • More or less finished gameplay: Yes, you can actually play the game!
  • Written in Perl, which means you can easily adjust the code to your own ideas!
  • 3 dimensional crafting: While in minecraft and others you craft items in 2D the build patterns in Construder have been taken to the third dimension. (You build a 3 dimensional structure on a special platform which is then transformed into an item.)
  • Few dependencies: Except SDL and OpenGL there are no really hard to port dependencies, which means that this game is probably easy to port to other platforms. Someone even got it to work on Windows with strawberry perl I think.

Motivation

The motivation began to grow when I was playing moneycraft^Wminecraft. If a game like that is possible in Java, it should also be possible in Perl. So I sat down and started to code with the SDL and OpenGL Perl modules. Quickly the first blocks began to see the light. But I didn't just want to make a clone, I wanted to make my own game with different gameplay and setting.

I wrote all this for multiple reasons: I wanted to show that Perl can definitively be used well to build a 3D game engine, I wanted to place some initial spark for other 3D games in Perl. There is really nothing in the way of doing this if you have a little bit experience with OpenGL and programming in general. Next I wanted to see if I am capable of doing this at all. It was a great learning experience for me to write a 3D game engine. But another important point was, to actually write a playable game and not just some half baked engine demo. So in the end I wanted to have a game that is fun for me to play and possible to implement in the limited amount of time I have.

I still have lots of ideas, but my time is very limited so I want to focus on rounding down the edges of the game and make it playable for more people.

The code exists as it is. I will be definitively happy if you find any use for it. From having fun playing it over inspiration up to code (and/or content) for your own game.

If you are eager to help me, see the next section.

Contribute

I'm interested in making a well working game and not to build in every "cool feature" that could be thought of. I understand that everyone has it's own imagination and cool ideas, but the code needs to stay maintainable and one of my main concerns is to root out the bugs in the central gameplay.

Another concern is to provide a basis for other games to be written, as I realize that the current game probably does not appeal to that many people. It's setting is dark and probably depressing. The "look what I built"-factor is not very high, due to the architecture of the world. There are definitively other, more attractive, games possible to think of that could be built from this engine.

If you are very eager to try out your own features feel free to fork the game. Code, graphics and other contents is completely free software (and should stay free)! If your idea is good and works well, it can (maybe) find it's way into Games::Construder later.

Keep in mind that every feature adds to the size of the code that needs to be maintained. Maintaining means that it needs to be updated whenever there are architectual changes in the code.

If you have questions see where to reach me on the bottom of this page!.

But, things this game might need and are maybe added:

  • Easy startup for the causual user.
  • Getting the bandwidth requirements for internet capable games. Currently a chunk update pumps 200-500kb over the line, which is not good for interactive play. Possible fixes:
    • Let the client request chunks itself.
    • Client should only request chunks inside the viewing frustrum.
    • Client should use occlusion querys to find the displayed chunks and only requests those.
  • 3D Engine improvements:
    • Faster rendering (if possible).
    • Rendering more of the world.
  • Sounds! The game needs sounds. If you could compile together a nice set of (free!) sounds that would be really great!
  • Multiplayer! There is still a lot missing for proper multiplayer gameplay. Such as in-game representation of other players. It's currently possible to play together, but you can't see the other player except what he does to the world.
  • Bugfixes! If you find a bug, debugging it will help me much much more than just reporting it!

New features and artwork are currently not really required. Most of the gameplay has been implemented and artwork also collected.

Forks and Links

I'm very open to anyone who wants to derive this work. If you have questions about the engine or game, feel free to contact me!

So, do you have a repository where you are developing additions to the game? Or a repository where you are working on a fork? Or anything else related to Construder?

Feel free to mail me the link so I can collect them here!

Source Code

There are 3 git repositories available. In case one is not reachable or bugged, use another one. I keep all 3 up to date.

   # git clone http://git.ta-sa.org/Games-Construder.git
   # git clone http://ue.o---o.eu/git/Games-Construder.git
   # git clone http://github.com/elmex/Construder.git

If you just want to browse the source you can always look at the repository directly here: http://git.ta-sa.org/git/Games-Construder/

For people who like github, I setup a repository there where I regularily push updates to: https://github.com/elmex/Construder.

Source Code Installation

Installation of the neccessary Perl modules:

Required perl modules: SDL, OpenGL, OpenGL::List, JSON, AnyEvent, Object::Event, EV, common::sense, Compress::LZF, Math::Trig, File::ShareDir::PAR.

   ..# cd Games-Construder
   ../Games-Construder# perl Makefile.PL
   ../Games-Construder# make
   ../Games-Construder# make install

Running:

First you have to start the construder_server, it will listen currently on port 9364 for a client to connect. To connect you need to start the construder_client. As the installation should have placed those two scripts in your PATH you should be able to just do the following:

   # construder_server

Look out for seriours errors and switch to another terminal:

   # construder_client

For more playing instructions see the videos above.

Author and where to go with questions

You can contact me (Robin Redeker) anytime via IRC (irc.perl.org channel #construder, nickname: elmex) or e-mail (elmex @ ta-sa.org). I usually prefer IRC, due to the interactive character of the conversations. In the end both forms of communication will take the same amount of time to get the information accross, as e-mails usually contain more information which also takes it's time to put into words.

Feel free to ask anything!

Bugs

If you find a bug, you are free to contact me using the above contact data. I prefer having more or less direct contact with people who report bugs, because I can directly ask for more information. Setting up or maintaining a bug tracking system is a burden I don't want to take.

Please also consider to look into the bug/problem yourself. A patch has a much higher chance to be applied and induces a much smaller workload on me than to reproduce problems from (vague) bug reports.

Licensing

The License for the source code of the project (the graphics are collected from various public domain, GPL and creative commons sources) is the AGPL (GNU Affero General Public License).

Links

Screenshots:
construder_9.png
construder_10.png
construder_11.png
construder_12.png
construder_13.png
construder_14.png
construder_15.png
construder_16.png
construder_17.png
construder_18.png
construder_19.png
construder_20.png
construder_21.png
construder_22.png
construder_23.png

Deliantra Free MMORPG
The free retro-style MMORPG!