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.
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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.
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.
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
|
|