PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : D3 - Steuerung mal anders - Wiimote (Wiimotion-Plus)


Gouvernator
2012-06-22, 12:59:39
Ich hab grade Wiimote+Nunchuck für Diablo umfunktioniert. Bis jetzt bestes PC Game das man mit Wiimote zocken kann. Es ist wie geschaffen zueinander. ;D

GlovePIE und diverse zusammen kopierte Scripts machen es möglich.

Seitens Blizzard könnte man Diablo locker Gamepad tauglich machen. Was sie aktuell aber gar nicht wollen.

Blizzard hat Experimente mit einer Gamepad-Steuerung durchgeführt. In einem Interview verrät Game Director Jay Wilson, dass man mit verschiedenen Kontroll-Schemata experimentiert habe. "Einer der Gründe warum wir über eine Konsolen-Version von Diablo 3 nachdenken, ist das Kontrollschema einer Konsole. Als wir Experimente mit einem Xbox 360-ähnlichen Analog-Controller durchgeführt haben, habe ich gemerkt, dass sich direkte Kontrolle für Diablo 3 sogar noch besser anfühlen kann."

Dennoch wird Diablo 3 zumindest vorerst lediglich die klassische PC-Steuerung bieten. "Ich kann garantieren, dass wir Gamepads auf dem PC unterstützen, falls wir eine Konsolen-Version erstellen sollten. Aber ich glaube nicht, dass wir schon beim Release so weit sein werden"

Ich habe zwar D3Gamepad aus dem Blizzard-Forum geladen und mit Xbox360 Controller ausprobiert aber die Wiimote toppt es noch mal. Es ist einfach mit perfekt zu beschreiben. Aktuell spiele ich den Zauber deswegen gilt es auch nur für seine Moves. :biggrin:

Aber generell kann man die Knöpfe für jede Skill-Richtung belegen. Blizzard mag zwar keine Makros aber da sie D3Gamepad tolerieren sehe ich es nicht als Cheat... Der Vorteil der Wiimote gegenüber dem Xbox-Controller liegt in der Geschwindigkeit des Cursors. Mit Wiimotion Plus ist der fast so genau wie eine Maus, es gibt nur bisschen mehr Lag. Man läuft quer durch die Karte quasi aus dem Handgelenk. Es ist viel einfacher in dieser Perspektive mit dem Handgelenk zu orientieren statt mit der Maus. Diverse Strahlen-Zauber machen so um einiges mehr Spaß. Und der Nunchuck in anderer Hand ist mit 6 Knöpfchen für zwei Finger viel zugänglicher als Tastatur-Tasten oder seitliche Maustasten. Man haut Kombos viel schneller raus weil es ist wirklich nur die eine Bewegung auf dem Stick um 1 2 3 4 zu erreichen. Dann kommt ein simpler Script zum Einsatz wo beim stehen bleiben die Standard Attack automatisch ausgeführt wird. Solange also die Linke Maustaste automatisch angreift muss man nur auf die andere Angriffe konzentrieren. Ich freue mich diesbezüglich schon auf Teleport Skill... ;D

So macht Diablo3 richtig Fun! Habe die ersten 10 Level mit Wiimote gespielt, dann die nächsten 7 Level mit Maus und ab dann bis jetzt mit Stufe 22 wieder mit Wiimote. Es ist nicht mehr ödes herum klicken sondern spaßiges rennen und hauen. Meine Motivation Diablo zu spielen wird ziemlich gesteigert wenn dieses dröges Mausgefühl weg ist.


