recursal/Fanatic-Fandom huggingface dataset:
Segment

A **segment** is the smallest part of a stage. Segments are used inside rooms, and rooms are used inside levels, and levels are used as checkpoints in the game. Segments contain obstacles, billboards and decals (basically, graphics), some collision information (as `<box>` tags), and the stone mesh with its texture. The mesh file is not necessary in order for a segment to load as it only contains visual information on where to place stone geometry.

## Files

Segments are split into two files: the XML file and the mesh file.

### XML

The more important part of a segment is most likely it's XML file. These contain information such as obstacles, collision boxes, and decals. Each segment has a specific size, the most important being how long the segment is in units. (Note: Units and distance do not appear to be the same at the moment.) A segment can be loaded using only its XML file, though there will be no tiles or stone.

#### Example

This example comes from 16\_2 of Phosphor (Checkpoint 9)/Part1. It is truncated and is not the same as the original.

```
<segment size="12 10 16" template="[[phosphor]]\_s">
 <box size="0.5 5.0 0.25" pos="-7.5 -5.0 -0.75" hidden="0" template="phosphor"/>
 <box size="0.5 6.5 0.0625" pos="-0.5 -6.5 -5.0625" hidden="0" template="phosphor"/>
 <box size="0.5 6.5 0.1875" pos="-1.5 -6.5 -5.1875" hidden="0" template="phosphor"/>
 <box size="0.5 6.5 0.25" pos="1.5 -6.5 -5.25" hidden="0" template="phosphor"/>
 <decal pos="0.0625 -0.59796 -5.8125" hidden="0" tile="11" size="2.5 2" color="1 1 1 .9" blend=".25"/>
 <obstacle pos="0.0 4.77795 -7.5" hidden="0" template="phosphor\_glass" type="cubeframe" param1="size=1.5" param2="thickness=.1" rot="0 0 3.14" mode="6"/>
 <obstacle pos="0.0 0.51301 -7.5" hidden="0" template="phosphor\_st" type="scorediamond"/>
 <box size="0.5 0.5 0.0625" pos="-1.5 4.0 -9.9375" hidden="1" template="phosphor"/>
 <box size="0.5 0.5 0.125" pos="-1.5 5.0 -9.875" hidden="1" template="phosphor"/>
 <box size="0.5 5.0 0.4375" pos="7.5 -5.0 -15.4375" hidden="0" template="phosphor"/>
 <box size="0.5 5.0 0.5" pos="-7.5 -5.0 -15.5" hidden="0" template="phosphor"/>
 <decal pos="0.3125 -1.09796 -15.9375" hidden="0" tile="11" size="2.5 2" color="1 1 1 .9" blend=".25"/>
</segment>

```

### Mesh

A mesh is a pre-computed mesh of the stone visuals. (It is baked offline to ease load on weaker devices.)
Season 2

## Season 2: Episodes and Links

Episode 1: The Day After

* https://www.youtube.com/watch?v=xiEwF2wBSDw

Episode 2: Evil

* https://www.youtube.com/watch?v=33fd7LlGtBU

Episode 3: Laundry Room Panic

* https://www.youtube.com/watch?v=7nSxtUHdVIw

## Story

* Daniel (Played again by Xandar Lee) once again tries to solve the mysteries of his house, and faces off against Ennard.
MgObstacle

**mgObstacle** is used to place obstacles (Obstacles in the way needs to be broken)

## Usage

```
mgObstacle(**#OBSTCALE#**, **x**, **y**, **z, rx, ry, rz, "param0=123", ... , "param11=999"**)

```

where:

* **#OBSTCALE# -**path to the obstacle's .lua file
* **x, y, z -** coords form the room center, 0, 0, 0 - will place it on center in begin of the room.
* **rx, ry, rz -** sets obstacle rotate
* **"param0=123", ... , "param11=999" - (**optional) xml parameters.

## Example

```
z = -20
    *mgBox(0.5, 10, 0.5, -2, -10, z)*
    mgObstacle("scoretop", -2, 0, z, 0, 0, 0)
    *mgBox(0.5, 10, 0.5, 2, -10, z)*
    mgObstacle("scoretop", 2, 0, z, 0, 0, 0)

```

Place 2 pyramid crystals on 2 boxes

*To-Do:* Investigate

Main Game (mg) Functions
MgMusic

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

**MgMusic** sets the music of the room.

## Usage

```
mgMusic(MUSIC)

```

For example:

```
mgMusic("30")

```

To play 30.ogg from [DATA]/music.

## Notes

* All music should be 36 seconds long, preferably with 2 second intros and outros. If it's under this time, you may get a stop glitch because the music is not long enough.

## Sources

