[WIPz] Skyrim Script Extender (SKSE)

Post » Wed May 16, 2012 11:21 am

  • the new system is object-oriented - all scripts are class instances (UnrealScript influence here)
  • classes support inheritance, and there appear to be vm-world classes matching the internal form types

Wow. This is some seriously good news.
User avatar
Ashley Tamen
 
Posts: 3477
Joined: Sun Apr 08, 2007 6:17 am

Post » Wed May 16, 2012 6:17 am

@ianpatt: It would seem by your description that it was designed around extensibility for a script extender. Wow. This would explain why SMKViper was so enthusiastic. :)
User avatar
+++CAZZY
 
Posts: 3403
Joined: Wed Sep 13, 2006 1:04 pm

Post » Wed May 16, 2012 1:03 pm

...I really need to stop reading this thread. :spotted owl:

State-based functions sound interesting. Sort of a pseudo-polymorphism... from the brief description it sounds like there's no real lambda functionality and you could do the same thing with flags and conditional blocks, but I wonder if there's something more to it? Even if not, it's a good bit of sugar, particularly for folks who aren't heavyweight coders and just need to get that AI package built.
User avatar
Gill Mackin
 
Posts: 3384
Joined: Sat Dec 16, 2006 9:58 pm

Post » Wed May 16, 2012 7:34 am

It's awesome that there are skilled people willing to work on things like this
User avatar
Danel
 
Posts: 3417
Joined: Tue Feb 27, 2007 8:35 pm

Post » Wed May 16, 2012 1:36 pm

This will probably be useful for fewer than 10 people out there, but hey let's release it anyway: http://skse.silverlock.org/download/skyrimtools_0001.7z. This is a dumper for Papyrus scripts (.pex), with source included. Note that it isn't a decompiler, so the output is just some vaguely human-readable non-compileable text. Example output:

Spoiler
signature: FA57C0DEversion: 03.01game id: 0001build time: 000000004E962A32 (Wed Oct 12 17:00:50 2011)source = ActorBase.pscuser = buildsmachine = BUILDFARM05user flag table:	00: hidden	01: conditionalobject table:	ActorBase:		parent class: Form		user flags: 00000001		states:						functions:				SetProtected					return type: NONE					user flags: 00000000					flags: 02					params:						bool: abProtected				IsInvulnerable					return type: bool					user flags: 00000000					flags: 02				SetOutfit					return type: NONE					user flags: 00000000					flags: 02					params:						Outfit: akOutfit						bool: abSleepOutfit				IsEssential					return type: bool					user flags: 00000000					flags: 02				IsProtected					return type: bool					user flags: 00000000					flags: 02				GetGiftFilter					return type: FormList					user flags: 00000000					flags: 02				Getsix					return type: int					user flags: 00000000					flags: 02				SetEssential					return type: NONE					user flags: 00000000					flags: 02					params:						bool: abEssential				GetClass					return type: Class					user flags: 00000000					flags: 02				GetDeadCount					return type: int					user flags: 00000000					flags: 02				GotoState					return type: NONE					docstring: Function that switches this object to the specified state					user flags: 00000000					flags: 00					params:						String: newState					locals:						NONE: ::NoneVar					code						0000: callmethod						id: onEndState						id: self						id: ::NoneVar						int: 0						0001: assign						id: ::state						id: newState						0002: callmethod						id: onBeginState						id: self						id: ::NoneVar						int: 0				SetInvulnerable					return type: NONE					user flags: 00000000					flags: 02					params:						bool: abInvulnerable				GetState					return type: String					docstring: Function that returns the current state					user flags: 00000000					flags: 00					code						0000: return						id: ::state				IsUnique					return type: bool					user flags: 00000000					flags: 02				GetRace					return type: Race					user flags: 00000000					flags: 02

That's an example class with mostly native functions. For fun, run this on cwscript.pex and marvel at the 582K of text. Also take a look at companionsbladefragmenttracking for the one in-game script using arrays, and formarray for a script-side implementation of an array via some interesting hacks.
User avatar
No Name
 
Posts: 3456
Joined: Mon Dec 03, 2007 2:30 am

Post » Wed May 16, 2012 4:54 am

... but hey let's release it anyway:

Thanks :D
...run off to peek inside the pex files.... :bolt:
User avatar
Connie Thomas
 
Posts: 3362
Joined: Sun Nov 19, 2006 9:58 am

Post » Wed May 16, 2012 12:33 pm

Complete Papyrus Native Command Bindings:
Spoiler