Hier ist ein Video (http://youtu.be/UAGAm8_e0BE) von jemand anderem. Dieser Code ist komplett auf Wiimotion Plus optimiert so das man keine Sensor Bar braucht und der Cursor ist völlig frei von der Richtung in welche man ihn halten muss. Es ist quasi die behindertengerechte Version, die mir auch so gut gefällt... Man liegt praktisch im Bett und kann die Hand irgendwo baumeln lassen. Und alles ist auf Knöpfe gelegt man muss also nicht mit Wiimote oder Nunchuck in der Luft fuchteln. Ich optimiere zur Zeit noch den Script für Knöpfe das man quasi D3 nur mit einem Knopf spielen kann.^^ Ich mag es zum Beispiel durch die Map einfach zu laufen ohne was gedrückt zu halten , nur mit dem Handgelenk die Richtung vorzugeben. Überall solche Trigger einzubauen das man jeweils durch ganz wenige Klicks Monster klopft und Loot einsammelt.


Erst in Spiel "b" Taste für Bewegen festlegen.

/*
WiiMotion Plus Mouse v 2010.01.08
by lednerg

Emulates the basic functionality of a Gyration Air Mouse.
Requires GlovePIE version .40 or higher.

Leave the Wiimote on your desk when starting so it can calibrate.
Minus re-calibrates, just in case you need it.

Nunchuck is for Skills 1-2-3-4; show Items on the floor; and Mouse Right Button (Z-Button).

You ran automatically in any direction from Wiimotion Plus. Select in Diablo "B" Button to run. You will stop if Wiimote B or Z-Button was once pressed. Hold Wiimote A to stand attack with Left Mouse.

Wiimote Minus is calibrating Button. Be careful its very sensitive. Wiimote Plus is for deactivated cursor.

*/



var.Speed = 86 // 0 to 100

PIE.FrameRate = 120hz
if wiimote.HasMotionPlus = false then debug = "WiiMotion Plus NOT DETECTED!"
if var.init = false and wiimote.HasMotionPlus = true {
debug = "Please place the Wiimote down. CALIBRATING -

" + int(EnsureMapRange(RemoveUnits(abs(Delta(Smooth(wiimote.MotionPlus.YawSpeed, 60)))), 1, .005, 0, 100)) + "%"
if abs(Delta(Smooth(wiimote.MotionPlus.YawSpeed, 60))) < .005 then var.CalibYaw = smooth(wiimote.MotionPlus.YawSpeed, 60)
if abs(Delta(Smooth(wiimote.MotionPlus.PitchSpeed, 60))) < .005 then var.CalibPitch = smooth(wiimote.MotionPlus.PitchSpeed, 60)
if abs(var.CalibYaw) > 0 and abs(var.CalibPitch) > 0 then var.init = true
}
if var.init = true and var.MoveButton = false {
var.YawSpeed = wiimote.MotionPlus.YawSpeed - var.CalibYaw
Deadzone =wiimote.MotionPlus.YawSpeed = 1
Deadzone =wiimote.MotionPlus.PitchSpeed = 3.3

var.PitchSpeed = wiimote.MotionPlus.PitchSpeed - var.CalibPitch
if SameValue( Smooth(wiimote.SmoothRoll, 10), wiimote.SmoothRoll, 10) then var.Roll = Smooth(wiimote.SmoothRoll, 10) else var.Roll = wiimote.SmoothRoll
if var.Roll < 0 and var.Roll >= -90 {
var.XYswap = 1 - EnsureMapRange(var.Roll, -90, 0, 0, 1)
var.RightDown = -1
var.TopUp = 1
}
if var.Roll <= 90 and var.Roll >= 0 {
var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 0, 0, 1)
var.RightDown = 1
var.TopUp = 1
}
if var.Roll > 90 and var.Roll <= 180 {
var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 180, 0, 1)
var.RightDown = 1
var.TopUp = -1
}
if var.Roll < -90 and var.Roll >= -180 {
var.XYswap = 1 - EnsureMapRange(var.Roll, -90, -180, 0, 1)
var.RightDown = -1
var.TopUp = -1
}





var.SpeedX = var.TopUp * var.YawSpeed - ( var.TopUp * var.YawSpeed * var.XYswap ) + ( var.RightDown * var.PitchSpeed * var.XYswap )
var.SpeedY = var.TopUp * var.PitchSpeed - ( var.TopUp * var.PitchSpeed * var.XYswap) + ( -var.RightDown * var.YawSpeed * var.XYswap )

mouse.DirectInputX = int(var.MouseX)
mouse.DirectInputY = int(var.MouseY)
var.MouseX = var.MouseX +( var.SpeedX / (10000000 - EnsureMapRange(var.Speed, 0, 100, 0, 10000000) ) )
var.MouseY = var.MouseY - ( var.SpeedY / (10000000 - EnsureMapRange(var.Speed, 0, 100, 0, 10000000) ) )
/* // for mouse.x and mouse.y instead
mouse.x = var.MouseX
mouse.y = var.MouseY
var.MouseX = var.MouseX + ( var.SpeedX / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )
var.MouseY = var.MouseY - ( var.SpeedY / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )
*/
}
if var.MoveButton = true {
var.MouseX = mouse.DirectInputX
var.MouseY = mouse.DirectInputY
/* // for mouse.x and mouse.y instead
var.MouseX = mouse.x
var.MouseY = mouse.y
*/
}
if var.init = true and var.CalibrateButton = false {
debug = "CALIBRATED"
}
if var.init != false and var.CalibrateButton = true {
var.init = "waiting"
debug = "Please place the Wiimote down."
var.CalibYawdeadzone = 1500
var.CalibPitchdeadzone = 1500
var.CalibYaw = 0
var.CalibPitch = 0

var.YawSpeedDeadzone = 8
var.PitchSpeedDeadzone = 8
wait 3 seconds
var.init = false
}





