INFO
Timeplan :
https://docs.google.com/spreadsheet/ccc?key=0AmuAKJolqASndEVYOWMxb3l2OWV0UkV1anRSczZScHc
Online reference :
http://www.shooterhelp.avxc.net/
Latest project download :
https://forumfiles.thegamecreators.com/download/2287589
A guide to structured programming :
http://forum.thegamecreators.com/?m=forum_view&t=190485&b=1
Contact Information
Replace all smilies with an @
TheComet - Programmer
email - alex.murray☺gmx.ch
skype - The__Comet
swissolo - Project Manager
email - swissolo☺gmail.com
Design Runner - Art Director for Scenery
email - Design_Runner☺yahoo.com
Martin Donát - Art Director for Characters
email - martin.101☺email.cz
skype - martasek101
facebook - Martin Donát
SH4773R - Programmer
email - lukeconnor50☺gmail.com
Hey everyone!
Info on what's currently in progress, go to the text between the "=======" below.
Intro
I thought it might be cool to start an open source project where everyone can chip in a bit. I've laid down the basic code, and made it pretty easy to add / remove features from the game. The video below shows where the game currently stands (which is pretty much nowhere right now).
Game Story
So the basic storyline of the game is you have these 4 towers, each beaming down a bright light to the center of the map where they all meet on this dome. Your mission is to go into each of the towers, and defeat a boss, which will disable the corresponding beam. Once all beams are deactivated, a huge boss pops out of the dome, and that will be the final boss.
============================================================================================
So how is this project structured?
Here's the graphical structure:
So
4 positions are open:
-Art Director for Scenery
-Art Director for Characters
-Music/Sound Director
-Programming Director
If anyone wants to take on one of the roles above, please post. It would also be very helpful for me if someone where to take the position as a co-manager, I don't have a lot of free time...
What is my role as a director?
As a director, your task is to receive work and/or ideas from contributers in your department, and fish out the good stuff which will be passed on to the project manager for implementation.
What's our Time Plan? What needs to be done?
I'll be honest with you. I suck at creative ideas. That's why I need your input to drive this project forwards. ANYTHING you have at all, post ahead!
The current documentation and time-plan can be found
here or in the first post.
The next step
Here's the to-do list in short:
[] Find directors (and if possible, co-manager).
[] Collect cool ideas from everyone
============================================================================================
How do I contribute?
To make sure everything doesn't get all mixed up, contributions of any kind must be directed to a main person, and merged with the project by that main person, in this case, me. Contributions are listed below.
Code Contributions
All code contributions must be done by posting the code in a code snippet, along with a short description of what it does, and where to put it. Any required media please attach. Try to keep all of your code in one or more functions which can be called from the main loop. For example, these would be the functions for the spider:
function CreateSpider(x# , y# , z# , life)
rem locals
local n as integer
rem search for free spider
for n = 0 to 100
if spider(n).active < 2 then exit
next n
rem none available
if n = 101 then exitfunction -1
rem spider doesn't exist
if spider(n).active = 0
rem load spider
spider(n).object = find free object()
load object "media\models\spider\spider.x" , spider(n).object
SC_SetupComplexObject spider(n).object , 1 , 2
else
rem show spider
show object spider(n).object
SC_SetObjectCollisionOn spider(n).object
endif
rem set spider parameters
spider(n).active = 2
spider(n).pos.x# = x#
spider(n).pos.y# = y#
spider(n).pos.z# = z#
spider(n).origin.x# = x#
spider(n).origin.y# = y#
spider(n).origin.z# = z#
spider(n).life = life
position object spider(n).object , x# , y# , z#
rem log in console
if spiderlogging = 1 then AddTextToConsole("CreateSpider "+str$(n)+" , "+str$(x#)+" , "+str$(y#)+" , "+str$(z#)+" , "+str$(life) , 0xFF00FFFF , 1 , 0)
endfunction n
function DestroySpider(n)
rem make sure spider is active
if spider(n).active > 1
rem hide object
hide object spider(n).object
rem deactivate
spider(n).active = 1
rem console logging
if spiderlogging = 1 then AddTextToConsole("DestroySpider "+str$(n) , 0xFF00FFFF , 1 , 0)
else
rem log in console
if spiderlogging = 1 then AddTextToConsole("DestroySpider "+str$(n)+" Failed" , 0xFFFF0000 , 2 , 0)
exitfunction -1
endif
endfunction n
function ControlSpider()
rem local variables
local n as integer
rem loop through all active spiders
for n = 0 to 100
rem walk around
if spider(n).active = 2
rem old position of spider
spider(n).oldpos = spider(n).pos
rem move spider around
if rnd(50) = 0 then inc spider(n).walk : if spider(n).walk = 2 then spider(n).walk = 0
if spider(n).walk = 1
rem play animation
if object_playing(spider(n).object) = 0 then play_object(spider(n).object , spider.anim.walkstart , spider.anim.walkend , spider.anim.walkspeed#)
rem control positions
spider(n).pos.x# = newxvalue(spider(n).pos.x# , spider(n).angle.y# , spider.speed#)
spider(n).pos.z# = newzvalue(spider(n).pos.z# , spider(n).angle.y# , spider.speed#)
endif
rem randomly rotate spider
if rnd(30) = 0 then spider(n).angle.x# = rnd(360)
rem if spider goes too far away from origin, make him return
if (spider(n).pos.x# - spider(n).origin.x#)^2 + (spider(n).pos.y# - spider(n).origin.y#)^2 + (spider(n).pos.z# - spider(n).origin.z#) > 100
spider(n).angle.x# = wrapvalue(180 + atanfull(spider(n).pos.x# - spider(n).origin.x# , spider(n).pos.z# - spider(n).origin.z#))
endif
rem move spider towards player if near
if (spider(n).pos.x# - player.pos.x#)^2 + (spider(n).pos.y# - player.pos.y#)^2 + (spider(n).pos.z# - player.pos.z#) < 340
spider(n).angle.x# = wrapvalue(180 + atanfull(spider(n).pos.x# - player.pos.x# , spider(n).pos.z# - player.pos.z#))
spider(n).walk = 1
spider(n).pos.x# = newxvalue(spider(n).pos.x# , spider(n).angle.y# , spider.speed# * 0.5)
spider(n).pos.z# = newzvalue(spider(n).pos.z# , spider(n).angle.y# , spider.speed# * 0.5)
endif
rem calculate spider's real angle
spider(n).angle.y# = curveangle(spider(n).angle.x# , spider(n).angle.y# , 20)
rem gravity
dec spider(n).gravity# , world.velocity#
inc spider(n).pos.y# , spider(n).gravity#
rem collision control
if SC_SphereCast(0 , spider(n).oldpos.x# , spider(n).oldpos.y# , spider(n).oldpos.z# , spider(n).pos.x# , spider(n).pos.y# , spider(n).pos.z# , 0.3 , 0)
spider(n).pos.x# = SC_GetCollisionSlideX()
spider(n).pos.y# = SC_GetCollisionSlideY()
spider(n).pos.z# = SC_GetCollisionSlideZ()
spider(n).gravity# = 0
endif
rem update angles and positions of spide
position object spider(n).object , spider(n).pos.x# , spider(n).pos.y# , spider(n).pos.z#
rotate object spider(n).object , 0 , spider(n).angle.y# , 0
rem update spider for collision checks
SC_UpdateObject spider(n).object
rem spider is near enough to pounce
if (spider(n).pos.x# - player.pos.x#)^2 + (spider(n).pos.y# - player.pos.y#)^2 + (spider(n).pos.z# - player.pos.z#) < 64
rem play pounce animation
stop_object(spider(n).object)
play_object(spider(n).object , spider.anim.preparepouncestart , spider.anim.preparepounceend , spider.anim.preparepouncespeed#)
spider(n).active = 3
endif
endif
rem prepare pounce
if spider(n).active = 3
rem rotate towards player
spider(n).angle.x# = wrapvalue(180 + atanfull(spider(n).pos.x# - player.pos.x# , spider(n).pos.z# - player.pos.z#))
spider(n).angle.y# = curveangle(spider(n).angle.x# , spider(n).angle.y# , 20)
rem pounce at player
if object_playing(spider(n).object) = 0
rem animation control
stop_object(spider(n).object)
play_object(spider(n).object , spider.anim.pouncestart , spider.anim.pounceend , spider.anim.pouncespeed#)
spider(n).active = 4
rem gravity
spider(n).gravity# = 0.5
inc spider(n).pos.y# , 0.5
endif
endif
rem pounce
if spider(n).active = 4
rem old position of spider
spider(n).oldpos = spider(n).pos
rem control positions
spider(n).pos.x# = newxvalue(spider(n).pos.x# , spider(n).angle.y# , spider.speed# * 2)
spider(n).pos.z# = newzvalue(spider(n).pos.z# , spider(n).angle.y# , spider.speed# * 2)
rem gravity
dec spider(n).gravity# , world.velocity#
inc spider(n).pos.y# , spider(n).gravity#
rem collision control
if SC_SphereCast(0 , spider(n).oldpos.x# , spider(n).oldpos.y# , spider(n).oldpos.z# , spider(n).pos.x# , spider(n).pos.y# , spider(n).pos.z# , 0.3 , spider(n).object)
spider(n).pos.x# = SC_GetCollisionSlideX()
spider(n).pos.y# = SC_GetCollisionSlideY()
spider(n).pos.z# = SC_GetCollisionSlideZ()
spider(n).gravity# = 0
spider(n).active = 2
endif
rem update angles and positions of spide
position object spider(n).object , spider(n).pos.x# , spider(n).pos.y# , spider(n).pos.z#
rotate object spider(n).object , 0 , spider(n).angle.y# , 0
rem update spider for collision checks
SC_UpdateObject spider(n).object
endif
rem fall back
if spider(n).active = 5
rem old position of spider
spider(n).oldpos = spider(n).pos
rem control positions
spider(n).pos.x# = newxvalue(spider(n).pos.x# , spider(n).angle.y# , spider.speed#)
spider(n).pos.z# = newzvalue(spider(n).pos.z# , spider(n).angle.y# , spider.speed#)
rem gravity
dec spider(n).gravity# , world.velocity#
inc spider(n).pos.y# , spider(n).gravity#
rem collision control
if SC_SphereCast(0 , spider(n).oldpos.x# , spider(n).oldpos.y# , spider(n).oldpos.z# , spider(n).pos.x# , spider(n).pos.y# , spider(n).pos.z# , 0.3 , spider(n).object)
spider(n).pos.x# = SC_GetCollisionSlideX()
spider(n).pos.y# = SC_GetCollisionSlideY()
spider(n).pos.z# = SC_GetCollisionSlideZ()
spider(n).gravity# = 0
endif
rem update angles and positions of spide
position object spider(n).object , spider(n).pos.x# , spider(n).pos.y# , spider(n).pos.z#
rotate object spider(n).object , 0 , spider(n).angle.y# , 0
rem update spider for collision checks
SC_UpdateObject spider(n).object
rem back to walk animation
if object_playing(spider(n).object) = 0 then spider(n).active = 2
endif
rem die
if spider(n).active = 6
rem kill
if object_playing(spider(n).object) = 0 then DestroySpider(n)
endif
next n
endfunction
CreateSpider() will create one spider
DestroySpider() will remove a spider
ControlSpider() is called once every loop
Code contributions can be anything. You may have tinkered with the spider control function to make the spider move better, or you may have written an incredible shader that makes the game look better than FarCry 6.
Media Contributions
All media contributions must be done by attaching your media to your post, along with a short description of what it's for, what it should do, and where to put it.
Media contributions can be anything:
Models such as Levels, zombies, spaceships, buildings, shops, weapons, effects, skyboxes, skyspheres, etc.
Music, Sounds, Voices, etc.
Images such as textures, menu items, buttons, GUI, etc.
Style
The game is a futuristic zombie + alien shoot-em-up.
Environmental - Alien plants, alien skys, futuristic buildings, rocks, caves, futuristic lamp posts, alien landscapes, domes, towers etc.
Characters - Alien Zombies (wow that sounds awesome), critters, 5 kinds of bosses, etc.
Textures - Flare textures, red blood, blue blood, green blood, yellow blood, laser beam texture, light beam texture, landscape textures, plant textures, sky textures, wall textures, etc.
Weapons - Phaser, DOOM cannon, lightning gun, missile launcher, sensor bombs, time bombs, etc.
Downloads
OpenSourceProject_16_09_11.7z
Documentation and Time-Plan
Controls:
WASD - move around
LMB to shoot
press <insert> once to type things into the console
press <insert> again to deactivate the console
Change Log
16.09.11 17:50 - More structured code
- Game Console can now display all commands with the command <help>
- All game values are saved after every command executed in the Game Console (by default this feature is disabled).
This is very useful when adjusting constants. Not all constants can be accessed yet, still working on that.
- Game now runs in all resolutions, default is 1024x768
21.08.11 10:32 - First upload of Open Source Project
TheComet