<div align="center"><img src="http://i49.tinypic.com/256dag2.jpg" border="0" class="linked-image" /></div>
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->------------------------------------------------------------------------------
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ _ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ ____ ____
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |ÂÂÂÂÂÂÂÂÂÂÂÂ / _ÂÂ|ÂÂ_ \
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |ÂÂÂÂÂÂ__ÂÂ__/ /_| | |_\ \
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |ÂÂÂÂ / / / /ÂÂ__ÂÂ|ÂÂ__ÂÂ\
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |____/ /_/ /ÂÂ/ÂÂ| | |ÂÂ\ÂÂ\
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ|______\____/__/ÂÂ |_|_|ÂÂ \__\
--
------------------------------------------------------------------------------<!--c2--></div><!--ec2-->
<div align="center"><img src="http://i46.tinypic.com/2n8v2fn.png" border="0" class="linked-image" /><img src="http://i45.tinypic.com/23sbx2x.png" border="0" class="linked-image" /><img src="http://i50.tinypic.com/w6s07q.png" border="0" class="linked-image" />
<img src="http://i46.tinypic.com/29z2zwn.png" border="0" class="linked-image" /><img src="http://i49.tinypic.com/rcrfw9.png" border="0" class="linked-image" /><img src="http://i50.tinypic.com/fkcgts.png" border="0" class="linked-image" />
<img src="http://i46.tinypic.com/eueut0.png" border="0" class="linked-image" /><img src="http://i50.tinypic.com/293esyh.png" border="0" class="linked-image" /></div>
LuAA is an Ace Attorney Casemaker scripted using <a href="http://lua.com/lua/" target="_blank">Lua</a>. This project is very community-based, so comments/questions/bug reports are always welcome. This will be open source.
<!--coloro:#317BFF--><span style="color:#317BFF"><!--/coloro--><!--sizeo:200--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->GENERAL INFORMATION::<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
<b>What makes LuAA special?</b>
LuAA is an engine that combines flexibility within an easy-to-use user interface. Using Lua, a very versatile and popular programming language now (even Blizzard is using it for developing World of Warcraft add-ons), LuAA combines the Micro Lua DS library with custom functions embedded for use in emulating an Ace Attorney gaming environment.
<b>Are there any applications required for the use of LuAA?</b>
Besides the tools, emulators and editors (such as Lua editors, I prefer notepad myself ^^) included with the LuAA repository, there will never be a need for any exterior applications to be used for LuAA.
<b>What image/audio formats does LuAA support?</b>
In terms of images, LuAA supports .jpg/.gif/.png images. These images need not be parsed into binary files, etc.; they are loaded from their raw formats.
In terms of audio, LuAA supports .mod/.s3m/.xm/.it (module files) for background music. LuAA also supports .wav files for sound effects.
<b>Where would I be able to learn Lua?</b>
You should not need to fully utilize Lua's power when using the engine for simple tasks. However, if you wish to expand your knowledge or extend the power of the Micro Lua DS engine, here are some resources (I myself used ^^):
<a href="http://www.lua.org/manual/5.1/index.html" target="_blank">http://www.lua.org/manual/5.1/index.html</a>
<a href="http://lua-users.org/wiki/LuaDirectory" target="_blank">http://lua-users.org/wiki/LuaDirectory</a>
<a href="http://lua-users.org/wiki/LuaTutorial" target="_blank">http://lua-users.org/wiki/LuaTutorial</a>
Again, if you have questions on how to use the engine/Lua itself, I am always welcome <img src="style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid="" border="0" alt="smile.gif" />
<!--coloro:#317BFF--><span style="color:#317BFF"><!--/coloro--><!--sizeo:200--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->PLATFORMS::<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
LuAA will be supported on:
<b>Windows:</b>
no$gba emulator
Micro Lua DS simulator
<b>Linux:</b>
With wine:
no$gba emulator
Without wine:
Micro Lua DS simulator
<b>Mac OSX:</b>
With wine:
no$gba emulator
Without wine:
Micro Lua DS simulator
<b>Nintendo DS:</b>
With a flashcard, you can boot LuAA onto it and play it from there <img src="style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid="" border="0" alt="smile.gif" />
<!--coloro:#317BFF--><span style="color:#317BFF"><!--/coloro--><!--sizeo:200--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->DOWNLOADS::<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
DEMO!
<a href="http://www.mediafire.com/?432djngmih3" target="_blank">http://www.mediafire.com/?432djngmih3</a>
You must run this demo using no$gba emulator, which you can download here:
<a href="http://nocash.emubase.de/gba.htm" target="_blank">http://nocash.emubase.de/gba.htm</a>
It will not run on an actual DS (you can, however, run it on an actual DS if you have the FAT version).
Yes it will run on a PC! This means a port is usually not needed if you choose to make the game directly with LuAA! Have fun ^^
Here's an example script:
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->_G["Studio Path"] = function()
ÂÂ fade_in( SCREEN_UP, 1 )
ÂÂ newbg( "locations/globalstudiocamera", 256 )
ÂÂ fade_out( SCREEN_UP, 1 )
ÂÂ newhotspot(61, 2, 182, 34, "Welcome Sign")
ÂÂ newhotspot(109, 45, 71, 59, "Broken Statue")
ÂÂ newhotspot(34, 25, 27, 29, "Camera")
ÂÂ newhotspot(196, 70, 40, 25, "Studio One Entrance")
ÂÂ newmov(gs_gate, gs_studio2)
ÂÂ interact = function(mode, selected)
ÂÂÂÂÂÂif mode == EXAMINE then
ÂÂÂÂÂÂÂÂ if selected == "Welcome Sign" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(What a welcoming sign...)")
ÂÂÂÂÂÂÂÂ elseif selected == "Broken Statue" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Looks like it's still broken. Hmm.)")
ÂÂÂÂÂÂÂÂ elseif selected == "Camera" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Hmm, the camera's model number is SC-2M0.)")
ÂÂÂÂÂÂÂÂ elseif selected == "Studio One Entrance" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(There's no point in entering Studio One today...)")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ goto("examine")
ÂÂÂÂÂÂelseif mode == MOVE then
ÂÂÂÂÂÂÂÂ goto(selected)
ÂÂÂÂÂÂend
ÂÂ end
ÂÂ goto("interaction")
end
_G["Global Studio's Gate"] = function()
ÂÂ fade_in( SCREEN_UP, 1 )
ÂÂ newbg( "locations/globalstudioentrance", 256 )
ÂÂ newspeaker( "", SFX_TYPEWRITER )
ÂÂ newalign(ALIGN_CENTER)
ÂÂ newcolor("00FF00")
ÂÂ fade_out( SCREEN_UP, 1 )
ÂÂ interact = function(mode, selected)
ÂÂÂÂÂÂif mode == EXAMINE then
ÂÂÂÂÂÂÂÂ newspeaker("Phoenix")
ÂÂÂÂÂÂÂÂ newcolor("6BC6F7")
ÂÂÂÂÂÂÂÂ if selected == "Security Booth" then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("(The security booth containing images from various security cameras in the park.)")
ÂÂÂÂÂÂÂÂÂÂÂÂif gumshoeIsGone == true then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("(Hmm... it looks like all the camera IDs are here...)")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("(Which camera would have the images I want?){next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ goto("dynamicoptions", "SC-4G8", "SC-2M0", "SC-8Z1")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ if selected == "SC-4G8" or selected == "SC-8Z1" then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Doesn't look like this one has anything I need...){next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg("(...? Wait a second...)")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg("(This could come in handy!)")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂaddev(photo)
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂshowaddev(evidence[ table.maxn(evidence) ])
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg(evidence[ table.maxn(evidence) ].name .. " added to the court record.{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂÂÂÂÂelse
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("WHAT ARE YOU LOOKING AT, PAL?!")
ÂÂÂÂÂÂÂÂÂÂÂÂend
ÂÂÂÂÂÂÂÂ elseif selected == "Gate" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(The fenced, metal gate used to blockade the entrance for Global Studios.)")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Apparently, there's been a lot of fanboys sneaking in lately...)")
ÂÂÂÂÂÂÂÂ elseif selected == "Van" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(A random van is parked in the parking lot.)")
ÂÂÂÂÂÂÂÂ elseif selected == "Sign" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(A sign illustrating Global Studio's map.)")
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Nothing interesting here...)")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ if hasev(photo) == true then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(I think I'm ready for tomorrow's trial...)")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Or at least, I better be ready...)")
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("District Lobby")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ goto("examine")
ÂÂÂÂÂÂelseif mode == MOVE then
ÂÂÂÂÂÂÂÂ if gumshoeIsGone == true then
ÂÂÂÂÂÂÂÂÂÂÂÂgoto(selected)
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂnewcolor("FFFFFF")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Don't be entering the crime scene now!{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("move")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂelseif mode == TALK then
ÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂ if selected == "Defendant" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("The victim's name is Yak Uza.")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasev(pr_yakuza) == false then addev(pr_yakuza) end
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("confident")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("He's had a history with the mafia... sort of had it coming.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("side")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Don't worry though, I think we found our man.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("This guy did it for sure! I'm telling you!")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasev(pr_furio) == false then addev(pr_furio) end
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("pumped")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("They call him 'The Tiger'. He's a crook! His name's {newcolor(F77339)}Furio Tigre{newcolor(FFFFFF)}.")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("All the evidence points against him, including his gun.")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasopt("Murder Weapon") == false then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ addtlk("Murder Weapon")
ÂÂÂÂÂÂÂÂÂÂÂÂend
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("disheartened")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Oops. Pretend I didn't say that.{next}")
ÂÂÂÂÂÂÂÂ elseif selected == "Murder Weapon" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("laughing")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("I guess the cat's out of the bag.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("That Furio Tigre guy used his pistol.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("thinking")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Or at least I think it's his pistol.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Anyways, he's a CROOK! I'm telling you!")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("disheartened")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("I'm afraid I don't have the pistol on me.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("confident")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("But we also found a {showbullet()}bullet in the victim's body.")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasev(report) == false then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("Here's the autopsy report.")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ addev(report)
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ showaddev(evidence[ table.maxn(evidence) ])
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newspeaker("")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newcolor("6BC6F7")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg(evidence[ table.maxn(evidence) ].name .. " added to the court record.{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂelse
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("The pistol used 8 mm bullets.{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂend
ÂÂÂÂÂÂÂÂ elseif selected == "Decisive evidence" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("The killer's fingerprints on the pistol match a set at the crime scene.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("thinking")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("The set is on a bottle of expired soy milk, pal.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("laughing")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Yeah, we got a sour killer out there.")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Hahaha... pal.{next}")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ if hasev(pr_furio) == true and hasev(report) == true and talked["Decisive evidence"] == true then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Hmm... looks like I gotta get back to the precinct.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Don't be nosing around, pal!")
ÂÂÂÂÂÂÂÂÂÂÂÂgumshoeIsGone = true
ÂÂÂÂÂÂÂÂÂÂÂÂnewchar( nil )
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker( nil )
ÂÂÂÂÂÂÂÂÂÂÂÂalpha_out( SCREEN_UP, 1, "art/char/Gumshoe/mad(talk)", 1024 )
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("interaction")
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("talk")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂelseif mode == PRESENT then
ÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂ if selected == "Dick Gumshoe" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("confident")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Handsome, aren't I?{next}")
ÂÂÂÂÂÂÂÂ elseif selected == "Attorney Badge" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("side")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("I already know you're an attorney...{next}")
ÂÂÂÂÂÂÂÂ elseif selected == "Autopsy Report" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Phoenix")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Why is the time of death unknown?")
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("pumped")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Because it IS! Can't you read?!")
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Phoenix")
ÂÂÂÂÂÂÂÂÂÂÂÂnewcolor("6BC6F7")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(sheesh...){next}")
ÂÂÂÂÂÂÂÂÂÂÂÂnewcolor("FFFFFF")
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("thinking")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Why are you showing me this?{next}")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ goto("present")
ÂÂÂÂÂÂend
ÂÂ end
end
------------------------------------------------------------------------------
-- LOCATION VARIABLES
------------------------------------------------------------------------------
gs_gate = {
ÂÂ name = "Global Studio's Gate",
ÂÂ pic = "move/globalstudioentrance.gif",
}
gs_entrance = {
ÂÂ name = "Studio Path",
ÂÂ pic = "move/globalstudiocamera.gif",
}
gs_studio2 = {
ÂÂ name = "Studio 2",
ÂÂ pic = "move/globalstudio2a.gif",
}
gs_studio2van = {
ÂÂ name = "Studio 2 Cottage",
ÂÂ pic = "move/globalstudiovan.gif",
}<!--c2--></div><!--ec2-->
The API should be fairly simple enough, I will dim it down if I need to!
Estimated time of arrival : February 2010.
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->------------------------------------------------------------------------------
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ _ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ ____ ____
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |ÂÂÂÂÂÂÂÂÂÂÂÂ / _ÂÂ|ÂÂ_ \
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |ÂÂÂÂÂÂ__ÂÂ__/ /_| | |_\ \
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |ÂÂÂÂ / / / /ÂÂ__ÂÂ|ÂÂ__ÂÂ\
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ| |____/ /_/ /ÂÂ/ÂÂ| | |ÂÂ\ÂÂ\
--ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ|______\____/__/ÂÂ |_|_|ÂÂ \__\
--
------------------------------------------------------------------------------<!--c2--></div><!--ec2-->
<div align="center"><img src="http://i46.tinypic.com/2n8v2fn.png" border="0" class="linked-image" /><img src="http://i45.tinypic.com/23sbx2x.png" border="0" class="linked-image" /><img src="http://i50.tinypic.com/w6s07q.png" border="0" class="linked-image" />
<img src="http://i46.tinypic.com/29z2zwn.png" border="0" class="linked-image" /><img src="http://i49.tinypic.com/rcrfw9.png" border="0" class="linked-image" /><img src="http://i50.tinypic.com/fkcgts.png" border="0" class="linked-image" />
<img src="http://i46.tinypic.com/eueut0.png" border="0" class="linked-image" /><img src="http://i50.tinypic.com/293esyh.png" border="0" class="linked-image" /></div>
LuAA is an Ace Attorney Casemaker scripted using <a href="http://lua.com/lua/" target="_blank">Lua</a>. This project is very community-based, so comments/questions/bug reports are always welcome. This will be open source.
<!--coloro:#317BFF--><span style="color:#317BFF"><!--/coloro--><!--sizeo:200--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->GENERAL INFORMATION::<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
<b>What makes LuAA special?</b>
LuAA is an engine that combines flexibility within an easy-to-use user interface. Using Lua, a very versatile and popular programming language now (even Blizzard is using it for developing World of Warcraft add-ons), LuAA combines the Micro Lua DS library with custom functions embedded for use in emulating an Ace Attorney gaming environment.
<b>Are there any applications required for the use of LuAA?</b>
Besides the tools, emulators and editors (such as Lua editors, I prefer notepad myself ^^) included with the LuAA repository, there will never be a need for any exterior applications to be used for LuAA.
<b>What image/audio formats does LuAA support?</b>
In terms of images, LuAA supports .jpg/.gif/.png images. These images need not be parsed into binary files, etc.; they are loaded from their raw formats.
In terms of audio, LuAA supports .mod/.s3m/.xm/.it (module files) for background music. LuAA also supports .wav files for sound effects.
<b>Where would I be able to learn Lua?</b>
You should not need to fully utilize Lua's power when using the engine for simple tasks. However, if you wish to expand your knowledge or extend the power of the Micro Lua DS engine, here are some resources (I myself used ^^):
<a href="http://www.lua.org/manual/5.1/index.html" target="_blank">http://www.lua.org/manual/5.1/index.html</a>
<a href="http://lua-users.org/wiki/LuaDirectory" target="_blank">http://lua-users.org/wiki/LuaDirectory</a>
<a href="http://lua-users.org/wiki/LuaTutorial" target="_blank">http://lua-users.org/wiki/LuaTutorial</a>
Again, if you have questions on how to use the engine/Lua itself, I am always welcome <img src="style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid="" border="0" alt="smile.gif" />
<!--coloro:#317BFF--><span style="color:#317BFF"><!--/coloro--><!--sizeo:200--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->PLATFORMS::<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
LuAA will be supported on:
<b>Windows:</b>
no$gba emulator
Micro Lua DS simulator
<b>Linux:</b>
With wine:
no$gba emulator
Without wine:
Micro Lua DS simulator
<b>Mac OSX:</b>
With wine:
no$gba emulator
Without wine:
Micro Lua DS simulator
<b>Nintendo DS:</b>
With a flashcard, you can boot LuAA onto it and play it from there <img src="style_emoticons/<#EMO_DIR#>/smile.gif" style="vertical-align:middle" emoid="" border="0" alt="smile.gif" />
<!--coloro:#317BFF--><span style="color:#317BFF"><!--/coloro--><!--sizeo:200--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->DOWNLOADS::<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
DEMO!
<a href="http://www.mediafire.com/?432djngmih3" target="_blank">http://www.mediafire.com/?432djngmih3</a>
You must run this demo using no$gba emulator, which you can download here:
<a href="http://nocash.emubase.de/gba.htm" target="_blank">http://nocash.emubase.de/gba.htm</a>
It will not run on an actual DS (you can, however, run it on an actual DS if you have the FAT version).
Yes it will run on a PC! This means a port is usually not needed if you choose to make the game directly with LuAA! Have fun ^^
Here's an example script:
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->_G["Studio Path"] = function()
ÂÂ fade_in( SCREEN_UP, 1 )
ÂÂ newbg( "locations/globalstudiocamera", 256 )
ÂÂ fade_out( SCREEN_UP, 1 )
ÂÂ newhotspot(61, 2, 182, 34, "Welcome Sign")
ÂÂ newhotspot(109, 45, 71, 59, "Broken Statue")
ÂÂ newhotspot(34, 25, 27, 29, "Camera")
ÂÂ newhotspot(196, 70, 40, 25, "Studio One Entrance")
ÂÂ newmov(gs_gate, gs_studio2)
ÂÂ interact = function(mode, selected)
ÂÂÂÂÂÂif mode == EXAMINE then
ÂÂÂÂÂÂÂÂ if selected == "Welcome Sign" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(What a welcoming sign...)")
ÂÂÂÂÂÂÂÂ elseif selected == "Broken Statue" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Looks like it's still broken. Hmm.)")
ÂÂÂÂÂÂÂÂ elseif selected == "Camera" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Hmm, the camera's model number is SC-2M0.)")
ÂÂÂÂÂÂÂÂ elseif selected == "Studio One Entrance" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(There's no point in entering Studio One today...)")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ goto("examine")
ÂÂÂÂÂÂelseif mode == MOVE then
ÂÂÂÂÂÂÂÂ goto(selected)
ÂÂÂÂÂÂend
ÂÂ end
ÂÂ goto("interaction")
end
_G["Global Studio's Gate"] = function()
ÂÂ fade_in( SCREEN_UP, 1 )
ÂÂ newbg( "locations/globalstudioentrance", 256 )
ÂÂ newspeaker( "", SFX_TYPEWRITER )
ÂÂ newalign(ALIGN_CENTER)
ÂÂ newcolor("00FF00")
ÂÂ fade_out( SCREEN_UP, 1 )
ÂÂ interact = function(mode, selected)
ÂÂÂÂÂÂif mode == EXAMINE then
ÂÂÂÂÂÂÂÂ newspeaker("Phoenix")
ÂÂÂÂÂÂÂÂ newcolor("6BC6F7")
ÂÂÂÂÂÂÂÂ if selected == "Security Booth" then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("(The security booth containing images from various security cameras in the park.)")
ÂÂÂÂÂÂÂÂÂÂÂÂif gumshoeIsGone == true then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("(Hmm... it looks like all the camera IDs are here...)")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("(Which camera would have the images I want?){next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ goto("dynamicoptions", "SC-4G8", "SC-2M0", "SC-8Z1")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ if selected == "SC-4G8" or selected == "SC-8Z1" then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Doesn't look like this one has anything I need...){next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg("(...? Wait a second...)")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg("(This could come in handy!)")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂaddev(photo)
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂshowaddev(evidence[ table.maxn(evidence) ])
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂmsg(evidence[ table.maxn(evidence) ].name .. " added to the court record.{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂÂÂÂÂelse
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("WHAT ARE YOU LOOKING AT, PAL?!")
ÂÂÂÂÂÂÂÂÂÂÂÂend
ÂÂÂÂÂÂÂÂ elseif selected == "Gate" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(The fenced, metal gate used to blockade the entrance for Global Studios.)")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Apparently, there's been a lot of fanboys sneaking in lately...)")
ÂÂÂÂÂÂÂÂ elseif selected == "Van" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(A random van is parked in the parking lot.)")
ÂÂÂÂÂÂÂÂ elseif selected == "Sign" then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(A sign illustrating Global Studio's map.)")
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Nothing interesting here...)")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ if hasev(photo) == true then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(I think I'm ready for tomorrow's trial...)")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(Or at least, I better be ready...)")
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("District Lobby")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ goto("examine")
ÂÂÂÂÂÂelseif mode == MOVE then
ÂÂÂÂÂÂÂÂ if gumshoeIsGone == true then
ÂÂÂÂÂÂÂÂÂÂÂÂgoto(selected)
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂnewcolor("FFFFFF")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Don't be entering the crime scene now!{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("move")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂelseif mode == TALK then
ÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂ if selected == "Defendant" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("The victim's name is Yak Uza.")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasev(pr_yakuza) == false then addev(pr_yakuza) end
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("confident")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("He's had a history with the mafia... sort of had it coming.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("side")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Don't worry though, I think we found our man.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("This guy did it for sure! I'm telling you!")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasev(pr_furio) == false then addev(pr_furio) end
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("pumped")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("They call him 'The Tiger'. He's a crook! His name's {newcolor(F77339)}Furio Tigre{newcolor(FFFFFF)}.")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("All the evidence points against him, including his gun.")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasopt("Murder Weapon") == false then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ addtlk("Murder Weapon")
ÂÂÂÂÂÂÂÂÂÂÂÂend
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("disheartened")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Oops. Pretend I didn't say that.{next}")
ÂÂÂÂÂÂÂÂ elseif selected == "Murder Weapon" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("laughing")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("I guess the cat's out of the bag.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("That Furio Tigre guy used his pistol.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("thinking")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Or at least I think it's his pistol.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Anyways, he's a CROOK! I'm telling you!")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("disheartened")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("I'm afraid I don't have the pistol on me.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("confident")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("But we also found a {showbullet()}bullet in the victim's body.")
ÂÂÂÂÂÂÂÂÂÂÂÂif hasev(report) == false then
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("Here's the autopsy report.")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ addev(report)
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ showaddev(evidence[ table.maxn(evidence) ])
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newspeaker("")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newcolor("6BC6F7")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg(evidence[ table.maxn(evidence) ].name .. " added to the court record.{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂelse
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ newemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ msg("The pistol used 8 mm bullets.{next}")
ÂÂÂÂÂÂÂÂÂÂÂÂend
ÂÂÂÂÂÂÂÂ elseif selected == "Decisive evidence" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("normal")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("The killer's fingerprints on the pistol match a set at the crime scene.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("thinking")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("The set is on a bottle of expired soy milk, pal.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("laughing")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Yeah, we got a sour killer out there.")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Hahaha... pal.{next}")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ if hasev(pr_furio) == true and hasev(report) == true and talked["Decisive evidence"] == true then
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Hmm... looks like I gotta get back to the precinct.")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("mad")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Don't be nosing around, pal!")
ÂÂÂÂÂÂÂÂÂÂÂÂgumshoeIsGone = true
ÂÂÂÂÂÂÂÂÂÂÂÂnewchar( nil )
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker( nil )
ÂÂÂÂÂÂÂÂÂÂÂÂalpha_out( SCREEN_UP, 1, "art/char/Gumshoe/mad(talk)", 1024 )
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("interaction")
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂgoto("talk")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂelseif mode == PRESENT then
ÂÂÂÂÂÂÂÂ newspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂ newcolor("FFFFFF")
ÂÂÂÂÂÂÂÂ if selected == "Dick Gumshoe" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("confident")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Handsome, aren't I?{next}")
ÂÂÂÂÂÂÂÂ elseif selected == "Attorney Badge" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("side")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("I already know you're an attorney...{next}")
ÂÂÂÂÂÂÂÂ elseif selected == "Autopsy Report" then
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Phoenix")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Why is the time of death unknown?")
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Gumshoe")
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("pumped")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Because it IS! Can't you read?!")
ÂÂÂÂÂÂÂÂÂÂÂÂnewspeaker("Phoenix")
ÂÂÂÂÂÂÂÂÂÂÂÂnewcolor("6BC6F7")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("(sheesh...){next}")
ÂÂÂÂÂÂÂÂÂÂÂÂnewcolor("FFFFFF")
ÂÂÂÂÂÂÂÂ else
ÂÂÂÂÂÂÂÂÂÂÂÂnewemo("thinking")
ÂÂÂÂÂÂÂÂÂÂÂÂmsg("Why are you showing me this?{next}")
ÂÂÂÂÂÂÂÂ end
ÂÂÂÂÂÂÂÂ goto("present")
ÂÂÂÂÂÂend
ÂÂ end
end
------------------------------------------------------------------------------
-- LOCATION VARIABLES
------------------------------------------------------------------------------
gs_gate = {
ÂÂ name = "Global Studio's Gate",
ÂÂ pic = "move/globalstudioentrance.gif",
}
gs_entrance = {
ÂÂ name = "Studio Path",
ÂÂ pic = "move/globalstudiocamera.gif",
}
gs_studio2 = {
ÂÂ name = "Studio 2",
ÂÂ pic = "move/globalstudio2a.gif",
}
gs_studio2van = {
ÂÂ name = "Studio 2 Cottage",
ÂÂ pic = "move/globalstudiovan.gif",
}<!--c2--></div><!--ec2-->
The API should be fairly simple enough, I will dim it down if I need to!
Estimated time of arrival : February 2010.