recursal/Fanatic-Fandom huggingface dataset:
Unity First Person Controller integration

This script allows for integration with Unity's Starter Assets - First Person Controller asset.

To use it:

1. Import AC into a project that is already set up with the Third Person Controller asset
2. Copy/paste the script below into a C# file named StarterAssetsInput\_AC
3. Locate the asset's PlayerArmature prefab, and remove its Starter Assets Input component
4. Add the new Starter Assets Input AC component, and check AC Turns Camera
5. Add AC's Player component, and set the Animation engine to Mecanim, and clear the parameter fields beneath

StarterAssetsInput\_AC.cs:

```
using UnityEngine;
#if ENABLE\_INPUT\_SYSTEM
using UnityEngine.InputSystem;
#endif
using AC;

namespace StarterAssets
{

 public class StarterAssetsInputs\_AC : StarterAssetsInputs
 {

 public bool acTurnsCamera;

 AC.Char acCharacter;
 bool underACControl;

 void Awake ()
 {
 acCharacter = GetComponent<AC.Char> ();
 acCharacter.motionControl = MotionControl.Manual;
 }

 void Update ()
 {
 acCharacter.IsMovingAlongPath ();

 if (underACControl)
 {
 Vector3 moveDirection = acCharacter.GetTargetPosition () - transform.position;
 MoveInput (moveDirection);

 if (acTurnsCamera)
 {
 Vector3 lookDirection = acCharacter.GetTargetRotation () \* Vector3.forward;
 lookDirection.y = 0f;
 LookInput (lookDirection);
 }
 }
 }

 private Vector2 GetInputVector (Vector3 worldDirection)
 {
 worldDirectionworldDirection.y = 0f;
 if (worldDirection.sqrMagnitude > 1f) worldDirection.Normalize ();
 Vector3 cameraForward = KickStarter.CameraMainTransform.forward;
 cameraForward.y = 0f;
 cameraForward.Normalize ();

 Vector3 cameraRight = KickStarter.CameraMainTransform.right;
 cameraRight.y = 0f;
 cameraRight.Normalize ();

 float forwardAmount = Vector3.Dot (cameraForward, worldDirection.normalized);
 float rightAmount = Vector3.Dot (cameraRight, worldDirection.normalized);

 return new Vector2 (rightAmount, forwardAmount);
 }

#if ENABLE\_INPUT\_SYSTEM
 public new void OnMove(InputValue value)
 {
 if (underACControl) return;
 MoveInput(value.Get<Vector2>());
 }

 public new void OnLook(InputValue value)
 {
 if(cursorInputForLook)
 {
 LookInput(value.Get<Vector2>());
 }
 }

 public new void OnJump(InputValue value)
 {
 if (underACControl) return;
 JumpInput(value.isPressed);
 }

 public new void OnSprint(InputValue value)
 {
 if (underACControl) { SprintInput (acCharacter.isRunning); return; }
 SprintInput(value.isPressed);
 }
#endif

 }

}

```
Character elimination 1

Character elimination 1 Is the first season to be aired on norbika9studios on june 13th 2016.

it started with 7 contestants.

For the next season of character elimination, see Character elimination 2.

2 Eliminated contestants have been selected to compete in a all star season. They are "Dora and Max"

Meanwhile, Big brother israel and Obama will complete in Season 10.

## Placements

Eliminated:

Dora (Episode 3)

Flowey (Episode 4)

Caillou (Episode 5)

Donald trump (Episode 6)

Barney (Episode 7)

Finalists:

Max (Third place)

Big brother israel (Runner up)

Barack obama (Winner)
Character Elimination 5

Character Elimination 5 Also Known as (Character elimination 5: All stars) Is the fifth Series Of Norbika9studios's Elimination reality Show. It started on october 6th. the teaser was revealed on norbika9studios's Youtube channel. The 8 Chosen all star contestant was been introduced at episode 1. At october 13, Max was crowned as the ultimate All star winner. there where 8 contestants in total, making it as a shorter season unlike season 1 and 2.

## Twists

* For the first time ever in a character elimination history, there were no teams.

* Dipper pines has decided to Eliminated Dora at Episode 1.

## Trivia

* This was the first series to have Returnees.
* This was the first series that the contestant is eliminated at Episode 1

## Leader Board

Eliminated:

Dora (Episode 1)

Sam (Episode 3)

Harry (Episode 4)

Tyrouge (Episode 5)

Alex (Episode 5)

Finalists:

Slowcoach (Third place)

Dipper pines (Runner up)

Max (Winner)
A 2.5D camera selector editor

This script provides an Editor window that allows you to quickly switch between all the different 2.5D GameCameras in your scene while working.

To use it, paste the script below into a C# file named CameraSelectorEditor.cs, and place the file in a subdirectory named "Editor" in your Assets folder.

The new Editor window will then be available from the top toolbar, under Adventure Creator -> 2.5D Camera selector

CameraSelectorEditor.cs:

```
using UnityEngine;
using UnityEditor;
using AC;

public class CameraSelectorEditor : EditorWindow
{

    private static GameCamera25D[] gameCamera25Ds;

    [MenuItem ("Adventure Creator/2.5D Camera selector", false, 40)]
    public static void Init ()
    {
        CameraSelectorEditor window = (CameraSelectorEditor) EditorWindow.GetWindow (typeof (CameraSelectorEditor));
        UnityVersionHandler.SetWindowTitle (window, "2.5D camera selector");
        window.position = new Rect (300, 200, 450, 270);
    }

    private void OnGUI ()
    {
        if (Application.isPlaying) return;

        if (gameCamera25Ds == null || GUILayout.Button ("Refresh"))
        {
            gameCamera25Ds = Object.FindObjectsOfType <GameCamera25D>();
        }
        EditorGUILayout.Space ();

        foreach (GameCamera25D gameCamera25D in gameCamera25Ds)
        {
            EditorGUILayout.BeginHorizontal ();
            GUILayout.Label (gameCamera25D.gameObject.name);

            if (GUILayout.Button ("Make active", GUILayout.Width (150f)))
            {
                gameCamera25D.SetActiveBackground ();
            }

            EditorGUILayout.EndHorizontal ();
        }
    }

}

```
Character elimination 7