var.Mouse_Speed_X = int(abs(delta(var.Mouse_X))*1000)
var.Mouse_Speed_Y = int(abs(delta(var.Mouse_Y))*1000)
var.Mouse_Speed_XY = int(sqrt(var.Mouse_Speed_X + var.Mouse_Speed_Y) * var.Mouse_Precision)
IF var.Mouse_Speed_XY >= 30 THEN var.Mouse_SmoothHold = 0 ELSE var.Mouse_SmoothHold = 30 - var.Mouse_Speed_XY
var.Mouse_SmoothLimit = 30 - EnsureRange(var.Mouse_Precision*2, 0, 30)
IF var.Mouse_SmoothHold < var.Mouse_Smooth THEN var.Mouse_Smooth = var.Mouse_Smooth - (1 + int(EnsureMapRange(var.Mouse_SmoothHold, 0, 30, 30, 0)))
IF var.Mouse_SmoothHold > var.Mouse_Smooth OR (var.Mouse_SmoothHold = 30 AND var.Mouse_Smooth <= 29) {
wait EnsureMapRange(var.Mouse_Smooth, 0, 29, 0, 100)ms
IF var.Mouse_Smooth < var.Mouse_SmoothLimit THEN var.Mouse_Smooth++
}
IF var.Mouse_Smooth <= 0 THEN var.Mouse_Smooth = 0
IF var.Mouse_Smooth <= 0 THEN var.CursorX = var.Mouse_X
IF var.Mouse_Smooth <= 0 THEN var.CursorY = var.Mouse_Y
IF var.Mouse_Smooth = 1 THEN var.CursorX = Smooth(var.Mouse_X, 1)
IF var.Mouse_Smooth = 1 THEN var.CursorY = Smooth(var.Mouse_Y, 1)
IF var.Mouse_Smooth = 2 THEN var.CursorX = Smooth(var.Mouse_X, 2)
IF var.Mouse_Smooth = 2 THEN var.CursorY = Smooth(var.Mouse_Y, 2)
IF var.Mouse_Smooth = 3 THEN var.CursorX = Smooth(var.Mouse_X, 3)
IF var.Mouse_Smooth = 3 THEN var.CursorY = Smooth(var.Mouse_Y, 3)
IF var.Mouse_Smooth = 4 THEN var.CursorX = Smooth(var.Mouse_X, 4)
IF var.Mouse_Smooth = 4 THEN var.CursorY = Smooth(var.Mouse_Y, 4)
IF var.Mouse_Smooth = 5 THEN var.CursorX = Smooth(var.Mouse_X, 5)
IF var.Mouse_Smooth = 5 THEN var.CursorY = Smooth(var.Mouse_Y, 5)
IF var.Mouse_Smooth = 6 THEN var.CursorX = Smooth(var.Mouse_X, 6)
IF var.Mouse_Smooth = 6 THEN var.CursorY = Smooth(var.Mouse_Y, 6)
IF var.Mouse_Smooth = 7 THEN var.CursorX = Smooth(var.Mouse_X, 7)
IF var.Mouse_Smooth = 7 THEN var.CursorY = Smooth(var.Mouse_Y, 7)
IF var.Mouse_Smooth = 8 THEN var.CursorX = Smooth(var.Mouse_X, 8)
IF var.Mouse_Smooth = 8 THEN var.CursorY = Smooth(var.Mouse_Y, 8)
IF var.Mouse_Smooth = 9 THEN var.CursorX = Smooth(var.Mouse_X, 9)
IF var.Mouse_Smooth = 9 THEN var.CursorY = Smooth(var.Mouse_Y, 9)
IF var.Mouse_Smooth = 10 THEN var.CursorX = Smooth(var.Mouse_X, 10)
IF var.Mouse_Smooth = 10 THEN var.CursorY = Smooth(var.Mouse_Y, 10)
IF var.Mouse_Smooth = 11 THEN var.CursorX = Smooth(var.Mouse_X, 11)
IF var.Mouse_Smooth = 11 THEN var.CursorY = Smooth(var.Mouse_Y, 11)
IF var.Mouse_Smooth = 12 THEN var.CursorX = Smooth(var.Mouse_X, 12)
IF var.Mouse_Smooth = 12 THEN var.CursorY = Smooth(var.Mouse_Y, 12)
IF var.Mouse_Smooth = 13 THEN var.CursorX = Smooth(var.Mouse_X, 13)
IF var.Mouse_Smooth = 13 THEN var.CursorY = Smooth(var.Mouse_Y, 13)
IF var.Mouse_Smooth = 14 THEN var.CursorX = Smooth(var.Mouse_X, 14)
IF var.Mouse_Smooth = 14 THEN var.CursorY = Smooth(var.Mouse_Y, 14)
IF var.Mouse_Smooth = 15 THEN var.CursorX = Smooth(var.Mouse_X, 15)
IF var.Mouse_Smooth = 15 THEN var.CursorY = Smooth(var.Mouse_Y, 15)
IF var.Mouse_Smooth = 16 THEN var.CursorX = Smooth(var.Mouse_X, 16)
IF var.Mouse_Smooth = 16 THEN var.CursorY = Smooth(var.Mouse_Y, 16)
IF var.Mouse_Smooth = 17 THEN var.CursorX = Smooth(var.Mouse_X, 17)
IF var.Mouse_Smooth = 17 THEN var.CursorY = Smooth(var.Mouse_Y, 17)
IF var.Mouse_Smooth = 18 THEN var.CursorX = Smooth(var.Mouse_X, 18)
IF var.Mouse_Smooth = 18 THEN var.CursorY = Smooth(var.Mouse_Y, 18)
IF var.Mouse_Smooth = 19 THEN var.CursorX = Smooth(var.Mouse_X, 19)
IF var.Mouse_Smooth = 19 THEN var.CursorY = Smooth(var.Mouse_Y, 19)
IF var.Mouse_Smooth = 20 THEN var.CursorX = Smooth(var.Mouse_X, 20)
IF var.Mouse_Smooth = 20 THEN var.CursorY = Smooth(var.Mouse_Y, 20)
IF var.Mouse_Smooth = 21 THEN var.CursorX = Smooth(var.Mouse_X, 21)
IF var.Mouse_Smooth = 21 THEN var.CursorY = Smooth(var.Mouse_Y, 21)
IF var.Mouse_Smooth = 22 THEN var.CursorX = Smooth(var.Mouse_X, 22)
IF var.Mouse_Smooth = 22 THEN var.CursorY = Smooth(var.Mouse_Y, 22)
IF var.Mouse_Smooth = 23 THEN var.CursorX = Smooth(var.Mouse_X, 23)
IF var.Mouse_Smooth = 23 THEN var.CursorY = Smooth(var.Mouse_Y, 23)
IF var.Mouse_Smooth = 24 THEN var.CursorX = Smooth(var.Mouse_X, 24)
IF var.Mouse_Smooth = 24 THEN var.CursorY = Smooth(var.Mouse_Y, 24)
IF var.Mouse_Smooth = 25 THEN var.CursorX = Smooth(var.Mouse_X, 25)
IF var.Mouse_Smooth = 25 THEN var.CursorY = Smooth(var.Mouse_Y, 25)
IF var.Mouse_Smooth = 26 THEN var.CursorX = Smooth(var.Mouse_X, 26)
IF var.Mouse_Smooth = 26 THEN var.CursorY = Smooth(var.Mouse_Y, 26)
IF var.Mouse_Smooth = 27 THEN var.CursorX = Smooth(var.Mouse_X, 27)
IF var.Mouse_Smooth = 27 THEN var.CursorY = Smooth(var.Mouse_Y, 27)
IF var.Mouse_Smooth = 28 THEN var.CursorX = Smooth(var.Mouse_X, 28)
IF var.Mouse_Smooth = 28 THEN var.CursorY = Smooth(var.Mouse_Y, 28)
IF var.Mouse_Smooth = 29 THEN var.CursorX = Smooth(var.Mouse_X, 29)
IF var.Mouse_Smooth = 29 THEN var.CursorY = Smooth(var.Mouse_Y, 29)
IF var.Mouse_Smooth >= 30 THEN var.CursorX = Smooth(var.Mouse_X, 30)
IF var.Mouse_Smooth >= 30 THEN var.CursorY = Smooth(var.Mouse_Y, 30)

