If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Operation G.H.O.S.T.

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Operation G.H.O.S.T.

Developer: SKonec Entertainment
Publisher: Sega
Platform: Arcade (Sega RingWide)
Released internationally: October 2011
Released in JP: April 2012


SourceIcon.png This game has uncompiled source code.
GraphicsIcon.png This game has unused graphics.
MovieIcon.png This game has unused cinematics.
MusicIcon.png This game has unused music.


So very stubbly.
This page is rather stubbly and could use some expansion.
Are you a bad enough dude to rescue this article?

A sequel to Sega AM2's rail shooter Ghost Squad, only this time without AM2's involvement.

Internal Project Name

The .exe and .ini files are named gs2, which likely stands for Ghost Squad 2.

Unused Graphics

Found within some UI image files are UI_video_chat_form.png and UI_routemap_movie.png, two placeholder graphics for cutscene imagery.

There's also placeholder graphics, UI_TO_cam1.png and UI_TO_cam2.png, in the UI_route_demo folder for the "Reference Room" and "Elevator Hall" text in the second stage's route map, respectively.

Unused Video

og_tobecontinued3-2.wmv is a cutscene promoting a "completed" version of the game, likely leftover from a location tested or prototype version.

Uncompiled Source Code

Present in the same folder as the unused "to be continued" video are two equally-unused Lua scripts for it.

main.lua

	
------------------------------- UTF-8로 저장하기 위한 코멘트/UTF-8でセーブするためのコメント
require ("tools/bindEx" )
require ("tools/og_sequence" )
require ("tools/og_task" )
require ("Sound/Sound" )



local frame = 0
local s_TaskMgr = nil

local g_GeneralSE = new_SoundBank("SE_general.sound", true)

PlayInfo.GM_ToBeContinue()

local function TobeContinueObject()

   local TobeCon_movie = LwMovie( "scene/to_be_continue/og_tobecontinued3-2.wmv" )
   local TobeCon_img_movie = TobeCon_movie:GetTexture()
   local led_space = 12
   TobeCon_img_movie:SetCell( 0, RECT( 0,0,1024 + led_space * 2, 600 + led_space * 2 ) )


   local tbl = {
      Main = function(self)
             end,
      
      Draw = function(self)			
                lwMatrix:Push()
                do 
                   lwMatrix:Translate( 0, 600 , 0 );
                   local x = 1024 / ( 1024 + led_space * 2 );
                   local y = 600 / ( 600 + led_space *2 );
                   lwMatrix:Scale( x, -y,1.0 );
                   TobeCon_img_movie:DrawCell( 0 );
                end
                lwMatrix:Pop()
                
                lwMisc:DebugPrint( "Status".. TobeCon_movie:GetStatus() );
                
             end,
      
      Stop = function(self)
                s_TaskMgr:Remove(self)
             end,
      
      IsPlay = function( self )
                  return TobeCon_movie:GetStatus() == 3
               end,
   }


   do
      ChangeBGM("OG_bgm_tobecontinue.sound")
      lwPostEffect:SetMode( PEM_MOVIE )
      TobeCon_movie:SetPosition(0, 0, SCR_W, SCR_H)
      TobeCon_movie:SetEnableRepeat(0)
      lwMisc:DebugEvent( "TobeCon:Play" )
      TobeCon_movie:Play()
      lwMisc:DebugLog( "TobeCon" .. TobeCon_movie:GetStatus() );
   end

   s_TaskMgr:Add( "continue", tbl )
   return tbl
end



local GameOverObject = function()
	local	nCurrentFrame	= 0
	local   animation		= nil
	local   KeepFrame       = nil
	
	local function GameOverSeq()
       while true do
          if nCurrentFrame > KeepFrame then
             while true do coroutine.yield() end
          end
          
          nCurrentFrame = nCurrentFrame + 1
          coroutine.yield()
       end
	end
	
	local m_co = coroutine.wrap( function()
                                    while true do
									   local tempPath = AppSetting.ConvertPath("img/UI/UI_gameover/UI_@/UI_gameover.anim")
                                       animation = LwAnimation(tempPath, forLua.PRI_IMMEDIATELY)
                                       KeepFrame = animation:GetAnimationLength(0) - 1
                                       GameOverSeq()
                                       animation = nil
                                       while true do coroutine.yield() end
                                    end
                                 end )
	
	local	tbl	= {
       Main	= function(self)
                 m_co()
              end,
       
       Draw	= function(self)			
                 local f = nCurrentFrame
                 if f > KeepFrame then 
                    f = KeepFrame 
                 end
                 animation:DrawAnimation(0, f)
              end,
       
       Stop	= function(self)
                 s_TaskMgr:Remove(self)
                 animation = nil
              end,
	}

    g_GeneralSE:Play("gameover")
    s_TaskMgr:Add( "taskGameOver", tbl )


	return tbl
end



function WaitFrame(frame)
   local iFrame = 0
   while iFrame < frame do
      iFrame = iFrame + 1
      coroutine.yield()
   end
end


local function sequence()

   if true then
      local tobecon = TobeContinueObject()

      
      while tobecon:IsPlay() do
         coroutine.yield();
      end
      tobecon:Stop()
   end
   
   if true then
      local gameover = GameOverObject()
      WaitFrame( 200 )
      gameover:Stop()
   end
      
      

   lwLauncher:SetFile( "scene/title/main.lua" )

   while true do
      coroutine.yield();
   end