## Cast Photo

**Character elimination 7**  Is the seventh season of norbika9studios's reality show. norbika9studios has announced as an World tour season at October 20th 2016 While Character elimination 6 Is in Progress. The first Trailer Was revealed at October 25th 2016 after the finale of Character elimination 6. At octover 14th 2016, Lincoln Loud was crowned as the winner of Season 7 and Orange bird As the Runner up.
Red and Bubbles are selected to compete in a 2nd all star season.

## Format Changes

* Each episodes, the teams who won the challenge will cast their votes to eliminate the Other Team. the person with the most will be eliminated.

## Twists

* Norbika9studios Have Announced that 2 Wildcards will Enter the game.
* Each Episode, The Contestants Will be traveling Around the world.

## Trivia

* This was the first Series to have Cast Photos.
* This was the First Series to have an Contestant Walked Out the game.

## Fake Elimination

* For the very first time ever in the Character Elimination Franchise, 1 Contestant Will be Fake Eliminated and Get sented to the Bunker. The person Was Marlin.

## Pre- Series

October 27th: Behind the scenes

October 28th: Around the tube

October 29th - October 30th: Winners week

The 3 pre series wil be only brodcasted until season 7 is released.

## Placements

Eliminated:

Nancy (Episode 2)

Wanda (Episode 3)

Phil (Episode 4)

Peg (Episode 5)

Red (Episode 7)

Timmy (Episode 8)

Patrick (Episode 9)

Marlin (Episode 10)

Finalists:

Stella (Third place)

Bubbles (Runner up)

Lincoln (Winner)

Removed:

Alien (For Putting a seedling on a burger)

Elmo (For Putting a Flower on a Burrito)

Walked:

Spongebob (Episode 8)
The Bunker Season 3

## Cast Photo

**The Bunker Season 3** Is the Third season of Norbika9studios's Successful Reality show. This season will be confirmed as an evil wanda and the alien season.

## Housemates That Are already Competitng

#1 Pizza baby (Present)

Monkey (Present)

Spongebob (Present)

Eddy (Present)

Monk (Present)

Andrew (Present)

Pizza baby (Present)

Shellie (Present)

The Rome twins (Present)

## Cancellation

Due to Low Ratings of This reality show, this season and the show was cancelled and won't continue the show.
The Bunker

## Cast Photo

**The Bunker**  Is a reality show that is very samiliar to **Character elimination and Big brother.**

## Format

This Show is Where 7 or 11 Housemates Will Move into the Bunker To Win HOH Competitions, and Evict One of they own to become the last person standing. this is the same rules unlike Big brother, Without Pov competitions and Veto Ceremonys.

## Cancellation

The bunker was started on the 15th of november, but at the 21st of november, it got cancelled for a reason. the reason is it has the lowest raitings.
UI Text labels - custom Action

This custom Action allows you to change a UI Text component's label. Note that normally you'll want to link a UI Text component to the Menu Manager as a Label element, but this method allows you to control a UI Text without doing so.

The Text and Label fields can both be overridden with ActionList parameters.

```

using UnityEngine;
using System.Collections.Generic;
using UnityEngine.UI;

#if UNITY_EDITOR
using UnityEditor;
#endif

namespace AC
{

   [System.Serializable]
   public class ActionTextLabel : Action
   {

       public Text text;
       public int textConstantID = 0;
       public int textParameterID = -1;

       public string newLabel;
       public int newLabelParameterID = -1;

       public override ActionCategory Category { get { ActionCategory.Menu; } }
       public override string Title { get { return "Update text label"; } }
       public override string Description { get { return "Changes the contents of a UI Text box."; } }

       public override void AssignValues (List<ActionParameter> parameters)
       {
           newLabel = AssignString (parameters, newLabelParameterID, newLabel);
           text = AssignFile <Text> (parameters, textParameterID, textConstantID, text);
       }

       override public float Run ()
       {
           if (text)
           {
               text.text = newLabel;
           }
           return 0f;
       }

       #if UNITY_EDITOR

       override public void ShowGUI (List<ActionParameter> parameters)
       {
           textParameterID = Action.ChooseParameterGUI ("Text component:", parameters, textParameterID, ParameterType.GameObject);
           if (textParameterID >= 0)
           {
               textConstantID = 0;
               text = null;
           }
           else
           {
               text = (Text) EditorGUILayout.ObjectField ("Text component:", text, typeof (Text), true);

               textConstantID = FieldToID (text, textConstantID);
               text = IDToField (text, textConstantID, false);
           }

           newLabelParameterID = Action.ChooseParameterGUI ("FSM to call (optional):", parameters, newLabelParameterID, ParameterType.String);
           if (newLabelParameterID < 0)
           {
               newLabel = EditorGUILayout.TextField ("New label:", newLabel);
           }
       }

       #endif

   }

}

```
The Strongest Maid in History, Tohru! (Well, She is a Dragon)

**The Strongest Maid in History, Tohru! (Well, She is a Dragon)** is the first episode of Miss Kobayashi's Dragon Maid. It premiered on January 11, 2017.

## Cast (in order of appearance)

* Tohru (First Appearance)
* Kobayashi (First Appearance)
* Herensuge (First Appearance)
* Fafnir - Voice Only
* Makoto Takiya (First Appearance)
* Quetzalcoatl - Voice Only
* Nidhogg (First Appearance)
* Kanna Kamui (First Appearance)
Storing Action data in Json

This is an example script to show one way of transferring Actions to and from strings using Json.

