flat assembler
Message board for the users of flat assembler.
Index
> Tutorials and Examples > X-Input Gamepad Controller |
Author |
|
m3ntal 24 Dec 2013, 22:58
Requires X360 controller + M$ driver (search). Recognizes all buttons and directions. Features light-up buttons when pressed, vibrations and realistic moveable analog/thumb sticks. Tested in 1366x768 resolution (standard). See INCLUDE\INPUT.INC. Preview:
Code: structure GAMEPAD integer n ushort buttons ubyte trigger.l, trigger.r short thumb.lx, thumb.ly short thumb.rx, thumb.ry ends ?gamepad powers PAD.*,\ UP, DOWN, LEFT, RIGHT, START, BACK,\ LEFT.T, RIGHT.T, LEFT.S, RIGHT.S,\ SKIP, SKIP2, A, B, X, Y numeric GAMEPAD.*, 1, 2, 3, 4 ; 0-3 ; example: if.gamepad UP ; after update.gamepad macro if.gamepad x { movzx r0, word [gamepad.buttons] . r0&PAD.#x if true } structure XVIBRATION ushort speed.l, speed.r ends XVIBRATION vibration ; example: vibrate.gamepad GAMEPAD.3, 7FFFh, 7FFFh macro vibrate.gamepad n, l, r { ?if ~l eq . [vibration.speed.l]=l, [vibration.speed.r]=r ?else . [vibration.speed.l]=0FFFFh, [vibration.speed.r]=0FFFFh ?end ?if XInputSetState n, vibration } macro stop.vibration n { vibrate.gamepad n, 0, 0 } set.folder image.folder try load.image.t gamepad.i, gamepad.file center.image gamepad.i copy.image gamepad.reflect.i, gamepad.i ; create mirror.image.v gamepad.reflect.i ; reflection . r0=[gamepad.i.x], r1=[gamepad.i.y] . r1+[gamepad.i.h], r1+2 move.image gamepad.reflect.i, r0, r1 . r0=[gamepad.reflect.i.w] . r1=[gamepad.reflect.i.h] . r2=r1, r2/4, r1-r2 size.image gamepad.reflect.i, r0, r1 set.image.key gamepad.reflect.i set.image.alpha gamepad.reflect.i, 128 draw.image gamepad.i draw.image gamepad.reflect.i update.gamepad if.gamepad A draw.image a.button.i vibrate.gamepad GAMEPAD.1 end if.gamepad B draw.image b.button.i vibrate.gamepad GAMEPAD.1 end ; center thumbs: left and right . r0=[gamepad.i.x], r0+50 . r1=[gamepad.i.y], r1+47 move.image thumb1.button.i, r0, r1 . r0=[gamepad.i.x], r0+208 . r1=[gamepad.i.y], r1+108 move.image thumb2.button.i, r0, r1 . n=10 movsx r2, word [gamepad.thumb.lx] movsx r3, word [gamepad.thumb.ly] . x=r2, y=r3 ; reduce x/y to 1-16 for thumb sticks if x<-2048 . r0=x, -r0, r0>>>11 move.image.left thumb1.button.i, r0 end if x>2048 . r0=x, r0>>>11 move.image.right thumb1.button.i, r0 end if y<-2048 . r0=y, -r0, r0>>>11 move.image.down thumb1.button.i, r0 end if y>2048 . r0=y, r0>>>11 move.image.up thumb1.button.i, r0 end if lx>0 if lx<2048 . lx=0 end else.if lx<0 if lx>-2048 . lx=0 end end if ly>0 if ly<2048 . ly=0 end else.if ly<0 if ly>-2048 . ly=0 end end if rx>0 if rx<2048 . rx=0 end else.if rx<0 if rx>-2048 . rx=0 end end if ry>0 if ry<2048 . ry=0 end else.if ry<0 if ry>-2048 . ry=0 end end
|
||||||||||||||||||||
24 Dec 2013, 22:58 |
|
HaHaAnonymous 25 Dec 2013, 01:15
[ Post removed by author. ]
Last edited by HaHaAnonymous on 28 Feb 2015, 18:54; edited 1 time in total |
|||
25 Dec 2013, 01:15 |
|
m3ntal 25 Dec 2013, 03:58
It should be compatible with any X360 controller. You can get them used on E-Bay for $5-$10 (paid $6 used for an "afterglow controller").
|
|||
25 Dec 2013, 03:58 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.