Jump to content

Proof that a player can fly in Skyrim well may be more like swimming


hex_ratt

Recommended Posts

You can actually play the events on the graph without CTD by using a var bool, the best thing I got is the dragon taking off and flying away, problem is it doesnt let you translate it when its in the bAnimationDriven state, which is the only way to get the flying animations working without CTD. I got kind of stuck there, but I see you are taking the same approach, maybe you can think of a better way. In order to play flyStartCruise or takeOff without CTD you need to SetAnimationVariableBool("bAnimationDriven",true), you can actually control the pitch while its flying but the yaw seems locked and there is no propper way to stop the dragon lol
Link to comment
Share on other sites

  • Replies 304
  • Created
  • Last Reply

Top Posters In This Topic

Awesome, that works. You get all kinds of funny bugs like flying backwards. The game will crash if one tried to call SetAnimationVariableBool("bAnimationDriven",false) when it's in the air (there goes the easy solution).

One should be able to make the dragon turn by calling turning animations or using SetAnimationVariable with some of the following variables:

Pitch

TurnDelta

Direction

IsTurningLeft*

IsTurningRight*

 

*probably read only.

 

Have you tried out this?

Link to comment
Share on other sites

Yes unfortunetly I did, even some that you havent listed there like MoveDirZ ( this one did sound promising ) but nothing really works, its funny since the translate function should actually work, if you take a look at how dragons works, they basically move using that, thats why sometimes they clip through things (better than the alternative, which would be to bounce around like a rubber ball lol). Also I have no idea on why the pitch works but the yaw stays locked, seems like an intended bug from bethesda. As I am sure you know this, before 1.6 you weren't able to get the pitch or X-Plane while ridding a horse, so wouldnt be so strange they hardcoded something into the behavior to prevent people from actually making a rideable dragon, maybe im just being a bit paranoid here but I found a lot of strange limitations surrounding this project.
Link to comment
Share on other sites

  • 3 weeks later...

I'm not surprised you found lots of "limitation", it's well known that within Bethesda's wall the dragon mount exist...

Your probably right when you say that they intentinally made it complicated... Why ? A DLC, what else !!!

 

Even knowning this, i encourage you to keep going on this project, that would only prove them that they need to stop keeping content already created for them to release it later...(specially when you saw what they created in ONE week)... and never put it in game ! (Including the Dragon Mount)...

 

Best of luck !

Reaper

Link to comment
Share on other sites

I've been experimenting with the TranslateTo and SplineTranslateTo commands for a mod I'm working on. I've encountered a weird bug. The first time I do a SplineTranslateTo on an object, it moves in the direction that I was anticipating. However, the *second* time I call SplineTranslateTo on the same object, it moved in the *opposite* direction that it is supposed to! On any further calls, the object moves in the correct direction. My workaround was to reverse the travel direction on my second SplineTranslateTo call :whistling: Weird, but it worked! I'm wondering if this bug is related to the backwards flying dragon problem....

 

Edit: nevermind, I was accidentally passing a negative value :facepalm:

Edited by steve40
Link to comment
Share on other sites

  • 1 month later...

Guys take a look at my new project and tell me why i always get out of sync like in this video at the annotation:

 

My Code:

 

Scriptname VLAscendEffScript extends activemagiceffect  

ObjectReference Property VLPlatform Auto

Import Utility
Import Game

Spell Property VLDescendSpell Auto

MiscObject Property DummyItem Auto

Event OnEffectStart(Actor akTarget, Actor akCaster)

if akCaster.GetEquippedSpell(2) != VLDescendSpell
		akCaster.EquipSpell(VLDescendSpell,2)
else
		VLPlatform.Enable()
	;takeoff while you have the magic effect which is from type Concentration
	While(akCaster.HasMagicEffect(VLAscend))
		VLPlatform.MoveTo(akCaster,0,0,500,True)
		Utility.Wait(0.1)
		akCaster.TranslateToRef(VLPlatform,500.0,500.0)
	EndWhile
		DisablePlayerControls(0,0,0,0,1,1,0,0,0)
		akCaster.StopTranslation()
		SetINIFloat("fInAirFallingCharGravityMult:Havok",-5.00000000)
		
	While(VLPlatform.IsDisabled() == False)
		akCaster.RestoreActorValue("Stamina",5000)
		
		;make the lord a bit faster
		if akcaster.GetAV("Speedmult")  < 200.00
			akCaster.SetAV("SpeedMult",200)
		EndIf
		
		;This is used to setav speedmult in real time, so you do not need to sneak to update the speed
		if akCaster.GetItemCount(DummyItem) < 1
			akCaster.AddItem(DummyItem,1,true)
			Wait(0.1)
		EndIf
	EndWhile
		akCaster.RemoveItem(DummyItem,akCaster.GetItemCount(DummyItem),true)


