Giter Site home page Giter Site logo

joelday / papyrus-lang Goto Github PK

View Code? Open in Web Editor NEW
101.0 10.0 17.0 7.6 MB

๐Ÿ“œAdvanced language tools for the Papyrus scripting language.

License: Other

Papyrus 0.64% C# 56.72% TypeScript 18.23% JavaScript 0.25% C++ 23.92% C 0.24%
papyrus fallout-4 visual-studio-code language-server-protocol skyrim skyrim-special-edition papyrus-language

papyrus-lang's Introduction

๐Ÿ“œ Papyrus Language Tools

Discord

Advanced language tools for the Papyrus scripting language.

You can now write mods for Fallout 4 and Skyrim with the aid of modern code editing features such as code completion, jump to definition, hover, symbol search, PPJ-based build tasks, and live updated diagnostics.

โœ’ Visual Studio Code Extension

Updated frequently with new features and improvements.

๐Ÿ”— Visual Studio Marketplace ๐Ÿ“– User Manual โš™๏ธ Source


๐ŸŽ– Credits

  • ๐Ÿฅ‡ joelday
  • Scrivener07
  • shad0wshayd3
  • rjstone
  • fireundubh (for Pyro)
  • Nyo (Pyro fixes)

papyrus-lang's People

Contributors

dependabot[bot] avatar icfjoeld avatar joelday avatar nikitalita avatar rjstone avatar scrivener07 avatar semantic-release-bot avatar shad0wshayd3 avatar urbancmc avatar webspam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

papyrus-lang's Issues

Improve Debugger Performance

The debugger performance has some room for improvement as of v2.9.3 + Debug Server v1.0.0.26

I have found that it can take a bit longer than expected for the game to pause on an initial break.
Occasionally the game will hang and Windows will prompt that Fallout 4 is not responding.
If I choose to wait for the program to respond everything will recover with some patience.

Here are some videos related to the current version at the time of writing.

This issue is for planning and goal purposes. After outstanding bugs are fixed, the debugger performance can be investigated.

Int32 Error Handling

When working with numbers as part of my test case suite, I get the following error:

