<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hedgedocs.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%C4%90e%C3%A4Th</id>
	<title>HedgeDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hedgedocs.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%C4%90e%C3%A4Th"/>
	<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php/Special:Contributions/%C4%90e%C3%A4Th"/>
	<updated>2026-05-19T07:12:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Binary_Resource&amp;diff=1249</id>
		<title>Binary Resource</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Binary_Resource&amp;diff=1249"/>
		<updated>2025-12-02T17:34:29Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: Merge HE cells for engine usage of BINA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Binary Resource&#039;&#039;&#039;&#039;&#039; (or &#039;&#039;&#039;BINA&#039;&#039;&#039;) is a container format for binary data developed by Sonic Team.&lt;br /&gt;
&lt;br /&gt;
== Engines using Binary Resource ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Engine&lt;br /&gt;
!Version&lt;br /&gt;
!Games&lt;br /&gt;
|-&lt;br /&gt;
|SoX&lt;br /&gt;
|1&lt;br /&gt;
|[[Sonic the Hedgehog (2006)]]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |Hedgehog Engine&lt;br /&gt;
|1&lt;br /&gt;
|[[Sonic Colors]]&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Sonic Lost World]]&lt;br /&gt;
|-&lt;br /&gt;
|Hedgehog Engine 2&lt;br /&gt;
|2&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&#039;&#039;&#039;Binary Resource&#039;&#039;&#039; has two known major versions.&lt;br /&gt;
&lt;br /&gt;
== Version 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The header consists of the following data structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Length: 0x20&lt;br /&gt;
!Offset&lt;br /&gt;
!Type&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|UInt32&lt;br /&gt;
|ResourceSize&lt;br /&gt;
|The size of the resource.&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|UInt32&lt;br /&gt;
|RelocTableOffset&lt;br /&gt;
|The offset of the relocation table relative to the end of the header.&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|UInt32&lt;br /&gt;
|RelocTableLength&lt;br /&gt;
|The length of the relocation table.&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|UInt32&lt;br /&gt;
|N/A&lt;br /&gt;
|Unknown. Usually zero.&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|UInt32&lt;br /&gt;
|ChunkCount&lt;br /&gt;
|The total number of chunks in the data section. Only used in &#039;&#039;&#039;Sonic Colors&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|Char[4]&lt;br /&gt;
|Version&lt;br /&gt;
|The first two characters are skipped, leaving Revision and Endianness.&lt;br /&gt;
The endianness character is either &#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039; or &#039;&#039;&#039;&#039;B&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;, for little-endian and big-endian respectively.&lt;br /&gt;
|-&lt;br /&gt;
|0x18&lt;br /&gt;
|Char[4]&lt;br /&gt;
|Signature&lt;br /&gt;
|Always &amp;quot;BINA&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|0x1C&lt;br /&gt;
|UInt32&lt;br /&gt;
|N/A&lt;br /&gt;
|Unknown. Usually zero.&lt;br /&gt;
|}&lt;br /&gt;
Due to the nature of the header, you &#039;&#039;&#039;must&#039;&#039;&#039; read ahead &#039;&#039;&#039;0x14&#039;&#039;&#039; bytes to read the &amp;lt;code&amp;gt;Version&amp;lt;/code&amp;gt; field to get the endianness of the file before proceeding with the rest of the fields at the start of the file.&lt;br /&gt;
&lt;br /&gt;
=== Data Section ===&lt;br /&gt;
The data after the header is specific to each file format contained within a &#039;&#039;&#039;Binary Resource&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
All offset fields inside the data section are relative to the end of the header, so you must add the size of the header to the offset to get the absolute offset to where it&#039;s pointing to in the file on disk.&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
MyOffset = ReadUInt32() + HeaderSize // HeaderSize = 0x20&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Relocation Table ===&lt;br /&gt;
After the data section is a relocation table, which is used by the &#039;&#039;&#039;Binary Resource&#039;&#039;&#039; loader to locate offsets in the data section to make them absolute pointers. This allows the data section to be mapped directly to a structure without having to read it manually.&lt;br /&gt;
&lt;br /&gt;
The relocation table must be aligned to 4 bytes before and after writing it.&lt;br /&gt;
&lt;br /&gt;
Each entry in the relocation table is encoded as such:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Type Bits&lt;br /&gt;
!Length&lt;br /&gt;
!Minimum&lt;br /&gt;
!Maximum&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0b01000000&lt;br /&gt;
|6 bits&lt;br /&gt;
|0x00&lt;br /&gt;
|0x3F&lt;br /&gt;
|The offset is stored in the remaining six bits after the type bits.&lt;br /&gt;
|-&lt;br /&gt;
|0b10000000&lt;br /&gt;
|14 bits&lt;br /&gt;
|0x3F&lt;br /&gt;
|0x3FFF&lt;br /&gt;
|The offset is stored in the remaining six bits after the type bits, including an extra byte.&lt;br /&gt;
|-&lt;br /&gt;
|0b11000000&lt;br /&gt;
|30 bits&lt;br /&gt;
|0x3FFF&lt;br /&gt;
|0x3FFFFFFF&lt;br /&gt;
|The offset is stored in the remaining six bits after the type bits, including an extra three bytes.&lt;br /&gt;
|}&lt;br /&gt;
To encode an entry in the relocation table, first subtract the current offset with the last offset that was encoded, then bit shift the result to the right by two bits. When encoding the first entry in the relocation table, the last offset will be the size of the header (&#039;&#039;&#039;0x20&#039;&#039;&#039;).&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
EncodedOffset = (CurrentOffset - LastOffset) &amp;gt;&amp;gt; 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;After this, the value of the encoded offset can be used to determine which type bits are needed to fit it in the relocation table.&lt;br /&gt;
&lt;br /&gt;
=== Footer ===&lt;br /&gt;
If the &amp;lt;code&amp;gt;ChunkCount&amp;lt;/code&amp;gt; field in the header is non-zero, a footer must be written to the end of the file. The purpose of this footer isn&#039;t fully understood, but it only appears to be used in &#039;&#039;&#039;Sonic Colors&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Length: 0x0C&lt;br /&gt;
!Offset&lt;br /&gt;
!Type&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|UInt32&lt;br /&gt;
|N/A&lt;br /&gt;
|Unknown. Always 16.&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|UInt32&lt;br /&gt;
|N/A&lt;br /&gt;
|Unknown. Always zero.&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|Char[4]&lt;br /&gt;
|N/A&lt;br /&gt;
|Always &amp;quot;bvh\0&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=611</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=611"/>
		<updated>2025-05-10T22:01:18Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Notice|type=warn|content=These objects are missing images captured in-game.}}&lt;br /&gt;
