| 
			
				|  | Castle Paradox 
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| binoal 
 
 
  
 Joined: 20 Jun 2009
 Posts: 123
 Location: My Own Little World
 
 | 
			
				|  Posted: Wed Aug 26, 2009 1:34 pm    Post subject: stopping regular control? |   |  
				| 
 |  
				| is there any way to stop the arrow keys from making you walk? i made a script that makes you look in the direction you press and then if you hold it you walk in that direction. but it isnt working because the arrow keys are still making you move so its getting you off the grid and ignoring walls and just generally bugging up _________________
 Resident Evil RPG Demo
 
 http://www.castleparadox.com/gamelist-display.php?game=963
 
 Legend Of Zelda: Reptilian Warlord Demo
 
 http://www.castleparadox.com/gamelist-display.php?game=961
 |  |  
		| Back to top |  |  
		|  |  
		| Bob the Hamster OHRRPGCE Developer
 
 
 
  
 Joined: 22 Feb 2003
 Posts: 2526
 Location: Hamster Republic (Southern California Enclave)
 
 | 
			
				|  Posted: Wed Aug 26, 2009 1:54 pm    Post subject: Re: stopping regular control? |   |  
				| 
 |  
				|  	  | binoal wrote: |  	  | is there any way to stop the arrow keys from making you walk? i made a script that makes you look in the direction you press and then if you hold it you walk in that direction. but it isnt working because the arrow keys are still making you move so its getting you off the grid and ignoring walls and just generally bugging up | 
 
 At the beginning of the script, use suspend player and when the script is finished, use resume player
 |  |  
		| Back to top |  |  
		|  |  
		| binoal 
 
 
  
 Joined: 20 Jun 2009
 Posts: 123
 Location: My Own Little World
 
 |  |  
		| Back to top |  |  
		|  |  
		| TMC On the Verge of Insanity
 
 
 
 
 Joined: 05 Apr 2003
 Posts: 3240
 Location: Matakana
 
 | 
			
				|  Posted: Thu Aug 27, 2009 7:42 am    Post subject: |   |  
				| 
 |  
				| The secret is that scripts happen before anything else. Unfortunately this also means that you won't find out about what happened (NPCs and heroes starting a new move, textbox appearing, etc) until the player has already seen it. _________________
 "It is so great it is insanely great."
 |  |  
		| Back to top |  |  
		|  |  
		| Bob the Hamster OHRRPGCE Developer
 
 
 
  
 Joined: 22 Feb 2003
 Posts: 2526
 Location: Hamster Republic (Southern California Enclave)
 
 | 
			
				|  Posted: Thu Aug 27, 2009 8:28 am    Post subject: |   |  
				| 
 |  
				| Okay, this got me curious, so tried to do it myself, and I came up with these two scripts: 
 
  	  | Code: |  	  | include, plotscr.hsd
 include, scancode.hsi
 
 define constant(0, look timer)
 
 plotscript, on key, begin
 show value(seconds of play)
 variable(looking)
 looking := false
 if (keyval(key:Z) >> 0) then(
 # Look without walking if Z is held down
 stop timer(look timer)
 if(keyval(key:UP)    >> 1) then(set hero direction(me, up),    looking := true)
 if(keyval(key:RIGHT) >> 1) then(set hero direction(me, right), looking := true)
 if(keyval(key:DOWN)  >> 1) then(set hero direction(me, down),  looking := true)
 if(keyval(key:LEFT)  >> 1) then(set hero direction(me, left),  looking := true)
 if(looking) then(
 suspend player
 )
 set timer(look timer, 1, 1, @finish look)
 )
 end
 
 script, finish look, begin
 resume player
 end
 
 | 
 
 It would indeed be nice if there was an easy way to cancel a keypress. it would make this sort of script much simpler.
 
 We already have a clearkey() function in allmodex.bas. I suppose if we exposed that to plotscripting, then the script could be written like this:
 
 
  	  | Code: |  	  | include, plotscr.hsd
 include, scancode.hsi
 
 plotscript, on key, begin
 if (keyval(key:Z) >> 0) then(
 # Look without walking if Z is held down
 if(keyval(key:UP)    >> 1) then(set hero direction(me, up),    cancel key(key:UP))
 if(keyval(key:RIGHT) >> 1) then(set hero direction(me, right), cancel key(key:RIGHT))
 if(keyval(key:DOWN)  >> 1) then(set hero direction(me, down),  cancel key(key:DOWN))
 if(keyval(key:LEFT)  >> 1) then(set hero direction(me, left),  cancel key(key:LEFT))
 )
 end
 
 | 
 
 So much simpler!
 |  |  
		| Back to top |  |  
		|  |  
		| binoal 
 
 
  
 Joined: 20 Jun 2009
 Posts: 123
 Location: My Own Little World
 
 | 
			
				|  Posted: Thu Aug 27, 2009 12:26 pm    Post subject: |   |  
				| 
 |  
				| i got it to work by doing 
 
  	  | Code: |  	  | while (key is pressed(57))
 do (suspend player
 while (key is pressed(57))
 do (
 if (key is pressed (72))
 then (set hero direction(0,up))
 if (key is pressed (75))
 then (set hero direction(0,left))
 if (key is pressed (77))
 then (set hero direction(0,right))
 if (key is pressed (80))
 then (set hero direction(0,down))
 wait (1))
 wait (1)
 resume player
 )
 
 | 
 
 basically if you are holding space, it sets your direction instead of walking. I had to use 2 seperate While/Do statements so that resume player didnt happen while it was repeating. But this seems to work. My only concern is that it doesnt allow any of the other on keypress scripts to run while you are holding space
 _________________
 Resident Evil RPG Demo
 
 http://www.castleparadox.com/gamelist-display.php?game=963
 
 Legend Of Zelda: Reptilian Warlord Demo
 
 http://www.castleparadox.com/gamelist-display.php?game=961
 |  |  
		| Back to top |  |  
		|  |  
		| TMC On the Verge of Insanity
 
 
 
 
 Joined: 05 Apr 2003
 Posts: 3240
 Location: Matakana
 
 | 
			
				|  Posted: Fri Aug 28, 2009 12:01 pm    Post subject: |   |  
				| 
 |  
				|  	  | Quote: |  	  | We already have a clearkey() function in allmodex.bas. I suppose if we exposed that to plotscripting, then the script could be written like this: | 
 The key handling code has been rewritten a couple times in the last year or two, and I can no longer remember whether clearkey has been fixed, but I don't fully trust it and avoid using it. Anyway, I think that this is a feature we should have, but maybe we should provide it in a different way: by letting people suspend and resume keys? Hmm, maybe we'd want clearkey anyway for convenience.
 
 I can't see a reason why it wouldn't work with one of the while loops deleted.
 
 What do you mean by "the other on keypress scripts"? Are they bits of code inside the same keypress handlig scripts? Do they contain their own weights? Is "permit double-triggering of scripts" enabled? It would be possible to let them continue to work while space is being held down.
 _________________
 "It is so great it is insanely great."
 |  |  
		| Back to top |  |  
		|  |  
		| Bob the Hamster OHRRPGCE Developer
 
 
 
  
 Joined: 22 Feb 2003
 Posts: 2526
 Location: Hamster Republic (Southern California Enclave)
 
 | 
			
				|  Posted: Fri Aug 28, 2009 1:25 pm    Post subject: |   |  
				| 
 |  
				|  	  | The Mad Cacti wrote: |  	  |  	  | Quote: |  	  | We already have a clearkey() function in allmodex.bas. I suppose if we exposed that to plotscripting, then the script could be written like this: | 
 The key handling code has been rewritten a couple times in the last year or two, and I can no longer remember whether clearkey has been fixed, but I don't fully trust it and avoid using it. Anyway, I think that this is a feature we should have, but maybe we should provide it in a different way: by letting people suspend and resume keys? Hmm, maybe we'd want clearkey anyway for convenience.
 
 | 
 
 I did a test of this. Actually I had to call it "suppress key" to avoid collision with the existing "clear key" constant for the "wait for key" command.
 
 It did not work properly at all. I am guessing you are correct that clearkey() in allmodex.bas has bitrotted. it is only actually used in a very small number of places.
 |  |  
		| Back to top |  |  
		|  |  
		|  |  
  
	| 
 
 | You can post new topics in this forum You can reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 
 |  
 Powered by phpBB © 2001, 2005 phpBB Group
 
 
 |