Aqua Teen Hunger Force: Zombie Ninja Pro-Am
Aqua Teen Hunger Force: Zombie Ninja Pro-Am |
---|
Developer: Creat Studios This game has uncompiled source code. |
To do: Add a prerelease section Check if the debug stuff work Compare US,EU,and AU versions |
Aqua Teen Hunger Force: Zombie Ninja Pro-Am is a mix of golf, beat 'em up and racing. No zombies or ninjas included.
Unused Graphics
in Frylock eyes graphic there is a random graphic of his braces, this could have mean that Frylock was gonna smile at some point in the main menu randomly.
Unused font that could probably be used for debug.
Unused Music
TRACK1
- Unknown music track.
Build Date
A build date is present in the SLES file.
CREAT Game started Build date: Sep 8 2007; 01:10:12
Source Code
Large chunks of code are scattered around the SLES file, some of which seem to relate to a debugger.
getCallCount _import_cached_cache = {} setmetatable(_import_cached_cache, {__mode='v'}) function create_import_cached(get_environment, require) local function _import_cached(name) if not _import_cached_cache[name] then local function _import() require(name) end local package = {} setmetatable(package, {__index=get_environment()}) setfenv(_import, package) _import() _import_cached_cache[name] = package end getfenv(2)[name] = _import_cached_cache[name] end return _import_cached end function __class_metatable_call(cls, ...) local obj = {} setmetatable(obj, cls) if obj.construct then obj:construct(...) end return obj end function __class_createMetatable(base) if base then return {__index=base} else return {} end end function class(base) local cls = {} cls.__index = cls local metatable = __class_createMetatable(base) metatable.__call = __class_metatable_call setmetatable(cls, metatable) return cls end WeakSet = class() function WeakSet:construct() self.values = {} setmetatable(self.values, {__mode='k'}) end function WeakSet:Add(value) self.values[value] = true end function WeakSet:Remove(value) self.values[value] = nil end function WeakSet:Values() return pairs(self.values) end Pool = class() function Pool:construct(fabricator) self.fabricator = fabricator self.free_objects = {} end function Pool:getObject() if 0==table.getn(self.free_objects) then realobj = self.fabricator() else realobj = table.remove(self.free_objects) end return self:createProxy(realobj) end function Pool:createProxy(realobj) local pool = self local p = newproxy(true) local meta = getmetatable(p) function meta:__gc() table.insert(pool.free_objects, realobj) end meta.__index = realobj meta.__newindex = realobj return p end function string.split(s, sep) local result = {} local pos; repeat pos = string.find(s, sep) if pos then table.insert(result, string.sub(s, 1, pos-1)) s = string.sub(s, pos+1) else table.insert(result, s) end until not pos return result end StringStream = class() function StringStream:construct() self.result = '' end function StringStream:write(data) self.result = self.result..data end StringInputStream = class() function StringInputStream:construct(dumped) self.dumped = dumped end function StringInputStream:read(size) local result = string.sub(self.dumped, 1, size) self.dumped = string.sub(self.dumped, size+1) return result end DataWriter = class() function DataWriter:construct(writer) self.writer = writer end function DataWriter:writeLabel(_type) self.writer:write(_type) self.writer:write(':') end function DataWriter:writeValue(value) local value_as_string = tostring(value) self.writer:write(tostring(string.len(value_as_string))) self.writer:write('>') self.writer:write(value_as_string) end DataReader = class() function DataReader:construct(stream) self.stream = stream end function DataReader:getNext(separator) local s = '' while true do local cur = self.stream:read(1) if cur == separator then break end s = s .. cur end return s end function DataReader:readLabel() return self:getNext(':') end function DataReader:readValue(label) local size = self:getNext('>') local value = self.stream:read(size) if label == 'number' then return tonumber(value) elseif label == 'boolean' then return value == 'true' else return value end end BinaryDataWriter = class() function BinaryDataWriter:construct(p) self.writer = pickle.DataWriter:new_local(p) self._writer_writeBoolean = self.writer.writeBoolean self._writer_writeNullTerminatedString = self.writer.writeNullTerminatedString self._writer_writeNumber = self.writer.writeNumber end function BinaryDataWriter:getSizeWritten() return self.writer.current end function BinaryDataWriter:writeLabel(_type) self._writer_writeNullTerminatedString(self.writer, _type) end function BinaryDataWriter:writeValue(value) if 'boolean'==type(value) then self._writer_writeBoolean(self.writer, value) elseif 'string'==type(value) then self._writer_writeNullTerminatedString(self.writer, value) else self._writer_writeNumber(self.writer, value) end end function BinaryDataWriter:start() end CompactBinaryDataWriter = class(BinaryDataWriter) CompactBinaryDataWriter.type_assoc = { ['nil'] = 'nil', ['boolean'] = 'b', ['number'] = 'n', ['string'] = 's', ['table'] = 't', function CompactBinaryDataWriter:writeLabel(_type) self._writer_writeNullTerminatedString(self.writer, self.type_assoc[_type]) end function CompactBinaryDataWriter:start() self.writer:writeVersion() end BinaryDataReader = class() function BinaryDataReader:construct(p) self.reader = pickle.DataReader:new_local(p) self.reader_methods = {} local names = {'readNullTerminatedString', 'readBoolean', 'readNumber'} for i, name in ipairs(names) do self.reader_methods[name] = self.reader[name] end end function BinaryDataReader:readLabel() return self.reader_methods.readNullTerminatedString(self.reader) end function BinaryDataReader:readValue(_type) if 'boolean'==_type then return self.reader_methods.readBoolean(self.reader) elseif 'string'==_type then return self.reader_methods.readNullTerminatedString(self.reader) else return self.reader_methods.readNumber(self.reader) end end Saver = class() function Saver:construct(what_to_dump) self.what_to_dump = what_to_dump end function Saver:dump(writer) self.writer = writer self.writer:start() self:dumpValue(self.what_to_dump) end function Saver:dumpValue(value) local _type = type(value) if _type == 'table' then self.writer:writeLabel(_type) self:dumpTable(value) else self.writer:writeLabel(_type) self.writer:writeValue(value) end end function Saver:dumpTable(what_to_dump) local table_size = 0 for key, value in pairs(what_to_dump) do table_size = table_size+1 end self.writer:writeValue(table_size) for key, value in pairs(what_to_dump) do self:dumpValue(key) self:dumpValue(value) end end Loader = class() function Loader:construct(reader) self.reader = reader end function Loader:getNextValue() local label = self.reader:readLabel() if label=='table' then return self:loadTable() else return self.reader:readValue(label) end end function Loader:loadTable() local table_size = self.reader:readValue('number') local result = {} for i=1, table_size do local key = self:getNextValue() local value = self:getNextValue() result[key] = value end return result end function Loader:load() return self:getNextValue() end threading = {} threading.Thread = class() function threading.Thread:construct() self.co = coroutine.create( function () self:run() end) end function threading.Thread:isDead() return coroutine.status(self.co)=='dead' end function threading.Thread:resume() return coroutine.resume(self.co) end function threading.Thread:yield() coroutine.yield() end threading.Event = class() function threading.Event:clear() self.is_set = false end function threading.Event:set() self.is_set = true end function threading.Event:wait() while self.is_set do coroutine.yield() end end threading.Manager = class() function threading.Manager:construct(error_handler) self.error_handler = error_handler self.threads = {} end function threading.Manager:start(thread) table.insert(self.threads, thread) end function threading.Manager:update(thread) alive_threads = {} for i, thread in ipairs(self.threads) do self:resume(thread) if not thread:isDead() then table.insert(alive_threads, thread) end end self.threads = alive_threads end function threading.Manager:resume(thread) local status, err = thread:resume() if not status then if self.error_handler then self.error_handler(err) end end end function prettyFormat(value) local xxx = {} for key, value in pairs(value) do if type(value) == 'table' then table.insert(xxx, string.format('%s=%q', tostring(key), 'table')) else table.insert(xxx, string.format('%s=%q', tostring(key), tostring(value))) end end return '{'..table.concat(xxx, ', ')..'}' end function assertStringContains(what, where) if not string.find(what, where) then local message = string.format('%q doesn\'t contain %q', what, where) error(message) end end function assertEquals(expected, actual) if (not (expected==actual)) then error(tostring(expected)..' != '..tostring(actual)) end end function isTableContainedInOther(what, where) for key, value in pairs(what) do if where[key]~=value then return false end end return true end function assertTablesEqual(expected, actual) if not (isTableContainedInOther(actual, expected) and isTableContainedInOther(expected, actual) ) then error(prettyFormat(expected)..' != '..prettyFormat(actual)) end end function isTableValuesContainedInOther(what, where) for key, value in pairs(what) do if type(what[key]) == 'table' then if type(where[key]) ~= 'table' then return false end if not isTableValuesContainedInOther(what[key], where[key]) then return false end else if where[key]~=value then return false end end end return true end function assertTablesValuesEqual(expected, actual) if not (isTableValuesContainedInOther(actual, expected) and isTableValuesContainedInOther(expected, actual) ) then error(prettyFormat(expected)..' != '..prettyFormat(actual)) end end function assertTablesValuesNotEqual(expected, actual) if (isTableValuesContainedInOther(actual, expected) and isTableValuesContainedInOther(expected, actual) ) then error(prettyFormat(expected)..' == '..prettyFormat(actual)) end end function assertLess(expected, actual) if(not(expected>actual) ) then error(actual..' not less than '..expected) end end function assertTrue(actual) if(actual ~= true) then error(tostring(actual)..' not true') end end function assertFalse(actual) if(actual ~= false) then error(tostring(actual)..' not false') end end function assertNil(actual) if(actual ~= nil) then error(tostring(actual)..' not nil') end end function assertNotEquals(expected, actual) if (not (expected~=actual)) then error(tostring(expected)..' == '..tostring(actual)) end end function assertAlmostEquals(expected, actual, deviation) if not (((expected - deviation) <= actual) and ((expected + deviation) >= actual)) then error( tostring(math.abs(expected - actual))..' > '..tostring(deviation).. '(expected='..tostring(expected)..', actual='..tostring(actual)..')') end end function assertR3dVAlmostEquals(expected, actual, deviation) local x_deviation = expected.x - actual.x local y_deviation = expected.y - actual.y local z_deviation = expected.z - actual.z local actual_deviation = math.sqrt(x_deviation*x_deviation + y_deviation*y_deviation + z_deviation*z_deviation) if(not(deviation>=actual_deviation) ) then error(actual_deviation..' not less than '..deviation) end end function assertNotAlmostEquals(expected, actual, deviation) if (((expected - deviation) <= actual) and ((expected + deviation) >= actual)) then error(tostring(math.abs(expected - actual))..' <= '..tostring(deviation)) end end function assertR3dVNotAlmostEquals(expected, actual, deviation) local x_deviation = expected.x - actual.x local y_deviation = expected.y - actual.y local z_deviation = expected.z - actual.z local actual_deviation = math.sqrt(x_deviation*x_deviation + y_deviation*y_deviation + z_deviation*z_deviation) assertLess(actual_deviation, deviation) end function assertNotNil(actual) if(actual == nil) then error(tostring(actual)..' is nil') end end EventsHandler = class() function createWeak() local weak = {} setmetatable(weak, {__mode='v'}) return weak end EventsHandler.weak_pool = Pool(createWeak) function EventsHandler:createCallHandler(obj, func) local weak = self.weak_pool:getObject() weak.handler_object = obj weak.handler = func local function callHandler( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20) return handler(handler_object, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20) end local env = {} setmetatable(env, {__index=weak}) setfenv(callHandler, env) return callHandler end function EventsHandler:createMessenger(handler) if not handler then return nil end local messenger = lua.wrap.Messenger:new_local(lua.system.lua_instance) table.insert(self.messengers, messenger) lua_wrap_setMessengerHandler(messenger, self:createCallHandler(self, handler)) return messenger end function EventsHandler:construct(message_source, messages) self.messengers = {} for i, message_name in pairs(messages) do local handler = self[message_name] local messenger_name = '_luawrap_'..message_name..'Messenger' message_source[messenger_name] = self:createMessenger(handler) end end if not crs then crs = {} end function crs.print(...) args_str = {} for i, value in ipairs(arg) do table.insert(args_str, tostring(value)) end logMessage(crs.print_msg_log_level(), table.concat(args_str, ' ')) end function crs.print_msg_log_level() return crs.MSG_REPORT end platform = 'ps2' configuration = 'master' function Flag(...) local result=0 for i, argument in ipairs(arg) do result = bitops.OR(result, argument) end return result end function Rect(x1, y1, x2, y2) local rect = r3dRECT:new_local() rect.x1 = x1 rect.y1 = y1 rect.x2 = x2 rect.y2 = y2 return rect end Ticker = class() Ticker.Timer = class(gmp.HDL_TIMER) function Ticker.Timer:construct() gmp.HDL_TIMER.construct(self, 999) self.tickers = {} setmetatable(self.tickers, {__mode='k'}) end function Ticker.Timer:OnTimer(elapsed) for ticker, working in pairs(self.tickers) do if working then ticker:OnTimer(elapsed) end end end function Ticker:construct() if not self.timer then Ticker.timer = self.Timer() end end function Ticker:Start() self.timer.tickers[self] = true end function Ticker:Stop() self.timer.tickers[self] = false end ThreadTicker = class(Ticker) function ThreadTicker:construct(manager) Ticker.construct(self) self.manager = manager end function ThreadTicker:OnTimer(elapsed) self.manager:update() end SimpleThread = class(threading.Thread) function SimpleThread:construct(func) threading.Thread.construct(self) self.func = func end function SimpleThread:run() self.func() end WaitTicker = class(Ticker) function WaitTicker:construct(condition) Ticker.construct(self) self.conditions = {} end function WaitTicker:OnTimer(elapsed) local unmet_conditions = {} for i, c in ipairs(self.conditions) do if c.condition() then c.event:clear() else table.insert(unmet_conditions, c) end end self.conditions = unmet_conditions end function Wait(condition) local event = threading.Event() event:set() table.insert( wait_ticker.conditions, {condition=condition, event=event} ) event:wait() end function initThreadManager() thread_manager = threading.Manager( function (error) print(error) end ) thread_ticker = ThreadTicker(thread_manager) thread_ticker:Start() wait_ticker = WaitTicker() wait_ticker:Start() end function startThread(func) thread_manager:start(SimpleThread(func)) end function initServer() con.game.HdlServerEvent = class(EventsHandler) function con.game.HdlServerEvent:construct() self.impl = con.game.luawrap.HdlServerEvent:new_local() EventsHandler.construct( self, self.impl, {'onReceiveConnection', 'onRecive', 'onDisconnect'}) end HdlServerEvent = class(con.game.HdlServerEvent) function HdlServerEvent:construct(handler) con.game.HdlServerEvent.construct(self) self.handler = handler end function HdlServerEvent:onReceiveConnection(connect_info, hDl) end function HdlServerEvent:onDisconnect(hDl) end function HdlServerEvent:onRecive(pData, len, hDl) local received = asLengthString(pData, len) self.handler:handle(received) end TCPServer = class() function TCPServer:construct(server_address, handler) self._hdl_server_event = HdlServerEvent(handler) self._server = con.game.System:createGameServer( self._hdl_server_event.impl, server_address[2]) self._server:EnableListen(true, 666) end function TCPServer:broadcast(reply) reply_len = string.len(reply) buf = StringBuffer:new_local(reply_len) buf:initStr(reply) self._server:BroadcastData(buf.data, reply_len) end end function initDebugger() lua.debug.Client = class(EventsHandler) function lua.debug.Client:construct() EventsHandler.construct( self, lua.debug.luawrap.Client:new_local(lua.system.lua_instance), {'handleMessage'}) end function lua.debug.createDebugger(client) local debugger = {} debugger.impl = lua.debug.Debugger:new_local( lua.system.lua_instance, client.message_source) function debugger:handleMessage(message) debugger.impl:handleMessage(message) end return debugger end Debugger = class() Debugger.Client = class(lua.debug.Client) function Debugger.Client:handleMessage(message) print('(ldb) '..message) if string.find(message, 'breakpoint hit at ') then self.debugger:handleMessage('info locals') end end Debugger.CommandManager = class(CommandManager) function Debugger.CommandManager:construct(debugger) CommandManager.construct(self) self.debugger = debugger end function Debugger.CommandManager:OnTranslateCommand(command, args) print(command) nargs = args:GetNArg() if (nargs>=1) and (args:GetArg(0) == 'ldb') then _args = {} for i=2, args:GetNArg() do table.insert(_args, args:GetArg(i-1)) end debugger_command = table.concat(_args, ' ') print('(ldb) '..debugger_command) self.debugger:handleMessage(debugger_command) return gmp.CMD_RESULT_OK end return gmp.CMD_RESULT_UNKNOWN end function Debugger:construct() self.client = self.Client() self.debugger = lua.debug.createDebugger(self.client) self.client.debugger = self.debugger self.cmd_manager = self.CommandManager(self.debugger) print('(ldb) '..'ready!') end end function initConsole() LuaConsole = class() function LuaConsole:construct() self.cmd_manager = self.CommandManager() end LuaConsole.CommandManager = class(CommandManager) function LuaConsole.CommandManager:OnTranslateCommand(command, args) local nargs = args:GetNArg() if (nargs>=1) and (args:GetArg(0) == 'lua') then local _args = {} for i=2, args:GetNArg() do table.insert(_args, args:GetArg(i-1)) end local chunk = table.concat(_args, ' ') print('(lua)', chunk) local compiled, error = loadstring(chunk, chunk) if compiled then compiled() else print(error) end return gmp.CMD_RESULT_OK end return gmp.CMD_RESULT_UNKNOWN end lua_console = LuaConsole() end function main() print = crs.print function sendDebugMessage(message) if configuration~='master' then con.game.GameProjectServer:sendText(message) end end function crsLog(level, message) crsLogFileLine('', -1, level, 'lua', message) end function logMessage(level, text) sendDebugMessage(text) for i, value in ipairs(string.split(text, '\n')) do crsLog(level, value) end end function fatalError(text) error(text) end function fs.FILE_STREAM_readString(self, maxLen) local buf = StringBuffer:new(maxLen) fs.readString(self, buf, maxLen, 0) local result = buf:asString() buf:delete() return result end if configuration~='master' then CommandManager = gmp.HDL_CMD_MANAGER initServer() initConsole() initDebugger() end Importer = class(sbf2.HDL_IMPORT) function Importer:construct(name) sbf2.HDL_IMPORT.construct(self, name) end Reader = class() function Reader:construct(pReader, startOffset) self.pReader = pReader self.startOffset = startOffset end function Reader:getPtr(pReader) return fs.FILE_STREAM_getCurrentPointer(self.pReader, self.startOffset) end function Reader:skipBytes(bytes) self.pReader:Seek(bytes, fs.FS_SEEK_CUR) end function Reader:read(text_length) local buf = StringBuffer:new_local(text_length) self.pReader:Read(buf.data, text_length) return asLengthString(buf.data, text_length) end function Reader:readByte() local size_read, value = self.pReader:ReadByte(0) return value end function Reader:readDWord() local _, value = self.pReader:ReadDWord(0) return value end function Reader:readString(length) return fs.FILE_STREAM_readString(self.pReader, length) end function readTextFromStream(script_file, text_length) return script_file:read(text_length) end function readTextFromFile(script_fpath) local file_system = fs.System local script_file = file_system:OpenFile( script_fpath, fs.OPEN_FILE_READ, fs.OPEN_FILE_SHARE_READ, fs.OPEN_FILE_OPENEXIST) local text_length = script_file:GetFileSize() local text = readTextFromStream(Reader(script_file, 0), text_length) script_file:Close() return text end function isFile(fpath) local file_system = fs.System return fs.FS_ERROR_NONE==file_system:IsFileExist(fpath) end function readScriptFromRemoteFile(fpath) if platform=='win32' then return CompiledScript(assert(loadfile(fpath)), fpath) else return TextScript(readTextFromFile(fpath), fpath) end end TextPtrScript = class() function TextPtrScript:construct(ptr, size, fpath) self.ptr = ptr self.size = size self.fpath = fpath end function TextPtrScript:getCompiled() return self:compile() end function TextPtrScript:compile() local text_length= self.size local text = asLengthString(self.ptr, text_length) local compiled, message = loadstring(text, self.fpath) if not compiled then fatalError(message) end return compiled end TextScript = class() function TextScript:construct(text, fpath) self.text = text self.fpath = fpath end function TextScript:getCompiled() return self:compile() end function TextScript:compile() local compiled, message = loadstring(self.text, self.fpath) if not compiled then fatalError(message) end return compiled end CompiledScript = class() function CompiledScript:construct(compiled, fpath) self.compiled = compiled self.fpath = fpath end function CompiledScript:getCompiled() return self.compiled end function readScript(reader) local has_debug_info = 1==reader:readByte() local script_size = reader:readDWord() local script_ptr = reader:getPtr() reader:skipBytes(script_size) if not has_debug_info then return TextPtrScript(script_ptr, script_size, '<unknown sbf script>') else local script_fpath = reader:readString(MAX_PATH) if isFile(script_fpath) then return readScriptFromRemoteFile(script_fpath) else crsLog(crs.MSG_WARNING, 'file '..script_fpath..' not found. Retrieving script data from SBF.') return TextPtrScript(script_ptr, script_size, script_fpath) end end end function createScriptEnv() local env = {} setmetatable(env, {__index=_G}) return env end function executeScript(script, env) local compiled = script:getCompiled() setfenv(compiled, env) compiled() script.env = env end MemoryTracer = class() function MemoryTracer:construct() self.stack = {} end function MemoryTracer:Push() table.insert(self.stack, true) end function MemoryTracer:Pop() table.remove(self.stack) end function MemoryTracer:Report() local gc_mem, gc_thresh = gcinfo() collectgarbage() local gc_mem_new, gc_thresh_new = gcinfo() self:Log( 'mem usage:', gc_mem, gc_thresh, ';', 'after collectgarbage', gc_mem_new, gc_thresh_new) end function MemoryTracer:Log(...) local indent_size = table.getn(self.stack)-1 local indent = string.rep('----', indent_size) print(indent, unpack(arg)) end memory_tracer = MemoryTracer() LuaExecutable = class(Importer) function LuaExecutable:construct() Importer.construct(self, "LuaExecutable") self.scripts = {} end function LuaExecutable:OnLoadContent( pLoader, version, startOffset, pReader, sbfHandle, pDebugInfo) memory_tracer:Push() memory_tracer:Log('LuaExecutable load', sbfHandle) memory_tracer:Report() local script = readScript(Reader(pReader, startOffset)) memory_tracer:Log('fpath:', script.fpath) memory_tracer:Report() memory_tracer:Pop() self.scripts[sbfHandle] = script return true; end function LuaExecutable:OnAfterSBFLoaded( pLoader, version, startOffset, pReader, sbfHandle, pDebugInfo) memory_tracer:Push() memory_tracer:Log('LuaExecutable execute', sbfHandle) memory_tracer:Report() executeScript(self.scripts[sbfHandle], createScriptEnv()) memory_tracer:Report() memory_tracer:Pop() end function LuaExecutable:OnUnLoadContent( pLoader, version, startOffset, pReader, sbfHandle, pDebugInfo) memory_tracer:Push() memory_tracer:Log('LuaExecutable', sbfHandle, 'unload.') self.scripts[sbfHandle] = nil memory_tracer:Report() memory_tracer:Pop() end lua_executable = LuaExecutable() LuaPackage = class(Importer) function LuaPackage:construct() Importer.construct(self, "LuaPackage") self.scripts = {} self.names = {} end function LuaPackage:OnLoadContent( pLoader, version, startOffset, pReader, sbfHandle, pDebugInfo) memory_tracer:Push() memory_tracer:Log('LuaPackage load:', sbfHandle) memory_tracer:Report() local reader = Reader(pReader, startOffset) local name = reader:readString(MAX_PATH) local script = readScript(reader) memory_tracer:Log('fpath:', script.fpath) self.scripts[sbfHandle] = script self.names[sbfHandle] = name memory_tracer:Pop() return true end function LuaPackage:OnUnLoadContent( pLoader, version, startOffset, pReader, sbfHandle, pDebugInfo) memory_tracer:Push() memory_tracer:Log('LuaPackage', sbfHandle, 'unload.') memory_tracer:Report() self.scripts[sbfHandle] = nil self.names[sbfHandle] = nil memory_tracer:Report() memory_tracer:Pop() end lua_package = LuaPackage() function require(package_name) for key, name in pairs(lua_package.names) do if name==package_name then memory_tracer:Push() memory_tracer:Log('LuaPackage execute:', key) executeScript(lua_package.scripts[key], getfenv(2)) memory_tracer:Report() memory_tracer:Pop() return end end error("require: Can't find package "..package_name) end GCTicker = class(Ticker) function GCTicker:construct() Ticker.construct(self) self.frames_passed = 1 end function GCTicker:OnTimer(e) self.frames_passed = self.frames_passed+1 if self.frames_passed>1 then collectgarbage('step', 10) self.frames_passed = 1 end end gcticker = GCTicker() gcticker:Start() print("SystemLib main.lua executed!") print("memory usage:", gcinfo()) collectgarbage() print("memory usage after collectgarbage:", gcinfo()) end LoadEventHandlerManager = class(gm.GameEventsHandler) function LoadEventHandlerManager:construct() gm.GameEventsHandler.construct(self) gmLoader_setReceiver(self.this) self.handlers = WeakSet() self.new_handlers = WeakSet() end function LoadEventHandlerManager:OnFinished() for handler in self.handlers:Values() do handler:OnFinished() end for handler in self.new_handlers:Values() do handler:OnLoadFinished() end end function LoadEventHandlerManager:OnUnloadBefore() for handler in self.new_handlers:Values() do handler:OnBeforeUnload() end end LoadEventHandlerManager.instance = LoadEventHandlerManager() LoadFinishedEventHandler = class() function LoadFinishedEventHandler:construct() LoadEventHandlerManager.instance.handlers:Add(self) end function LoadFinishedEventHandler:OnFinished() end LoadEventHandler = class() print('LoadEventHandler') print(LoadEventHandler) function LoadEventHandler:construct() if not LoadEventHandlerManager.instance then LoadEventHandlerManager.instance = LoadEventHandlerManager() end LoadEventHandlerManager.instance.new_handlers:Add(self) end function LoadEventHandler:OnLoadFinished() end function LoadEventHandler:OnBeforeUnload() end platform = 'ps2' configuration = 'master' function game_code_init() _G.import = create_import_cached( function() return _G end, require ) print('game system lua executed') end
The Aqua Teen Hunger Force series
| |
---|---|
PlayStation 2 | Zombie Ninja Pro-Am |
Adobe Flash | Master Shake's Diving Contest |
See Also | |
Cartoon Network |
- Pages missing developer references
- Games developed by Creat Studios
- Pages missing publisher references
- Games published by Midway Games
- PlayStation 2 games
- Pages missing date references
- Games released in 2007
- Games released in November
- Games released on November 5
- Games released on November 15
- Games released on November 16
- Games with uncompiled source code
- Games with hidden development-related text
- Games with unused graphics
- Games with unused music
- To do
- Aqua Teen Hunger Force series
Cleanup > Pages missing date references
Cleanup > Pages missing developer references
Cleanup > Pages missing publisher references
Cleanup > To do
Games > Games by content > Games with hidden development-related text
Games > Games by content > Games with uncompiled source code
Games > Games by content > Games with unused graphics
Games > Games by content > Games with unused music
Games > Games by developer > Games developed by Creat Studios
Games > Games by platform > PlayStation 2 games
Games > Games by publisher
Games > Games by publisher > Games published by Warner Bros. Games > Games published by Midway Games
Games > Games by release date > Games released in 2007
Games > Games by release date > Games released in November
Games > Games by release date > Games released in November > Games released on November 15
Games > Games by release date > Games released in November > Games released on November 16
Games > Games by release date > Games released in November > Games released on November 5
Games > Games by series > Aqua Teen Hunger Force series