To use it, create a C# script named JsonExample, and paste the code below into it. Then place the component "Json Example" in your scene, and assign an ActionList from the scene into its Inspector field. You can then use the component's context menu (the cog icon to the top-right) to copy that ActionList's action data to and from Json. When stored, the Action data will appear beneath in the Inspector.

JsonExample.cs:

```
	using UnityEngine;

	using System.Collections.Generic;

	using AC;

	public class JsonExample : MonoBehaviour

	{

		[SerializeField] private ActionList actionList;

		[SerializeField] private JsonAction[] jsonActions;

		[ContextMenu ("ToJson")]

		private void ToJson ()

		{

			int length = actionList.actions.Count;

			jsonActions = new JsonAction[length];

			for (int i=0; i<length; i++)

			{

				string jsonAction = JsonUtility.ToJson (actionList.actions[i]);

				string className = actionList.actions[i].GetType ().ToString ();

				jsonActions[i] = new JsonAction (className, jsonAction);

			}

		}

		[ContextMenu ("FromJson")]

		private void FromJson ()

		{

			List<Action> newActions = new List<Action>();

			for (int i=0; i<jsonActions.Length; i++)

			{

				newActions.Add (jsonActions[i].CreateAction ());

			}

			actionList.actions = newActions;

		}

		[System.Serializable]

		private struct JsonAction

		{

			[SerializeField] private string className;

			[SerializeField] private string jsonData;

			public JsonAction (string _className, string _jsonData)

			{

				if (_className.StartsWith ("AC."))

				{

					_className = _className.Substring (3);

				}

				className = _className;

				jsonData = _jsonData;

			}

			public Action CreateAction ()

			{

				Action newAction = (Action) ScriptableObject.CreateInstance (className);

				JsonUtility.FromJsonOverwrite (jsonData, newAction);

				return newAction;

			}

		}

	}

```
Action Check Language

Description: this custom action allows you to verify if an specific language is currently in use.

To use this custom action you have to create a new text file and rename it ActionCheckLanguage.cs then add it to your custom actions folder (which can be setup in the Action manager) or you can drop it in the Actions folder under Adventure Creator/Scripts/Actions.

```
using UnityEngine;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

namespace AC
{

   [System.Serializable]
   public class ActionCheckLanguage : ActionCheck
   {

       public int currentLanguage;

       public override ActionCategory Category { get { return ActionCategory.Custom; } }
       public override string Title { get { return "Check Language"; } }
       public override string Description { get { return "Checks which Lanugage is currently set."; } }

       public override bool CheckCondition ()
       {
           return (Options.GetLanguage () == currentLanguage);
       }

       #if UNITY_EDITOR

       override public void ShowGUI ()
       {
           currentLanguage = EditorGUILayout.IntField ("Current language index:", currentLanguage);
       }

       public override string SetLabel ()
       {
           return ("(" + currentLanguage + ")");
       }

       #endif

   }

}

```
Motion Matching in Adventure Creator

Required are the following Unity assets:

* MxM Motion Matching

* Kinematic Character Controller
* Adventure Creator

Optional:

* Movement Animset Pro

Known Issues in Version 1.0a:

* AC Face After Moving - Not working
* AC Walk to Marker - Not working on Player class in 3rd Person View as the camera movement influences the walking path
* AC Player constraint "Disable Movement" in Direct Movement - Not working
* AC Walking/Running doesn't work on keyboard or mouse (double click) inputs but on controllers (analog sticks)
* AC Footsteps system not working. Use the system of MxM
* AC Movement Methods: Drag and Straight to Cursor not working

The current version of the script can be downloaded here: Github

Demo Video (using Movement Animset Pro Animations):

Demo Video (using MxM default Animations):

Active thread @ AC Forums
Robert Creyde (son of Ector)

**Robert Creyde** (born 361, died 389) was the Lord of Gaelstead and head of House Creyde from 375 until his death in 389.

## History

### Death

Robert died whilst on a hunting trip with his brother, shortly before he was to wed Princess Adela.

## Quotes

### Quotes about Robert Creyde

*"Robert didn't care for your mother, he didn't love her. Not like I did."* - Luther Creyde, to his eldest son.
Switching input method dynamically

AC supports "mouse and keyboard" and "keyboard/controller" input schemes through the Settings Manager's "Input method" field.  However, this field remains fixed at runtime, so must be chosen beforehand.

This script allows the field to be changed dynamically upon recieving input, switching to "Keyboard Or Controller" when a gamepad button is pressed, and back to "Mouse And Keyboard" when any other button is pressed.  It also makes changes to any other Manager field necessary for that new mode to work correctly.  By default, this is only the Menu Manager's "Direct control Menus" checkboxes - but comments in the script show where additional changes can be made.

To change a Manager field's value through script, right-click the field's label to copy an API reference to it.

To use the script, place in a new C# file named SwitchInputs, and attach to a GameObject in the scene.

SwitchInputs.cs:

```
using UnityEngine;
using AC;

public class SwitchInputs : MonoBehaviour
{

 [SerializeField] private InputMethod defaultInputMethod;

 private void Start ()
 {
 SetInputMethod (defaultInputMethod, true);
 }

 private void Update ()
 {
 if (Input.anyKeyDown)
 {
 if (Input.GetButtonDown ("JoystickButton"))
 {
 SetInputMethod (InputMethod.KeyboardOrController);
 }
 else
 {
 SetInputMethod (InputMethod.MouseAndKeyboard);
 }
 }
 }

 private void SetInputMethod (InputMethod inputMethod, bool force = false)
 {
 if (KickStarter.settingsManager.inputMethod != inputMethod || force)
 {
 KickStarter.settingsManager.inputMethod = inputMethod;

 switch (inputMethod)
 {
 case InputMethod.MouseAndKeyboard:
 KickStarter.menuManager.keyboardControlWhenCutscene = KickStarter.menuManager.keyboardControlWhenPaused = KickStarter.menuManager.keyboardControlWhenDialogOptions = false;
 // Set any mouse/keyboard-specific settings here
 break;

 case InputMethod.KeyboardOrController:
 KickStarter.menuManager.keyboardControlWhenCutscene = KickStarter.menuManager.keyboardControlWhenPaused = KickStarter.menuManager.keyboardControlWhenDialogOptions = true;
 KickStarter.playerMenus.FindFirstSelectedElement ();
 // Set any keyboard/controller-specific settings here
 break;

 default:
 break;
 }
 }
 }

}

```
Text Mesh Pro integration