// Belegung
var.MoveButton = Wiimote.Plus // cursor deaktivieren
var.CalibrateButton = wiimote.Minus // Kalibrierung



// Maus rechte und linke Taste
Mouse.LeftButton = wiimote.A
mouse.RightButton = Nunchuk.ZButton
Mouse.LeftButton = wiimote.B

Key.I = Wiimote1.Down // Inventar
Key.S = Wiimote.Up // Skill menu
Key.Tab = Wiimote.Left // Map
Key.F = Wiimote.Right // Begleiter Menu

Key.q = Wiimote.Home // Life

// Nunchuck Analog Stick
Key.One = Nunchuk.Up // 1
Key.Two = Nunchuk.Down // 2
Key.Three = Nunchuk.CButton // 3
Key.Four = Nunchuk.Right // 4
Key.LeftAlt = Nunchuk.Left // Gegenstände auf dem Feld anzeigen

Key.T = Wiimote.One // Teleport
Key.L = Wiimote.Two // Quest Menu

// Stehend angreifen
Key.LeftShift = wiimote.a // attack left button


// Stehen bleiben
if Wiimote.B then var.MoveButton = 1 // cursor on hold
Key.B = wiimote.a =0
if wiimote.a then Key.b = 0 and Mouse.LeftButton = 1

