• entries
12
21
• views
11687

# It has been awhile!

352 views

Hey. I'm still alive an kickin'. I'm not using my gamedev.net subscription to it's fullest however - but I guess not having a lot of time to dedicate to personal projects due to college is understandable. Right?
My new theme!

Oh and I did some things with the templates on my journal? You like? It took me around 2 hours of messing around with dreamweaver and learning how gamedev does their templates. I got my inspiration from Trapper Zoid and Mushu's good looking journals. Hopefully, the work that I put into it today will encourage me to post more updates.

Plus, CSS is just awesome! Except .. for when you're dealing with IE. Speaking of internet browsers I'm really loving Firefox 2.0. I like how it has some of the best extensions (Session saver, X in all tabs, etc) built right into it! Plus the spell checker in text boxes is a major help :)

Game Development

Last time I was super pissed at Lua. Last week sometime I had some kind of revelation with the coroutines and I now have something fairly decent working. It took a lot of digging in the lua mailing lists and various forums and books to find out how exactly they work and how to incorporate them into my project.

So here is the code:

scheduler.lua
Scheduler = {}function Scheduler:init()	self.actions = {}endfunction Scheduler:asScript(obj)	if type(obj) == "thread" then		return obj	elseif type(obj) == "function" then		return coroutine.create(obj)	elseif type(obj) == "table" then		return coroutine.create(function() obj() end)	else		return coroutine.create(function() end)	endendfunction Scheduler:register(condition, script)	table.insert(		self.actions, 		{cond=condition, script=self:asScript(script)}		)endfunction Scheduler:start(script)	self:register(true,script)endfunction Scheduler:activate(script) 	local status,nextCond = coroutine.resume(script)	if status then		if nextCond ~= nil then			self:register(nextCond, script)		end	endendfunction Scheduler:step()	for i, rule in ipairs(self.actions) do		if rule.cond==true or rule.cond() then			table.remove(self.actions,i)			self:activate(rule.script)			return true		end	end	return falseendfunction Scheduler:run()	if table.getn(self.actions) > 0 then		self:step()	endend

It is basically a scheduler that steps through coroutines and then checks a condition to see if it is time to rerun the script.

initstate.lua
function wait(seconds)	local wo = Game:wait(seconds)	local txt = "Eventid: " .. wo	Game:logMessage(txt) 	coroutine.yield(		function() return Game:checkEvent(wo) end)endfunction script1()	Game:logMessage("In Script 1!")	wait(2);	Game:logMessage("What, out of it!")endfunction script2()	   for i=0,5 do 		Game:logMessage("In script 2 .. will loop 5 times!")		wait(3)	   endend Scheduler:init() Scheduler:start(script1) Scheduler:start(script2) Scheduler:run()

And then in this piece of lua code. I have in my wait function a C++ call that will tell my event manager to create a timed event (Game:wait(seconds)) to wait for so many seconds, and then I yield the coroutine and then pass a condition. The Game:Checkevent(wo) function is another C++ call that will poll my Event Manager to see if that event happened or not. So far an Event can only be a passing of time, but I plan on extending it so that it could be when an object is in a certain location, or a button is pressed, or a door is opened, or even when another event completed.

Anyway, the next two functions are two scripts, and then the block of code after that initializes the scheduler and adds the two scripts to it's internal table (or queue) and then starts running them both at the same time. So basically I can have two actors just walk around and do their own thing. Pretty damn cool.
So what about the game?

Yeah. The game is still moving along. No, that's a lie. It's moving at a slooow speed. I work on it furiously for about 5-6 hours, and then I can't get back to it for like another week. Not the way I would like to be making it.

Today I just finished reorganizing my code so that everything is in gameplay states (intro state, main menu state, options state, playing state, credits state, etc) and this made it considerably easier to read. What I'm working on now is action mapping.

Right now I have an Actor class and an Actor Controller class. And the Actor will poll it's controller class for information on what to do whether it be jumping or moving forward or serving a customer, etc. The controller can be Input driven, or Network or AI driven. At least that's the plan so far. I haven't implemented the AI or Network part .. but the actor polling the controller works fairly well.

I've thought of a tentative project title - mainly because I'm sick of calling it "my project". I'm planning/hoping on calling it Tangent. I choose that name because my project is essentially a relationship building sim that takes place in a restaurant that the main character works at. Although the main character finds working there a little miserable, little jobs like that are just looked at as tangents in life. A minor detour from what she truly wants to do. We've all had jobs like this, right?

Although, I think that "Tangent" might sound a little too technical. Any opinions?

Hi, I like your style! Can you tribute it to Gamedev so everyone can use it ? ;)

##### Link to comment
Yay! I knew I subscribed to this journal for a reason. [grin]

I'll have to read up more on Lua; I've been neglecting my scripting core in favour of stubbing out the renderer for my game.

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account