EndIf

EndEvent

MagicEffect Property VLAscend  Auto  

 

 

This is for Ascending my Character, currently for a Vampire Lord flying Project.

 

 

Scriptname VLDescendEffScript extends activemagiceffect  

VLDescendProperty Property VLDescendStoreProperty Auto
ObjectReference Property VLPlatform Auto
Activator Property DLC1VampLordBatsFXActivator Auto

EffectShader Property BatsReform_01 Auto
EffectShader Property BatsReform_02 Auto

Spell Property DLC1nVampireBatsSpell Auto

MiscObject Property DummyItem Auto

Import Utility
Import Game

Event OnEffectStart(Actor akTarget,Actor akCaster)

		; While(VLDescendStoreProperty.akDescender.Is3DLoaded() == False)   <----- this was used for a teleport mod, the while is there to wait until the teleport to dummy is loaded.

		; EndWhile
			
			; VLDescendStoreProperty.akDescender.Disable()
			; VLDescendStoreProperty.akDescender.Delete()
			; akCaster.SetPosition(VLDescendStoreProperty.fx,VLDescendStoreProperty.fy,VLDescendStoreProperty.fz)
			; VLDescendStoreProperty.akDescender = None
			VLPlatform.Disable()
			Utility.Wait(1)
			SetINIFloat("fInAirFallingCharGravityMult:Havok",5000)
			EnablePlayerControls(0,0,0,0,1,1,0,0,0)
			Wait(1)
			SetINIFloat("fInAirFallingCharGravityMult:Havok",1.35)
			akCaster.SetAV("SpeedMult",100)
			akCaster.AddItem(DummyItem,1,true)
			Wait(0.1)
			akCaster.RemoveItem(DummyItem,akCaster.GetItemCount(DummyItem),true)
EndEvent

 

 

for Descending, what im doing is setting the gravity to an monstrous high amount to just pop to the ground, but as you can see in this video it gets out of sync and i do not know why :-/

 

Edited by Keldis
Link to comment
Share on other sites

Guys take a look at my new project and tell me why i always get out of sync like in this video at the annotation

 

I'll take a stab at it. Not sure if this will work or not.

 

 

Scriptname VLAscendEffScript extends activemagiceffect  

ObjectReference Property VLPlatform Auto
Spell Property VLDescendSpell Auto
MiscObject Property DummyItem Auto
MagicEffect Property VLAscend  Auto 

Event OnEffectStart(Actor akTarget, Actor akCaster)
Utility.SetINIFloat("fInAirFallingCharGravityMult:Havok",1.35)

if akCaster.GetEquippedSpell(2) != VLDescendSpell
	akCaster.EquipSpell(VLDescendSpell,2)
EndIf ; ** I'm not sure why you had an "else" here. You might have to put it back if my edit doesn't work.

VLPlatform.EnableNoWait()
;takeoff while you have the magic effect which is from type Concentration

While akCaster.HasMagicEffect(VLAscend)
	VLPlatform.MoveTo(akCaster,0,0,500,True)
	akCaster.TranslateToRef(VLPlatform,500.0,500.0)
EndWhile

Game.DisablePlayerControls(0,0,0,0,1,1,0,0,0)
akCaster.StopTranslation()
Utility.SetINIFloat("fInAirFallingCharGravityMult:Havok",-5.00000000)

While VLPlatform.IsEnabled()
	akCaster.RestoreActorValue("Stamina",5000)
	;make the lord a bit faster
	if akcaster.GetAV("Speedmult") < 200
		akCaster.SetAV("SpeedMult",200)
	EndIf
	;This is used to setav speedmult in real time, so you do not need to sneak to update the speed
	if akCaster.GetItemCount(DummyItem) < 1
		akCaster.AddItem(DummyItem,1,true)
	EndIf
EndWhile

akCaster.RemoveItem(DummyItem,akCaster.GetItemCount(DummyItem),true)
EndEvent

 

 

 

Scriptname VLDescendEffScript extends activemagiceffect  

ObjectReference Property VLPlatform Auto
MiscObject Property DummyItem Auto

Event OnEffectStart(Actor akTarget,Actor akCaster)
VLPlatform.DisableNoWait()
Utility.SetINIFloat("fInAirFallingCharGravityMult:Havok",5000)
Game.EnablePlayerControls(0,0,0,0,1,1,0,0,0)
akCaster.SetAV("SpeedMult",100)
akCaster.AddItem(DummyItem,1,true)
akCaster.RemoveItem(DummyItem,akCaster.GetItemCount(DummyItem),true)
;	Utility.SetINIFloat("fInAirFallingCharGravityMult:Havok",1.35) ; moved to the beginning of the ascend script
EndEvent

 

Edited by steve40
Link to comment
Share on other sites

  • 4 months later...
  • 1 year later...
  • 3 weeks later...
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...