&lt;br /&gt;
== Unused Objects ==&lt;br /&gt;
&lt;br /&gt;
=== DashRing ===&lt;br /&gt;
The large ring object which provides the player a burst of speed found commonly in Sonic games is an object that doesn&#039;t exist in Sonic Lost World.&lt;br /&gt;
&lt;br /&gt;
==== MsgDashRingImpulse ====&lt;br /&gt;
This is the message type that would have been used by the &amp;lt;code&amp;gt;DashRing&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgDashRingImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgDashRingImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     float outOfControl, float travelTime, EType type) : fnd::Message(0x6004),&lt;br /&gt;
     origin_(origin), destination_(destination), outOfControl_(outOfControl),&lt;br /&gt;
     travelTime_(travelTime), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   float travelTime_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DummySpring ===&lt;br /&gt;
The Eggman spring object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace spring&lt;br /&gt;
{&lt;br /&gt;
   enum class SpringType : signed char&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Dummy&lt;br /&gt;
   };&lt;br /&gt;
} // namespace spring&lt;br /&gt;
&lt;br /&gt;
class CObjSpring : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static CObjSpring* CreateDummy()&lt;br /&gt;
   {&lt;br /&gt;
      auto springType = csl::ut::Enum&amp;lt;spring::SpringType::Dummy, signed char&amp;gt;(1);&lt;br /&gt;
      return new CObjSpring(springType);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
   static void* ObjDummySpring_Constructor()&lt;br /&gt;
   {&lt;br /&gt;
      CObjSpring::CreateDummy();&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However during the object&#039;s setup the model entry is overwritten by a normal spring.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjSpringInfo : CObjInfo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* modelNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
   static const char* animationNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
   void Initialize(GameDocument&amp;amp; document) override&lt;br /&gt;
   {&lt;br /&gt;
      auto packfile= ObjUtil::GetPackFile(&amp;quot;CommonObject.pac&amp;quot;);&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         models_[i] = ObjUtil::GetModelResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         animations_[i] = ObjUtil::GetAnimationResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         hh::ut::Packfile skeletonPackFile(packfile);&lt;br /&gt;
         skeletons_[i] = ObjUtil::GetSkeletonResource(modelNames[i], skeletonPackFile);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResModel, 2&amp;gt; models_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResAnimSkeleton, 2&amp;gt; animations_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResSkeleton, 2&amp;gt; skeletons_;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The second entry in both &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;modelNames&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;animationNames&amp;lt;/code&amp;gt; is using &amp;lt;code&amp;gt;cmn_obj_spring&amp;lt;/code&amp;gt;, which is the normal spring model asset located in &amp;lt;code&amp;gt;sonic2013_0.cpk\CommonObject.pac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This object has identical parameter configuration to the normal Spring object. &lt;br /&gt;
&lt;br /&gt;
=== JumpBoard ===&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
      csl::math::Vector3 position;&lt;br /&gt;
      xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
      SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
      if (field3B0 + field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
      {&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
      auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      xgame::MsgJumpBoardImpulse impulseMsg(normalShot.origin, normalShot.destination,&lt;br /&gt;
        boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
      SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
      if(impulseMsg.handled)&lt;br /&gt;
      {&lt;br /&gt;
         auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
         game::EffectCreateInfo effectInfo;&lt;br /&gt;
         effectInfo.name = particleNames[size_type];&lt;br /&gt;
         effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
         effectInfo.field30 = true;&lt;br /&gt;
         effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
         GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   int sizeType = 0;&lt;br /&gt;
   csl::math::Vector3 field3A0;&lt;br /&gt;
   float field3B0;&lt;br /&gt;
   game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
        0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
        4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
        8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
      AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
==== MsgJumpBoardImpulse ====&lt;br /&gt;
This is the message type used by the unused &amp;lt;code&amp;gt;JumpBoard&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgJumpBoardImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Boost&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgJumpBoardImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     const csl::math::Vector3 boostDestination, float outOfControl, EType type) : fnd::Message(0x6003),&lt;br /&gt;
     origin_(origin), destination_(destination), boostDestination_(boostDestination),&lt;br /&gt;
     outOfControl_(outOfControl), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   csl::math::Vector3 boostDestination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IronBox ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WoodBox ===&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
     csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
     message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
     GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
     GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
     SetStatusRetire();&lt;br /&gt;
     Kill();&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== Used Objects ==&lt;br /&gt;
&lt;br /&gt;
=== GoalRing ===&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   void PlayEffect()&lt;br /&gt;
   {&lt;br /&gt;
      auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
      auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
      effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
      effectInfo.visual = visualModel;&lt;br /&gt;
      effectInfo.field30 = false;&lt;br /&gt;
      effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
      AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
   }&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=610</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=610"/>
		<updated>2025-05-10T21:59:38Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Notice|type=warn|content=These objects are missing images captured in-game.}}&lt;br /&gt;
&lt;br /&gt;
== Unused Objects ==&lt;br /&gt;
&lt;br /&gt;
=== DashRing ===&lt;br /&gt;
The large ring object which provides the player a burst of speed found commonly in Sonic games is an object that doesn&#039;t exist in Sonic Lost World.&lt;br /&gt;
&lt;br /&gt;
==== MsgDashRingImpulse ====&lt;br /&gt;
This is the message type that would have been used by the &amp;lt;code&amp;gt;DashRing&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgDashRingImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgDashRingImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     float outOfControl, float travelTime, EType type) : fnd::Message(0x6004),&lt;br /&gt;
     origin_(origin), destination_(destination), outOfControl_(outOfControl),&lt;br /&gt;
     travelTime_(travelTime), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   float travelTime_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DummySpring ===&lt;br /&gt;
The Eggman spring object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace spring&lt;br /&gt;
{&lt;br /&gt;
   enum class SpringType : signed char&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Dummy&lt;br /&gt;
   };&lt;br /&gt;
} // namespace spring&lt;br /&gt;
&lt;br /&gt;
class CObjSpring : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static CObjSpring* CreateDummy()&lt;br /&gt;
   {&lt;br /&gt;
      auto springType = csl::ut::Enum&amp;lt;spring::SpringType::Dummy, signed char&amp;gt;(1);&lt;br /&gt;
      return new CObjSpring(springType);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
   static void* ObjDummySpring_Constructor()&lt;br /&gt;
   {&lt;br /&gt;
      CObjSpring::CreateDummy();&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However during the object&#039;s setup the model entry is overwritten by a normal spring.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjSpringInfo : CObjInfo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* modelNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
   static const char* animationNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
   void Initialize(GameDocument&amp;amp; document) override&lt;br /&gt;
   {&lt;br /&gt;
      auto packfile= ObjUtil::GetPackFile(&amp;quot;CommonObject.pac&amp;quot;);&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         models_[i] = ObjUtil::GetModelResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         animations_[i] = ObjUtil::GetAnimationResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         hh::ut::Packfile skeletonPackFile(packfile);&lt;br /&gt;
         skeletons_[i] = ObjUtil::GetSkeletonResource(modelNames[i], skeletonPackFile);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResModel, 2&amp;gt; models_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResAnimSkeleton, 2&amp;gt; animations_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResSkeleton, 2&amp;gt; skeletons_;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The second entry in both &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;modelNames&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;animationNames&amp;lt;/code&amp;gt; is using &amp;lt;code&amp;gt;cmn_obj_spring&amp;lt;/code&amp;gt;, which is the normal spring model asset located in &amp;lt;code&amp;gt;sonic2013_0.cpk\CommonObject.pac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This object has identical parameter configuration to the normal Spring object. &lt;br /&gt;
&lt;br /&gt;
=== JumpBoard ===&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
      csl::math::Vector3 position;&lt;br /&gt;
      xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
      SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
      if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
      {&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
      auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      xgame::MsgJumpBoardImpulse impulseMsg(normalShot.origin, normalShot.destination,&lt;br /&gt;
        boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
      SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
      if(impulseMsg.handled)&lt;br /&gt;
      {&lt;br /&gt;
         auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
         game::EffectCreateInfo effectInfo;&lt;br /&gt;
         effectInfo.name = particleNames[size_type];&lt;br /&gt;
         effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
         effectInfo.field30 = true;&lt;br /&gt;
         effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
         GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   int sizeType = 0;&lt;br /&gt;
   csl::math::Vector3 field3A0;&lt;br /&gt;
   float field3B0;&lt;br /&gt;
   game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
        0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
        4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
        8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
      AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
==== MsgJumpBoardImpulse ====&lt;br /&gt;
This is the message type used by the unused &amp;lt;code&amp;gt;JumpBoard&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgJumpBoardImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Boost&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgJumpBoardImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     const csl::math::Vector3 boostDestination, float outOfControl, EType type) : fnd::Message(0x6003),&lt;br /&gt;
     origin_(origin), destination_(destination), boostDestination_(boostDestination),&lt;br /&gt;
     outOfControl_(outOfControl), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   csl::math::Vector3 boostDestination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IronBox ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WoodBox ===&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
     csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
     message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
     GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
     GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
     SetStatusRetire();&lt;br /&gt;
     Kill();&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== Used Objects ==&lt;br /&gt;
&lt;br /&gt;
=== GoalRing ===&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   void PlayEffect()&lt;br /&gt;
   {&lt;br /&gt;
      auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
      auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
      effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
      effectInfo.visual = visualModel;&lt;br /&gt;
      effectInfo.field30 = false;&lt;br /&gt;
      effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
      AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
   }&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=609</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=609"/>
		<updated>2025-05-10T21:59:14Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Notice|type=warn|content=Capture some images of these objects in-game.}}&lt;br /&gt;
&lt;br /&gt;
== Unused Objects ==&lt;br /&gt;
&lt;br /&gt;
=== DashRing ===&lt;br /&gt;
The large ring object which provides the player a burst of speed found commonly in Sonic games is an object that doesn&#039;t exist in Sonic Lost World.&lt;br /&gt;
&lt;br /&gt;
==== MsgDashRingImpulse ====&lt;br /&gt;
This is the message type that would have been used by the &amp;lt;code&amp;gt;DashRing&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgDashRingImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgDashRingImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     float outOfControl, float travelTime, EType type) : fnd::Message(0x6004),&lt;br /&gt;
     origin_(origin), destination_(destination), outOfControl_(outOfControl),&lt;br /&gt;
     travelTime_(travelTime), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   float travelTime_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DummySpring ===&lt;br /&gt;
The Eggman spring object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace spring&lt;br /&gt;
{&lt;br /&gt;
   enum class SpringType : signed char&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Dummy&lt;br /&gt;
   };&lt;br /&gt;
} // namespace spring&lt;br /&gt;
&lt;br /&gt;
class CObjSpring : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static CObjSpring* CreateDummy()&lt;br /&gt;
   {&lt;br /&gt;
      auto springType = csl::ut::Enum&amp;lt;spring::SpringType::Dummy, signed char&amp;gt;(1);&lt;br /&gt;
      return new CObjSpring(springType);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
   static void* ObjDummySpring_Constructor()&lt;br /&gt;
   {&lt;br /&gt;
      CObjSpring::CreateDummy();&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However during the object&#039;s setup the model entry is overwritten by a normal spring.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjSpringInfo : CObjInfo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* modelNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
   static const char* animationNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
   void Initialize(GameDocument&amp;amp; document) override&lt;br /&gt;
   {&lt;br /&gt;
      auto packfile= ObjUtil::GetPackFile(&amp;quot;CommonObject.pac&amp;quot;);&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         models_[i] = ObjUtil::GetModelResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         animations_[i] = ObjUtil::GetAnimationResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         hh::ut::Packfile skeletonPackFile(packfile);&lt;br /&gt;
         skeletons_[i] = ObjUtil::GetSkeletonResource(modelNames[i], skeletonPackFile);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResModel, 2&amp;gt; models_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResAnimSkeleton, 2&amp;gt; animations_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResSkeleton, 2&amp;gt; skeletons_;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The second entry in both &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;modelNames&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;animationNames&amp;lt;/code&amp;gt; is using &amp;lt;code&amp;gt;cmn_obj_spring&amp;lt;/code&amp;gt;, which is the normal spring model asset located in &amp;lt;code&amp;gt;sonic2013_0.cpk\CommonObject.pac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This object has identical parameter configuration to the normal Spring object. &lt;br /&gt;
&lt;br /&gt;
=== JumpBoard ===&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
      csl::math::Vector3 position;&lt;br /&gt;
      xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
      SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
      if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
      {&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
      auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      xgame::MsgJumpBoardImpulse impulseMsg(normalShot.origin, normalShot.destination,&lt;br /&gt;
        boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
      SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
      if(impulseMsg.handled)&lt;br /&gt;
      {&lt;br /&gt;
         auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
         game::EffectCreateInfo effectInfo;&lt;br /&gt;
         effectInfo.name = particleNames[size_type];&lt;br /&gt;
         effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
         effectInfo.field30 = true;&lt;br /&gt;
         effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
         GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   int sizeType = 0;&lt;br /&gt;
   csl::math::Vector3 field3A0;&lt;br /&gt;
   float field3B0;&lt;br /&gt;
   game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
        0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
        4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
        8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
      AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
==== MsgJumpBoardImpulse ====&lt;br /&gt;
This is the message type used by the unused &amp;lt;code&amp;gt;JumpBoard&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgJumpBoardImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Boost&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgJumpBoardImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     const csl::math::Vector3 boostDestination, float outOfControl, EType type) : fnd::Message(0x6003),&lt;br /&gt;
     origin_(origin), destination_(destination), boostDestination_(boostDestination),&lt;br /&gt;
     outOfControl_(outOfControl), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   csl::math::Vector3 boostDestination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IronBox ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WoodBox ===&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
     csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
     message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
     GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
     GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
     SetStatusRetire();&lt;br /&gt;
     Kill();&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== Used Objects ==&lt;br /&gt;
&lt;br /&gt;
=== GoalRing ===&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   void PlayEffect()&lt;br /&gt;
   {&lt;br /&gt;
      auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
      auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
      effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
      effectInfo.visual = visualModel;&lt;br /&gt;
      effectInfo.field30 = false;&lt;br /&gt;
      effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
      AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
   }&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=608</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=608"/>
		<updated>2025-05-10T21:57:43Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Unused Objects ==&lt;br /&gt;
&lt;br /&gt;
=== DashRing ===&lt;br /&gt;
The large ring object which provides the player a burst of speed found commonly in Sonic games is an object that doesn&#039;t exist in Sonic Lost World.&lt;br /&gt;
&lt;br /&gt;
==== MsgDashRingImpulse ====&lt;br /&gt;
This is the message type that would have been used by the &amp;lt;code&amp;gt;DashRing&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgDashRingImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgDashRingImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     float outOfControl, float travelTime, EType type) : fnd::Message(0x6004),&lt;br /&gt;
     origin_(origin), destination_(destination), outOfControl_(outOfControl),&lt;br /&gt;
     travelTime_(travelTime), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   float travelTime_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DummySpring ===&lt;br /&gt;
The Eggman spring object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace spring&lt;br /&gt;
{&lt;br /&gt;
   enum class SpringType : signed char&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Dummy&lt;br /&gt;
   };&lt;br /&gt;
} // namespace spring&lt;br /&gt;
&lt;br /&gt;
class CObjSpring : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static CObjSpring* CreateDummy()&lt;br /&gt;
   {&lt;br /&gt;
      auto springType = csl::ut::Enum&amp;lt;spring::SpringType::Dummy, signed char&amp;gt;(1);&lt;br /&gt;
      return new CObjSpring(springType);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
   static void* ObjDummySpring_Constructor()&lt;br /&gt;
   {&lt;br /&gt;
      CObjSpring::CreateDummy();&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However during the object&#039;s setup the model entry is overwritten by a normal spring.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjSpringInfo : CObjInfo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* modelNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
   static const char* animationNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
   void Initialize(GameDocument&amp;amp; document) override&lt;br /&gt;
   {&lt;br /&gt;
      auto packfile= ObjUtil::GetPackFile(&amp;quot;CommonObject.pac&amp;quot;);&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         models_[i] = ObjUtil::GetModelResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         animations_[i] = ObjUtil::GetAnimationResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         hh::ut::Packfile skeletonPackFile(packfile);&lt;br /&gt;
         skeletons_[i] = ObjUtil::GetSkeletonResource(modelNames[i], skeletonPackFile);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResModel, 2&amp;gt; models_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResAnimSkeleton, 2&amp;gt; animations_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResSkeleton, 2&amp;gt; skeletons_;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The second entry in both &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;modelNames&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;animationNames&amp;lt;/code&amp;gt; is using &amp;lt;code&amp;gt;cmn_obj_spring&amp;lt;/code&amp;gt;, which is the normal spring model asset located in &amp;lt;code&amp;gt;sonic2013_0.cpk\CommonObject.pac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This object has identical parameter configuration to the normal Spring object. &lt;br /&gt;
&lt;br /&gt;
=== JumpBoard ===&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
      csl::math::Vector3 position;&lt;br /&gt;
      xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
      SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
      if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
      {&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
      auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      xgame::MsgJumpBoardImpulse impulseMsg(normalShot.origin, normalShot.destination,&lt;br /&gt;
        boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
      SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
      if(impulseMsg.handled)&lt;br /&gt;
      {&lt;br /&gt;
         auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
         game::EffectCreateInfo effectInfo;&lt;br /&gt;
         effectInfo.name = particleNames[size_type];&lt;br /&gt;
         effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
         effectInfo.field30 = true;&lt;br /&gt;
         effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
         GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   int sizeType = 0;&lt;br /&gt;
   csl::math::Vector3 field3A0;&lt;br /&gt;
   float field3B0;&lt;br /&gt;
   game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
        0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
        4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
        8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
      AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
==== MsgJumpBoardImpulse ====&lt;br /&gt;
This is the message type used by the unused &amp;lt;code&amp;gt;JumpBoard&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgJumpBoardImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Boost&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgJumpBoardImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     const csl::math::Vector3 boostDestination, float outOfControl, EType type) : fnd::Message(0x6003),&lt;br /&gt;
     origin_(origin), destination_(destination), boostDestination_(boostDestination),&lt;br /&gt;
     outOfControl_(outOfControl), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   csl::math::Vector3 boostDestination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IronBox ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WoodBox ===&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
     csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
     message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
     GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
     GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
     SetStatusRetire();&lt;br /&gt;
     Kill();&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== Used Objects ==&lt;br /&gt;
&lt;br /&gt;
=== GoalRing ===&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   void PlayEffect()&lt;br /&gt;
   {&lt;br /&gt;
      auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
      auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
      effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
      effectInfo.visual = visualModel;&lt;br /&gt;
      effectInfo.field30 = false;&lt;br /&gt;
      effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
      AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
   }&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=607</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=607"/>
		<updated>2025-05-10T21:56:38Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Unused Objects ==&lt;br /&gt;
&lt;br /&gt;
=== DashRing ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an object that doesn&#039;t exist in Sonic Lost World.&lt;br /&gt;
&lt;br /&gt;
==== MsgDashRingImpulse ====&lt;br /&gt;
This is the message type that would have been used by the &amp;lt;code&amp;gt;DashRing&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgDashRingImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgDashRingImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     float outOfControl, float travelTime, EType type) : fnd::Message(0x6004),&lt;br /&gt;
     origin_(origin), destination_(destination), outOfControl_(outOfControl),&lt;br /&gt;
     travelTime_(travelTime), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   float travelTime_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DummySpring ===&lt;br /&gt;
The Eggman spring object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace spring&lt;br /&gt;
{&lt;br /&gt;
   enum class SpringType : signed char&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Dummy&lt;br /&gt;
   };&lt;br /&gt;
} // namespace spring&lt;br /&gt;
&lt;br /&gt;
class CObjSpring : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static CObjSpring* CreateDummy()&lt;br /&gt;
   {&lt;br /&gt;
      auto springType = csl::ut::Enum&amp;lt;spring::SpringType::Dummy, signed char&amp;gt;(1);&lt;br /&gt;
      return new CObjSpring(springType);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
   static void* ObjDummySpring_Constructor()&lt;br /&gt;
   {&lt;br /&gt;
      CObjSpring::CreateDummy();&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However during the object&#039;s setup the model entry is overwritten by a normal spring.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjSpringInfo : CObjInfo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* modelNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
   static const char* animationNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
   void Initialize(GameDocument&amp;amp; document) override&lt;br /&gt;
   {&lt;br /&gt;
      auto packfile= ObjUtil::GetPackFile(&amp;quot;CommonObject.pac&amp;quot;);&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         models_[i] = ObjUtil::GetModelResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         animations_[i] = ObjUtil::GetAnimationResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         hh::ut::Packfile skeletonPackFile(packfile);&lt;br /&gt;
         skeletons_[i] = ObjUtil::GetSkeletonResource(modelNames[i], skeletonPackFile);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResModel, 2&amp;gt; models_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResAnimSkeleton, 2&amp;gt; animations_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResSkeleton, 2&amp;gt; skeletons_;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The second entry in both &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;modelNames&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;animationNames&amp;lt;/code&amp;gt; is using &amp;lt;code&amp;gt;cmn_obj_spring&amp;lt;/code&amp;gt;, which is the normal spring model asset located in &amp;lt;code&amp;gt;sonic2013_0.cpk\CommonObject.pac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This object has identical parameter configuration to the normal Spring object. &lt;br /&gt;
&lt;br /&gt;
=== JumpBoard ===&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
      csl::math::Vector3 position;&lt;br /&gt;
      xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
      SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
      if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
      {&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
      auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      xgame::MsgJumpBoardImpulse impulseMsg(normalShot.origin, normalShot.destination,&lt;br /&gt;
        boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
      SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
      if(impulseMsg.handled)&lt;br /&gt;
      {&lt;br /&gt;
         auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
         game::EffectCreateInfo effectInfo;&lt;br /&gt;
         effectInfo.name = particleNames[size_type];&lt;br /&gt;
         effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
         effectInfo.field30 = true;&lt;br /&gt;
         effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
         GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   int sizeType = 0;&lt;br /&gt;
   csl::math::Vector3 field3A0;&lt;br /&gt;
   float field3B0;&lt;br /&gt;
   game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
        0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
        4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
        8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
      AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
==== MsgJumpBoardImpulse ====&lt;br /&gt;
This is the message type used by the unused &amp;lt;code&amp;gt;JumpBoard&amp;lt;/code&amp;gt; object and is a leftover from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace xgame&lt;br /&gt;
{&lt;br /&gt;
class MsgJumpBoardImpulse : fnd::Message&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   enum class EType&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Boost&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   MsgJumpBoardImpulse(const csl::math::Vector3&amp;amp; origin, const csl::math::Vector3&amp;amp; destination,&lt;br /&gt;
     const csl::math::Vector3 boostDestination, float outOfControl, EType type) : fnd::Message(0x6003),&lt;br /&gt;
     origin_(origin), destination_(destination), boostDestination_(boostDestination),&lt;br /&gt;
     outOfControl_(outOfControl), type_(type)&lt;br /&gt;
   {&lt;br /&gt;
      handled = false;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::math::Vector3 origin_;&lt;br /&gt;
   csl::math::Vector3 destination_;&lt;br /&gt;
   csl::math::Vector3 boostDestination_;&lt;br /&gt;
   float outOfControl_;&lt;br /&gt;
   EType type_;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
   bool handled;&lt;br /&gt;
};&lt;br /&gt;
} // namespace xgame&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IronBox ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
   }&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WoodBox ===&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
     csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
     message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
     GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
     GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
     SetStatusRetire();&lt;br /&gt;
     Kill();&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namespace app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== Used Objects ==&lt;br /&gt;
&lt;br /&gt;
=== GoalRing ===&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   void PlayEffect()&lt;br /&gt;
   {&lt;br /&gt;
      auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
      auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
      effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
      effectInfo.visual = visualModel;&lt;br /&gt;
      effectInfo.field30 = false;&lt;br /&gt;
      effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
      AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
   }&lt;br /&gt;
} // namesapce app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=606</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=606"/>
		<updated>2025-05-10T21:34:09Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Unused Objects ==&lt;br /&gt;
&lt;br /&gt;
=== DummySpring ===&lt;br /&gt;
The Eggman spring object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace spring&lt;br /&gt;
{&lt;br /&gt;
   enum class SpringType : signed char&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Dummy&lt;br /&gt;
   };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class CObjSpring : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static CObjSpring* CreateDummy()&lt;br /&gt;
   {&lt;br /&gt;
      auto springType = csl::ut::Enum&amp;lt;spring::SpringType::Dummy, signed char&amp;gt;(1);&lt;br /&gt;
      return new CObjSpring(springType);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
   static void* ObjDummySpring_Constructor()&lt;br /&gt;
   {&lt;br /&gt;
      CObjSpring::CreateDummy();&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However during the object&#039;s setup the model entry is overwritten by a normal spring.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjSpringInfo : CObjInfo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* modelNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
   static const char* animationNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResModel, 2&amp;gt; models_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResAnimSkeleton, 2&amp;gt; animations_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResSkeleton, 2&amp;gt; skeletons_;&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
   void Initialize(GameDocument&amp;amp; document) override&lt;br /&gt;
   {&lt;br /&gt;
      auto packfile= ObjUtil::GetPackFile(&amp;quot;CommonObject.pac&amp;quot;);&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         models_[i] = ObjUtil::GetModelResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         animations_[i] = ObjUtil::GetAnimationResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         hh::ut::Packfile skeletonPackFile(packfile);&lt;br /&gt;
         skeletons_[i] = ObjUtil::GetSkeletonResource(modelNames[i], skeletonPackFile);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As can be seen above, the second entry in both &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;modelNames&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;animationNames&amp;lt;/code&amp;gt; is using &amp;lt;code&amp;gt;cmn_obj_spring&amp;lt;/code&amp;gt;, which is the normal spring model asset located in &amp;lt;code&amp;gt;sonic2013_0.cpk\CommonObject.pac&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This object has identical parameter configuration to the normal Spring object. &lt;br /&gt;
&lt;br /&gt;
=== JumpBoard ===&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   int sizeType = 0;&lt;br /&gt;
   csl::math::Vector3 field3A0;&lt;br /&gt;
   float field3B0;&lt;br /&gt;
   game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
&lt;br /&gt;
   static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
      csl::math::Vector3 position;&lt;br /&gt;
      xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
      SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
      if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
      {&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
      auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      xgame::MsgJumpBoardImpulse impulseMsg(normalShot.startPosition, normalShot.destination,&lt;br /&gt;
          boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
      SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
      if(impulseMsg.handled)&lt;br /&gt;
      {&lt;br /&gt;
         auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
         game::EffectCreateInfo effectInfo;&lt;br /&gt;
         effectInfo.name = particleNames[size_type];&lt;br /&gt;
         effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
         effectInfo.field30 = true;&lt;br /&gt;
         effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
         GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
          0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
          4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
          8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
      AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
=== IronBox ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WoodBox ===&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
     csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
     message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
     GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
     GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
     SetStatusRetire();&lt;br /&gt;
     Kill();&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== Used Objects ==&lt;br /&gt;
&lt;br /&gt;
=== GoalRing ===&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   void PlayEffect()&lt;br /&gt;
   {&lt;br /&gt;
      auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
      auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
      effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
      effectInfo.visual = visualModel;&lt;br /&gt;
      effectInfo.field30 = false;&lt;br /&gt;
      effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
      AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=605</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=605"/>
		<updated>2025-05-10T21:31:56Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Unused Objects ==&lt;br /&gt;
&lt;br /&gt;
=== DummySpring ===&lt;br /&gt;
The Eggman spring object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
namespace spring&lt;br /&gt;
{&lt;br /&gt;
   enum class SpringType : signed char&lt;br /&gt;
   {&lt;br /&gt;
      Normal,&lt;br /&gt;
      Dummy&lt;br /&gt;
   };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class CObjSpring : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static CObjSpring* CreateDummy()&lt;br /&gt;
   {&lt;br /&gt;
      auto springType = csl::ut::Enum&amp;lt;spring::SpringType::Dummy, signed char&amp;gt;(1);&lt;br /&gt;
      return new CObjSpring(springType);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
   static void* ObjDummySpring_Constructor()&lt;br /&gt;
   {&lt;br /&gt;
      CObjSpring::CreateDummy();&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However during the object&#039;s setup the model entry is overwritten by a normal spring.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjSpringInfo : CObjInfo&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
   static const char* modelNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
   static const char* animationNames = { &amp;quot;cmn_obj_spring&amp;quot;, &amp;quot;cmn_obj_spring&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResModel, 2&amp;gt; models_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResAnimSkeleton, 2&amp;gt; animations_;&lt;br /&gt;
   csl::ut::FixedArray&amp;lt;hh::gfx::res::ResSkeleton, 2&amp;gt; skeletons_;&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
   void Initialize(GameDocument&amp;amp; document) override&lt;br /&gt;
   {&lt;br /&gt;
      auto packfile= ObjUtil::GetPackFile(&amp;quot;CommonObject.pac&amp;quot;);&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         models_[i] = ObjUtil::GetModelResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         animations_[i] = ObjUtil::GetAnimationResource(modelNames[i], packfile);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      for (size_t i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
      {&lt;br /&gt;
         hh::ut::Packfile skeletonPackFile(packfile);&lt;br /&gt;
         skeletons_[i] = ObjUtil::GetSkeletonResource(modelNames[i], skeletonPackFile);&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
As can be seen above, the second entry in both &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;modelNames&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;animationNames&amp;lt;/code&amp;gt; is using &amp;lt;code&amp;gt;cmn_obj_spring&amp;lt;/code&amp;gt;, which is the normal spring model asset located in &amp;lt;code&amp;gt;sonic2013_0.cpk\CommonObject.pac&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== JumpBoard ===&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   int sizeType = 0;&lt;br /&gt;
   csl::math::Vector3 field3A0;&lt;br /&gt;
   float field3B0;&lt;br /&gt;
   game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
&lt;br /&gt;
   static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
      csl::math::Vector3 position;&lt;br /&gt;
      xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
      SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
      if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
      {&lt;br /&gt;
         return true;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
      auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      xgame::MsgJumpBoardImpulse impulseMsg(normalShot.startPosition, normalShot.destination,&lt;br /&gt;
          boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
      SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
      if(impulseMsg.handled)&lt;br /&gt;
      {&lt;br /&gt;
         auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
         game::EffectCreateInfo effectInfo;&lt;br /&gt;
         effectInfo.name = particleNames[size_type];&lt;br /&gt;
         effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
         effectInfo.field30 = true;&lt;br /&gt;
         effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
         GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
   void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
          0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
          4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
      AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
          8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
      AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
=== IronBox ===&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
      AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WoodBox ===&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
   {&lt;br /&gt;
     csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
     message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
     GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
     GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
     SetStatusRetire();&lt;br /&gt;
     Kill();&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== Used Objects ==&lt;br /&gt;
&lt;br /&gt;
=== GoalRing ===&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
   void PlayEffect()&lt;br /&gt;
   {&lt;br /&gt;
      auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
      auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
      effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
      effectInfo.visual = visualModel;&lt;br /&gt;
      effectInfo.field30 = false;&lt;br /&gt;
      effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
   void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
   {&lt;br /&gt;
      AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
      AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=604</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=604"/>
		<updated>2025-05-10T21:02:21Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== WoodBox ==&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
    csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
    message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
    GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
    GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
    SetStatusRetire();&lt;br /&gt;
    Kill();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== IronBox ==&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JumpBoard ==&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  int sizeType = 0;&lt;br /&gt;
  csl::math::Vector3 field3A0;&lt;br /&gt;
  float field3B0;&lt;br /&gt;
  game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
&lt;br /&gt;
  static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
     csl::math::Vector3 position;&lt;br /&gt;
     xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
     SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
     if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
     {&lt;br /&gt;
        return true;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
     auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
     xgame::MsgJumpBoardImpulse impulseMsg(normalShot.startPosition, normalShot.destination,&lt;br /&gt;
         boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
     SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
     if(impulseMsg.handled)&lt;br /&gt;
     {&lt;br /&gt;
        auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
        game::EffectCreateInfo effectInfo;&lt;br /&gt;
        effectInfo.name = particleNames[size_type];&lt;br /&gt;
        effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
        effectInfo.field30 = true;&lt;br /&gt;
        effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
        GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;,&lt;br /&gt;
         0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;,&lt;br /&gt;
         4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;,&lt;br /&gt;
         8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
     AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
== GoalRing ==&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  void PlayEffect()&lt;br /&gt;
  {&lt;br /&gt;
     auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
     auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
     effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
     effectInfo.visual = visualModel;&lt;br /&gt;
     effectInfo.field30 = false;&lt;br /&gt;
     effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
     AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=603</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=603"/>
		<updated>2025-05-10T20:55:01Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== WoodBox ==&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
    csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
    message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
    GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
    GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
    SetStatusRetire();&lt;br /&gt;
    Kill();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
This object has no parameters to configure.&lt;br /&gt;
&lt;br /&gt;
== IronBox ==&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JumpBoard ==&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  int sizeType = 0;&lt;br /&gt;
  csl::math::Vector3 field3A0;&lt;br /&gt;
  float field3B0;&lt;br /&gt;
  game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
&lt;br /&gt;
  static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
     csl::math::Vector3 position;&lt;br /&gt;
     xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
     SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
     if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
     {&lt;br /&gt;
        return true;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
     auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
     xgame::MsgJumpBoardImpulse impulseMsg(normalShot.startPosition, normalShot.destination, boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
     SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
     if(impulseMsg.handled)&lt;br /&gt;
     {&lt;br /&gt;
        auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
        game::EffectCreateInfo effectInfo;&lt;br /&gt;
        effectInfo.name = particleNames[size_type];&lt;br /&gt;
        effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
        effectInfo.field30 = true;&lt;br /&gt;
        effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
        GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;, 0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;, 4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;, 8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
     AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This is identical to the parameters the object can be configured with in Sonic Colors.&lt;br /&gt;
&lt;br /&gt;
== GoalRing ==&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  void PlayEffect()&lt;br /&gt;
  {&lt;br /&gt;
     auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
     auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
     effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
     effectInfo.visual = visualModel;&lt;br /&gt;
     effectInfo.field30 = false;&lt;br /&gt;
     effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  void app::paramMap_ObjGoalRing(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamBool(resource, &amp;quot;IsMessageON&amp;quot;, &amp;quot;メッセージで起動&amp;quot;, 0, false);&lt;br /&gt;
     AddParamTarget(resource, &amp;quot;GoalRingBattleInfo&amp;quot;, &amp;quot;対戦用情報Obj(GoalRingBattleInfo)&amp;quot;, 4);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=602</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=602"/>
		<updated>2025-05-10T20:51:58Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== WoodBox ==&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
    csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
    message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
    GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
    GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
    SetStatusRetire();&lt;br /&gt;
    Kill();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
== IronBox ==&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  void paramMap_ObjIronBox(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumX&amp;quot;, &amp;quot;箱の数(X軸)&amp;quot;, 0, 1, 1, 100, 1);&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumY&amp;quot;, &amp;quot;箱の数(Y軸)&amp;quot;, 4, 1, 1, 100, 1);&lt;br /&gt;
     AddParamUint32(resource, &amp;quot;BoxNumZ&amp;quot;, &amp;quot;箱の数(Z軸)&amp;quot;, 8, 1, 1, 100, 1);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== JumpBoard ==&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  int sizeType = 0;&lt;br /&gt;
  csl::math::Vector3 field3A0;&lt;br /&gt;
  float field3B0;&lt;br /&gt;
  game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
&lt;br /&gt;
  static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
     csl::math::Vector3 position;&lt;br /&gt;
     xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
     SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
     if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
     {&lt;br /&gt;
        return true;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
     auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
     xgame::MsgJumpBoardImpulse impulseMsg(normalShot.startPosition, normalShot.destination, boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
     SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
     if(impulseMsg.handled)&lt;br /&gt;
     {&lt;br /&gt;
        auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
        game::EffectCreateInfo effectInfo;&lt;br /&gt;
        effectInfo.name = particleNames[size_type];&lt;br /&gt;
        effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
        effectInfo.field30 = true;&lt;br /&gt;
        effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
        GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The object can be configured with the following parameters:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
  static const char* enumDescriptions[] = { &amp;quot;Sサイズ&amp;quot;, &amp;quot;Mサイズ&amp;quot;, &amp;quot;Lサイズ&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  void paramMap_ObjJumpBoard(SetEd::CResClass resource)&lt;br /&gt;
  {&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;ImpulseSpeedOnNormal&amp;quot;, &amp;quot;プレイヤーに与える速度(通常時)&amp;quot;, 0, 350.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;ImpulseSpeedOnBoost&amp;quot;, &amp;quot;プレイヤーに与える速度(ブースト時)&amp;quot;, 4, 500.0f, 0.0f, 100000.0f, 10.0f);&lt;br /&gt;
     AddParamFloat(resource, &amp;quot;OutOfControl&amp;quot;, &amp;quot;制御不可時間(秒)&amp;quot;, 8, 0.25f, 0.0f, 100000.0f, 0.01f);&lt;br /&gt;
     AddParamEnum(resource, &amp;quot;SizeType&amp;quot;, &amp;quot;大きさ&amp;quot;, 12, enumDescriptions, 3, 0);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GoalRing ==&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  void PlayEffect()&lt;br /&gt;
  {&lt;br /&gt;
     auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
     auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
     effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
     effectInfo.visual = visualModel;&lt;br /&gt;
     effectInfo.field30 = false;&lt;br /&gt;
     effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=601</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=601"/>
		<updated>2025-05-10T20:40:44Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== WoodBox ==&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
    csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
    message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
    GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
    GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
    SetStatusRetire();&lt;br /&gt;
    Kill();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
== IronBox ==&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
== JumpBoard ==&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  int sizeType = 0;&lt;br /&gt;
  csl::math::Vector3 field3A0;&lt;br /&gt;
  float field3B0;&lt;br /&gt;
  game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
&lt;br /&gt;
  static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
     csl::math::Vector3 position;&lt;br /&gt;
     xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
     SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
     if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
     {&lt;br /&gt;
        return true;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
     auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
     xgame::MsgJumpBoardImpulse impulseMsg(normalShot.startPosition, normalShot.destination, boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
     SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
     if(impulseMsg.handled)&lt;br /&gt;
     {&lt;br /&gt;
        auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
        game::EffectCreateInfo effectInfo;&lt;br /&gt;
        effectInfo.name = particleNames[size_type];&lt;br /&gt;
        effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
        effectInfo.field30 = true;&lt;br /&gt;
        effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
        GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
== GoalRing ==&lt;br /&gt;
The goal ring object found commonly in Sonic games is an object in Sonic Lost World&#039;s multiplayer mode carried over from Sonic Colors. The underlying code still references the particle file from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjGoalRing : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  void PlayEffect()&lt;br /&gt;
  {&lt;br /&gt;
     auto* visualModel = GetGOC&amp;lt;fnd::GOCVisualModel&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
     auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
     effectInfo.name = &amp;quot;goalring_ya&amp;quot;;&lt;br /&gt;
     effectInfo.visual = visualModel;&lt;br /&gt;
     effectInfo.field30 = false;&lt;br /&gt;
     effect-&amp;gt;CreateEffectLoopEx(effectInfo);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;goalring_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=600</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=600"/>
		<updated>2025-05-10T20:26:31Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== WoodBox ==&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model, however there are no models included for when the object is broken by the player. This is because in Sonic Colors the breaking uses particles to display broken pieces and the underlying code still references the particle file from that game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjWoodBox : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  bool ProcMsgDamage(xgame::MsgDamage&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
    csl::math::Vector3 position = GetGOC&amp;lt;fnd::GOCTransform&amp;gt;()-&amp;gt;frame.transform.GetTranslation();&lt;br /&gt;
    message.SetReply(position, true);&lt;br /&gt;
&lt;br /&gt;
    GetGOC&amp;lt;game::GOCEffect&amp;gt;()-&amp;gt;CreateEffect(&amp;quot;woodbox_ya&amp;quot;);&lt;br /&gt;
    GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;obj_woodboxbrk&amp;quot;, 0.0f);&lt;br /&gt;
&lt;br /&gt;
    SetStatusRetire();&lt;br /&gt;
    Kill();&lt;br /&gt;
&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;woodbox_ya&amp;lt;/code&amp;gt; particle file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
== IronBox ==&lt;br /&gt;
The iron box object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model.&lt;br /&gt;
&lt;br /&gt;
== JumpBoard ==&lt;br /&gt;
The dash board object found commonly in Sonic games is an unused object in Sonic Lost World carried over from Sonic Colors. The model that it uses has been swapped for the Sonic Generations model. The underlying code still references the particle and sound files from Sonic Colors.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;namespace app&lt;br /&gt;
{&lt;br /&gt;
class CObjJumpBoard : CSetObjectListener&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
  int sizeType = 0;&lt;br /&gt;
  csl::math::Vector3 field3A0;&lt;br /&gt;
  float field3B0;&lt;br /&gt;
  game::GOCLauncher* launcher = nullptr;&lt;br /&gt;
&lt;br /&gt;
  static const char* particleNames[] = { &amp;quot;jumppanel_ya_30s&amp;quot;, &amp;quot;jumppanel_ya_30m&amp;quot;, &amp;quot;jumppanel_ya_30l&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  bool ProcMsgHitEventCollision(xgame::MsgHitEventCollision&amp;amp; message)&lt;br /&gt;
  {&lt;br /&gt;
     csl::math::Vector3 position;&lt;br /&gt;
     xgame::MsgGetPosition getPositionMsg(&amp;amp;position);&lt;br /&gt;
     SendMessageImm(message.sender, getPositionMsg);&lt;br /&gt;
     if (field3B0+ field3A0.dot(position) &amp;gt;= -0.000001)&lt;br /&gt;
     {&lt;br /&gt;
        return true;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     auto&amp;amp; normalShot = launcher-&amp;gt;getShotInfo(&amp;quot;normal&amp;quot;);&lt;br /&gt;
     auto&amp;amp; boostShot = launcher-&amp;gt;getShotInfo(&amp;quot;boost&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
     xgame::MsgJumpBoardImpulse impulseMsg(normalShot.startPosition, normalShot.destination, boostShot.destination, normalShot.travelTime, xgame::MsgJumpBoardImpulse::EType::Normal);&lt;br /&gt;
     SendMessageImm(message.sender, impulseMsg);&lt;br /&gt;
     if(impulseMsg.handled)&lt;br /&gt;
     {&lt;br /&gt;
        auto* effect = GetGOC&amp;lt;game::GOCEffect&amp;gt;();&lt;br /&gt;
        game::EffectCreateInfo effectInfo;&lt;br /&gt;
        effectInfo.name = particleNames[size_type];&lt;br /&gt;
        effectInfo.rotation = csl::math::Quaternion(M_PI);&lt;br /&gt;
        effectInfo.field30 = true;&lt;br /&gt;
        effect-&amp;gt;CreateEffectEx(effectInfo);&lt;br /&gt;
&lt;br /&gt;
        GetGOC&amp;lt;game::GOCSound&amp;gt;()-&amp;gt;Play3D(&amp;quot;objsn_jumpboard&amp;quot;, 0.0f);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     return true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30s&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30m&amp;lt;/code&amp;gt; and &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;jumppanel_ya_30l&amp;lt;/code&amp;gt; particle files can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\common_object.arc\ob_common.breff&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code style=&amp;quot;color: green;&amp;quot;&amp;gt;objsn_jumpboard&amp;lt;/code&amp;gt; sound file can be located within &amp;lt;code&amp;gt;sonic2010_0.cpk\sound\se_object_common.csb&amp;lt;/code&amp;gt; inside of Sonic Colors&#039; files.&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=599</id>
		<title>Sonic Colors Leftover Objects in Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Colors_Leftover_Objects_in_Sonic_Lost_World&amp;diff=599"/>
		<updated>2025-05-10T19:33:57Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: Created page with &amp;quot;== Woodbox == The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Woodbox ==&lt;br /&gt;
The wooden box object found commonly in Sonic games is an unused object in Sonic Lost World&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
	<entry>
		<id>https://hedgedocs.com/index.php?title=Sonic_Lost_World&amp;diff=598</id>
		<title>Sonic Lost World</title>
		<link rel="alternate" type="text/html" href="https://hedgedocs.com/index.php?title=Sonic_Lost_World&amp;diff=598"/>
		<updated>2025-05-10T19:32:54Z</updated>

		<summary type="html">&lt;p&gt;ĐeäTh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
* [[hhdxml]] (*.hhd)&lt;br /&gt;
&lt;br /&gt;
=== Collision ===&lt;br /&gt;
&lt;br /&gt;
* [[Collision2fbx (Sonic Lost World)|collision2fbx]] (*.hkx)&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
* [[GensMaterial2Slw]] (*.material)&lt;br /&gt;
&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
* [[Shadow Model Converter]] (*.model)&lt;br /&gt;
&lt;br /&gt;
== Guides ==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
== Discoveries ==&lt;br /&gt;
&lt;br /&gt;
=== Cutscenes ===&lt;br /&gt;
&lt;br /&gt;
* [[Real-Time Cutscene Levels in Sonic Lost World|Real-Time Cutscene Levels]]&lt;br /&gt;
&lt;br /&gt;
=== Levels ===&lt;br /&gt;
&lt;br /&gt;
* [[Sonic Colors Leftover Levels in Sonic Lost World|Colors Leftovers]]&lt;br /&gt;
* [[Sonic Lost World Test Levels|Test Levels]]&lt;br /&gt;
* [[Sonic Lost World Deleted Levels|Deleted Levels]]&lt;br /&gt;
* [[Sonic Lost World Original Level Order|Original Level Order]]&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
* [[Sonic Colors Leftover Objects in Sonic Lost World|Colors Leftovers]]&lt;/div&gt;</summary>
		<author><name>ĐeäTh</name></author>
	</entry>
</feed>