Difference between revisions of "Hello World"

From the Fallout4 CreationKit Wiki
Jump to navigation Jump to search
imported>Cobalt027
imported>Qazaaq
 
(4 intermediate revisions by one other user not shown)
Line 1: Line 1:
[[Category:Bethesda_Scripting_Tutorial_Series]]
In this tutorial, we will make a mod that pops up a message box that says Hello World.
In this tutorial, we will make a mod that pops up a message box that says Hello World.


=== PreRequisites ===
=== PreRequisites ===
# Install Creation Kit (From the [http://download.cdp.bethesda.net/BethesdaNetLauncher_Setup.exe Bethesda.net] launcher)
# Install Creation Kit (From the [http://download.cdp.bethesda.net/BethesdaNetLauncher_Setup.exe Bethesda.net] launcher)
# Update Fallout 4 to [http://www.creationkit.com/fallout4/index.php?title=Enable_Loose_Files Enable Loose Files]
# Update Fallout 4 to [[Enable Loose Files]]
# Update Fallout 4 to [http://www.creationkit.com/fallout4/index.php?title=Enable_Debug_Logging Enable Debug Logging]
# Update Fallout 4 to [[Enable Debug Logging]]


=== Steps ===
=== Steps ===
1.   Load Fallout 4 Resources
:1. Load Fallout 4 Resources
:* Start Creation Kit
::* Start Creation Kit
:* File -> Data... -> Double Click Fallout4.esm
::* File -> Data... -> Double Click Fallout4.esm
:* Hit [OK]
::* Hit [OK]


2. Set a default namespace
:2. Set a default namespace


:When a namespace is set, the Creation Kit places all of the scripts you generate under Data/Scripts/<NameSpace>. This is handy for keeping track of your which mods various scripts support.  
::When a namespace is set, the Creation Kit places all of the scripts you generate under Data/Scripts/<NameSpace>. This is handy for keeping track of your which mods various scripts support.  


:* File -> Preferences
::* File -> Preferences
:* Scroll to the right and select the "Scripts" Tab
::* Scroll to the right and select the "Scripts" Tab
:* Within "Default namespace", enter "HW". (HW are the initials for this mod)
::* Within "Default namespace", enter "HW". (HW are the initials for this mod)
:* Hit [Apply]
::* Hit [Apply]


3. Create a Message
:3. Create a [[Message]]


:* Within the left pane of the "Object Window", Expand "Miscellaneous"
::* Within the left pane of the [[Object Window]], expand the [[:Category:Miscellaneous| Miscellaneous]] category.
:* Click On/Highlight "Message"
::* Click On/Highlight "Message"
:* Double Click "Blank Message" in the right pane
::* Double Click "Blank Message" in the right pane
:** ID : HelloWorld
::** ID : HelloWorld
:** Title : Hello World Title
::** Title : Hello World Title
:** Short Title : Hello Title
::** Short Title : Hello Title
:** Message Text : Hello World!
::** Message Text : Hello World!
:** Check the Box : [x] Message Box
::** Check the Box : [x] Message Box
:** Hit [OK]
::** Hit [OK]
:** Hit [YES] when asked if you wish to create a new Form
::** Hit [YES] when asked if you wish to create a new Form


4. Create a Quest
:4. Create a [[Quest]]
::The best way to introduce content into the game is by creating a new Quest that adds the content or performs various actions.


:The best way to introduce content into the game is by creating a new Quest that adds the content or performs various actions.
::* Within the left pane of the [[Object Window]], expand the [[:Category:Character| Character]] category.
::* Click On/Highlight "Quest"
::* Within the right pane of the Object Window, Right-Click the background and select "New"
::** ID : HelloWorldQuest
::** ''NOTE : "Start Game Enabled" and "Run Once" are checked. For this example, the default values are fine.''
::** Hit [OK] ''NOTE : Scripts are not enabled until the quest is created''


:* Within the left pane of the "Object Window", Expand "Character"
:5. Create a Script for the [[Quest]] and inject the HelloWorld [[Message]]
:* Click On/Highlight "Quest"
:* Within the right pane of the "Object Window", Right-Click the background and select "New"
:** ID : HelloWorldQuest
:** ''NOTE : "Start Game Enabled" and "Run Once" are checked. For this example, the default values are fine.''
:** Hit [OK] ''NOTE : Scripts are not enabled until the quest is created''


5. Create a Script for the Quest and inject the HelloWorld Message
::* Within the left pane of the "Object Window", Make sure "Character" -> "Quest" is selected
::* Enter "HelloWorld" into the Filter box
::* Within the right pane, re-open The "HelloWorldQuest"
::* Click on the "Scripts" Tab
::** Click [Add] => [New Script]
::** Name : HelloWorldQuestScript ''NOTE : You should see your "HW" in the Namesapce''
::* When the Properties Window appears, click [Add Property]
::** Type : Message
::** Name : pHelloWorld
::** Hit [OK]
::** Hit [OK] (To exit Property editor)


