157 lines
8.5 KiB
HTML
157 lines
8.5 KiB
HTML
<!-- HTML header for doxygen 1.10.0-->
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.13.2"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>Mario Kart 64: How Actors Work</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<script type="text/javascript" src="clipboard.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="cookie.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
|
|
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
|
|
<link href="doxygen-awesome-sidebar-only-darkmode-toggle.css" rel="stylesheet" type="text/css"/>
|
|
<link href="docs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="doxygen-awesome-darkmode-toggle.js"></script>
|
|
<script type="text/javascript">
|
|
DoxygenAwesomeDarkModeToggle.init()
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr id="projectrow">
|
|
<td id="projectalign">
|
|
<div id="projectname">Mario Kart 64
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.13.2 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() { codefold.init(0); });
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search',true);
|
|
$(function() { init_search(); });
|
|
});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function(){initNavTree('actors.html',''); initResizable(true); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div><div class="header">
|
|
<div class="headertitle"><div class="title">How Actors Work</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><h1><a class="anchor" id="actors"></a>
|
|
Actors</h1>
|
|
<p>If you are familiar with oot or sm64 prepare to be very disappointed. Both games split actors into separate files. In an unorderly fashion, mk64 appears to place all actors in the same file save for the odd exception.</p>
|
|
<p>Example actor setup based on <a class="el" href="actors_8c.html#aa6387502059c64a81d32c944b39d78f9">update_course_actors</a> </p><div class="fragment"><div class="line"><span class="comment">// Loop through the actor list and run that particular actors behaviour.</span></div>
|
|
<div class="line"><span class="keywordflow">for</span> actorListSize {</div>
|
|
<div class="line"> actor = <a class="code hl_variable" href="code__800029B0_8c.html#a1f5d4f72f8fd53ac6a42c0bf2b2d8a61">gActorList</a>[i]</div>
|
|
<div class="line"> <span class="keywordflow">switch</span>(actor->type) {</div>
|
|
<div class="line"> <span class="keywordflow">case</span> ACTOR1: </div>
|
|
<div class="line"> actor_name(args, actor); </div>
|
|
<div class="line"> <span class="keywordflow">break</span>;</div>
|
|
<div class="line"> <span class="keywordflow">case</span> ACTOR2:</div>
|
|
<div class="line"> another_actor(args, actor);</div>
|
|
<div class="line"> <span class="keywordflow">break</span>;</div>
|
|
<div class="line"> }</div>
|
|
<div class="line">}</div>
|
|
<div class="line"> </div>
|
|
<div class="line"><span class="comment">// Camera/Mat4 are optional</span></div>
|
|
<div class="line"><span class="keywordtype">void</span> actor_name(<a class="code hl_struct" href="structCamera.html">Camera</a>, <a class="code hl_typedef" href="common__structs_8h.html#ab7160f77e736961cfa2aff581aeee005">Mat4</a>, actor) {</div>
|
|
<div class="line"> actor->pos[x] += 10; <span class="comment">// Increase the actors X position by ten every frame or game loop.</span></div>
|
|
<div class="line"> actor->rot[y] -= 1; <span class="comment">// Decrease the actors Y rotation by one every frame or game loop.</span></div>
|
|
<div class="line"> </div>
|
|
<div class="line"> <span class="comment">// Increase the actors velocity until it reaches fifteen.</span></div>
|
|
<div class="line"> <span class="keywordflow">if</span> (actor->velocity[z] < 15) {</div>
|
|
<div class="line"> actor->velocity[z] += 5 <span class="comment">// Increase the actors Z velocity by five every frame.</span></div>
|
|
<div class="line"> }</div>
|
|
<div class="line">}</div>
|
|
<div class="ttc" id="acode__800029B0_8c_html_a1f5d4f72f8fd53ac6a42c0bf2b2d8a61"><div class="ttname"><a href="code__800029B0_8c.html#a1f5d4f72f8fd53ac6a42c0bf2b2d8a61">gActorList</a></div><div class="ttdeci">struct Actor gActorList[100]</div><div class="ttdef"><b>Definition</b> code_800029B0.c:158</div></div>
|
|
<div class="ttc" id="acommon__structs_8h_html_ab7160f77e736961cfa2aff581aeee005"><div class="ttname"><a href="common__structs_8h.html#ab7160f77e736961cfa2aff581aeee005">Mat4</a></div><div class="ttdeci">f32 Mat4[4][4]</div><div class="ttdef"><b>Definition</b> common_structs.h:20</div></div>
|
|
<div class="ttc" id="astructCamera_html"><div class="ttname"><a href="structCamera.html">Camera</a></div><div class="ttdef"><b>Definition</b> camera.h:35</div></div>
|
|
</div><!-- fragment --><p> Check <a class="el" href="actor__types_8h.html">actor_types.h</a> for a full list of options. You can create a new actor struct for your actor and customize it or use a predefined one. All actor structs must retain the same size. Generally, the types in the struct may be modified so long as <code>type</code> and <code>flags</code> stay the same as those are used elsewhere.</p>
|
|
<p>See <code>update_actor_railroad_crossing</code> for an example of how a timer may be setup and used. <br />
|
|
</p>
|
|
<p>Audio may be activated using the following method: <a class="el" href="external_8c.html#acb60983213d09ee795e80ca3c8b5975e">func_800C98B8</a></p>
|
|
<p>For more complex uses such as distanceFrom and collision, you will need to analyze the other actors. </p>
|
|
</div></div><!-- contents -->
|
|
</div><!-- PageDoc -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="actorsmenu.html">Actors</a></li>
|
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|