The Ananke Project.

http://puu.sh/90HqN.png

~ Who are we. ~

We are a group of individuals who set out to make a game, and ended up focusing on a framework (sorry guys, my bad). This group includes:

  • Kyle (BloodPrime) ~ Co-Project Leader. He is the guy who started this project of. He generally focuses on Modeling, Materials and all in all in’s and out’s of what we want to do, and where we want to end up.
  • Toby (Larmz) ~ The Law Guy and Co-Project Leader . Worked on the story line and manages everything on the law side of things (copyrights and what not).
  • Matthew (Canadialad) ~ Programmer. Mainly focuses in C++, but has become fluent in this project throughout the five months we have been working on the project. Responsible for the linked lists object and the menu.
  • Lennart‏ (LennyPenny) ~ Programmer. Works mainly in weapons and entities (among other things). Comes up with neat and awesome ways of doing something, All round brilliant.
  • Alex (Dingusnin) ~ Programmer, All round asshole, countlessly broke everything just to do it in another way. Again, I am really sorry.

~ What is Ananke. ~

Well all this started when I was drafted into the team to make a game named WARPAC. You may have seen a few posts floating around relating to this gamemode, but we ultimately didn’t work too much on it. The idea of basing this off a framework came around when the idea of us producing more than one gamemode together came up. All this was future proofing and facilitating the option of creating a gamemode in a few-a lines as possible. Five months later, we have the colossal task of finishing what we started.

But now we have decided to move to an engine that can facilitate our needs for a full game, rather than an edit of another. And this is why I am here. We have decided not to throw away what we have done already, and decided to make this open source, so I can continue to work on it with the help of many others. Do not get me wrong, this is not finished, and in terms of eye candy, will not offer you what you are looking for. If you can here expecting a fully working, ready out of the box frame work to use, then I think NutScript or ClockWork will facilitate all your needs, and more.

~ What does this offer. ~

This framework offers a modular design, where to add modules, you just need to drop a folder in a box, and add one extra line. Everything (or at least as close to everything as anything can get) is object orientated. It seems crazy but it’s a lot easier to read, and a lot cleaner.

We offer a few features such as:
~ A working SourceNet module. A few datagrams are not updated, but I have left some information in there for anyone who want’s to help on that.
~ Trigger module. Pretty much does what it says, player walks into a zone, a callback get’s triggered. This uses a trigger entity for optimization, but I plan on adding dynamic zones.
~ Binds module. Well … yup.
~ MathsX module. This includes Perilnoise2d, Matrices, and complex numbers.
~ Custom networking for simplicity. I will throw up an example of it lower down.
~ Flags. Don’t want to cram your objects full of variables you won’t remember? Well … flags.
~ Serialization module. Not fully done. Previous version worked if you want to look through the push history.
~ Debug system. If something goes wrong, you will know.
~ Events system. A hook system specifically for this framework.
~ Custom menu system. For people like me who find VGUI a pain, and inefficient at what it does.
~ INIParser
~ LinkedList in lua.
~ A load of other beauties to discover.

~ It’s not finished. ~

It’s not finished. Far from it. We are moving to another engine, but I still plan to work on this, with the help of you guys. There is lot’s to do, and we need a lot of help. We don’t need full commitment, if you want to change 1 line, that’s great. If you want to change more, that’s Fantastic. Want to become the full time developer, and have your name on the files full time, shoot me a message, everything is possible.

~ Where is it hosted. ~

Right here. Don’t judge us on the coding style, it was a learning experience for all of us. With that said, have fun.

~ What can it do. ~



Protocol = Ananke.core.Protocol.new()

Protocol:SetName( "nw_variables" )
Protocol:SetPID( 0x02 )
Protocol:SetType( NW_STC )		--0x01 - Server to Client
Protocol:SetData( NW_CUSTOM ) 	--Custom Datagram. Variables won't all be of same type.

Protocol:SetCallBack( function(data)
	for k,v in pairs(data) do
		Ananke.core.variables[k] = v
	end
end )

Protocol:SetSend( function(data)
	net.WriteString(data[1])
	net.WriteString(data[2])
	net['Write' .. data[2]](data[3])
end)

Protocol:SetReceive( function()
	local key = net.ReadString()
	local value = net['Read'..net.ReadString()]()

	return { [key] = value }
end)

Protocol:Register()




Ananke.core.variables =  SERVER and setmetatable({},{
	__index = function(t,k) end,
	__newindex = function(t,k,v)
		local nw = Ananke.Network.new()
		nw:SetProtocol(0x02)
		nw:SetDescription('Automatic variable networking')
		nw:PushData(k)
		nw:PushData(type(v))
		nw:PushData(v)
	nw:Send()
	end}) or {}


Some other examples I will put up later.

~ What now. ~

Well I will still be here, day to day life will continue, the earth will still revolve around the sun. The difference? We can get more people working on this, improving it, Hopefully turning out to be proud of it.

Thanks for reading,
On behalf of the Ananke team.

Holy shit, that’s almost exactly how I code…

what kind of framework is this, I’m sort of confused.

Roleplay framework. From WARPAC, which I was pretty excited for.

No offence but that networking system does not seem simple.

From my understanding, he made it so a table is automatically networked server to client when something is changed in it. Ananke.core.variables to be specific.

It’s actually not that difficult to understand if you take a little bit of time to study it. I like it. :smiley:

The actual “protocol” itself is not needed, you might as well just be using the net library alone.

It’s just for ease of having everything in one file, and a extra layer of hooks. It also avoids silly errors like sending the wrong variables. I will add a way to just send and receive without a protocol.

No, it’s a framework for every type of gamemode. There’s nothing in it that would make more suitable for roleplay gamemodes.
It was meant to reduce the boilerplate code in the actual gamemode and provide extensible structure.