end

local function Init()
   s_TaskMgr = og_task.ManagerCreate( "task" )
   s_TaskMgr:Add( "Sequence", og_sequence.ManagerCreate( sequence, "Sequence" ) )
end

function Main()

   if frame == 0 then
      Init()
   end
   s_TaskMgr:Main()
   frame = frame + 1
end

function Draw()
   s_TaskMgr:Draw()
   s_TaskMgr:DebugPrint( 2 )
end

seq_m3_result.lua

	
------------------------------- UTF-8로 저장하기 위한 코멘트/UTF-8でセーブするためのコメント
local TobeCon_movie = LwMovie( "scene/m_desert_result/og_tobecontinued_wmv9_95.wmv" )

local TobeCon_img_movie = TobeCon_movie:GetTexture()
local led_space = 12
TobeCon_img_movie:SetCell( 0, RECT( 0,0,1024 + led_space * 2, 600 + led_space * 2 ) )

function MovieDraw()
   lwMatrix:Push()
   do 
      lwMatrix:Translate( 0, 600 , 0 );
      local x = 1024 / ( 1024 + led_space * 2 );
      local y = 600 / ( 600 + led_space *2 );
      lwMatrix:Scale( x, -y,1.0 );
      TobeCon_img_movie:DrawCell( 0 );
   end
   lwMatrix:Pop()
end




local TobeContinueObject = function()
	local	nCurrentFrame	= 0
	local	taskMgr			= nil

	local	tbl	= {
		Main	= function(self)
			nCurrentFrame = nCurrentFrame + 1
		end,

		Draw	= function(self)			
			MovieDraw()
		end,

		Start	= function(self, taskMgr_)
			taskMgr = taskMgr_
			taskMgr:Add( "taskTobeContinue", self )
			ChangeBGM("OG_bgm_tobecontinue.sound")
			lwPostEffect:SetMode( PEM_MOVIE )
		end,
		
		Stop	= function(self)
			taskMgr:Remove(self)
			taskMgr	= nil
			
		end,
	}
	return tbl
end


local GameOverObject = function()
	local	nCurrentFrame	= 0
	local	taskMgr			= nil
	local   aniGameOver		= nil
	local   KeepFrame       = nil
	
	local function GameOverSeq()
		while true do
			if nCurrentFrame > KeepFrame then
					while true do coroutine.yield() end
			end
			
			nCurrentFrame = nCurrentFrame + 1
			coroutine.yield()
		end
	end
	
	local m_co = coroutine.wrap( function()
		while true do
			local tempPath = AppSetting.ConvertPath("img/UI/UI_gameover/UI_@/UI_gameover.anim")
			aniGameOver = LwAnimation(tempPath, forLua.PRI_IMMEDIATELY)
			KeepFrame = aniGameOver:GetAnimationLength(0) - 1
			GameOverSeq()
			aniGameOver = nil
			while true do coroutine.yield() end
		end
	end )
	
	local	tbl	= {
		Main	= function(self)
			m_co()
		end,

		Draw	= function(self)			
				local f = nCurrentFrame
				
				--img:SetCell( 0, RECT( 0,0,SCR_W,SCR_H) )
				--img:DrawCell(0)
				if f > KeepFrame then f = KeepFrame end
					aniGameOver:DrawAnimation(0, f)
		end,

		Start	= function(self, taskMgr_)
			taskMgr = taskMgr_
			taskMgr:Add( "taskGameOver", self )
			g_GeneralSE: Play("gameover")
			
		end,
		
		Stop	= function(self)
			taskMgr:Remove(self)
			taskMgr	= nil
			aniGameOver = nil
		end,
	}
	return tbl
end

-- seq info
Seq_m3_result_Info = function()
	return {
		name = "Seq-m3-result",
		main = Seq_m3_result, 
		goto = {
		},
		preload = "scene/to_be_continue/seq_m3_result.preload",
	}
end


function Seq_m3_result()
	SetShootable(false)
	g_bTestHUD	= false
	
	
	local RO = dofile("lua/Direction/ResultScreen.lua")
	RO:Start( g_TaskMgr )	
	RO:Stop()
	RO = nil

	-- 로케 대응 코드
    local tobecon = TobeContinueObject()
    tobecon:Start(g_TaskMgr)
	
	--厭廃汽 advertise Movie亜 馬球 坪漁 鞠嬢赤嬢辞
	--差紫 細食隔奄稽 ToBeContinueMovie 坦軒鞠醸製. 託板 呪舛戚 琶推敗.
     do -- play
     TobeCon_movie:SetPosition(0, 0, SCR_W, SCR_H)
     TobeCon_movie:SetEnableRepeat(0)
     lwMisc:DebugEvent( "TobeCon:Play" )
     TobeCon_movie:Play()
     lwMisc:DebugLog( "TobeCon" .. TobeCon_movie:GetStatus() );
      while TobeCon_movie:GetStatus() == 3 do
      lwMisc:DebugPrint( "WaitStop".. TobeCon_movie:GetStatus() );
      coroutine.yield();
      end
 end
  
 WaitFrame(100)
 tobecon:Stop()
  tobecon = nil
	
  local gameover = GameOverObject()
  gameover:Start(g_TaskMgr)
	
  WaitFrame(200)
  gameover:Stop()
  gameover = nil
	

	 ResetCritical()

 	lwLauncher:SetFile( "scene/m_ship/Main.lua" )
end