:* Within the left pane of the "Object Window", Make sure "Character" -> "Quest" is selected
::: ''NOTE'' : When Properties start with the letter "p", The CK searches all objects matching the TYPE for an obvious match. Since there is a MESSAGE named "HelloWorld", it automatically fills the property for you. If you had named the property something else, or given the message box a different ID, you would have needed to specify the specific MESSAGE to inject.
:* Enter "HelloWorld" into the Filter box
:* Within the right pane, re-open The "HelloWorldQuest"
:* Click on the "Scripts" Tab
:** Click [Add] => [New Script]
:** Name : HelloWorldQuestScript ''NOTE : You should see your "HW" in the Namesapce''
:* When the Properties Window appears, click [Add Property]
:** Type : Message
:** Name : pHelloWorld
:** Hit [OK]
:** Hit [OK] (To exit Property editor)


When Properties start with the letter "p", The CK searches all objects matching the TYPE for an obvious match. Since there is
:6. Edit the script to show the message
a MessageBox named "HelloWorld", it automatically fills the property for you. If you had named the property something else, or
given the message box a different ID, you would have needed to specify the specific MessageBox to inject.


6. Edit the script to show the message
::* Open up HelloWorldQuest and go to the script if you are not already there.
 
::* Right Click [HW:HelloWorldQuestScript] and Select "Edit Source"
:* Open up HelloWorldQuest and go to the script if you are not already there.
::* Add the following to the bottom of the file
:* Right Click [HW:HelloWorldQuestScript] and Select "Edit Source"
:::'' NOTE: Spacing is important. If you are pasting from this page, paste into NotePad first to eliminate format and then paste into the CK edit window.
:* Add the following to the bottom of the file
::'' NOTE: Spacing is important. If you are pasting from this page, paste into NotePad first to eliminate format and then paste into the CK edit window.


<source lang="papyrus">
  Event OnInit()
  Event OnInit()
   pHelloWorld.Show()
   pHelloWorld.Show()
   Debug.MessageBox("Hello from a Debug MessageBox!")
   Debug.MessageBox("Hello from a Debug MessageBox!")
  endEvent
  EndEvent
</source>
 
 
::* In the Edit Script Window, goto File -> Save (''When you save, CK automatically attempts to compile the code'')
::* Close the Script Editor
::* Hit [OK] on the HelloWorldQuest window
::* CK -> File -> Save
::* File name: HelloWorld
::* Save as type: TES Plugin Files (*.esp)
::* Hit [SAVE]
::* [Optional] Exit Creation Kit
 
:7. Test the Mod
 
::* Startup Fallout 4
::* Hit [Play]
::* Hit [Mods]
::* Hit [HOME] to bypass the user login
::* Select [HelloWorld], make sure it is checked
::* ESC to back out
::* Hit [OK] when it detects Mod change (reloads mods)
::* Load an existing save game or start a new game.
 
:You should see 2 message boxes pop up. One from the Message you created and the other from the debug.
 
=== Lessons Learned ===
:1. Dependency Injection


::Papyrus works off the principles of Dependency Injection: In general, you should create objects and Inject them into your script from within the Creation Kit.


:* In the Edit Script Window, goto File -> Save (''When you save, CK automatically attempts to compile the code'')
:2. Avoid Debug.MessageBox 
:* Close the Script Editor
:* Hit [OK] on the HelloWorldQuest window
:* CK -> File -> Save
:* File name: HelloWorld
:* Save as type: TES Plugin Files (*.esp)
:* Hit [SAVE]
:* [Optional] Exit Creation Kit


7. Test the Mod
::When scripts are archived into release archives, the Creation Kit will strip out all [[Debug Script]] methods such as Debug.MessageBox, Debug.TraceAndBox, etc... This example creates and injects a MESSAGE object because it is technically required to get "Hello World" to show up in a released mod.  You can not rely on Debug methods (specifically the message box function) as part of a mod.


:* Startup Fallout 4
=== If things aren't working ===
:* Hit [Play]
:* Hit [Mods]
:* Hit [HOME] to bypass the user login
:* Select [HelloWorld], make sure it is checked
:* ESC to back out
:* Hit [OK] when it detects Mod change (reloads mods)
:* Load an existing save game or start a new game.


You should see 2 message boxes pop up. One from the Message you created and the other from the debug. If you do not, make sure you enabled loose files. A common mistake is to edit the wrong INI file. Make sure you edit the file under Documents/My Games/Fallout 4.
:Make sure you enabled loose files. A common mistake is to edit the wrong INI file. Make sure you edit the file under Documents/My Games/Fallout 4.