"GetOwningQuest", "Alias""RegisterForAnimationEvent", "Alias""RegisterForLOS", "Alias""RegisterForSingleLOSGain", "Alias""RegisterForSingleLOSLost", "Alias","RegisterForSingleUpdate", "Alias","RegisterForSingleUpdateGameTime", "Alias","RegisterForSleep", "Alias","RegisterForTrackedStatsEvent", "Alias","RegisterForUpdate", "Alias", "RegisterForUpdateGameTime", "Alias","StartObjectProfiling", "Alias","StopObjectProfiling", "Alias","UnregisterForAnimationEvent", "Alias","UnregisterForLOS", "Alias","UnregisterForSleep", "Alias","UnregisterForTrackedStatsEvent", "Alias","UnregisterForUpdate", "Alias""UnregisterForUpdateGameTime", "Alias","SendStoryEvent", "Keyword","SendStoryEventAndWait", "Keyword""Clear", "LocationAlias","GetLocation", "LocationAlias""ForceLocationTo", "LocationAlias""GetKeywordData", "Location""GetRefTypeAliveCount", "Location""GetRefTypeDeadCount", "Location""HasCommonParent", "Location""HasRefType", "Location""IsChild", "Location""IsCleared", "Location""IsLoaded", "Location""SetCleared", "Location""SetKeywordData", "Location""Show", "Message""ShowAsHelpMessage", "Message""ResetHelpMessage", "Message""Add", "MusicType""Remove", "MusicType""AddInventoryEventFilter", "ReferenceAlias","Clear", "ReferenceAlias""GetReference", "ReferenceAlias""ForceRefTo", "ReferenceAlias""RemoveAllInventoryEventFilters", "ReferenceAlias""RemoveInventoryEventFilter", "ReferenceAlias""Play", "VisualEffect""Stop", "VisualEffect""ForceStart", "Scene"		// cutscene functions?"GetOwningQuest", "Scene""IsActionComplete", "Scene""IsPlaying", "Scene""Start", "Scene""Stop", "Scene""Apply", "ShaderParticleGeometry""Remove", "ShaderParticleGeometry""Pause", "SoundCategory""UnPause", "SoundCategory""Mute", "SoundCategory""UnMute", "SoundCategory""SetVolume", "SoundCategory""SetFrequency", "SoundCategory""CenterOnCell", "Debug"			// these sound god-send - Huge kudos to SmkViper"CenterOnCellAndWait", "Debug""PlayerMoveToAndWait", "Debug""CloseUserLog", "Debug""DebugChannelNotify", "Debug""DumpAliasData", "Debug""GetConfigName", "Debug""GetPlatformName", "Debug""GetVersionNumber", "Debug""MessageBox", "Debug""Notification", "Debug""OpenUserLog", "Debug""QuitGame", "Debug""SendAnimationEvent", "Debug""SetFootIK", "Debug""SetGodMode", "Debug""StartScriptProfiling", "Debug""StartStackProfiling", "Debug""StopScriptProfiling", "Debug""StopStackProfiling", "Debug""TakeScreenshot", "Debug""ToggleAI", "Debug""ToggleCollisions", "Debug""ToggleMenus", "Debug""Trace", "Debug""TraceStack", "Debug""TraceUser", "Debug""GetAssociatedSkill", "MagicEffect""IsHostile", "Enchantment""AddAchievement", "Game""AdvanceSkill", "Game""AddHavokBallAndSocketConstraint", "Game""RemoveHavokConstraints", "Game""CalculateFavorCost", "Game""ClearTempEffects", "Game""ClearPrison", "Game""DisablePlayerControls", "Game""EnablePlayerControls", "Game""EnableFastTravel", "Game""FadeOutGame", "Game""FastTravel", "Game""FindClosestReferenceOfType", "Game""FindClosestReferenceOfAnyTypeInList", "Game""FindRandomReferenceOfType", "Game""FindRandomReferenceOfAnyTypeInList", "Game""FindClosestActor", "Game""FindRandomActor", "Game""ForceThirdPerson", "Game""ForceFirstPerson", "Game""ShowFirstPersonGeometry", "Game""GetForm", "Game""GetGameSettingFloat", "Game""GetGameSettingInt", "Game","GetGameSettingString", "Game""GetPlayer", "Game""GetPlayerGrabbedRef", "Game","GetPlayersLastRiddenHorse", "Game""GetRealHoursPassed", "Game""IncrementSkill", "Game""IncrementSkillBy", "Game""IncrementStat", "Game""IsActivateControlsEnabled", "Game""IsCamSwitchControlsEnabled", "Game""IsFastTravelEnabled", "Game""IsFightingControlsEnabled", "Game""IsJournalControlsEnabled", "Game""IsLookingControlsEnabled", "Game""IsMenuControlsEnabled", "Game""IsMovementControlsEnabled", "Game""IsSneakingControlsEnabled", "Game""IsWordUnlocked", "Game""PlayBink", "Game""PrecacheCharGen", "Game""PrecacheCharGenClear", "Game""QueryStat", "Game""QuitToMainMenu", "Game""RequestAutosave", "Game""RequestModel", "Game""RequestSave", "Game""SendWereWolfTransformation", "Game""ServeTime", "Game""SetBeastForm", "Game","SetCameraTarget", "Game","SetHudCartMode", "Game""SetInChargen", "Game""SetPlayerAIDriven", "Game""SetPlayerReportCrime", "Game""SetSittingRotation", "Game""ShakeCamera", "Game""ShakeController", "Game""ShowTitleSequenceMenu", "Game""HideTitleSequenceMenu", "Game""StartTitleSequence", "Game","ShowRaceMenu", "Game","ShowTrainingMenu", "Game""TeachWord", "Game""TriggerScreenBlood", "Game""UnlockWord", "Game""UsingGamepad", "Game""IsHostile", "Ingredient""LearnEffect", "Ingredient""LearnNextEffect", "Ingredient""LearnAllEffects", "Ingredient""AddForm", "FormList""RemoveAddedForm", "FormList""GetAt", "FormList""GetSize", "FormList""HasForm", "FormList""Revert", "FormList""abs", "Math""acos", "Math""asin", "Math""atan", "Math""Ceiling", "Math""cos", "Math""DegreesToRadians", "Math""Floor", "Math""pow", "Math""RadiansToDegrees", "Math""sin", "Math""sqrt", "Math""tan", "Math""Cast", "Scroll""Cast", "Spell""RemoteCast", "Spell""IsHostile", "Spell""Play", "EffectShader""Stop", "EffectShader""CanPayCrimeGold", "Faction""GetCrimeGold", "Faction""GetCrimeGoldNonViolent", "Faction""GetCrimeGoldViolent", "Faction""GetInfamy", "Faction""GetInfamyNonViolent", "Faction""GetInfamyViolent", "Faction""GetReaction", "Faction""GetStolenItemValueCrime", "Faction""GetStolenItemValueNoCrime", "Faction""IsFactionInCrimeGroup", "Faction""IsPlayerExpelled", "Faction""ModCrimeGold", "Faction""ModReaction", "Faction""PlayerPayCrimeGold", "Faction""SendAssaultAlarm", "Faction""SendPlayerToJail", "Faction""SetAlly", "Faction""SetCrimeGold", "Faction""SetCrimeGoldViolent", "Faction""SetEnemy", "Faction""SetPlayerEnemy", "Faction""SetPlayerExpelled", "Faction""SetReaction", "Faction""GetFormID", "Form""GetGoldValue", "Form""HasKeyword", "Form""PlayerKnows", "Form""RegisterForAnimationEvent", "Form""RegisterForLOS", "Form""RegisterForSingleLOSGain", "Form""RegisterForSingleLOSLost", "Form""RegisterForSingleUpdate", "Form""RegisterForSingleUpdateGameTime", "Form""RegisterForSleep", "Form""RegisterForTrackedStatsEvent", "Form""RegisterForUpdate", "Form""RegisterForUpdateGameTime", "Form""StartObjectProfiling", "Form","StopObjectProfiling", "Form""UnregisterForAnimationEvent", "Form""UnregisterForLOS", "Form""UnregisterForSleep", "Form""UnregisterForTrackedStatsEvent", "Form""UnregisterForUpdate", "Form""UnregisterForUpdateGameTime", "Form""GetValue", "GlobalVariable""SetValue", "GlobalVariable""Apply", "ImageSpaceModifier""ApplyCrossFade", "ImageSpaceModifier","PopTo", "ImageSpaceModifier""Remove", "ImageSpaceModifier""RemoveCrossFade", "ImageSpaceModifier""AddForm", "LeveledActor""Revert", "LeveledActor""AddForm", "LeveledItem""Revert", "LeveledItem""AddForm", "LeveledSpell""Revert", "LeveledSpell""GetClass", "ActorBase""GetDeadCount", "ActorBase""GetGiftFilter", "ActorBase""GetRace", "ActorBase""Getsix", "ActorBase""IsEssential", "ActorBase""IsInvulnerable", "ActorBase""IsProtected", "ActorBase""IsUnique", "ActorBase""SetEssential", "ActorBase""SetInvulnerable", "ActorBase""SetProtected", "ActorBase""SetOutfit", "ActorBase""GetActorOwner", "Cell""GetFactionOwner", "Cell""IsAttached", "Cell""IsInterior", "Cell""Reset", "Cell""SetActorOwner", "Cell""SetFactionOwner", "Cell""SetFogColor", "Cell""SetFogPlanes", "Cell""SetFogPower", "Cell""SetPublic", "Cell""Activate", "ObjectReference""AddInventoryEventFilter", "ObjectReference""TetherToHorse", "ObjectReference""AddDependentAnimatedObjectReference", "ObjectReference""AddItem", "ObjectReference""AddToMap", "ObjectReference""ApplyHavokImpulse", "ObjectReference""BlockActivation", "ObjectReference""CalculateEncounterLevel", "ObjectReference""CanFastTravelToMarker", "ObjectReference""ClearDestruction", "ObjectReference""CreateDetectionEvent", "ObjectReference""DamageObject", "ObjectReference""Delete", "ObjectReference""Disable", "ObjectReference""DisableNoWait", "ObjectReference""DropObject", "ObjectReference""Enable", "ObjectReference""EnableFastTravel", "ObjectReference""EnableNoWait", "ObjectReference""ForceAddRagdollToWorld", "ObjectReference""ForceRemoveRagdollFromWorld", "ObjectReference","GetActorOwner", "ObjectReference""GetAngleX", "ObjectReference""GetAngleY", "ObjectReference""GetAngleZ", "ObjectReference""GetAnimationVariableBool", "ObjectReference""GetAnimationVariableInt", "ObjectReference""GetAnimationVariableFloat", "ObjectReference""GetBaseObject", "ObjectReference""GetCurrentDestructionStage", "ObjectReference""GetCurrentLocation", "ObjectReference""GetCurrentScene", "ObjectReference""GetDistance", "ObjectReference""GetEditorLocation", "ObjectReference""GetFactionOwner", "ObjectReference""GetHeadingAngle", "ObjectReference""GetHeight", "ObjectReference""GetItemCount", "ObjectReference""GetItemHealthPercent", "ObjectReference""GetKey", "ObjectReference""GetLength", "ObjectReference""GetLinkedRef", "ObjectReference""GetLockLevel", "ObjectReference""GetMass", "ObjectReference""GetNthLinkedRef", "ObjectReference""GetOpenState", "ObjectReference""GetParentCell", "ObjectReference""GetPositionX", "ObjectReference""GetPositionY", "ObjectReference""GetPositionZ", "ObjectReference""GetScale", "ObjectReference""GetTriggerObjectCount", "ObjectReference""GetVoiceType", "ObjectReference""GetWidth", "ObjectReference""GetWorldSpace", "ObjectReference""HasEffectKeyword", "ObjectReference""HasNode", "ObjectReference""HasRefType", "ObjectReference""IgnoreFriendlyHits", "ObjectReference""InterruptCast", "ObjectReference""Is3DLoaded", "ObjectReference""IsActivateChild", "ObjectReference""IsActivationBlocked", "ObjectReference""IsDisabled", "ObjectReference""IsFurnitureInUse", "ObjectReference""IsFurnitureMarkerInUse", "ObjectReference""IsIgnoringFriendlyHits", "ObjectReference""IsInDialogueWithPlayer", "ObjectReference""IsLockBroken", "ObjectReference""IsLocked", "ObjectReference""IsMapMarkerVisible", "ObjectReference""KnockAreaEffect", "ObjectReference""Lock", "ObjectReference","MoveTo", "ObjectReference""MoveToInteractionLocation", "ObjectReference""MoveToMyEditorLocation", "ObjectReference""MoveToNode", "ObjectReference""PlaceAtMe", "ObjectReference""PlaceActorAtMe", "ObjectReference""PlayAnimation", "ObjectReference""PlayAnimationAndWait", "ObjectReference""PlayGamebryoAnimation", "ObjectReference"		// ooh! that sounds mysterious!"PlayImpactEffect", "ObjectReference""PlaySyncedAnimationSS", "ObjectReference""PlaySyncedAnimationAndWaitSS", "ObjectReference""PlayTerrainEffect", "ObjectReference""ProcessTrapHit", "ObjectReference""PushActorAway", "ObjectReference""RemoveAllInventoryEventFilters", "ObjectReference""RemoveAllItems", "ObjectReference""RemoveDependentAnimatedObjectReference", "ObjectReference""RemoveInventoryEventFilter", "ObjectReference""RemoveItem", "ObjectReference""Reset", "ObjectReference","Say", "ObjectReference""SendStealAlarm", "ObjectReference""SetActorCause", "ObjectReference""SetActorOwner", "ObjectReference","SetAngle", "ObjectReference""SetAnimationVariableBool", "ObjectReference""SetAnimationVariableInt", "ObjectReference""SetAnimationVariableFloat", "ObjectReference""SetDestroyed", "ObjectReference""SetScale", "ObjectReference""SetFactionOwner", "ObjectReference""SetLockLevel", "ObjectReference""SetMotionType", "ObjectReference""SetNoFavorAllowed", "ObjectReference""SetOpen", "ObjectReference""SetPosition", "ObjectReference""TranslateTo", "ObjectReference""SplineTranslateTo", "ObjectReference""SplineTranslateToRefNode", "ObjectReference""StopTranslation", "ObjectReference""WaitForAnimationEvent", "ObjectReference","Fire", "Weapon""GetOwningQuest", "Package""GetTemplate", "Package""CompleteAllObjectives", "Quest""CompleteQuest", "Quest","FailAllObjectives", "Quest""GetAlias", "Quest""GetCurrentStageID", "Quest""IsActive", "Quest""IsCompleted", "Quest""IsObjectiveCompleted", "Quest""IsObjectiveDisplayed", "Quest""IsObjectiveFailed", "Quest""IsRunning", "Quest""IsStageDone", "Quest","IsStarting", "Quest","IsStopping", "Quest","IsStopped", "Quest""Reset", "Quest""SetActive", "Quest","SetCurrentStageID", "Quest""SetObjectiveCompleted", "Quest""SetObjectiveDisplayed", "Quest""SetObjectiveFailed", "Quest""Start", "Quest""Stop", "Quest","UpdateCurrentInstanceGlobal", "Quest""Play", "Sound","PlayAndWait", "Sound""StopInstance", "Sound""SetInstanceVolume", "Sound""Add", "Topic""GetOwningQuest", "TopicInfo""ReleaseOverride", "Weather""GetCurrentWeather", "Weather""GetOutgoingWeather", "Weather""GetCurrentWeatherTransition", "Weather""GetSkyMode", "Weather""FindWeather", "Weather""ForceActive", "Weather","SetActive", "Weather""GetClassification", "Weather""GameTimeToString", "Utility""GetCurrentGameTime", "Utility","GetCurrentRealTime", "Utility""IsInMenuMode", "Utility","RandomInt", "Utility""RandomFloat", "Utility""SetINIBool", "Utility""SetINIFloat", "Utility","SetINIInt", "Utility""SetINIString", "Utility","Wait", "Utility""WaitGameTime", "Utility","WaitMenuMode", "Utility",
Some exciting stuff in there :D A shame the assembly's missing a chunk of SkyrimVM/BSScript* related RTTI data though (among others, that is).
User avatar
Lalla Vu
 