Update:

AC's TextMesh Pro integration is now built-in! See the Manual's "Supported third-party assets" for instructions.

Old integration:

AC's Menu system can be used in conjunction with other Unity UI assets, such as Text Mesh Pro.  This integration works by copying the values from a Unity UI textbox, and pasting them in a Text Mesh Pro UGUI component.  This script can be modified to work with other such UI assets.

1. Make sure that both AC and Text Mesh Pro are installed
2. Prepare your Menu by changing its Source to Unity Ui Prefab, and linking it to a Unity UI canvas prefab (see AC's Manual or this tutorial).
3. Each label you want to replace with TMPro will need both a Unity UI Text component, and a Text Mesh Pro UGUI component.  The Text component can be hidden or given an invisible colour, but should not be disabled.
4. Create a new C# script named TextMeshPro\_AC.cs, and overwrite its contents with the code below.
5. Drag your UI prefab into the scene
6. Add the script to each Text component, and add itself to the "Text To Copy From" field, and add its associated Text Mesh Pro UGUI to the "Text Mesh To Copy To" field.
7. Apply the changes to the prefab, and remove

```
using UnityEngine;

using System.Collections;

using AC;

using UnityEngine.UI;

using TMPro;

public class TextMeshPro_AC : MonoBehaviour

{

    public Text textToCopyFrom;

    public TextMeshProUGUI textMeshToCopyTo;

    private void Update ()

    {

        textMeshToCopyTo.text = textToCopyFrom.text;

    }

}

```
Super Text Mesh subtitle integration

This is a script that allows Adventure Creator and Super Text Mesh to work together. With some simple modifications, it could be used for other text-drawing assets!

Essentially, it uses AC for audio, user input, etc., but lets STM handle all text-specific items, like scrolling speed, animated letters, and colors.  It does this by running AC's normal text system offscreen, while STM directly samples the dialogue being written from the Dialog manager.

This script should be saved as **SuperTextFromACSpeech.cs**.  As mentioned in the comments, put it on a super text object in your subtitles UI adventure creator menu.

```
using UnityEngine;
using System.Collections;

public class SuperTextFromACSpeech : MonoBehaviour {
    /*
    This script is to make Super Text Mesh work with Adventure Creator.
    Essentially, it lets AC handle all non-text elements (sound effects, user input),
    while letting STM handle all text-related issues (scrolling speed, animations, colors, etc.)

    Simply put this script on a Super Text ui item in your subtitlesUI adventure creator menu,
    then hide the text item that AC thinks it's referencing (put it offscreen, make it invisible, whatever!).

    AC will play dialogue sounds and handle input as normal,
    but the player will only see the Super Text.

    Script by @johndaguerra.  No credit needed, but I'm cool and it'd make me happy if you followed me on twitter!
    */
    SuperTextMesh supertext;
    AC.Speech speech;
    AC.Dialog dialog;

    void Start () {
        supertext = GetComponent<SuperTextMesh>();
        dialog = FindObjectOfType<AC.Dialog>();
    }

	void Update () {
        //If there is dialogue currently being spoken...
        if (dialog.GetLatestSpeech() != null)
        {
            //And you haven't already sampled it...
            if (speech != dialog.GetLatestSpeech())
            {
                //Then set the supertext text to print the dialogue
                speech = dialog.GetLatestSpeech();
                supertext.Text = speech.log.fullText;
                //This tells the text to read at regular speeds, in case it was told to speed read
                supertext.RegularRead();
            }
        }

        if (supertext.reading == true)
        {
            if (Input.GetMouseButtonDown(0) || Input.GetKeyDown("space"))
            {
                //If the player clicks or presses space while reading, then speed read
                supertext.SpeedRead();
            }
        }

    }
}

```
Creating a global Conversation

Conversations are GameObjects that store a list of dialogue options that the Player can choose from. They are typically a per-scene object, but this script allows you to create a Conversation whose state is the same in all scenes.

To use it:

1. Create a new C# script named DontDestroyMe.cs, and paste in the contents below
2. Drop a new Conversation in the game's first scene and add the new Dont Destroy Me component
3. Set the Conversation component's **Interaction source** field to **Asset File**, so that responses are determined by ActionList assets, as opposed to those that live in a scene.

DontDestroyMe.cs:

```
using UnityEngine;

using System.Collections;

using AC;

public class DontDestroyMe : MonoBehaviour

{

	private void Start ()

	{
		DontDestroyOnLoad (gameObject);
	}

}

```
First-person camera facing while dragging

This script causes a first-person player camera to face the "grab point" of the current Draggable / PickUp object being held at all times. To use it, set the Movement method to First Person, and attach the script below as a component on a GameObject in the scene.

FirstPersonFaceDrag.cs

```
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using AC;

public class FirstPersonFaceDrag : MonoBehaviour

{

	private DragBase faceObject;

	private void OnEnable ()

	{

		EventManager.OnGrabMoveable += OnGrabMoveable;

		EventManager.OnDropMoveable += OnDropMoveable;

	}

	private void OnDisable ()

	{

		EventManager.OnGrabMoveable -= OnGrabMoveable;

		EventManager.OnDropMoveable -= OnDropMoveable;

	}

	private void Update ()

	{

		if (faceObject != null)

		{

			Vector3 bodyDirection = faceObject.GetGrabPosition () - KickStarter.player.transform.position;

			KickStarter.player.SetLookDirection (bodyDirection, true);

			KickStarter.player.SetTilt (faceObject.GetGrabPosition (), true);

		}

	}

	private void OnGrabMoveable (DragBase moveable)

	{

		faceObject = moveable;

	}

	private void OnDropMoveable (DragBase moveable)

	{

		faceObject = null;

	}

}

```
Posting Guidelines

This is brief and simple collection of guidelines you may want to follow while posting content in the Adventure creator Wikia:

1. Add a note explaining the usage of your tip or code.
2. Add the code or the steps to follow. If the content is code, try to remember to use the **Preformatted** option found in the dropdown at the top of the post editor window (which normally defaults to **Paragraph** while you create or edit a page).
3. Post your page in the appropriate category. Currently, there are two: **General** and **Integrations**
4. Optionally you can leave your username at the end of the page.
5. Also, do try to keep your language civil. And lastly...
6. Don't worry too much about writing skills or eloquence! All that matters is your tip or code!
FinalIK Interaction Resume (AC Action)

This is a small custom action for use **in conjunction** with the FinalIK Interactions Integration (AC Action) provided by Snebjorn. To use it, the interaction should be set to pause at whatever point you would like to run additional actions (for instance, if you want to animate the interaction object, call dialogue, etc. within an action list or cutscene rather than within the interaction system). When you want to resume/finish the interaction, use this custom action.

To use it replace the text in a .cs file named FinalIK\_ResumeInteraction with this text, or create a new blank text file, then paste the text and rename the file FinalIK\_ResumeInteraction.cs. Then drop the file into the folder named actions inside the Adventure creator folder.

This is the code:

```
using UnityEngine;
using System.Collections;
using RootMotion.FinalIK;

#if UNITY_EDITOR
using UnityEditor;
#endif

 namespace AC
 {
 	[System.Serializable]
 	public class FinalIK_ResumeInteraction : Action
 	{
 		public bool isPlayer;
 		public InteractionSystem interactionSystem;
 		public FullBodyBipedEffector effector;

 		public FinalIK_ResumeInteraction()
 		{
 			this.isDisplayed = true;
 			category = ActionCategory.Custom;
 			title = "Final IK - Resume an interaction";
 			description = "Resumes a paused interaction using the Final IK Interaction System";
             isPlayer = true;
        }

 		override public float Run()
 		{
 			if (isPlayer)
 			{
 				interactionSystem = KickStarter.player.GetComponent<InteractionSystem>();

 				if (interactionSystem == null)
 				{
 					Debug.LogWarning("FinalIK_RunInteraction: No InteractionSystem found on Player.");
 					return 0f;
 				}
 			}
 			else if (interactionSystem == null)
 			{
 				Debug.LogWarning("FinalIK_RunInteraction: No InteractionSystem defined.");
 				return 0f;
 			}

 			interactionSystem.ResumeInteraction(effector);
 			return 0f;
 		}

 		override public void Skip(){

 		}

 		#if UNITY_EDITOR
 		override public void ShowGUI()
 		{
 			isPlayer = EditorGUILayout.Toggle("Is player?", isPlayer);

 			if (!isPlayer)
 			{
 				interactionSystem = (InteractionSystem)EditorGUILayout.ObjectField("Character:", interactionSystem, typeof(InteractionSystem), true);
 			}

 			effector = (FullBodyBipedEffector)EditorGUILayout.EnumPopup("Effector:", effector);

 			AfterRunningOption();
 		}
 		#endif
 	}
 }

```

-Code provided by Larsos
"Run" input for point-and-click

By default, running in Point and Click mode is a case of double-clicking in the scene. This script allows the Player to also run based on a dedicated "Run" input key.

To use it:

1. Create a new C# script named HoldRun, and copy/paste the code below
2. Attach the new Hold Run component to your Player character
3. Define an input named "Run"

HoldRun.cs:

```
using UnityEngine;
using AC;

public class HoldRun : MonoBehaviour
{

 private void OnEnable () { EventManager.OnCharacterSetPath += OnCharacterSetPath; }
 private void OnDisable () { EventManager.OnCharacterSetPath -= OnCharacterSetPath; }

 void Update ()
 {
 if (!KickStarter.stateHandler.IsInGameplay () || !KickStarter.player.IsMovingAlongPath ()) return;

 if (KickStarter.playerInput.InputGetButtonDown ("Run"))
 {
 KickStarter.player.isRunning = true;
 }
 if (KickStarter.playerInput.InputGetButtonUp ("Run"))
 {
 KickStarter.player.isRunning = false;
 }
 }

 void OnCharacterSetPath (AC.Char character, Paths path)
 {
 if (character == KickStarter.player && KickStarter.stateHandler.IsInGameplay () && KickStarter.playerInput.InputGetButton ("Run"))
 {
 KickStarter.player.isRunning = true;
 }
 }

}

```
Re-select dialogue options automatically

When Menus are directly-controlled, elements are selected automatically when they turn on. As this is a property set in the Menu Manager, the same element will always be selected each time.

This script alters the behaviour of Conversation menus, so that the last-chosen option is selected automatically when re-shown. To use it:

1. Create a new C# file named ReselectLastDialogueOption, and copy/paste in the code below.
2. Attach the new Reselect Last Dialogue Option component to a GameObject in the scene.
3. Update the Inspector fields with the name of your Conversation menu, and DialogueList element, if they differ from what's shown.

ReselectLastDialogueOption.cs:

```
using System.Collections.Generic;
using UnityEngine;
using AC;

public class ReselectLastDialogueOption : MonoBehaviour
{

 public string menuName = "Conversation";
 public string elementName = "DialogueList";
 private Dictionary<Conversation, int> lastChosenDict = new Dictionary<Conversation, int> ();

 void OnEnable ()
 {
 EventManager.OnClickConversation += OnClickConversation;
 EventManager.OnMenuTurnOn += OnMenuTurnOn;
 }

 void OnDisable ()
 {
 EventManager.OnClickConversation -= OnClickConversation;
 EventManager.OnMenuTurnOn -= OnMenuTurnOn;
 }

 void OnClickConversation (Conversation conversation, int optionID)
 {
 if (lastChosenDict.ContainsKey (conversation))
 {
 lastChosenDict[conversation] = optionID;
 }
 else
 {
 lastChosenDict.Add (conversation, optionID);
 }
 }

 void OnMenuTurnOn (Menu menu, bool isInstant)
 {
 if (menu.title != menuName) return;

 Conversation conversation = KickStarter.playerInput.activeConversation;
 if (conversation == null || !lastChosenDict.ContainsKey (conversation)) return;

 int optionID = lastChosenDict[conversation];

 ButtonDialog lastChosenOption = KickStarter.playerInput.activeConversation.GetOptionWithID (optionID);
 if (lastChosenOption == null || !lastChosenOption.isOn) return;

 MenuDialogList dialogList = menu.GetElementWithName (elementName) as MenuDialogList;
 for (int i = 0; i < dialogList.GetNumSlots (); i++)
 {
 if (dialogList.GetDialogueOption (i) == lastChosenOption)
 {
 menu.Select (dialogList, i);
 return;
 }
 }
 }

}

```
Mobile joystick example

This is an example of how an on-screen joystick can be displayed for mobile games, as opposed to the default "drag line".
To use it, place in a script named **MobileJoystick** and place on a GameObject in your scene.  Supply textures and amend the float values to suit.  Note that this will only work if you use **Drag** movement, or **Direct** movement with **Touch Screen** input.

```
using UnityEngine;
using System.Collections;
using AC;

public class MobileJoystick : MonoBehaviour
{

    [SerializeField] private Texture2D baseTexture;
    [SerializeField] private Texture2D thumbstickTexture;

    [SerializeField] private float baseTextureSize = 0.1f;
    [SerializeField] private float thumbstickTextureSize = 0.03f;

    [SerializeField] private float maxDistance = 0.1f;

    private Vector2 basePosition;
    private Vector2 thumbstickPosition;

    private void OnEnable ()
    {
        EventManager.OnUpdateDragLine += OnUpdateDragLine;
    }

    private void OnDisable ()
    {
        EventManager.OnUpdateDragLine -= OnUpdateDragLine;
    }

    private void OnGUI ()
    {
        if (KickStarter.playerInput.GetDragState () == DragState.Player)
        {
            if (baseTexture != null)
            {
                Rect baseRect = AdvGame.GUIRect (basePosition.x / Screen.width, basePosition.y / Screen.height, baseTextureSize, baseTextureSize);
                GUI.DrawTexture (baseRect, baseTexture, ScaleMode.ScaleToFit, true, 0f);
            }

            if (thumbstickTexture != null)
            {
                Rect thumbstickRect = AdvGame.GUIRect (thumbstickPosition.x / Screen.width, thumbstickPosition.y / Screen.height, thumbstickTextureSize, thumbstickTextureSize);
                GUI.DrawTexture (thumbstickRect, thumbstickTexture, ScaleMode.ScaleToFit, true, 0f);
            }
        }
    }

    private void OnUpdateDragLine (Vector2 startPosition, Vector2 endPosition)
    {
        basePosition = startPosition;

        float distance = Vector2.Distance (startPosition, endPosition);
        if (distance > (maxDistance \* Screen.width))
        {
            thumbstickPosition = startPosition + (endPosition - startPosition).normalized \* (maxDistance \* Screen.width);
        }
        else
        {
            thumbstickPosition = endPosition;
        }
    }

}

```
2D point and click along one axis

This script allows for 2D point-and-click movement along the X-axis only.

To use it:

1. Set your game's Movement method to Point And Click, and your Camera perspective to 2D.
2. Create a NavMesh that covers the area you wish the Player to move. It does not need to be too thin - it just needs to encompass the area that the Player can move.
3. Paste the code below into a C# script named PointClickHorizontal2D, and attach it to any object in your scene

PointClickHorizontal2D.cs

```
 using UnityEngine;
 using AC;

 public class PointClickHorizontal2D : MonoBehaviour
 {

 private void OnEnable () { EventManager.OnCharacterSetPath += OnCharacterSetPath; }
 private void OnDisable () { EventManager.OnCharacterSetPath -= OnCharacterSetPath; }

 private void OnCharacterSetPath (AC.Char character, Paths path)
 {
 if (character == KickStarter.player)
 {
 if (path.nodes.Count > 1)
 {
 path.nodes.RemoveRange (0, path.nodes.Count - 2);
 }
 Vector3 lastNode = path.nodes[path.nodes.Count-1];
 lastNode.y = character.transform.position.y;
 path.nodes[path.nodes.Count-1] = lastNode;
 }
 }

 }

```
Fading with Unity UI

This script delegates the rendering of fade effects to Unity UI, instead of the OnGUI method used by the MainCamera.  Since OnGUI is always drawn on top of everything else, using Unity UI gives you finer control over what can be drawn on top of any fading effect.

*Note:* AC v1.68.0 or newer is required for this script to work.

1. In your game's first scene, create a new UI Canvas, with a RawImage component that spans the screen.
2. Attach a Canvas Group component to the Canvas
3. Copy the script below into a C# script named FadeUI.cs
4. Attach the new Fade UI component to the Canvas, and assign the two fields in its Inspector
5. Select your scene's MainCamera, and uncheck Draw fade?.  Repeat this for all of your MainCameras, or update the linked prefab.

FadeUI.cs:

```
using UnityEngine;

using UnityEngine.UI;

using System.Collections;

using AC;

public class FadeUI : MonoBehaviour

{

    [SerializeField] private RawImage rawImage = null;

    [SerializeField] private CanvasGroup canvasGroup = null;

    private void Awake ()

    {

        DontDestroyOnLoad (gameObject);

    }

    private void Update ()

    {

        if (KickStarter.settingsManager.IsInLoadingScene ())

        {

            canvasGroup.alpha = 1f;

            return;

        }

        if (KickStarter.mainCamera != null)

        {

            canvasGroup.alpha = KickStarter.mainCamera.GetFadeAlpha ();

            rawImage.texture = KickStarter.mainCamera.GetFadeTexture ();

        }

    }

}

```
Scrolling text and Scrolling text audio.

Note: this is added in here, because it's sometimes overlooked by new users.

Auto-scrolling is an option available at the top of the Speech Manager.  From there you can also adjust the scrolling speed. If you are not going to be using actual voice clips, you may take a look at the Subtitle-Scrolling audio option which can be found both in the speech manager and in each Player/NPC. This can be used to set "beeping" voices, in the style of older games (and some modern JRPGs, etc), it can also be used to create Typewriter sound FXs, etc.

If you want the scrolling to stop at certain points, you can use the [wait:X] token within your speech text - where "X" is the duration of the wait in seconds.  See Section 10.4 of the Manual for more information.

If you'd like to go further, you can use custom scripting to trigger events when speech is played - see this tutorial.  With the OnStartSpeech event, you can add extra functionality when speech plays - or even override AC's display of it entirely.

-Original tip was provided by ChrisIceBox. Edited by Alverik-
Toggle drag objects

Manipulating draggable and pickup objects normally requires the input button to be held down for the duration. This script allows you to toggle "drag mode" on and off with separate button presses.

To use it:

1. Define a new Input axis in Unity's Input Manager named ToggleDrag, and map it to the button(s) of your choice
2. Paste the code below into a C# file named ToggleDrag, and attach to an empty GameObject in your scene

ToggleDrag.cs:

```
using UnityEngine;

using AC;

public class ToggleDrag : MonoBehaviour

{

	public string toggleDragInput = "ToggleDrag";

	private bool waitForUp;

	private bool pressedThisFrame;

	private void Start ()

	{

		KickStarter.playerInput.dragOverrideInput = toggleDragInput;

		KickStarter.playerInput.InputGetButtonDelegate = My_InputGetButton;

	}

	private void OnEnable ()

	{

		EventManager.OnGrabMoveable += ResetInput;

		EventManager.OnDropMoveable += ResetInput;

	}

	private void OnDisable ()

	{

		EventManager.OnGrabMoveable -= ResetInput;

		EventManager.OnDropMoveable -= ResetInput;

	}

	private void LateUpdate ()

	{

		pressedThisFrame = Input.GetButtonDown (toggleDragInput);

	}

	private bool My_InputGetButton (string axisName)

	{

		try

		{

			if (axisName == toggleDragInput)

			{

				if (!KickStarter.playerInput.IsDragObjectHeld ())

				{

					return pressedThisFrame;

				}

				else

				{

					if (pressedThisFrame)

					{

						KickStarter.playerInput.LetGo ();

						return false;

					}

					return true;

				}

			}

			return Input.GetButton (axisName);

		}

		catch {}

		return false;

	}

	private void ResetInput (DragBase dragBase)

	{

		pressedThisFrame = false;

	}

}

```
Ginger

```
            "              Przepraszam, nie przepraszam. "

```

```
            — Hasło Ginger

```

Ginger jest jednym z głównych tritagonistów w Talking Tom and Friends . Jest głównym antagonistą w odcinku „ App-y Halloween !”.

Wygląd

Ginger to pomarańczowy kot, który najprawdopodobniej jest pręgowany. Ma niebieskie oczy i różowy nos. Od czwartego sezonu nosi fioletowy t-shirt, granatowy kombinezon i czerwone trampki.

Osobowość

Imbir jest zabawny i dowcipnisi. Uwielbia żartować z ludzi i czasami potrafi być dość okrutny, nawet jeśli nie ma takiego zamiaru. Jest też bardzo niedojrzały i często wpada w kłopoty w szkole. Uwielbia słodycze i zrobi, co w jego mocy, aby je zdobyć. Nienawidzi romansu, ponieważ uważa, że ​​jest to obrzydliwe, gdy czasami jest lekko zainteresowany i zaniepokojony, gdy myśli, że Hank nie ma dziewczyny.

Drobnostki

Płeć imbiru jest często mylona z byciem kobietą, prawdopodobnie dlatego, że „Ginger” jest bardziej kobiecym imieniem.

Rodzina Ginger jest drugą najbogatszą osobą w mieście, po prezesie .

Aktorka głosowa Ginger, Maria Bamford , podkłada również głos Becce Sparkles i kilku postaciom do tej pory.

Ginger zaczyna nosić ubrania z sezonu 4, tak jak inni (nie licząc Angeli ).

Większość aplikacji Ginger jest przeznaczona dla młodszych dzieci i pomaga im w nauce.

Według „ The Audition ” i wielu innych odcinków, Ginger ma 7 lat.

Urodziny Ginger wypadają 7 kwietnia.

Podobnie jak reszta przyjaciół, Ginger zmienia strój w „ Kelnerce Angeli ”.

W Talking Friends , Ginger jest przedstawiana jako siostrzeniec Toma. Nie wiadomo, czy tak jest w jego obecnym stanie.
Adding images to documents and journals

**Note: This script is no longer necessary from AC 1.78 onwards, as pages can now be assigned textures from within the Editor.**

Journals and Documents provide a way of displaying multiple pages of text to the player. This script allows you to associate each page with a texture, and display that texture in a Graphic menu element.

To use it:

1. Create a new journal or document as normal using the Menu system. The pages must have text - if you don't want to show them, they can be hidden from view.
2. Create a new Graphic element in the Menu for page textures to be displayed in.
3. Add the page text to the Speech Manager by clicking "Gather text".
4. Add the script below (JournalPageTexture.cs) as a component in your scene. This should be on a prefab present in all scenes (such as the Player) for it to be recognised game-wide.
5. Fill in the Inspector fields, referencing the Menu and Element names involved. Use the "Page Textures" array to define a texture for each page. To connect a texture asset to a page, refer to that page's ID number as listed in the Speech Manager.

JournalPageTexture.cs:

```
using UnityEngine;
using System.Collections;
using AC;

public class JournalPageTexture : MonoBehaviour
{

 [SerializeField] private PageTexture[] pageTextures;
 [SerializeField] private string journalMenuName = "Journal";
 [SerializeField] private string journalElementName = "PageText";
 [SerializeField] private string graphicElementName = "Texture";
 [SerializeField] private Texture2D emptyTexture;

 private void OnEnable ()
 {
 EventManager.OnMenuTurnOn += OnMenuTurnOn;
 EventManager.OnMenuElementShift += OnMenuElementShift;
 }

 private void OnDisable ()
 {
 EventManager.OnMenuTurnOn -= OnMenuTurnOn;
 EventManager.OnMenuElementShift -= OnMenuElementShift;
 }

 private void OnMenuTurnOn (Menu menu, bool isInstant)
 {
 if (menu.title == journalMenuName)
 {
 UpdatePageTexture ();
 }
 }

 private void OnMenuElementShift (MenuElement \_element, AC\_ShiftInventory shiftType)
 {
 if (PlayerMenus.GetMenuWithName (journalMenuName).elements.Contains (\_element))
 {
 UpdatePageTexture ();
 }
 }

 private void UpdatePageTexture ()
 {
 MenuJournal journal = PlayerMenus.GetElementWithName (journalMenuName, journalElementName) as MenuJournal;
 int pageIndex = journal.showPage - 1;

 MenuGraphic graphic = PlayerMenus.GetElementWithName (journalMenuName, graphicElementName) as MenuGraphic;
 Texture2D texture = emptyTexture;
 if (pageIndex < journal.pages.Count)
 {
 int pageID = journal.pages [pageIndex].lineID;
 texture = GetTextureWithID (pageID);
 }

 if (texture)
 {
 graphic.graphic.texture = texture;
 graphic.graphic.ClearCache ();
 }
 }

 private Texture2D GetTextureWithID (int ID)
 {
 foreach (PageTexture pageTexture in pageTextures)
 {
 if (pageTexture.ID == ID)
 {
 return pageTexture.texture;
 }
 }
 return null;
 }

 [System.Serializable]
 private struct PageTexture
 {

 public int ID;
 public Texture2D texture;

 }

}

```
Random dialogue

The **Variable: Check random number** can be used before dialogue to run different speech lines based on a random value, but this script allows you to play random dialogue from within a single **Dialogue: Play speech** Action.  Note, however, that this is not possible when lipsyncing or speech audio is involved.

To use it:

1. Create a new C# script named RandomDialogue and attach it to a GameObject in the scene

RandomDialogue.cs:

```
using System;
using UnityEngine;
using AC;

public class RandomDialogue : MonoBehaviour
{

 private void OnEnable () { EventManager.OnStartSpeech\_Alt += StartSpeech; }
 private void OnDisable () { EventManager.OnStartSpeech\_Alt -= StartSpeech; }

 private void StartSpeech (Speech speech)
 {
 if (speech.OriginalText.Contains ("||"))
 {
 string[] possibleValues = speech.OriginalText.Split (new string[] { "||" }, StringSplitOptions.None);
 int randomIndex = UnityEngine.Random.Range (0, possibleValues.Length);
 string randomValue = possibleValues[randomIndex];
 speech.ReplaceDisplayText (randomValue);
 }
 }

}

```
Character elimination

Coiny 2 (Hungary)

Bal TV (Balbonia)

### Host

Norbika9studios (Seasons 1-8 (Original))Coiny (Season 8 (Reboot) - Season 10) Gelatin (Season 11)

### Series run

June 13th, 2016 - November 25, 2016 (Original)April 2nd, 2019 - May 27th, 2020 (Reboot)

July 4th, 2023 - July 21st, 2023 (Season 11/Final Era)

**Character elimination** Is a sucessful Reality show created by norbika9studios released on June 2016.

## How it works

Character elimination is a reality television show in which a group of people Trying to Win challenges isolated from the outside world but continuously watched by television cameras. Each seasons lasts for around Two or one months, and there are 10-17 participants. The contestants try to win a cash prize by avoiding periodic eliminations from the house.

## Cancellation

Season 8 will not return, due to fem3's controversial return. It's won't Continue Today, But There will be an New edition to the Character elimination, which is called the Sliver gate. Very Samiliar to That, but It Does Differently. this show contains 10-17 people entering worldwide Forests at every Seasons to compete for an half million dollars. very samiliar to survivor and CE, But it does it differently.

## Return

It's back now, but however, Season 9 is now the Pokemon Season.
Changing the Player's expression while an NPC speaks

The [expression:Name] token can be used in a character's speech text to change their expression midway through. However, this only affects the expression of the character who is speaking.

The script below allows you to change the Player's expression while any character is speaking, by using the [PlayerExpression:Name] token instead. To use it, paste its contents into a script named CustomPlayerExpressions.cs, and attach to your scene.

CustomPlayerExpressions.cs:

```
 using UnityEngine;
 using AC;

 public class CustomPlayerExpressions : MonoBehaviour
 {

 private const string tokenName = "PlayerExpression";

 private void OnEnable ()
 {
 KickStarter.dialog.SpeechEventTokenKeys = new string[1] { tokenName };
 EventManager.OnSpeechToken += OnSpeechToken;
 }

 private void OnDisable () { EventManager.OnSpeechToken -= OnSpeechToken; }

 private void OnSpeechToken (AC.Char speakingCharacter, int lineID, string tokenKey, string tokenValue)
 {
 if (tokenKey == tokenName)
 {
 int expressionID = KickStarter.player.GetExpressionID (tokenValue);
 KickStarter.player.SetExpression (expressionID);
 }
 }

 }

```