[Skyrim]: Value was either too large or too small for an Int32.
(System.OverflowException: Value was either too large or too small for an Int32.
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.Int32.Parse(String s)
   at DarkId.Papyrus.LanguageService.Program.Syntax.NodeBinder.<>c__DisplayClass35_1.<BindLiteralExpression>b__1(IntLiteralNode literalNode, Scanner`1 _) in C:\projects\papyrus-lang\src\DarkId.Papyrus.LanguageService\Program\Syntax\NodeBinder.cs:line 699
   at DarkId.Papyrus.LanguageService.Program.Syntax.NodeBinder.CreateNode[T](SyntaxNode parent, Scanner`1 parentChildren, Action`2 bindAction) in C:\projects\papyrus-lang\src\DarkId.Papyrus.LanguageService\Program\Syntax\NodeBinder.cs:line 898)

The numbers in question -2500483647 and 6985425358 which should never exist, but just for case-tests they do, to check for proper behaviour.

Documentation for this extension, VS Code, and Papyrus

The Documentation

~45% done?

This issue is so I can track wiki related tasks.

Who are these documents for?

  • Authors new to scripting or programming in general.
  • Authors who are new to VS Code and excited to try a modern text editor.
  • Author who are firmly stuck to other editors for modding purposes.

How do these documents help me?

  • These documents explain how to use the extension and its features in great detail.
  • These documents provide information about the Papyrus scripting language in great detail.
  • These documents explain how to code with Papyrus in some detail.
  • These documents explain how to use the Creation Kit briefly.

What questions should I ask myself while writing documents?

  • Can I find what Im looking for at a glance?
  • What is my favorite part so far and what part do I find the most lacking?

Emphasis

  • The documentation should be thorough, but also accessible at a glance.
  • Do not assume the user to be fully knowledge on every subject. Provide plenty of supporting documentation to the topics here.

What does the end result look like?

Below I will try to create a sort of wiki site map which tracks the completion of pages.

Goals

  • Offline Compatible: All external links should be routed through the Glossary. The exceptions are links to CreationKit.com, code.visualstudio.com, or where justified on a case-by-case basis. These two external links are prefixed with the link destination when used. For example CK - Weapon or VS Code Keybindings.
  • Content Polish: Wax on, wax off.
    • Feature Introduction Videos
      • Introduction to The Papyrus Language Extension
      • Introduction To Coding
      • Introduction To Debugging
    • A very descriptive screenshot or two for every notable extension feature.
      • Lean towards still screenshots within documentation.
      • Save animated gifs for overview pages or very complex features.

Extension

Features

Programming Section

Add some pages (not exhaustive) about programming with papyrus.

  • Add content for an introduction to setting up new projects and scripting environments.
  • Add content about script instantiation and object binding within the Creation Kit.
  • Add content for an introduction to scripting (briefly).
  • Add content for an introduction to arrays, and (briefly) for some advanced stuff.
  • Add content for an introduction to events, and (briefly) for some advanced stuff.
  • Add content for an introduction to inheritance, and (briefly) for some advanced stuff.
    • Interoperation between Papyrus and Adobe Actionscript.
    • Exposing Papyrus Properties to the Condition System.
    • Hooking the Condition System with Papyrus events.

Language Section:

A complete onsite markdown conversion of the core Papyrus language documentation.

Why?
  • The creation kit websites are extremely painful to edit or even view and navigate.
  • The creation kit website information is overly fragmented across too many pages, with poor navigation.
  • I will be able to consolidate the differences between compiler versions (skyrim, fallout).
  • I will be able to greatly improve the quality of feature pages by using the onsite pages as supporting documentation.
  • The markdown wiki looks slick and has a better syntax.
  • Anyone can now clone a complete local copy of the Papyrus language reference all rendered in beautiful Markdown.

TODO

  • Continue to focus on feature related content now.
  • Project Panels: Visualizes which projects are in context and where.
  • Notes on how to get logs and extension output.
  • Document remote event completions.
  • How to uninstall the extension and xSE plugin?
  • Add more links to relevant VSCode docs for "further reading".
  • This is pretty much an Organization now. List all the sub-project repositories and dependencies.
  • Finish documentation for snippets. Improve snippets themselves too.
  • Note the ba2 archives have some naming conventions that unlock additional runtime behavior. For example: The Beta script flag and archive naming conventions.
  • Add citations to the creation kit wiki for everything in the language reference. Good thing I have a complete list of links for every page anchor within the onsite language reference. I plan to copy these links to the bottom of each language reference page as one list.

Corrections

  • Fix red links in papyrus reference. Switch these to page anchors.
  • Change the operator reference wording. Like I've stated that the operator inverts if the expression is on the right, not that the expression is inverted if the operator is on the left. The wording states it from the operator's point of view, if that makes sense? Rewrite the description without an "aside" mid-sentence.
  • The Bethesda documentation is worded with lots of asides (You know, nested sentences in English, its terrible) and other forms of distracting writing. This should be written with a more technical style.
  • Change text with a "speaker" and "audience" to have a more matter-of-fact style. By that I mean uses of "I", "me", "we", "us", and "you". This should be written with a more technical style.
  • The language reference is very fallout leaning right now and Im planning on making another pass on it to account for compatibility. Stuff like reworking the Language Keywords to show which compiler each is compatible with.
  • Search for all text containing the phrases "above" and "below" to ensure the topics remain cohesive and match the indicated location of other texts. There is no known occurrence of this issue within the current documents. This is my paranoia.
  • Fix INI settings on the Settings page.
  • Remove double-bullets on the side navigation. Use indentation instead.
  • Give all existing pages another round of editing for style consistency.
  • I should go through and make sure that all of our language for features matches VSCode.

The pex could not be loaded, script name mapping does not recognize types with file extensions.

Describe the bug
Fallout script name mappings are not verified for namespaces.

To Reproduce

  1. Create, compile, and attach a script without a namespace onto the player.
  2. Create, compile, and attach a script within a namespace onto the player.
  3. Attach the debugger to the game and notice only the non-namespaced scripts display as loaded.

I put my samples in a namespace called VSCode:* and I think thats why they would not show up even though they are attached directly to the player actor reference. I Made another sample without a namespace and it is the one that appears in the loaded scripts panel. But not VSCode:Sample & VSCode:SampleComplex.

CaptureA
CaptureB

Local variables are allowed to be flagged as `const`

Local variables are allowed to be flagged as const. The extension reports a problem that it expected an identifier.
[Build.ppj] Identifier expected.

Function MyConstant()
	int DaysInWeek = 7 const
	Debug.Trace("There can only be "+DaysInWeek+" days in a week. This fact is unchangeable. :sad:")
EndFunction

Duplicate INI settings cause plugin to throw exception?

Not a critical problem by far, but I thought it curious that I received such an error due to having the bUseVersionControl setting listed twice in my CK INIs. I thought you might like to know this if you didn't already.

Unhandled Exception: System.AggregateException: One or more errors occurred. ---> System.FormatException: A duplicate key 'General:bUseVersionControl' was found. at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload) at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load() at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers) at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build() at DarkId.Papyrus.LanguageService.Configuration.CreationKit.CreationKitInisConfigLoader.LoadConfig(CreationKitIniLocations inis) in C:\projects\papyrus-lang\src\DarkId.Papyrus.LanguageService\Configuration\CreationKit\CreationKitInisConfigLoader.cs:line 27 at DarkId.Papyrus.LanguageService.Configuration.CreationKit.CreationKitProgramOptionsProvider.GetAmbientProgramOptions() in C:\projects\papyrus-lang\src\DarkId.Papyrus.LanguageService\Configuration\CreationKit\CreationKitProgramOptionsProvider.cs:line 43 at DarkId.Papyrus.Server.ProjectProgramOptionsProvider.<GetProgramOptions>d__7.MoveNext() in C:\projects\papyrus-lang\src\DarkId.Papyrus.Server\ProjectProgramOptionsProvider.cs:line 76 --- End of inner exception stack trace --- at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait() at DarkId.Papyrus.Common.TaskExtensions.WaitForResult[T](Task`1 task) in C:\projects\papyrus-lang\src\DarkId.Papyrus.Common\TaskExtensions.cs:line 12 at DarkId.Papyrus.Server.ProjectManager.UpdateProjects(UpdateProjectsOptions options) in C:\projects\papyrus-lang\src\DarkId.Papyrus.Server\ProjectManager.cs:line 100 at DarkId.Papyrus.Server.WorkspaceManager.UpdateProjects(UpdateProjectsOptions options) in C:\projects\papyrus-lang\src\DarkId.Papyrus.Server\WorkspaceManager.cs:line 63 at DarkId.Papyrus.Server.WorkspaceManager.<>c__DisplayClass4_0.<<-ctor>b__1>d.MoveNext() in C:\projects\papyrus-lang\src\DarkId.Papyrus.Server\WorkspaceManager.cs:line 52 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_1(Object state) at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [Error - 8:15:01 pm] Connection to server got closed. Server will not be restarted.

Custom compiler path

At the moment, the extension defaults to:
\Fallout 4\Papyrus Compiler\

I moved this folder into the tools folder like so:
\Fallout 4\Tools\Papyrus Compiler\

for organization. Currently there is no way to change this behaviour.

Provide a mini papyrus code base sample.

Describe

This is a feature request for a mini papyrus code base sample to be provided.
Im writing this up as a feature request because a couple individuals have asked me about this.
I already have a sort of testing routine Ive been using with a mini-codebase sample for exactly that. I use it to have a common and consistent code base between version smoke tests. I can polish this code up and figure out the best distribution method later.

Ideas

  • Add a VSCodeTestCell for a controlled testing environment in game.
  • Add samples for static context scripts (globals).
  • Add samples for ObjectReferences and Actors.
  • Add samples for Quests.
  • Add samples which verify language features are working correctly.

Details

The code base looks something like this at the moment and still needs some polish.

E:\Games\Steam\steamapps\common\Fallout 4\Data
|   VSCode.esp
E:\Games\Steam\steamapps\common\Fallout 4\Data\Scripts\Source\VSCode
|   Build.ppj
|   VSCodeActor.psc
|   VSCodeQuest.psc
|   
\---VSCode
    |   Data.psc
    |   Globals.psc
    |   
    +---Actors
    |       Sample.psc
    |       SampleComplex.psc
    |       
    \---Quests
            Sample.psc
            SampleComplex.psc

TypeError: Cannot read property 'toString' of undefined

Describe the bug:
When opening a .pyc script file after a fresh install of papyrus-lang, the output console reports the titular error message for Skyrim and Skyrim SE, but not Fallout 4.

To Reproduce:
Assumption is a typo in the language service script provided with the extension.

The paths for all three games appear to be correct, each game's unique CK is installed and updated, the ini files are all in place, the base scripts are extracted to their associated locations, and the .flg files exist. I did notice that the Papyrus Compiler folders appear to be lacking files compared to the Fallout 4 version, if that's relevant in any way.

VSC Output Logs:

{"compilerAssemblyPath":"f:\\Games\\steamapps\\common\\Fallout 4\\Papyrus Compiler",
"creationKitInstallPath":"f:\\Games\\steamapps\\common\\Fallout 4",
"relativeIniPaths":["CreationKit.ini","CreationKitCustom.ini"],
"flagsFileName":"Institute_Papyrus_Flags.flg",
"ambientProjectName":"Fallout 4 Creation Kit",
"defaultScriptSourceFolder":"\".\\Data\\Scripts\\Source\\User\"",
"defaultAdditionalImports":"\"$(source);.\\Data\\Scripts\\Source\\Base\""}
Starting language service...
Language service started.
[Info  - 11:19:22 PM] Searching for Papyrus projects in c:\Users\bwfan\gitprojects\wrye-bash-grndbeef...
[Info  - 11:19:22 PM] Found 0 project(s) in c:\Users\bwfan\gitprojects\wrye-bash-grndbeef:

[Info  - 11:19:22 PM] Resolving script files for Fallout 4 Creation Kit...
{"compilerAssemblyPath":"F:\\Games\\steamapps\\common\\Skyrim Special Edition\\Papyrus Compiler",
"creationKitInstallPath":"F:\\Games\\steamapps\\common\\Skyrim Special Edition\\",
"relativeIniPaths":["CreationKit.ini","CreationKitCustom.ini"],
"flagsFileName":"TESV_Papyrus_Flags.flg",
"ambientProjectName":"Skyrim SE Creation Kit",
"defaultScriptSourceFolder":".\\Data\\Source\\Scripts\\"}
Error on language service pre-start: TypeError: Cannot read property 'toString' of undefined
{"compilerAssemblyPath":"F:\\Games\\steamapps\\common\\Skyrim\\Papyrus Compiler",
"creationKitInstallPath":"F:\\Games\\steamapps\\common\\Skyrim\\",
"relativeIniPaths":["SkyrimEditor.ini"],
"flagsFileName":"TESV_Papyrus_Flags.flg",
"ambientProjectName":"Skyrim Creation Kit",
"defaultScriptSourceFolder":"\"Data\\Scripts\\Source\""}
Error on language service pre-start: TypeError: Cannot read property 'toString' of undefined

Screenshots:
Fallout 4
Skyrim SE
Skyrim LE

Add feature preview GIFs to README.md

The README.md could use some preview GIFs to briefly show each major extension feature.

Details

  • Recorder: LICEcap
  • Dimensions: 800x575
  • FPS: 30

Notes

  • Use the default VS Code theme.
  • Keep the mouse work clean and smooth.
  • Keep typing smooth. Only stop briefly at the end of each symbol.
  • Avoid sample code that runs off the horizontal view.
  • Use VS Code's UI zoom (ctrl-+) for high dpi recordings.
  • Be slow & simple enough to see what's going on.
  • Disable Render Whitespace.
  • Disable Minimap.
  • Remove anything that may distract from the feature being previewed.

Code Completion

Feature_CodeCompletion

Go to Definition & Peek Definition

Feature_JumpToDefinition

Symbol Outline & Breadcrumbs

Feature_SymbolOutline

Find All References & Peek References

Hover

Symbol Search

Live Updated Diagnostics

Project Panel has duplicate imports listed for PPJ configurations.

Describe the bug
Here is an image of my Project Panel.
Capture

I drew on this image. The marks are PPJ configurations with duplicate imports.

All the fallout PPJ configs have a duplicate import listed but the CreationKitCustom.ini configs do not. Must be a difference between when you read from ini vs xml/ppj. The PPJ configs seem to be listing both SourceFolder and where SourceFolder is listed in additional imports. The CreationKitCustom.ini has an equivalent import of itself but different behavior.

CreationKitCustom.ini
sAdditionalImports = "$(source);etc;etc

MyProject.ppj

<PapyrusProject>
    <Imports>
        <Import>.</Import>
    </Imports>
    <Folders>
        <Folder>.</Folder>
    </Folders>
</PapyrusProject>

To Reproduce
Steps to reproduce the behavior:

  1. Create a Creation Kit ini configuration with source import.
  2. Create a PPJ configuration with source import.
  3. Open the Project Panel and notice duplication imports for PPJ configurations.

Add Papyrus test runner and unit testing framework.

Describe

This is a feature request for a Papyrus unit testing provider in VS Code.
Imagine automatic pass/fail unit testing and building a code coverage report for papyrus.

Thankfully Chesko has already done half of the work by writing a test framework for scripts.
With Lilac we can use the game developer console and log files to execute and read reports.

Ive used it and have some samples and project examples.
It works well but it may be difficult for beginner scripters.
If integrating Lilac ends up being the smartest course of action then it would also be neat to retain the Lilac branding and art where possible. Even if its purely documentation or the odd icon or text label in editor. Kinda like how you see the Git icon in VS Code as a supplemental technology.

I thinking it would be good to add a panel for it with the debugger or something along those lines.
We could even integrate the whole Lilac code base if it ends up being necessary.
Using some runtime script injection is also a possibility for a testing framework.
Loading and binding scripts is apparently something that can be done via the in game developer console.
Ive never bothered to try since it never had any use to me in a release distribution or debugging for me.

Lilac - A Papyrus Testing Framework

This is the Lilac Documentation with project summary below.

lilac_fallout

Lilac is a unit testing framework for Papyrus.
It has a simple and direct syntax so that you can easily write tests to increase the quality of your mods.

It is inspired by Jasmine for Javascript.
It is currently available for Fallout 4 (GitHub) and Skyrim (GitHub) under the MIT license.

Lilac can be built into your mod and distributed with it.
Your tests will only run when you decide to run them; your users will most likely never know they exist.

Introduction

Lilac is a behavior-driven development framework for Papyrus.
It has a clean, Jasmine-like syntax so you can quickly write tests for your mods.

  • All of Lilac is contained in a single script file, Lilac.psc.
  • There is no complex set-up or installation.
  • Lilac does not require any external dependencies.

Details

  1. Display a list of available tests.
    • Be able to run tests.
    • Be able to stop tests.
    • Be able to restart tests.
    • Be able to view test results.

Add Ability To Generate Papyrus Project Files

It'd be great if the extension could automatically generate .ppj files based on the Workspace currently loaded and the files/folders therein. It can already detect the game and its location, so that's pretty much all that is needed to create a .ppj file.

Debugger variables do not support `struct` types for Fallout 4.

Debugger variables do not support struct types for Fallout 4.
Below is the sample I use to test structures.

Scriptname Example2 extends Actor
{The documentation string.}

; Fields
;--------------------------------------------

IntegerValue Count

Struct IntegerValue
	int Value = 0
EndStruct

; Properties
;--------------------------------------------

Group KeyCodes
	int Property Left = 37 AutoReadOnly
	int Property Right = 39 AutoReadOnly
EndGroup

; Events
;--------------------------------------------

Event OnInit()
	RegisterForKey(Left)
	RegisterForKey(Right)
EndEvent


Event OnKeyDown(int keyCode)
	KeyDownHandler(self, keyCode, Count)
EndEvent

; Statics
;--------------------------------------------

; Handles the OnKeyDown event by incrementing or decrementing a value.
; Note: Globals essentially a treated as external scripts.
Function KeyDownHandler(Example2 script, int keyCode, IntegerValue integer) Global
	If (keyCode == script.Left)
		integer.Value -= 1
		Debug.TraceSelf(script, "OnKeyDown", "Increased the count to "+integer.Value)
	ElseIf (keyCode == script.Right)
		integer.Value += 1
		Debug.TraceSelf(script, "OnKeyDown", "Decreased the count to "+integer.Value)
	Else
		Debug.TraceSelf(script, "OnKeyDown", "The key "+keyCode+" is unhandled.")
	EndIf
EndFunction

This is related to issue #47

Defined Functions not detected in Skyrim LE

Describe the bug
Functions defined in papyrus files are not shown in the outline, nor showup in the autocompletions within the script.

To Reproduce

  1. Create a correct workspace for skyrim LE
  2. Create a correct papyrus file that contains a function
  3. Function not detected, but properties and variables are.

2019-06-08_20-44-12

As seen in the gif above, the two declared functions do not exist in the outline, nor show up during intellisense.

Step-through attribute for debugging

-@Scrivener07

"Something like attributes in c#. Here is an idea that might work. In papyrus do a single inline block comment directly above a member to mark as DebuggerStepThrough, maybe with some other symbol too like @. Inline block comments are extremely rare so will likely not conflict with any existing code to date."

; This is my function doc string.
;/@DebuggerStepThrough/;
var Function Foobar(var argument)
    ; Dont bother stepping through this function.
    return none
EndFunction

or

;/@DebuggerStepThrough/; ;/@SomeOtherAttribute/;
var Function Foobar1(var argument)
    ; Dont bother stepping through this function and some other thing.
    return none
EndFunction

;/@DebuggerStepThrough/; 
;/@SomeOtherAttribute/;
var Function Foobar2(var argument)
    ; Dont bother stepping through this function and some other thing.
    return none
EndFunction

;/@DebuggerStepThrough | @SomeOtherAttribute/; 
var Function Foobar3(var argument)
    ; Dont bother stepping through this function and some other thing.
    return none
EndFunction

See Also

The `papyrus.searchCreationKitWiki` command does not work in context menus.

Describe the bug
The papyrus.searchCreationKitWiki command does not work in menu contexts. The command does work as intended when used from the command palette or keyboard shortcut.

To Reproduce
Steps to reproduce the behavior:

  1. Try the wiki search with the command palette and notice that it works as intended.
    1.2 Try a keyboard shortcut and notice that it works too. In my case I used Control+Shift+F12.
  2. Try with the right-click context menu and notice that it does not work. Nothing appears to happen.

A Scaleform debug panel for user interface diagnostics.

Describe

This is a feature request for a Scaleform debug panel.
Scaleform by Autodesk is a middleware based on Adobe Flash used to render user interfaces in video games. Scaleform is a custom Flash player with accompanying source libraries optimized for game development. Scaleform and Adobe Flash have a similar object model to JavaFx or WPF if you are familiar.

Runtime information for Scaleform is highly valuable. This information is useful for UI development & Papyrus <-> AS3 interoperation. I dont know exactly what Im looking at in the F4SE source code but there seems to be a large amount of Scaleform systems decoded. Below I will pitch all my pie-in-the-sky ideas in the details section below.
Eat the meat, spit out the bones.

Details

  1. Display a table/tree of loaded Scaleform menus and their current state.
    • What menus are currently registered with Scaleform?
    • What is this menus name?
    • Is this menu opened or closed?
    • Whats is this menus Z-depth?
    • What is the users Screen resolution? See also AS3 - Stage (aka this.stage.width by this.stage.height)
  2. Display a table/tree of loaded scaleform AS3 classes for each menu.
    • Does this menu have a root "Document Class"?
    • Do any DisplayObjects have classes attached? (Very similar to attaching scripts to CK Forms)
    • What members does this class contain? (functions, events, anything public)
    • What are the values of variables and properties on this class?
  3. Display a table/tree of loaded scaleform movie DisplayObjects for each menu.
    • What is this display object's instance name?
    • What is this display object's library name? (Like EditorID)
    • Is this display object visible or have an alpha (opacity) value?
    • What is this display object's x/y stage position?
    • What is this display object's width, height, and scale on the stage?
    • Does this display object have a parent DisplayObject?
    • Does this display object have any child DisplayObjects?
    • What is the runtime "instance member variable path" of this display object?

Scrivener AS3 Library

F4SE Source

Logos, Icons, and Branding Media

-Joel

Really the highest priority for us should be getting a logo that looks okay in a circle.

Needs

What we need from someone with artistic skills.

Extension Icon

An icon/logo for this extension. See also VS Code Extension Manifest Icons.

  • Must look good in a circle.
  • Must have a full icon set of sizes from at least 16x16px to 256x256px . (256x256px for Retina screens).
  • Optionally, a full set of sizes with stylized per-game.

Social Preview Image

Add GitHub's new Social preview image.

  • Images should be at least 640ร—320px (1280ร—640px for best display).
  • Template describes that there should be a 40px (80px?) margin.

File Type Icons

Possibly a new VS Code Icon Theme for files related to modding Bethesda games. See also the Icon Theme Extension Guide.

  • A full set of sizes from at least 16x16 to 128x128 for each file type .

Configuration and workflow for developers using mod managers/symbolic links

I have Skyrim (Legendary Edition) installed to one drive, but I used a symbolic link to move it to my SSD. The automatic detection picks up the install correctly on the drive it was originally installed to, but the extension doesn't work nor does it log any errors. If I manually change the "papyrus.skyrim.installPath" value to the SSD path, it then works.

Add `Create Project PPJ` command and basic project scaffolding.

Describe

This is a feature request for papyrus project scaffolding.
Add Create Project command that auto-fills to match the ini configuration and provides basic scaffolding. I would imagine it should create a folder with that name, and put the ppj in there too.
This could work by right clicking on the VS Code file explorer.

Details

  1. Add a Create Project command.
  2. Add the Create Project command to the VS Code file explorer context menu.

Debugger variables panel only shows function arguments and object inheritance.

Debugger variables panel only shows function arguments and object inheritance. Properties and fields seem to be missing. For example with this code.

Scriptname Example extends Actor
{The documentation string.}

; Fields
;--------------------------------------------

int Count = 0

; Properties
;--------------------------------------------

Group KeyCodes
	int Property Left = 37 AutoReadOnly
	int Property Right = 39 AutoReadOnly
EndGroup

; Events
;--------------------------------------------

Event OnInit()
	RegisterForKey(Left)
	RegisterForKey(Right)
EndEvent

Event OnKeyDown(int keyCode)
	If (keyCode == Left)
		Count -= 1
		Debug.TraceSelf(self, "OnKeyDown", "Increased the count to "+Count)
	ElseIf (keyCode == Right)
		Count += 1
		Debug.TraceSelf(self, "OnKeyDown", "Decreased the count to "+Count)
	Else
		Debug.TraceSelf(self, "OnKeyDown", "The key "+keyCode+" is unhandled.")
	EndIf
EndEvent

Will result in.
Capture

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.