Latest revision as of 21:33, 1 August 2016

In this tutorial, we will make a mod that pops up a message box that says Hello World.

PreRequisites[edit | edit source]

  1. Install Creation Kit (From the Bethesda.net launcher)
  2. Update Fallout 4 to Enable Loose Files
  3. Update Fallout 4 to Enable Debug Logging

Steps[edit | edit source]

1. Load Fallout 4 Resources
  • Start Creation Kit
  • File -> Data... -> Double Click Fallout4.esm
  • Hit [OK]
2. Set a default namespace
When a namespace is set, the Creation Kit places all of the scripts you generate under Data/Scripts/<NameSpace>. This is handy for keeping track of your which mods various scripts support.
  • File -> Preferences
  • Scroll to the right and select the "Scripts" Tab
  • Within "Default namespace", enter "HW". (HW are the initials for this mod)
  • Hit [Apply]
3. Create a Message
  • Within the left pane of the Object Window, expand the Miscellaneous category.
  • Click On/Highlight "Message"
  • Double Click "Blank Message" in the right pane
    • ID : HelloWorld
    • Title : Hello World Title
    • Short Title : Hello Title
    • Message Text : Hello World!
    • Check the Box : [x] Message Box
    • Hit [OK]
    • Hit [YES] when asked if you wish to create a new Form
4. Create a Quest
The best way to introduce content into the game is by creating a new Quest that adds the content or performs various actions.
  • Within the left pane of the Object Window, expand the Character category.
  • Click On/Highlight "Quest"
  • Within the right pane of the Object Window, Right-Click the background and select "New"
    • ID : HelloWorldQuest
    • NOTE : "Start Game Enabled" and "Run Once" are checked. For this example, the default values are fine.
    • Hit [OK] NOTE : Scripts are not enabled until the quest is created
5. Create a Script for the Quest and inject the HelloWorld Message
  • Within the left pane of the "Object Window", Make sure "Character" -> "Quest" is selected
  • Enter "HelloWorld" into the Filter box
  • Within the right pane, re-open The "HelloWorldQuest"
  • Click on the "Scripts" Tab
    • Click [Add] => [New Script]
    • Name : HelloWorldQuestScript NOTE : You should see your "HW" in the Namesapce
  • When the Properties Window appears, click [Add Property]
    • Type : Message
    • Name : pHelloWorld
    • Hit [OK]
    • Hit [OK] (To exit Property editor)
NOTE : When Properties start with the letter "p", The CK searches all objects matching the TYPE for an obvious match. Since there is a MESSAGE named "HelloWorld", it automatically fills the property for you. If you had named the property something else, or given the message box a different ID, you would have needed to specify the specific MESSAGE to inject.
6. Edit the script to show the message
  • Open up HelloWorldQuest and go to the script if you are not already there.
  • Right Click [HW:HelloWorldQuestScript] and Select "Edit Source"
  • Add the following to the bottom of the file
NOTE: Spacing is important. If you are pasting from this page, paste into NotePad first to eliminate format and then paste into the CK edit window.
 Event OnInit()
   pHelloWorld.Show()
   Debug.MessageBox("Hello from a Debug MessageBox!")
 EndEvent


  • In the Edit Script Window, goto File -> Save (When you save, CK automatically attempts to compile the code)
  • Close the Script Editor
  • Hit [OK] on the HelloWorldQuest window
  • CK -> File -> Save
  • File name: HelloWorld
  • Save as type: TES Plugin Files (*.esp)
  • Hit [SAVE]
  • [Optional] Exit Creation Kit
7. Test the Mod
  • Startup Fallout 4
  • Hit [Play]
  • Hit [Mods]
  • Hit [HOME] to bypass the user login
  • Select [HelloWorld], make sure it is checked
  • ESC to back out
  • Hit [OK] when it detects Mod change (reloads mods)
  • Load an existing save game or start a new game.
You should see 2 message boxes pop up. One from the Message you created and the other from the debug.

Lessons Learned[edit | edit source]

1. Dependency Injection
Papyrus works off the principles of Dependency Injection: In general, you should create objects and Inject them into your script from within the Creation Kit.
2. Avoid Debug.MessageBox
When scripts are archived into release archives, the Creation Kit will strip out all Debug Script methods such as Debug.MessageBox, Debug.TraceAndBox, etc... This example creates and injects a MESSAGE object because it is technically required to get "Hello World" to show up in a released mod. You can not rely on Debug methods (specifically the message box function) as part of a mod.

If things aren't working[edit | edit source]

Make sure you enabled loose files. A common mistake is to edit the wrong INI file. Make sure you edit the file under Documents/My Games/Fallout 4.