Posts: 3411
Joined: Wed Jul 19, 2006 9:40 am

Post » Wed May 16, 2012 2:35 pm

Looking forward to this!
User avatar
Lily
 
Posts: 3357
Joined: Mon Aug 28, 2006 10:32 am

Post » Wed May 16, 2012 4:21 pm

Script class hierarchy - there might be gameplay spoilers here:
Spoiler
ActiveMagicEffect	Alias	LocationAlias	ReferenceAlias				defaultGhostScriptRefAlias			dunReachwaterRockGhostScript		dunProgressiveCombatScriptRefAlias			dunFolgunthurBossBattle				dunReachwaterRockMikrulBossBattleCustomDA01BavynaScriptDA01MalynVarenScriptDebugForm	Action	Activator		Flora		Furniture		TalkingActivator	ActorBase	Ammo	Armor	AssociationType	Book	Cell	Class	Container	Door	EffectShader	Enchantment	EncounterZone	Explosion	Faction	FormArray	FormList	GlobalVariable	Hazard	Idle	ImageSpaceModifier	ImpactDataSet	Ingredient	Keyword		LocationRefType	LeveledActor	LeveledItem	LeveledSpell	Light	Location	MagicEffect	Message	MiscObject		Apparatus		ConstructibleObject		Key		SoulGem	MusicType	ObjectReference		ActivateAgainAfterDelay		ActivateLinkedChestDummyScript		Actor						defaultAddItemScript				defaultAddItemArmorScript				defaultAddItemKeyScript				defaultAddItemPotionScript				defaultAddItemWeaponScript			defaultFakeSummonSpell				defaultFakeRezSpell			defaultGhostScript				dunForelhostGhostAmbushScript				dunHalldirBossFormGhostScript			masterAmbushScript				dunHalldirGhostAmbushScript		BlackreachLockScript			AlftandBlackreachLockScript		CarryActorScript			CarryActorManualScript		Critter			critterBird			CritterDragonFly			CritterFish			CritterMoth			Firefly			TestMoth		critterPerch		CritterSpawn			critterSpawn01			critterSpawn02			critterSpawn03		defaultOnEnter			defaultSetStageOnEnter				MQ104GrabTrigger				MQ105GreybeardOutroScript				MQ206TimeWoundTriggerScript			MQ202ShavariTriggerScript		defaultSetStageTrigSCRIPT			dunStonehill_SetStageIfBridgeDown		MQShoutTrigger			MQ204ShoutTrigger			MQSovngardeShoutTrigger		ResourceObjectScript			ResourceObjectSawMillScript		TrapBase			DartTrap			GhostTrap			MagicTrap			MovingTrap				BatteringTrap				BladeTrap				SpearTrap				SwingingWallTrap				TrapDweFlamePillar				TrapDwePiston				TrapDweThresher				TrapNorPlatform				TrapSwingingWall			PhysicsTrap				MaceTrap			TrapDweBallista			TrapFlamethrower			TrapGenericEffectHazard			TrapRiggedRockfall		TrapBear		TrapBreakAwayBase		TraqexplosiveGas			TG02Beehive			TGTQ04BannerBurnScript			TrapOilPool		TrapFallingOilLamp		TrapFallingOilLampAnim		TrapFallingOilLampColLayer		TrapHitBase			BladeTrapHit			PhysicsTrapHit			TrapDweFlamePillarHit			TrapDweThresherHit		trapMagicLoot		TrapPoisonGas		trapRockfallEffects		trapSight		trapSoulGemController		TrapTriggerBASE			defaultActSelfOnEnterOnLeave			defaultBiPressurePlate			dunAlftandFlameDoorController			dunKarthspirePlatePuzzleSCRIPT			dunMarkarthWizardBiPressurePlate			dunSerpentsBluffPressurePlate			PressurePlate				dunMarkarthWizardPlateSystemPlate			PressureReleasePlate			SoundTrap			SpringTrap			TrapFirePlate			TrapLever			TrapRiggedBeam			TrapTriggerHinge			TrapTriggerTimeInterval			Tripwire		Trigger			MQ105SprintTriggerScript			MQ106InnRoomTriggerScript			MQ201ExitPartyTrigger			MQ201InPartyTrigger		TriggerBoxBase			defaultEnableTrigSCRIPT			dunFaldarsTrigSCRIPT		WordWallTriggerScript			DBSanctuaryWordWallTriggerScript	Outfit	Package			Perk		defaultAddSpell		doomTowerPerkSCRIPT		PRKF__01269A6E		PRKF_DA04BloodHarvestPerk_00079AF5		PRKF_DA11Cannibalism_000EE5C3		PRKF_doomTowerPerk_000E7326		PRKF_PlayerWerewolfFeed_0002BA1D		PRKF_PlayerWerewolfFirstTrans_000ECB53		PRKF_VampireFeedBedrolls_000EAFD4		PRKF_VampireFeedBeds01_000EB500		PRKF_VampireFeedBeds_000CF02C	Potion	Projectile	Quest				ArenaCombatQuest			ArenaTransitionCombatQuest		CompanionsRadiantQuest			CR01QuestScript			CR02QuestScript			CR03QuestScript			CR04QuestScript			CR05QuestScript			CR06QuestScript			CR07QuestScript			CR08QuestScript			CR09QuestScript			CR10QuestScript			CR11QuestScript			CR12QuestScript			CR13QuestScript			CR14QuestScript		CompanionsStoryQuest			C01QuestScript			C02QuestScript			C03QuestScript			C04QuestScript			C05QuestScript			C06QuestScript		CWMissionScript			CWAttackCityScript			CWEscapeCity			CWFortSiegeMissionScript			CWMission00Script			CWMission01Script			CWMission02Script			CWMission03Script			CWMission04Script			CWMission05Script			CWMission06Script			CWMission07Script			CWMission08			CWMission08Script			CWMission09Script			CWMission10Script			CWMission11Script			CWResolutionScript				CWResolution01Script				CWResolution02Script		CWSiegeScript			CWFortSiegeScript		FavorQuestScript			Favor001QuestScript			Favor004QuestScript			Favor005QuestScript			Favor006QuestScript			Favor007QuestScript			Favor009QuestScript			Favor010QuestScript			Favor011QuestScript			Favor012QuestScript			Favor013QuestScript			Favor014QuestScript			Favor016QuestScript			Favor018QuestScript			Favor019QuestScript			Favor020QuestScript		WIGamesScript			WIGamesHideAndSeekScript			WIGamesTagScript		WorldInteractionsScript			MQSovngardeConv2Script			WIAdditem01Script			WIAdditem02Script			WIAdditem03Script			WIAddItem04Script			WIAddItem05Script			WIAddItem07Script			WIAssault01Script			WIAssault02Script			WIAssaultRememberScript			WICastMagic01Script			WICastMagic02Script			WICastMagic03			WICastMagic04Script			WICastMagic05Script			WIChangeLocation01Script			WIChangeLocation02Script			WIChangeLocation03			WIChangeLocation03Script			WIChangeLocation04Script			WIChangeLocation05			WIChangeLocation08Script			WIChangeLocation09Script			WICraftItem01Script			WICraftItem02			WIDeadBody01			WIFlatter01Script			WIKill01Script			WIKill02Script			WIKill03Script			WIKill04Script			WIKill06Script			WIRemoveItem01Script			WIRemoveItem02Script			WIRemoveItem03Script			WIRemoveItem04Script			WIRemoveItem05Script			WISabotage			WIThief01Script	Race	Scene			Scroll	ShaderParticleGeometry	Shout	Sound	SoundCategory	Spell	Static	Topic	TopicInfo			VisualEffect	VoiceType	Weapon	Weather	WordOfPower	WorldSpaceGameMathMS04EVPScriptscreenshotStatsPlayerPositionUtility