If Clicked (Wiimote.B) or (Nunchuk.ZButton) then Key.B = 0 // B kurz drücken um das Rennen zu beenden

Schnitzl
2012-06-23, 07:57:58
na das ist ja cool
danke für Info :)

Bösewicht
2012-06-23, 08:24:27
Gouvernator würdest du vielleicht ein Video machen damit mann das mal in aktion bei dir sehen kann...?
Würde gerne sehen wie du damit ein paar Minuten lang spielst das wäre echt super!
Vielleicht auch bisschen erklären hier und da, bitte bitte :D

Nightspider
2012-06-23, 09:17:35
Danke für den Thread.
Werde ich bei Gelegenheit auch mal ausprobieren. :D

Gouvernator
2012-06-23, 13:01:10
Gouvernator würdest du vielleicht ein Video machen damit mann das mal in aktion bei dir sehen kann...?
Würde gerne sehen wie du damit ein paar Minuten lang spielst das wäre echt super!
Vielleicht auch bisschen erklären hier und da, bitte bitte :D
Ich hab kein großes TV wo du die Action und die Wiimote in der Hand gleichzeitig sehen kannst... Sonst hätte ich ein Video längst gemacht.

Es ist noch alles work in progress. Je mehr Gegner bzw. welche Gegner es kommen optimiere ich an den Buttons.

Aktuell hab ich das hier geschaffen. LeftShift + Left Mouse auf Wiimote A und Right Mouse auf Wiimote B. Die Fernangriffe klappen damit am besten, es ist so guuuuuuuut... ;D Man stellt sich mit Diamantrüstung mitten die Horde, hält A gedrückt was bewirkt das der elektrische Zauber alles um mich explodiert, nebenbei ziele ich mit B mit dem Feuerball und gleichzeitig drücke ich ne Hydra oder Spiegelbilder mit dem Analogstick am Nunchuck. Und es regnet nur noch Massaker so schnell gehen die Mobs kaputt. Das geile ist wenn man von den Mobs umstellt ist und weiter oben stehen welche mit Fernangriffen, man muss sich um die näheren Mobs gar keine Sorge machen, denn solange man A drückt werden sie vom Flächenzauber angegriffen, man zielt nur noch locker auf die Fernkämpfer und das war es. Man haut viel, viel mehr Damage raus wie sonst üblich und das konstant. Es ist buchstäblich eine Sucht sich eine größere Menge Mobs zu luren und nur noch zu sehen wie alles explodiert. :D

// Belegung
var.MoveButton = Wiimote.Plus // cursor deaktivieren
var.CalibrateButton = wiimote.Minus // Kalibrierung



// Maus rechte und linke Taste
Mouse.LeftButton = wiimote.A
mouse.RightButton = wiimote.B
Mouse.LeftButton = Nunchuk.ZButton

Key.I = Wiimote1.Down // Inventar
Key.S = Wiimote.Up // Skill menu
Key.Tab = Wiimote.Left // Map
Key.F = Wiimote.Right // Begleiter Menu

Key.q = Wiimote.Home // Life

// Nunchuck Analog Stick
Key.One = Nunchuk.Up // 1
Key.Two = Nunchuk.Down // 2
Key.Three = Nunchuk.CButton // 3
Key.Four = Nunchuk.Right // 4
Key.LeftAlt = Nunchuk.Left // Gegenstände auf dem Feld anzeigen

Key.T = Wiimote.One // Teleport
Key.L = Wiimote.Two // Quest Menu

// Stehend angreifen
Key.LeftShift = wiimote.a // attack left button


// Stehen bleiben
if Nunchuk.ZButton then var.MoveButton = 1 // cursor on hold
Key.B = wiimote.a =0
if wiimote.a then Key.b = 0 and Mouse.LeftButton = 1

If Clicked (Nunchuk.ZButton) then Key.B = 0 // Z Button kurz drücken um das Rennen zu beenden