* 30.ogg (Checkpoint 6/Endless Mode stage 1/bosses' main theme)

Main Game (mg) Functions
Tutorial/Basics of Rooms

This covers some of the basics of rooms, starting from scratch.

It is also helpful to read the scripts that drive existing rooms. See Rooms:Basic/Basic (with Extra Commentary).

## Lua

All rooms are scripted in Lua. Lua is a **simple** scripting language that Smash Hit uses to preform various tasks.

## Starting

Create a file called `myroom.lua` in the rooms folder, where myroom is the level name.

## Functions

There are two main functions that a room needs to create: `init` and `tick`:

```
function init()
    -- Most things go here
end

function tick()
    -- This function runs every tick, so maybe 60 times
    -- a second. It is rarely used.
end

```

## Setup

The second thing to do is set up the room. This will use statements such as mgMusic and mgFogColor.

```
function init()
    -- file name of music, minus .ogg(.mp3) extension
    mgMusic("44")

    -- 1 (Red, Green, Blue), 2 (Red, Green, Blue)
    mgFogColor(1.0, 1.0, 1.0, 0.0, 0.0, 0.0)
end

```
There are more statements one can add, but these two are the minimum.

## Other Things

There are some other things to do.

We can create a variable to store the length of all segments and set it's value to 0.

```
    l = 0

```

If we want to use confSegment for having randomized segment order, then add this:

```
    local targetLen = 140

```

It will be used to compare the current distance of the stage to the desired distance.

## Configure Segments and Finish

The segments can now be configured.

The first option is to use mgSegment directly:

```
    l = l + mgSegment("test/test", -l)

    -- This tells Smash Hit this all of these segments add up to l distance
    mgLength(l)

```

The second option is to use confSegment and nextSegment for random segment ordering.

When reading this, remember that targetLen is set to our desired length, and l is 0 at the start.

```
    -- Configure segment "test/test"
    confSegment("test/test", 1)

    -- Don't be too concerned about what this does. Here is a description:
    -- While current length of all segments (l) is less than the desired
    -- length (targetLen), select a segment from the list (s) and add it
    -- to the game.
    while l < targetLen do
        s = nextSegment()
        l = l + mgSegment(s, -l)
    end

    -- This tells Smash Hit this all of these segments add up to l distance
    mgLength(l)

```

## Load it

Create a file in the levels directory called `test.xml` with this, where TEST is your room name:

```
<level>
    <room type="TEST" length="300"/>
</level>

```

And add the new checkpoint by replacing `basic` with `test` in `assets/game.xml`.
Tunnel to Endless Mode

CP 9 from v1.0 (part4) (seems like tunnel isn't left in new versions)

function init()

```
pStart = mgGetBool("start", true)
pEnd = mgGetBool("end", true)

```

```
mgFogColor(1.4, 1.5, 1.2, -.4, .3, .3)
mgMusic("29_2")
mgLowPass(0.2)
mgReverb(0.0, 0.5, 0.2)
mgEcho(0.5, 0.5, 0.6, 0.8)
mgGravity(.4)
mgSetRotation(-1)

```

```
confSegment("phosphor/part4/16_0", 1)
confSegment("phosphor/part4/16_1", 1)
confSegment("phosphor/part4/16_2", 1)
confSegment("phosphor/part4/16_3", 1)

l = 0

if pStart then
    l = l + mgSegment("phosphor/part4/start", -l)
end

len = 200

while l < len do
    s = nextSegment()
    l = l + mgSegment(s, -l)
end

```

```
if pEnd then
    l = l + mgSegment("phosphor/part4/door", -l)
end

mgLength(l)

```

end

function tick()
end
MgRunDelayed

**mgRunDelayed()** allows to wait certain time before executing a command

Usage:

**mgRunDelayed**(COMMAND, TIME)

**COMMAND** = Put the command ex. mgSetColor() or anything as long as its valid [string type]

**TIME** = Put the time "seconds" before executes command [float type]

Example:

**mgRunDelayed**('mgSetColor(text, 1, 1, 1)', 4.5)

Main Game (mg) Functions
Smash Hit font

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

The font for *Smash Hit* is used in all the text of the game, as well as any Mediocre logos of any games released after *Smash Hit*. It is free to download on Mediocre's press kit (full press kit/font only).

The *Smash Hit* logo is based on the font, except for the *A* and *HIT*.

## Use the *Smash Hit* Font on this Wiki

To use this font, use this line of code in source mode: (***[text]*** means your desired text) (it is set to 20pt)

```
<span style="font-family: 'Smash Hit', sans-serif; font-size: 20pt;"> '''''[text]''''' </span>

```

An example: (text is **bold**) You can only see this when the font is installed, download at Mediocre's press kit, link here for the whole presskit, or here for only the font.

```
<span style="font-family: 'Smash Hit', sans-serif; font-size: 20pt;">**abcdefghijklmnopqrstuvwxyz1234567890.:,;'"(!?)+-\*/=** </span>

```

becomes:

```
abcdefghijklmnopqrstuvwxyz1234567890.:,;'"(!?)+-\*/=

```

Or, you could use the template {{Smash Hit font}}:

```
{{Smash Hit font|text = abc}}

```

becomes:

```
abc

```

## Usage in-game

To make the font appear, the function mgCreateText is used.
MgSegment

**mgSegment** is used to place segments in rooms. It returns the segment length.

## Usage

```
segmentlength = mgSegment("segmentname", -segmentpos)

```

where:

* segmentlength - length of placed segment
* segmentname - is path to the segment xml file *Example:"jungle/trees/top\_0"*
* segmentpos - segment position (this variable inverted so always put minus to get correct results)

## Examples

Create a room with ~200 length filled with "jungle/trees/top\_0" segment:

```
while (l < 200) do
    l = l + mgSegment("jungle/trees/top\_0", -l)
end

```

*To-Do:* Add more examples

Main Game (mg) Functions
MgSetCanvasMoveable

**mgSetCanvasMoveable** is a command for the levelCanvas, where it either allows it to either make it movablr, or not.

Examples:

If it allows to make it movable, then the command looks like this: mgSetCanvasMoveable(levelCanvas, "x")

If it does not, then it should look like this (only in ZEN, VERSUS AND CO-OP modes): mgSetCanvasMoveable(levelCanvas, ";")

Main Game (mg) Functions
List of Lua Functions

* mgCreateImage
* mgCreateUi
* mgCreateText
* mgSetOrigo
* mgSetCrop
* mgRadioSelect
* mgSetUiEnabled
* mgSetUiModal
* mgSetText
* mgSetPos
* mgSetRot
* mgSetScale
* mgSetAlpha
* mgSetColor
* mgGetPos
* mgGetRot
* mgGetScale
* mgGetAlpha
* mgGetColor
* mgGetSize
* mgDraw
* mgDrawPie
* mgDrawBorder
* mgGet
* mgSet
* mgCommand
* mgScriptTime
* mgFullScreenColor
* mgCreateSound
* mgPlaySound
* mgIsTouched
* mgGetLastTouch
* mgGetScreenCoord
* mgCreateCanvas
* mgPushCanvas
* mgPopCanvas
* mgSetCanvasEnabled
* mgSetCanvasWindow
* mgSetCanvasMoveable
* mgSetCanvasSize
* mgGetUiSelectionCount
* mgGetUiSelectionInfo
* mgSetUiSelectionEnabled
* mgRunDelayed
* mgClearRunDelayed
* mgGetHighScore
* mgGetCheckpointPos
* mgGetPowerupFraction
* mgDrawMenuMesh
* mgDrawMenuGrid
* mgSetZ
* mgGetMultiplierColor
* mgCameraShake
* mgSetMode
* mgTime
* mgCameraDistance
* mgGetCameraPos
* mgGetCameraSpeed
* mgGetBeat
* mgGetBeatFloat
* mgGetString
* mgGetFloat
* mgGetInt
* mgRandomize
* mgRndInt
* mgRndFloat
* mgRndBool
* mgRaycast
* mgScore
* mgGlow
* mgClear
* mgIsCleared
* mgCanPass
* mgSegment
* mgSmoke
* mgCreateBody
* mgMove
* mgRotate
* mgReleaseMotion
* mgShapeReset
* mgMaterial
* mgDensity
* mgDriction
* mgRestitution
* mgForceLimit
* mgRoundness
* mgCategory
* mgMask
* mgStatic
* mgColor
* mgTexture
* mgShapeScale
* mgShapeChamfer
* mgCreateBox
* mgCreateCylinder
* mgCreateMesh
* mgClearShapes
* mgRemoveShape
* mgTranslateShape
* mgGetShapeBody
* mgBodyContainsPoint
* mgHideEdges
* mgSetShapeColor
* mgSetShapeMask
* mgSetVel
* mgSetAngVel
* mgClonePose
* mgBodyIsBroken
* mgShapeIsBroken
* mgCreateButton
* mgIsButtonDown
* mgIsButtonUp
* mgSetButtonDown
* mgLaser
* mgCreateBallJoint
* mgCreateHingeJoint
* mgCreateSliderJoint
* mgCreateRope
* mgJointMotor
* mgGetJointBodies
* mgIsConnected
* mgBox
* mgLength
* mgSpeedMultiplier
* mgMusic
* mgReverb
* mgLowPass
* mgEcho
* mgBoxOverlap
* mgObstacle
* mgPowerUp
* mgFogColor
* mgGravity
* mgGetTimeStep
* mgSetDifficulty
* mgSetRotation
* mgParticles
* mgGetGravity
* mgObstacleTime
* mgBodyPointToWorld
* mgBodyVecToWorld
* mgHasBoss
* mgIsClosestBoss
* mgBodyDecal
* mgGetSplitExtraRoomLength
* mgObstacle
MgFogColor

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

**mgFogColor** is used to set the fog color of a room. **Used in a gradient**

## Usage

*To-Do:* Find more precise color max and min variables.

There is a top color and the bottom color

```
mgFogColor(R0, G0, B0, R1, G1, B1)

```

R0, G0, B0 - Bottom color

R1, G1, B1 - Top color

1 - is max; 0 is lowest (setting over will result a gradient scaling)

For example:

```
mgFogColor(1.6, 1.4, 2, -.8, 0, 0)

```

Main Game (mg) Functions
Room Generator

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

**Smash Hit** semi-randomly generates its rooms using the **Room Generator**.

## Explanation

*To-Do:* Further research shows this section was completely incorrect, so it needs to be rewritten to match what we know. As a note, most of the work of the room generator is in rooms/include.lua.
MgBodyIsBroken

**mgBodyIsBroken** gets whether or not a body has been broken. If it has, it returns `true`, and if it has not been broken then it is `false`.

## Usage

**broken** = mgBodyIsBroken(**body**)
**broken** - true if body broken, otherwise false.

**body** - physical body to check

## Example

```
if body ~= 0 then
	if mgBodyIsBroken(body) and not done then
			mgClear()
			done = true
	end
end

```

This example has been taken from `obstacles/flycube.lua`. This code will clear obstacle if it goes off screen.

This function is also used for crystals, (e.g. scoretop) and the bosses. If the object is broken, the glass will change to a transparent color and lose its glow.

Main Game (mg) Functions
MgEcho

**mgEcho** sets the echo effect for a room.

## Usage

```
mgEcho(output, delay_time, feedback, lowpass)

```

* `output` - volume of the echo effect; if 0, turns the effect off
* `delay_time` - feedback delay time; if higher than 1, will be set to 1
* `feedback` - volume of the feedbacks
* `lowpass` - strength of the low-pass filter applied to every feedback

For example:

```
mgEcho(0.3, 0.2, 0.5, 0.5)

```

Main Game (mg) Functions
MgGetCheckpointPos

mgGetCheckpointPos is command that sets the position of a checkpoint.

***But I haven't even gotten past the first room!***

This page is a stub. You can help by adding anything you know about **MgGetCheckpointPos**. This page might be in progress, meaning that it is only temporarily a stub.

Main Game (mg) Functions
MgReverb

**mgReverb** sets the reverberation effect for a room.

## Usage

```
mgReverb(output, reverberation_time, lowpass)

```

* `output` - the volume of the reverberation effect; if 0, turns the effect off
* `reverberation_time` - reverberation time
* `lowpass` - strength of the low-pass filter applied to the reverberation effect

For example,

```
mgReverb(0.2, 0.8, 0.3)

```
Level Editor

Disambiguation page for Level EditorThe following is a list of links to pages that might share the same title.Please follow one of the disambiguation links below or search to find the page you were looking for if it is not listed. If an internal link led you here, you may wish to change the link to point directly to the intended article.
Please choose the level editor you would like to view a page about:

* In-Game Level Editor - Smash Hit's builtin editor.
* Fan-Made Level Editors - A page describing fan-made level editors.
Breakage

**Breakage** is crucial to Smash Hit, being its largest reason for existence. To quote the developers:

> Smash Hit is a game built entirely around destruction. We knew from the beginning that destruction had to be fully procedural and also 100% reliable. Prefabricated pieces broken the same way every time simply wouldn’t be enough for the type of game we wanted to make. The clean art style and consistent materials made breakage easier, since everything that breaks is made out of the same, solid glass material.
>
>

## References

1. ↑ Cracking Destruction | Tuxedolabs Blog, Dennis Gustafsson, 13 May 2014. Accessed on 2 February 2022.
MgSetCanvasEnabled

***But I haven't even gotten past the first room!***

This page is a stub. You can help by adding anything you know about **MgSetCanvasEnabled**. This page might be in progress, meaning that it is only temporarily a stub.

**mgSetCanvasEnabled** is a command that helps allow transitions in menus when it does the (menu) and hide(menu) commands.

mgSetCanvasEnabled((menu), false)

For hiding/closing:

mgSetCanvasEnabled((menu), true)

Main Game (mg) Functions
Fan-Made Level Editors

This is a list of fan-made level viewers and editors, with links to download and short descriptions taken from their websites or project READMEs.

## Editing

This includes segment editors that can save segments to files and those of which are actively developed. This may include Work-in-Progress editors and ones that only save the XML file but not the mesh.

Segment Editors

## Viewing only

This includes segment viewers that are or were planned to feature editing functionality.

Segment Viewers
* GitHub Page

## Not Usable

This category includes editors that are privately made and not distributed to the public, or those that have a cost to obtain.

* Level Editor (official Mediocre one)

## Notes

1. ↑ To be complete: Has the project met all of its initial goals? Can it export all five types of entities? Can it at least export a mostly-complete segment file?
2. ↑ Last updated 2020-10-24, as of 2022-01-23
3. ↑ To be complete: Can the project preview all five entity types in the way the project intends to display them?
Scoremulti

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

```
function getY()
	if ray then
		local tmp,x,y,z = mgRaycast(0,0,0,0,-10,0, 3)
		return y+0.7
	else
		return 0.7
	end
end

function init()
	ray = mgGetBool("raycast", false)
	mgScore(10, 0, getY(), 0.1)
	mgGlow(0, getY(), 0)

	body = mgCreateBody(0, getY(), 0)
	cr, cg, cb = mgGetColor("color", 1, 1, 1)

	mgMaterial("glass")
	mgColor(cr, cg, cb)
	mgRoundness(0.2)

	mgShapeScale(0.1, 0.5, 0.1)
	mgForceLimit(0.05)
	mgCategory(4)
	mgCreateMesh(body, "pyramid", 0, 0.1, 0)
	mgCreateMesh(body, "pyramid", -0.1, 0, 0, 0, 0, 1.57)
	mgCreateMesh(body, "pyramid", 0.1, 0, 0, 0, 0, -1.57)
	mgCreateMesh(body, "pyramid", 0, -0.1, 0, 0, 0, 3.14)
	mgCreateMesh(body, "pyramid", 0, 0, 0.1, 1.57, 0, 0)
	mgCreateMesh(body, "pyramid", 0, 0, -0.1, -1.57, 0, 0)

	mgSetAngVel(body, 0, 1, 0)
	mgMove(body, 0, getY(), 0)
end

function tick()
	if not mgIsCleared() then
		local dist = mgCameraDistance()
		if ray then
			mgMove(body, 0, getY(), 0)
			mgGlow(0, getY(), 0)
		end
		if mgBodyIsBroken(body) then
			if dist > 12 then
				mgScore(10, 0, getY(), 0.1)
			elseif dist > 6 then
				mgScore(5, 0, getY(), 0.1)
			else
				mgScore(3, 0, getY(), 0.1)
			end
			mgReleaseMotion(body)
			mgClear()
			return
		end

		if dist > 13 then
			star = 1
			diamond = 1
		elseif dist > 12 then
			star = dist-12
			diamond = 1
		elseif dist > 7 then
			star = 0
			diamond = 1
		elseif dist > 6 then
			star = 0
			diamond = dist-6
		else
			star = 0
			diamond = 0
		end
		if oldStar~=star or oldDiamond~=diamond then
			mgClearShapes(body)
			mgShapeScale(0.2-0.1*star, 1.0-diamond*0.5, 0.2-0.1*star)
			mgCreateMesh(body, "pyramid", 0, 0.1*star-0.5*(1-diamond), 0)
			if diamond > 0 then
				mgShapeScale(0.2-0.1*star, 0.5*diamond, 0.2-0.1*star)
				mgCreateMesh(body, "pyramid", 0, -0.1*star-0.5*(1-diamond), 0, 0, 0, 3.14)
				if star > 0 then
					mgShapeScale(star*0.1, star*0.5, 0.1)
					mgCreateMesh(body, "pyramid", 0.2-0.1*star, 0, 0, 0, 0, -1.57)
					mgCreateMesh(body, "pyramid", -0.2+0.1*star, 0, 0, 0, 0, 1.57)
					mgShapeScale(0.1, star*0.5, star*0.1)
					mgCreateMesh(body, "pyramid", 0, 0, 0.2-0.1*star, 1.57, 0, 0)
					mgCreateMesh(body, "pyramid", 0, 0, -0.2+0.1*star, -1.57, 0, 0)
				end
			end
			oldStar = star
			oldDiamond = diamond
		end
	end
end

```

Crystal transformation.png
Tutorial/Challenges

Here are some challenges to attempt if you want to improve your modding skills.

If you find one confusing, skip it and come back later. Also, don't feel that you need to do every one of these; just do the ones where you need practice doing.

## Simple

* **I'd prefer any other color.** Try to change to color of the introductory stage.
	+ **Hint:** The introductory stage is called basic in the files.
* **It's a bit boring for me.** Try to make the introductory stage faster.
* **Can we change things up today?** Try to change the order of all the checkpoints so they are almost backwards, going from Checkpoint 11 to Start and then endless.
	+ **Hint:** Look in game.xml.
* **I'm sure this game will sell well.** Remove all checkpoints except for Checkpoint endless.
* **Who needs checkpoint 8?** Try to remove checkpoint 8 from the game.
	+ **Hints**:
	1. Checkpoint 8 is called brownie in the files.
	2. Removing only the files will cause problems.
* **That looks a bit odd there.** Load some segments from other checkpoints into checkpoint 1.
	+ **Hint:** Checkpoint 1 is called night in the files.

## Harder

* **The fog is quite colorful today.** Try to make the colors random in the first stage.
	+ **Hint:** Use `mgRandFloat()`
QiSDK

**QiSDK** is the fan-given name of the "low-level SDK" and "homebrew collection of classes" that were used to create Smash Hit and other Mediocre games. The name is given due to the use of the Qi- naming prefix on most classes and functions.

## History

According to Dennis, QiSDK was first created around 2008. It appears that QiSDK was signifcantly rewritten in 2018 to become TLib.

## References

1. ↑ Development environment | Voxagon Blog. Dennis Gustafsson. Published January 10, 2013. Accessed October 14, 2020.
2. ↑ 2.0 2.1 Header file dependencies | Voxagon Blog. Dennis Gustafsson. Published Feburary 9, 2018.
3. ↑ See image in this tweet
Scorediamond

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

```
function getY()
	if ray then
		local tmp,x,y,z = mgRaycast(0,0,0,0,-10,0, 3)
		return y+0.6
	else
		return 0.6
	end
end

function init()
	ray = mgGetBool("raycast", false)

	mgScore(5, 0, 0.6, 0.1)
	mgGlow(0, getY(), 0)

	body = mgCreateBody(0, getY(), 0)
	cr, cg, cb = mgGetColor("color", 1, 1, 1)

	mgMaterial("glass")
	mgColor(cr, cg, cb)
	mgRoundness(0.2)

	mgShapeScale(0.2, 0.5, 0.2)
	mgCategory(4)
	mgCreateMesh(body, "diamond")

	mgMove(body, 0, getY(), 0)
end

function tick()
	if not mgIsCleared() then
		mgSetAngVel(body, 0, 1, 0)
		if ray then
			mgMove(body, 0, getY(), 0)
			mgGlow(0, getY(), 0)
		end
		if mgBodyIsBroken(body) then
			mgScore(5, 0, getY(), 0.1)
			mgClear()
			mgReleaseMotion(body)
		end
	end
end

```
Chapter 87

**Kedarui-san** (毛樽井さん *Kedarui-san*) is the eighty-seventh chapter of the *100 Kanojo* manga.

## Summary

Rentarou is trying to find a Statue of Liberty Cowgirl in a store for Miss Naddy where he finds and zings with Kedarui Aashii/Ahko which she remember seeing the toy down the street, she leads Rentarou to the store as they talk and introduce each other, upon reaching the store and Rentarou getting the toy, he thanks her and traded Lines. Sometime during lunch, the next day, Rentarou finds Ahko eating alone and she reveals she doesn't really have friends due to her face and her inability to change it much. That night Rentarou invites Ahko to a Flea Market which we skips to the next day and we see them walking around and set up a shop. Ahko finds joy in selling stuff she finds fascinating to people who find her stuff fascinating. She then realizes what she wants to do in the future, to sell stuff, with Rentarou. She confesses and they get together and she becomes Rentarou's 18th Girlfriend.

## Characters

* Aijou Rentarou
* Kedarui Aashii
* Yamato Nadeshiko (mentioned)
* Ahko's Friends (shown in flashback)
* Unnamed Girl

## Quote

**Beginning:** New Girl Spotted ♥

**End:** Where?!

**Next Chapter:** Working on the volume sends us on a break.
MgBox

**mgBox** is used to create visible non-textured static boxes, used in prerelease versions of the game, box color can be changed by mgColor.

## Usage

```
mgBox(**x0, y0, z0**, **x1, y1, z1**)

```

where:

**x0, y0, z0** - scaling from middle of the 2,2,2 cube

**x1, y1, z1** - position

## Example

```
*mgColor(1, 1, 1)*

    mgBox(7, 0.5, length/2, 0, -5.5, -length/2)
    mgBox(7, 0.5, length/2, 0, 6.5, -length/2)
    mgBox(2, 0.5, length/2, -5.5, 5.5, -length/2)
    mgBox(2, 0.5, length/2, 5.5, 5.5, -length/2)
    mgBox(1, 5, length/2+0.5, -5.5, 0, -length/2)
    mgBox(1, 5, length/2+0.5, 5.5, 0, -length/2)

```

part from 1.lua of 0.1 version that create some white boxes. lenght, is room length, it will result this (photo recreated by hands in model editor)

*To-Do:* Add in game screenshots and investigate it with mgColor

Main Game (mg) Functions
MgSetScale

**mgSetScale** is a command that sets the scale more likely set size of element (image).

Usage:

```
mgSetScale(ID, WIDTH, HEIGHT)

```

Example:

```
mgSetScale(dbgMenu, 0.75, 0.75)

```

And also you can use animations with **mgSetScale** command

Usage:

```
mgSetScale(ID, WIDTH, HEIGHT, ANIMATION, VALUE)

```

Example:

```
mgSetScale(dbgMenu, 0.75, 0.75, "cosine", 0.1)

```

Main Game (mg) Functions
MgScore

mgScore is used to set the score (ball count) of an obstacle when it breaks. In the final game, it is only used by crystals.

## Usage

```
mgScore(SCORE, X, Y, Z)

```

Note: X, Y, and Z are to coordinates of where you want the center of the score circle to appear relative to the obstacle.

For example:

```
mgScore(10, 0, getY(), 0.1)

```

A hacked game showing a drastically altered score of **99999** for every pyramid broken.

Main Game (mg) Functions
MgCameraDistance

**mgCameraDistance** is used to check current room distance.

## Usage

```
**camDist** = mgCameraDistance()

```

camDist - returned current room distance

## Example

```
vdist = distance * mgGetCameraSpeed() / 7.0
	if mgCameraDistance() < vdist and  not released then
		mgReleaseMotion(b)

```

Example from obstacle/hitblock.lua. Release cube block if player get close enough.
Other uses include scoremulti, flycube, and anything that performs an action if the player gets close to it.

Main Game (mg) Functions
Ad Server

The **Ad Server** is a server that provides an advertisement to display, if any are available, in the form of a UI XML and PNG image. These were only usually used to promote new games by Mediocre, but if reworked, they could be used to advertise new versions of mods, among other things.

## Breakdown

### Retrieving adverts

The advertisements are retrieved in `HttpThread::checkBanners` in `libsmashhit.so`.

The initial request is an HTTP/1.1 GET request for:

```
http://mediocre.se/content/smashhit/ads.php?platform={platform}&version={version}&rev={rev}&date={date}

```

* `platform`: The platform that the user is on; for example, `android`.
* `version`: The string of the version of the game that the user is on; for example, `1.4.2`.
* `rev`: Unknown, but probably the current advertisement revision.
* `date`: The date, unknown format.

The server responds with a zero-length document if there is no ad. If there is an advert to display, however, it will respond with an XML document. The format of the XML document is:

```
<ads revision="{revision}" showfront="{showfront}" onlyfree="{onlyfree}" sale="{sale}" folder="{folder}"/>

```

* `revision`: The revision of the new advertisements. If zero, there are none and no other fields need to be filled.
* `showfront`: Unknown, but seems to prevent downloading new advert if equal to zero.
* `onlyfree`: Unknown, but probably if the ad should only be shown to free (non-premium) users.
* `sale`: Unknown, but seems to be if this is a sale on premium or not.
* `folder`: The subfolder where the ads.xml and ads.png are stored.

Note that the folder is of the `https://mediocre.se/content/smashhit/` part of the URL, or whatever you have for your adserver.

Assuming that `revision` and `showfront` are non-zero values, the game will download the `ads.png` and `ads.xml` files from the folder and complete successfully if they both exist.

### Display

The advertisements seem to be in the normal UI XML format with a PNG file for display, so they are just shown like any other UI element.

## Examples

### Official ad server

Try visiting this URL: https://mediocre.se/content/smashhit/ads.php?platform=android&version=1.4.3&rev=3&date=1470157898

Right click and inspect the page source.

You should see that the server has responded with `<ads revision="0"/>`, assuming there are not any ads right now.

**Note**: Your browser might add some extra HTML because it assumes this is an HTML document, but it is not.

### Crafted response

An example of a response might be:

```
<ads revision="1" showfront="1" onlyfree="0" sale="0" folder="dirac"/>

```

For the following files:

```
https://mediocre.se/content/smashhit/dirac/ads.png
https://mediocre.se/content/smashhit/dirac/ads.xml

```

## See also

* Smash Hit Ad Server reimplementation by Knot126
Feeling Switchy

Project Number: 16

Description: Build the circuit shown and push the press switch (S2) to turn on light or sound. Switches can be arranged in many different ways.

Snappy: The press switch allows electricity from the battery to the circuit, and the slide switch (S5) directs the electricity to either the yellow LED (D5) or the horn (W1). These switches are like many switches in your home, controlling lights and many other things.
MgLaser

*To-Do:* Figure out if the ten seconds of research is correct

**mgLaser** presumably draws the laser's beams.

## Usage

*To-Do:* Figure out what A-F mean. Could it be XYZ1/XYZ2?

```
mgLaser(A, B, C, D, E, F)

```

For example:

```
mgLaser(xPos + 0.01 + t, yPos + (y-0.2)*0.18-beams*0.1, 0, 1, 0, 0)

```

## Related

* Lasers

Main Game (mg) Functions
MgCreateImage

**mgCreateImage**is used to load in memory images, return id of loaded image.

## Usage

```
**myCustomImage** = mgCreateImage(**path**)

```

where:

* **myCustomImage** - variable with id of loaded image
* **path** - path to the image file

## Example

 loadingLogo = mgCreateImage("logo.png")

```
 *mgSetOrigo(loadingLogo, "center")*

 mgSetPos(loadingLogo, centerX+4, top+203)
 mgSetScale(loadingLogo, 0.75, 0.75)

```

Loads loading logo near the center. PNG

 saleMain = mgCreateImage("hud/sale/smashhit\_sale\_main.jpg")

```
   *mgSetPos(saleMain, right-390, top-50)*
   mgSetRot(saleMain, -math.pi/4)

```

Loads buy premium button (possibly). JPG

*To-Do:* Verify image formats

Main Game (mg) Functions
Series Info

## ***FNAF: Home Sweet Home Info***

The series follows the life of Daniel, (Played by Xandar Lee) who gets a new home and has to survive the horrors that takes place there.

* Main Character: Daniel: The main hero of the series. Very tired, and somewhat bored sounding due to lack of sleep.
* There are currently two seasons each following the main character of Daniel.
MgGlow

**mgGlow** adds a glare effect somewhere. This can be seen on crystals.

## Usage

```
mgGlow(X, Y, Z)

```

Where X, Y and Z are the coordinates where the glow should show. For example:

```
ray = mgGetBool("raycast", false)

```

```
mgScore(3, 0, 0.6, 0.1)
mgGlow(0, 0.4, -.2)

```

```
local yPos = 0

```

(from obstacles/scoretop)

## Caution

This, along with mgScore, appears to be disabled in Zen Mode.

## Images

Crystals have a glow point in the center.

Main Game (mg) Functions
Южени

## Личность

Южени была первым гэльфордом, созданным по новой технологии. В отличие от Джулиана не имела никаких эмоций, кроме радости, потому что была сгустком энергии без человеческих черт. Это стало впоследствии большой проблемой для Синвирина, который не мог допустить, чтобы бездушное существо жило среди физических народов, но смерть Южени решила этот вопрос.

Синвирин с Джулианом пытались воспитать в Южени человеческие качества, уважение к чужой жизни и сострадание, но гэльфорд так и не поняла простейших понятий. Частенько она попадала в сложные ситуации на Земле, куда путешествовала вместе с Джулианом за продуктами до того, как Синвирин не выстроил портал напрямую в продуктовый склад.

"Единственное, что она хоть как-то ощущает - это радость, даже понятие привязанности ей чуждо. Она не атакует нас только потому, что в Синвирине видит Владыку, а во мне - Генерала,"- Джулиан о младшей сестре.

## Внешность

Внешность не сильно интересовала Южени, как, впрочем, и все остальное, кроме среды ее обитания - битвы. Однако, Джулиан настаивал на физической, человекообразной оболочке, сформированной из цветного света, которая бы имитировала сущность живого существа. Южени единственная из Первых Пятерых определила себя как девочку и выбрала внешность, соответствующую этому представлению. Она выглядела как девочка лет одиннадцати с длинными руками и ногами, неуклюжим, деревянным туловищем. Преимущественно носила зелёное платье до колена, черные ботильоны, гардероб менять не любила, хотя иногда представляла на себе платья диснеевских принцесс, про которых часто смотрела в свободное от битв время.

## История

Южени родилась во времена Безвременья в Зетта, в тот период, когда не было не только Пространства, но и Времени, поэтому ее точный возраст назвать невозможно. Она достаточно долго определяла себя, в итоге пришла к выводу, что она девочка, вылепить внешность ей помогли Старшие - Синвирин и Джулиан. Гэльфорда не интересовало ничто, кроме сражений и просмотра телевизора, на чт и делилось ее времяпрепровождение. Даже рождение Ирвина не заинтересовало ее.

Южени не участвовала в истории мира, как ее братья, она была чистым орудием уничтожения, и только сила Владыки не давала ей выйти из-под контроля и уничтожить мир до основания.

Гэльфорд погибла в Незапяматной войне, во время нападения монстра-разрушителя, который едва не убил Синвирина и Джулиана. Южени распространилась по Пространству, закрыв щели, образованные монстром, в результате чего ушла за Предел и перестала быть, растратив всю свою энергию.￼

Гибель девочки сильно подкосила психологическое здоровье Синвирина, который воспринимал ее как дочку и видел в ней свою биологическую дочь Хэлвердан Аниараги, погибшую на Земле. В результате смерти Южени второе поколение гэльфордов было создано более слабым, но человечным, что помогло избежать проблем, которые намечались с девочкой-Светом.￼
MgSetRotation

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

**MgSetRotation** sets the rotation for a room.

## Usage

```
mgSetRotation(n)
-- make n ccw rotations during the room
mgSetRotation(-n)
-- make n cw rotations during the room
mgSetRotation(n, range)
-- oscillate rotation from range/2 radians to -range/2 radians n times during the room
-- if range is 0, behaves same as mgSetRotation(n)
mgSetRotation(-n, range)
-- oscillate rotation from -range/2 radians to range/2 radians n times during the room
-- if range is 0, behaves same as mgSetRotation(-n)

```

### Examples:

```
mgSetRotation(-1)
-- one clockwise rotation
mgSetRotation(2)
-- two counterclockwise rotations
mgSetRotation(1, math.pi)
-- oscillate rotation from 90° ccw to 90° cw once
mgSetRotation(-2, math.pi)
-- oscillate rotation from 90° cw to 90° ccw twice

-- note: π radians = 180°

```

## Checkpoint 9

Example taken in checkpoint 9

Main Game (mg) Functions
Debug Menu

**"Take us back to the Main Menu!"**
For readers unfamiliar with technical *Smash Hit* content, return to this page on the Smash Hit Wiki.

*Smash Hit* contains a **Debug Menu** that is only accessible on developer builds. The debug menu contains four functions: reset, unlock all, premium, and no premium. It is activated by pressing the blue debug button on developer builds.Template:DebugMenuGallery

## Functions

 unlock all | Unlocks all content in *Smash Hit*: Levels, Premium Version, Game Modes, etc.
 premium | Give the user the Premium Upgrade for free
 no premium | Remove the Premium Upgrade (revert to free version?)

## Trivia

* The debug menu files still exist in final (public) versions of the game. However, enabling them (by editing the gane's files) only shows the menu; the functions do not work.

## Source code

None in final (non-dev) game that works.

```
    dbgButton = mgCreateUi("debug.xml")
    mgSetOrigo(dbgButton, "topleft")
    mgSetPos(dbgButton, left+70, top+70)

    dbgMenu = mgCreateUi("debugmenu.xml")
    mgSetOrigo(dbgMenu, "center")
    mgSetPos(dbgMenu, (left+right)*0.5, (top+bottom)*0.5)
    mgSetScale(dbgMenu, 0, 0)

...

    if cmd == "showdebug" then
        mgSetScale(dbgMenu, 1, 1, "cosine", 0.1)
        mgSetUiModal(dbgMenu, **true**)
    end

    if cmd == "hidedebug" then
        mgSetScale(dbgMenu, 0, 0, "cosine", 0.1)
        mgSetUiModal(dbgMenu, **false**)
    end

```

Another:

```
<ui texture="debugmenu.png" selected="debugmenu.png" shade="true">
	<rect coords="0 148 746 259" cmd="debug.reset"/>
	<rect coords="0 260 746 369" cmd="debug.unlockall"/>
	<rect coords="0 370 746 479" cmd="debug.premium"/>
	<rect coords="0 480 746 589" cmd="debug.nopremium"/>
	<outside cmd="script:hidedebug"/>
</ui>

```
Diad Forest

The Diad Forest is a small forest located in the Province of Dunon. It lies to the South of Dunon and Newet, at a bend in the Fluvius River. It's the home to all manner of natural fauna and flora, but it also houses more unnatural creatures, namely Goblins. It is said that deep in the forest there is an old tomb to a long forgotten order of knights, though it's unclear how much is supposition, rumor, or fact.
Smash Hit Lab Wiki

Welcome to the Smash Hit Lab Wiki!

Welcome to the wiki for documenting the technical side of *Smash Hit* and other games by Mediocre AB.

### Discord

There is a discord server for discussing technical things. It's recommended that you join it, but you don't have to.

If you see this, your JavaScript might be disabled or DiscordIntegrator plugin isn't working. If the latter, please contact a wiki administrator.

### GitHub

We also develop tools to help with Smash Hit modding on our GitHub organisation. Anyone with a GitHub account and some minimal programming knowledge can help collaborate and help us to develop tools to make the Smash Hit modding experience even better!

### Reading

These articles will help you start modding *Smash Hit*.

* Modding Starter Guide for Android
* Modding Starter Guide for Android without PC
* Modding Starter Guide for Jailbroken iOS (still needs to be written)
* Look at the List of Articles

### Other Games

This wiki focuses mainly on Smash Hit, and it is written with the expectation that information will apply to Smash Hit; however, any game by Mediocre AB can have documentation added to this wiki since they are by the same developer and therefore somewhat similar. For example, the MTX format is used by all Mediocre games.

### Editing

* Site Rules
* See the list of articles; many are stubs
* Attempt to follow Example Page Format for MG Reference Guide.

### Investigating and notable pages

These are some things that need research or investigation.

* **Segments, rooms and levels**
	+ LitMesh - the infamous `.mesh` files
	+ Segment XML - Primary part of a segment, along with the mesh
* **User interfaces**
	+ UI XML - user interface xml format
* **Breakage**
	+ http://blog.tuxedolabs.com/2014/05/13/cracking-destruction.html
	+ http://blog.tuxedolabs.com/2014/04/03/smashing-tech.html
	+ https://www.gdcvault.com/play/1022200/Physics-for-Game-Programmers-Destruction
* **Other features**
	+ Ad Server
	+ Stats Server
* **Modding status**

Smashing Mods Wiki

Releases of modifications for Smash Hit, which extend the game in new ways.

go to this wiki

Smash Hit Fanon Wiki

Smash Hit fanon... for anything fan-made about Smash Hit.

go to this wiki

Smash Hit Wiki

A wiki for general information about Smash Hit from a player's perspective.

go to this wiki
Ohio Versus Everything

Jake Crist

Madman Fulton

Jessicka Havoc

Nevaeh

**Ohio Versus Everything** (**OVE** - stylized as **oVe**) is a professional wrestling stable, consisting of Sami Callihan, Dave Crist, Jake Crist, Madman Fulton, Jessicka Havoc, and Nevaeh They are currently signed to Apex Pro Wrestling.

The group's name is based on all six members hailing from the state of Ohio - the Crist Brothers are from New Carlisle (billed from nearby Dayton), Callihan is from Bellefontaine (West Central Ohio), Fulton is from Toledo, Havoc is from Massillon, Ohio, and Neveah is from Carlisle, Ohio.

On the independent circuit, Callihan and the Christ Brothers worked together under the name **Ohio Is For Killers (OI4K)**

## History

### **Apex Pro Wrestling(2019-Present)**

On December 24th, 2019, Sami Callihan, Dave Crist and Jake Crist would all join Apex Pro Wrestling. Madman Fulton joined Apex Pro Wrestling and His oVe Stablemates on February 1st, 2020. On February 6th 2020, Sami Would Announce that His Wife, Jessicka Havoc and Jake Crist's Wife Nevaeh have joined oVe.

## Sub-groups

Jake Crist
 The Killer Death Machines | Jessicka Havok
Nevaeh

## Championships and accomplishments

* Apex Pro Wrestling
	+ APW Tag Team Championship (1 time, Current) - Dave Crist and Jake Crist (1, Current)
Jeff Cobb

**Jeffrey Cobb** (born July 11, 1982) is an American professional wrestler, currently signed to Apex Pro Wrestling where he is the Current APW Television Champion He was Previously signed to Ring of Honor where he was a former ROH World Television Champion. He is also known for his work in New Japan Pro-Wrestling, where he is a former NEVER Openweight Champion. He was formerly signed to Lucha Underground, where he worked under a mask and the ring name **Matanza Cueto** (or simply **Matanza**).

Cobb has also worked for promotions on the independent circuit, most notably Pro Wrestling Guerrilla (PWG), where he is a former PWG World Champion. He is also the winner of PWG's 2018 Battle of Los Angeles tournament and a former one-time World Tag Team Champion with Matthew Riddle (as **The Chosen Bros**). Cobb has also held numerous other titles in various independent promotions.

As an amateur wrestler, Jeff Cobb represented Guam at the 2004 Summer Olympics, where he became the nation's flag bearer in the opening ceremony and competed in the men's light heavyweight freestyle category. He transitioned to professional wrestling in 2009.

## Professional Wrestling Career

### **Apex Pro Wrestling(2020-Present)**

Jeff signed with APW on January 6th, 2020. Rosemary won the APW Television Championship on February 10th, 2020 at Mind Games (2020) in a Triple Threat match also involving Jordan Devlin and Mark Haskins.

## Championships and accomplishments

* **Apex Pro Wrestling**
	+ APW Television Championship (1 time, Current)
Kevin Steen

**Kevin Steen** (born May 7, 1984) is a Canadian professional wrestler currently signed to APW where he is the Current APW World Champion.

Steen began his career in 2000, at the age of 16. Prior to joining WWE in late 2014, from 2007, Steen wrestled under his birth name for Ring of Honor (ROH), where he held the ROH World Championship and ROH World Tag Team Championship. Steen also wrestled extensively on the independent circuit for 14 years, most notably in Pro Wrestling Guerrilla (PWG), where he held the PWG World Championship a record three times, as well as the PWG World Tag Team Championship on three occasions.

Steen also competed for International Wrestling Syndicate (IWS), where he held three times the IWS World Heavyweight Championship, All American Wrestling (AAW), where he held the AAW Heavyweight Championship; and Combat Zone Wrestling (CZW), where he held the CZW Iron Man Championship. He wrestled under the Kevin Owens name in WWE's developmental branch NXT, where he was a one-time NXT Champion, before debuting on the main roster in May 2015. He has since held the Universal Championship once, the Intercontinental Championship twice, and the United States Championship three times.

## Early Life

Kevin Steen was born on May 7, 1984, in Saint-Jean-sur-Richelieu, Quebec, and raised in Marieville, Quebec. He has a brother called Edward. He is of French-Canadian descent and speaks French as his first language. He learned to speak English as a teenager by mimicking everything he heard while watching *WWE Monday Night Raw*. Steen participated in ice hockey, soccer, and baseball, but never considered developing a career out of them—especially soccer, after suffering an injury at age 11—and instead considered becoming a professional wrestler after he and his father watched a video tape of the match between Diesel and Shawn Michaels at WrestleMania XI.

## Professional Wrestling Career

### **Apex Pro Wrestling(2019-Present)**

Kevin Steen Signed with APW on December 24th 2019. On February 10th 2020, at Mind Games (2020), Kevin Won the 2020 Mind Games Tournament to crown the first ever APW World Champion.

## Championships and accomplishments

* **Apex Pro Wrestling**
	+ APW World Championship (1 time, Current)
	+ Mind Games Tournament (2020)
Kenny Omega

**Tyson Smith** (born October 16, 1983) is a Canadian-born Japanese professional wrestler better known by the ring name **Kenny Omega**. He is currently signed to Apex Pro Wrestling

Omega is known for his tenure in New Japan Pro-Wrestling, during which he held the IWGP Heavyweight Championship, the IWGP United States Championship, and the IWGP Intercontinental Championship among other titles. He was a member of the Bullet Club stable, later serving as the group's leader. He became the first and only non-Japanese professional wrestler to win the G1 Climax, the promotion's premier tournament, when he defeated Hirooki Goto in the 2016 finals. Throughout his career, Omega has also performed as part of larger national and international promotions, such as Ring of Honor, as well as independent promotions worldwide, including DDT Pro-Wrestling, Jersey All Pro Wrestling, and Pro Wrestling Guerrilla.

Also known for his video games-inspired persona, Omega was named *Sports Illustrated*'s Wrestler of the Year in 2017 and topped *Pro Wrestling Illustrated*'s list of top 500 male wrestlers the following year. He has also attained the latter publication's Match of the Year distinction twice; one of those matches, in which Omega competed against Kazuchika Okada in a two out of three falls match at Dominion 6.9 in Osaka-jo Hall in June 2018, received a seven-star rating from combat sports journalist Dave Meltzer, the highest rating Meltzer has ever awarded a professional wrestling match.

## Professional Wrestling Career

### **Apex Pro Wrestling(2019-Present)**

Kenny Signed with APW on December 24th, 2019.
Decay

Rosemary

**Decay** is a professional wrestling stable that initially debuted in Impact Wrestling, consisting of Abyss, Crazzy Steve and Rosemary. They made their debut on January 26, 2016.[4] As members of the stable, Abyss and Crazzy Steve won the TNA World Tag Team Championship, while Rosemary won the TNA Knockouts Championship. They are Currently Signed to Apex Pro Wrestling.

## History

### **Apex Pro Wrestling(2020-Present)**

Rosemary was the first member of the trio to sign with APW, Signing on January 3rd, 2020. Abyss and Crazzy Steve would Sign with APW on January 16th, 2020, completing the trio.

## Championships and accomplishments

* **Apex Pro Wrestling**
	+ APW Women's Championship (1 time) – Rosemary
Madman Fulton

**Jacob Southwick** (born April 2, 1990) is an American professional wrestler currently signed to Apex Pro Wrestling under the ring name **Madman Fulton**, where he is part of oVe (Ohio Versus Everything). He is perhaps best known for his time in WWE, where he performed on their NXT brand under the ring name **Sawyer Fulton**, and was part of Sanity.

## Professional Wrestling Career

### **Apex Pro Wrestling(2020-Present)**

Fulton signed with APW on February 1st, 2020.