I've cut out most of the boring repetitions. If not, this would be 10K lines long.
User avatar
Trey Johnson
 
Posts: 3295
Joined: Thu Oct 11, 2007 7:00 pm

Post » Wed May 16, 2012 3:13 pm

I know the Name was already decided, but I liked SKYSE and SKYGE(for the Graphics Extender)

well I can't wait for mods to roll out. you guys are just an inspiration.
User avatar
Maddy Paul
 
Posts: 3430
Joined: Wed Feb 14, 2007 4:20 pm

Post » Wed May 16, 2012 8:14 am

No Form->Attribute or Form->Skill classes for flexible attribute and skill extensions? That's a disappointing omission.
User avatar
brandon frier
 
Posts: 3422
Joined: Wed Oct 17, 2007 8:47 pm

Post » Wed May 16, 2012 12:21 pm

Hello,

Really happy to see that SKSE is coming sooner or later ! Many thanks to all devs.

Just hope to see again some functions like "GetSoundPlaying" exactly as it was working in Obli (able to test the distance of the object emitting the sound from the calling reference, and to test if the editor's name of the sound contains a defined string).

Thank you very much.
Keep up the amazing work guys !
User avatar
Yvonne Gruening
 
Posts: 3503
Joined: Mon Apr 23, 2007 7:31 pm

Post » Wed May 16, 2012 2:23 am

*subscribes to thread* Thank you guys for jumping in with this. <3
User avatar
Kayla Oatney
 
Posts: 3472
Joined: Sat Jan 20, 2007 9:02 pm

Post » Wed May 16, 2012 10:59 am

Does anyone have any idea how many of the things you guys built into OBSE made it into Skyrim? I am sure they had to have seen this awesome piece of work and added in some of the base functionality to Skyrim, or at least should have...obviously it probably will be hard to know without the CK being out, but just was wondering if anyone had a rough guesstimate...
User avatar
Nicole Kraus
 
Posts: 3432
Joined: Sat Apr 14, 2007 11:34 pm

Post » Wed May 16, 2012 9:53 am

That's great that you guys are back. I wonder if another heavyweight modder is coming back for Skyrim: Timeslip.
User avatar
Sunny Under
 
Posts: 3368
Joined: Wed Apr 11, 2007 5:31 pm

Post » Wed May 16, 2012 3:48 pm

Thanks :D
...run off to peek inside the pex files.... :bolt:
Off topic, but I love your avatar. Ingenious. :P
User avatar
Richard Dixon
 
Posts: 3461
Joined: Thu Jun 07, 2007 1:29 pm

Post » Wed May 16, 2012 1:19 am

(or just do a blind implementation, but I hate doing that).
SKMViper(dev that wrote the new scripting language) has agreed to come here(to forum not this thread in particular) and answer questions once the CK is released. Perhaps figuring out what everything does won't take as long this time.
User avatar
x_JeNnY_x
 
Posts: 3493
Joined: Wed Jul 05, 2006 3:52 pm

Post » Wed May 16, 2012 5:00 am

Does anyone have any idea how many of the things you guys built into OBSE made it into Skyrim? I am sure they had to have seen this awesome piece of work and added in some of the base functionality to Skyrim, or at least should have...obviously it probably will be hard to know without the CK being out, but just was wondering if anyone had a rough guesstimate...
A lot of the "basic language improvements" that were written are in by default — support for strings and arrays, mostly. I don't know that we have more detail than that.
User avatar
FoReVeR_Me_N
 
Posts: 3556
Joined: Wed Sep 05, 2007 8:25 pm

Post » Wed May 16, 2012 3:59 am

hurray for SKSE! :biggrin:
User avatar
Laurenn Doylee
 
Posts: 3427
Joined: Sun Dec 03, 2006 11:48 am

Post » Wed May 16, 2012 12:15 pm

SKMViper(dev that wrote the new scripting language) has agreed to come here(to forum not this thread in particular) and answer questions once the CK is released. Perhaps figuring out what everything does won't take as long this time.

I'm here and lurking around for now - can't really say anything until the CK comes out. Should be more active after then :)

