A Simple Program That Makes a Dev/Cheat Menu


I was fooling around today and made a pretty simple and crude program that will look through your startup.txt file and create a new file called ‘devmenu.txt’. It is just a big choice that allows you to edit every variable while you’re playing. I had it hooked up to my choicescript_stats.txt so I’d recommend linking it in there if you want to use it.

I don’t know if anyone would actually be interested in it but I’ll throw the github link out there if you want to mess around. It only works on Windows desktops as far as I am aware. Let me know if you’ve got any questions.


That’s a really cool idea.

Unfortunately I don’t use windows, I can’t try it. Can you post an example of how it looks when you use it?

Also, what did you use to develop it? Can you share the source?


Yeah I’ll post some screenshots!

I wrote the program in Visual Studio in VB .NET and because of this, it only runs on Windows machines. I’ve been looking at remaking this either with Mono or in C# so that Macs can use it too. Regardless, I will put the code in here for you to copy if you’d like.

The startup.txt file

The program

The generated file

The VB .NET code
Imports Microsoft.VisualBasic.FileIO
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'resultWriter will be used to write to devmenu.txt
        Dim resultWriter As System.IO.StreamWriter
        'resultFilePath is where devmenu.txt is located
        Dim resultFilePath As String
        'startupFilePath is where the startup file is located, starts empty
        Dim startupFilePath As String = String.Empty
        'A list of all variables in the startup file that are string types
        Dim varListString As New List(Of String)()
        'A list of all variables in the startup file that are numeric types (most likely an integer)
        Dim varListNumeric As New List(Of String)()
        'An array of every word on the current line in the startup file when being read by the File Parser
        Dim currentLine As String()

        'Opens the file explorer that searches for .txt files initially in the C Drive
        Using FileDialogue As OpenFileDialog = New OpenFileDialog()
            FileDialogue.Title = "Select startup.txt"
            FileDialogue.InitialDirectory = "C:\"
            FileDialogue.Filter = "Text files (*.txt)|*.txt"
            FileDialogue.FilterIndex = 2
            FileDialogue.RestoreDirectory = True

            'Save the file path to startup.txt 
            If FileDialogue.ShowDialog() = DialogResult.OK Then
                startupFilePath = FileDialogue.FileName
                'If Cancel is selected the file selection is aborted
            ElseIf FileDialogue.ShowDialog() = DialogResult.Cancel Then
                Exit Sub
            End If
        End Using

        'Try to path devmenu.txt to the desktop
            resultFilePath = My.Computer.FileSystem.SpecialDirectories.Desktop + "\devmenu.txt"
        Catch ex As Exception
            MessageBox.Show("Sorry, the program could not find your desktop", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try

        'If devmenu.txt doesn't exist, make it
        'If it does, ask whether to overwrite it or not
        If Not System.IO.File.Exists(resultFilePath) Then
            MessageBox.Show("devmenu.txt created at " & resultFilePath, "Done", MessageBoxButtons.OK, MessageBoxIcon.Information)
            If MessageBox.Show("Do you want to overwrite your devmenu file?", "Overwrite?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.Yes Then
                MessageBox.Show("devmenu.txt overwritten", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information)
                resultFilePath = My.Computer.FileSystem.SpecialDirectories.Desktop + "\devmenuAlt.txt"
                MessageBox.Show("devmenuAlt.txt created on Desktop", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        End If

        'If the path to the startup file is not an empty string, open it and begin parsing
        'The startup file is closed when we are at "End Using"
        If Len(startupFilePath) <> 0 Then
                Using FileParser As New TextFieldParser(startupFilePath)
                    'Ignore any line starting with "*comment"
                    FileParser.CommentTokens = New String() {"*comment"}
                    'Tells the parser that each word is separated by a space
                    FileParser.SetDelimiters(" ")

                    'While Not FileParser.EndOfData means read the whole file
                    While Not FileParser.EndOfData
                        'Store each distinct word in the currentLine list
                        currentLine = FileParser.ReadFields()
                        'If the first word is *create and the 3rd is not a number, put the variable name in varListString
                        'If the first word is *create and the 3rd is a number, put in varListNumeric
                        If currentLine(0) = "*create" Then
                            If IsNumeric(currentLine(2)) = False Then
                            ElseIf IsNumeric(currentLine(2)) = True Then
                            End If
                        End If
                    End While
                End Using

                'Open devmenu.txt in append mode
                resultWriter = My.Computer.FileSystem.OpenTextFileWriter(resultFilePath, True)
                'write two lines that begins the Choicescript code
                resultWriter.WriteLine("*label variableEditChoice" & vbCrLf)
                resultWriter.WriteLine("*choice" & vbCrLf)
                'A loop that creates Choicescript code for each string variable
                For Each stringVariable As String In varListString
                    resultWriter.WriteLine(vbTab & "#" & stringVariable & vbCrLf)
                    resultWriter.WriteLine(vbTab & vbTab & "Give a string for " & stringVariable & vbCrLf)
                    resultWriter.WriteLine(vbTab & vbTab & "*input_text " & stringVariable & vbCrLf)
                'A loop that creates code for each numeric variable
                For Each numericVariable As String In varListNumeric
                    resultWriter.WriteLine(vbTab & "#" & numericVariable & vbCrLf)
                    resultWriter.WriteLine(vbTab & vbTab & "Give a value for " & numericVariable & vbCrLf)
                    resultWriter.WriteLine(vbTab & vbTab & "*input_number " & numericVariable & " 0 100" & vbCrLf)
                'An option to go back to the stats screen
                resultWriter.WriteLine(vbTab & "#Go back to stats" & vbCrLf)
                resultWriter.WriteLine(vbTab & vbTab & "*goto choicescript_stats" & vbCrLf)
                'If you selected an option above you will be brought back to the variable choice
                resultWriter.WriteLine("*goto variableEditChoice")
                'Close the devmenu.txt file
                'Tell the user that everything is finished
                MessageBox.Show("Dev menu complete", "Success", MessageBoxButtons.OK, MessageBoxIcon.None)

            Catch ex As Exception
                MessageBox.Show("Sorry, the file parser isn't working", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
            End Try
            MessageBox.Show("Sorry, the startup file isn't found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If
    End Sub
End Class


Thanks so much. When you take the Window-specific UI out, it’s very compact and easy to read. I think I’ll start using your idea for tests and debugging.

1 Like

Holy crap I wish I knew this earlier. I spent many hours coding a simple dev menu and it still has some bugs, and I really want to spend more time writing my story. I’ll try this out sometime this week. Thanks for putting this out!

1 Like

There’s probably a bug with the code that returns to the stats screen. Let me open this thing back up and see if I can get it fixed and re-upload it. Can also fix the resolution issues while I’m at it

1 Like