March 10th, 2024: The style guide has had an overhaul to make it easier to understand! Please check what's changed, and chime in with feedback so that our wiki can continue to improve.


This page contains sensitive content. Please check the content warning at the top of the article and proceed with caution.

Type Ghost
Developer(s) Galla, Zichqec
Origin Original Character
Sakura Needle
Language(s) English
Release date May 11th, 2022

Content warning: mentions of violence, gaslighting, general unsettlingness.

Needle is an original character by Galla and Zichqec, made for Ghost Jam 2022. It was made from scratch, using all new assets, in just 72 hours (though it did not count for the 72 hour challenge of the 2022 jam, since it was not the first 72 hours).

The ghost features a simple needle with vast amounts of dialogue. The dialogue is generally erratic, oftentimes making little to no sense or lacking context.


  • Talks at random intervals, giving the user no control over when it speaks.
  • No menus at all; double clicking the ghost will result in a poke dialogue and nothing more.
  • If Needle overlaps another ghost, it will send a special event to that ghost, 'poking' them and letting them react to it.
  • Generates a 'true name' for the user when first booted, which it will always remember and refer back to on occasion.
    • If the user changes their name, it will generate nicknames for them each time it is booted, saving these names to a list and picking names to call the user at random from the list.
  • Extremely large envelopes with hundreds of entries.
  • Dialogues that involve motion/jittery text are filtered out, unless the user specifically opts in in the enable_extra_content.txt file, by changing the line #globaldefine MOTION_ENABLED 0 to #globaldefine MOTION_ENABLED 1
  • When changing shells, Needle will attempt to stay in roughly the same place.
  • An easter egg that allows Needle to change shells randomly every 10-60 minutes, when toggled on.

Communication Features

Needle uses OnOtherOverlap to detect if it is overlapping with another ghost. It will then send an event called OnNeedlePoke to any ghosts that it is overlapping with raiseother, and say a short dialogue. Other ghosts may implement this event and respond to being poked by needle.

Which character Needle is overlapping is sent via reference0. It will be 0 for the sakura, 1 for the kero, 2 for the first extra character, etc. If Needle is overlapping more than one character in the same ghost, the events will be sent one after another.

Needle will also send the name of the shell it is currently using as reference1.

A simple implementation of the OnNeedlePoke event is as follows:

	if reference0 == 0 //Sakura
	elseif reference0 == 1 //Kero
		//An example of an optional check, to have a special comment if Needle is in the Syringe shell
		if reference1 == "Syringe"
			"\1I hate syringes!!"
	elseif reference0 == 2 //Third char

True Name and Nicknames System

Upon booting Needle for the first time, the user will be assigned a random “true name” that cannot be changed. Needle will refer to the user with this now and then, always displaying the name as an anchor that can be clicked. Upon clicking the anchor, the user will have the opportunity to deny the true name and insist on their own instead.

Should the user choose their own name, Needle will run the name through a “name mangler” to corrupt the string, saving the result as a nickname. Every time the user boots needle, a new nickname will be generated and saved, such that the user ends up with a long list of nicknames that needle may call them by.

When a nickname is set, Needle will alternate randomly between calling the user by their true name, chosen username, and random nicknames from the saved list. All of these names will show up as clickable anchors, which the user can click to have the option to change their name again. Needle will also always call the user by their new nickname upon booting, so closing and reopening Needle may be used as a method of quickly getting to the name change option.

The user can reset the list of nicknames by attempting to change their name again, and putting in the same name as before. This will keep the same base username, but start the list anew.

The user may also choose to go back to their true name, which will clear the list of nicknames, and Needle will go back to exclusively calling them by the true name.

If the user decides they don't actually want to change their name at all, they can leave the input field blank, and their settings will be left alone.

Name Mangler

The name mangler is a function that corrupts whatever name the user puts in, which it may do in a variety of ways.

Needle will attempt to never generate the same nickname twice. Names may end up similar, thanks to slightly different upper/lowercase letters, but never exactly the same.

Needle will pick anywhere from 1-5 operations to perform on a name, and will not perform the same operation more than once per name. These “mangles” also have different rarities, so that some appear more often than others. When it picks a new mangle, it will have a 60% chance to pick from the common mangles, 30% chance to pick from the uncommon mangles, and 10% chance to pick from the rare mangles.

Click to reveal detailed information about the possible operations.

Easter eggs

One of Needle's design philosophies is that it is not supposed to have a menu. However, if the user turns on SSP's voice recognition, they can open a fake “menu” by first double clicking Needle (or saying its name to activate the double click event), then saying “please open the menu”.

The menu that is opened will display several options that say “Poke something”, as well as the current time of day and a button to cancel. Clicking any of the “Poke something” options causes Needle to say one of the dialogues that it says when double clicked.

Shell randomizer

Needle has the ability to randomize its own shell, every 10-60 minutes, if the user has additional shells installed. This option and some settings for it are controlled by mouse gestures.

Mouse gestures are performed by right clicking the ghost, then dragging the mouse in various directions.

Note that if there are not enough shells available for Needle to change to a different one, then the event will always be skipped.

Toggle on/off

To toggle the shell randomizer on and off, the user must do a gesture with the movements up, down right, up. This draws a capital N. If done correctly, Needle will display a dialogue, which vaguely hints at what state it is in.

Any of the following dialogues indicate that shell randomization has been turned on:

“sparkles mysteriously”
“picks my own clothes”
“full of power”

Any of the following dialogues indicate that shell randomization has been turned off:

“neatly combed”
“dressed up all fancy”
“holds still”
“smiles politely for the camera”

Click to reveal a diagram and demonstration of how to toggle this mode.

Shell exclusion

The user can also control which shells are available in the rotation of random shells. For example, this can be used if the user doesn't want shells that are very large or very small to be switched to at random.

To do this, the user must first enter a special “mode”. The user must perform a mouse gesture, with the movements left, down, right, left, down, right. This draws a capital E. If done correctly, Needle will say the name of the first shell in the list. This mode will remain active until the balloon times out or is otherwise closed, even if it gets interrupted by another event.

While in this mode, the user can gesture with a clockwise circle to move forward through the shell list, and gesture with a counterclockwise circle to move backward. It is possible to wrap around the list in either direction, which may be useful for accessing shells towards the end of the list more quickly.

Each time the user gestures with one of these circles, Needle will display the name of the shell that has just been selected. By default, all shells are included in the rotation, and each shell's name will appear normally. If the user sets a shell to be excluded, its name will be shown in strikethrough.

To exclude a shell, Needle must be displaying its name. Then the user can perform a gesture with the movements left, right, left, right. This can be thought of as “scribbling the name out”. The same gesture can be performed again to make the shell be included again.

Click to reveal diagrams and demonstrations of how to operate this mode.


Needle comes bundled with Needloon, a balloon made with the image of Needle's master shell, which has been stretched and warped to make a suitable text area.


Name Description
The True Needle The default shell. A gray needle with a patchy outline.

External shells

Click to reveal external shells.