Though I doubt I'll be able to answer any questions about the internal structure of the game code, as that kind of stuff is pretty firmly under "trade secret" and "not to ever be disclosed except on pain of the forum gelatinous cube".
User avatar
Ownie Zuliana
 
Posts: 3375
Joined: Thu Jun 15, 2006 4:31 am

Post » Wed May 16, 2012 10:13 am

Hey guys,
I know that the CK is not even out yet and all, but I was wondering if I could make two (hopefully minor) requests-- would it be possible to look into getting control over the Eye Colour and Eye Makeup effects in-game? I know we had Get/SetEyes in Oblivion, so I am hoping (but actually having no idea how complex that was to implament) that we could get the same since the make-up is now 'put-on' by the look of it.

Thanks for reading my request :)
User avatar
Chris Johnston
 
Posts: 3392
Joined: Fri Jul 07, 2006 12:40 pm

Post » Wed May 16, 2012 3:38 am

I'm here and lurking around for now - can't really say anything until the CK comes out. Should be more active after then :)

Though I doubt I'll be able to answer any questions about the internal structure of the game code, as that kind of stuff is pretty firmly under "trade secret" and "not to ever be disclosed except on pain of the forum gelatinous cube".

Well we don't want to incur the wrath of the forum gelatinous cube. :chaos::) Usually we don't have much trouble figuring out the internal structure of the game code. Figuring out the syntax of the language and hints on behavior are usually all we need. Giving us all the answers would be unsporting in any case.
User avatar
Darian Ennels
 
Posts: 3406
Joined: Mon Aug 20, 2007 2:00 pm

Post » Wed May 16, 2012 11:12 am

Wow it's all really impressive. I don't have a clue what half of those functions do but I already know I'll have so much fun playing around with them! ^^
But there's one thing especially that piqued my curiosity: "SetPlayerAIDriven"
Any idea what it's supposed to do? I personally hope it's the obvious and turns the PC into an AI controlled NPC. I can picture the usefulness of such a function in constructing cutscenes or making an "equal opportunity" version of Command Humanoid that works on the player character (oh I'd so love it).
User avatar
John N
 
Posts: 3458
Joined: Sun Aug 26, 2007 5:11 pm

Post » Wed May 16, 2012 4:23 am

"SetPlayerAIDriven" sounds like what they used in the opening sequence when you're about to be executed. More than disabling player controls, it actually allows the AI system to control you.

My guess anyway... :happy:
User avatar
Courtney Foren
 
Posts: 3418
Joined: Sun Mar 11, 2007 6:49 am

Post » Wed May 16, 2012 2:10 pm


  • core variable types are float, int, string, and bool
  • arrays of the above are supported natively
  • scripts are interpreted as a list of simpler yet much more powerful set of opcodes
  • if the conditional branch opcodes support negative offsets then loops are trivial to implement (and probably have been)
  • the new system is object-oriented - all scripts are class instances (UnrealScript influence here)
  • compiled scripts are stored as separate files, unpack Misc.bsa and look in the scripts folder
  • classes support inheritance, and there appear to be vm-world classes matching the internal form types
So overall this is looking very, very good. I need to write something to disassemble the compiled scripts and take a look at the VM runtime, will know more then.


Since they are using HTML for the UI (from what I read in DarN posts), maybe they are using a javascript VM for Skyrim, has everything you mention. Also it would be logical and simpler.

"SetPlayerAIDriven" sounds like what they used in the opening sequence when you're about to be executed. More than disabling player controls, it actually allows the AI system to control you.

All I'm seeing with that function is having enemies casting "Fear" on you.
User avatar
daniel royle
 
Posts: 3439
Joined: Thu May 17, 2007 8:44 am

PreviousNext

Return to V - Skyrim