| 
			
				|  | Castle Paradox 
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| iamben 
 
 
 
 Joined: 29 May 2007
 Posts: 10
 Location: university of virginia
 
 | 
			
				|  Posted: Sun Aug 05, 2007 4:52 pm    Post subject: problem getting hero X,Y and npc X,Y to match |   |  
				| 
 |  
				| I have a guard on a horizontal walkway.  He is walking from the right side to the left.  The script I'm trying to write checks to see if I am on the correct hallway (y-coordinate) and then it checks to see if my X-coordinate is equal to the guard's X-coordinate (in other words, it checks to see if he is on top of me).  The walkway the guard is walking on and the floor that I am walking on are separated by 3 tiles (3 tiles=one column to support the walkway). 
 Here is my flawed script:
 
 
  	  | Code: |  	  | script, fights with guards, begin
 
 #FIRST GUARD
 
 variable (guard one)
 set variable (guard one, NPC reference (2,1))
 
 if (hero y(me) == 21, and, hero x(me) == NPC x(guard one)) then, begin
 
 suspend player
 suspend NPCs
 
 set NPC speed (guard one, 4)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 show text box (11)
 wait for text box
 fight formation (1)
 set NPC speed (guard one, 1)
 destroy NPC (guard one)
 
 resume NPCs
 resume player
 
 end
 
 
 #SECOND GUARD
 
 end
 
 | 
 
 The script is called when the map loads.  Thanks for any help!
 |  |  
		| Back to top |  |  
		|  |  
		| msw188 
 
 
 
 Joined: 02 Jul 2003
 Posts: 1041
 
 
 | 
			
				|  Posted: Sun Aug 05, 2007 5:12 pm    Post subject: |   |  
				| 
 |  
				| On a quick read, the script looks okay, the problem is that it is only called once (when the map loads) and then it never checks again.  You need this running in a while loop, most likely.  Something like: [code]
 script, fight with guards, begin
 while (current map == map:map with guards),do
 begin
 
 #everthing you currently have
 
 end
 
 end
 _________________
 My first completed OHR game, Tales of the New World:
 http://castleparadox.com/gamelist-display.php?game=161
 
 This website link is for my funk/rock band, Euphonic Brew:
 www.euphonicbrew.com
 |  |  
		| Back to top |  |  
		|  |  
		| iamben 
 
 
 
 Joined: 29 May 2007
 Posts: 10
 Location: university of virginia
 
 | 
			
				|  Posted: Sun Aug 05, 2007 5:56 pm    Post subject: |   |  
				| 
 |  
				| But won't that loop never end?  There are other things I want to do on the level (the guard script is called by the main "prison" script, which is called by the map).  Perhaps I could work it out if I put everything inside the loop and used tags to make sure that things I don't want to happen many times only happen once... 
 I'll give it a shot after my friend is finished drawing some graphics.
 
 And thanks for the help. =)
 |  |  
		| Back to top |  |  
		|  |  
		| Ysoft_Entertainment VB Programmer
 
 
 
  
 Joined: 23 Sep 2003
 Posts: 810
 Location: Wherever There is a good game.
 
 | 
			
				|  Posted: Mon Aug 06, 2007 5:46 am    Post subject: |   |  
				| 
 |  
				| The script will end looping when you leave the map. _________________
 Try my OHR exporter/importer.
 OHRGFX
 Striving to become better pixel artist then Fenrir Lunaris.  Unfortunately the laziness gets in the way of my goals.
 |  |  
		| Back to top |  |  
		|  |  
		| iamben 
 
 
 
 Joined: 29 May 2007
 Posts: 10
 Location: university of virginia
 
 | 
			
				|  Posted: Mon Aug 06, 2007 8:45 am    Post subject: |   |  
				| 
 |  
				| Yes, but it will keep looping while I'm on the map. |  |  
		| Back to top |  |  
		|  |  
		| iamben 
 
 
 
 Joined: 29 May 2007
 Posts: 10
 Location: university of virginia
 
 | 
			
				|  Posted: Mon Aug 06, 2007 9:11 am    Post subject: |   |  
				| 
 |  
				| Let me show you what I'm trying to do: 
 
  	  | Code: |  	  | script, prison, begin        #map autorun script
 
 while (current map == 1) do, begin
 
 if (check tag(4) == true) then ( destroy NPC (NPC reference(2,0)) ) else, begin
 
 suspend player
 suspend NPCs
 show text box (2)
 wait for text box
 
 set hero speed (me, 10)             #hero busts out of his cell
 walk hero (me, south, 1)
 wait for hero (me)
 set hero speed (me, 4)
 
 variable (guard)
 set variable (guard, NPC reference (2,0))
 set NPC direction (guard, north)       #guard throws hands up
 wait (2)
 set NPC direction (guard, south)       #hands down
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 set NPC speed (guard, 5)                                   #guard runs towards hero
 walk NPC (guard, west, 7)
 wait for NPC (guard)
 walk NPC (guard, south, 1)
 wait for NPC (guard)
 set NPC direction (guard, north)   #hands up
 wait (2)
 set NPC direction (guard, south)  #hands down
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 show text box (3)
 wait for text box
 fight formation (0)
 set NPC speed (guard, 1)
 destroy NPC (guard)
 set tag (4, on)                            # "killed guard"
 
 resume NPCs
 resume player
 
 end
 
 fights with guards
 
 end
 end
 
 
 #-------------------------------------------------------------------
 
 script, fights with guards, begin
 
 #FIRST GUARD
 
 variable (guard one)
 set variable (guard one, NPC reference (2,1))
 
 if (hero y(me) == 21, and, hero x(me) == NPC x(guard one)) then, begin
 
 suspend player
 suspend NPCs
 
 set NPC speed (guard one, 4)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 show text box (11)
 wait for text box
 fight formation (1)
 set NPC speed (guard one, 1)
 destroy NPC (guard one)
 
 resume NPCs
 resume player
 
 end
 
 if (hero y(me) == 22, and, hero x(me) == NPC x(guard one)) then, begin
 
 suspend player
 suspend NPCs
 
 set NPC speed (guard one, 4)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 show text box (11)
 wait for text box
 fight formation (1)
 set NPC speed (guard one, 1)
 destroy NPC (guard one)
 
 resume NPCs
 resume player
 
 end
 
 
 
 #SECOND GUARD
 
 end
 
 | 
 
 Now the problem that I encounter, even when I don't call "fights with guards" from the "prison" script, is that after I fight and defeat the first guard that busts me for breaking out of my cell, the screen goes black and I have to exit game.exe by using the task manager.
 
 Let me know if you need me to post my .rpg file.
 
 Thanks!
 |  |  
		| Back to top |  |  
		|  |  
		| TMC On the Verge of Insanity
 
 
 
 
 Joined: 05 Apr 2003
 Posts: 3240
 Location: Matakana
 
 | 
			
				|  Posted: Mon Aug 06, 2007 10:17 pm    Post subject: |   |  
				| 
 |  
				| The screen goes black because you have an infinite non-waiting loop running after the battle, so the game never gets to a wait which would cause it to fade in. 
 Now, you want that busting out of the cell sequence to only run once when you enter the map, so there's no reason to put it inside the while loop. Instead, put it before the while loop. And
 
  	  | Code: |  	  | if (check tag(4) == true) then ( destroy NPC (NPC reference(2,0)) ) | 
 isn't needed because you destroy that guard after the scripted battle. Infact, running destroy NPC(NPC reference(2,0)) repeatedly will destroy all the guards on the map, because when you destroy the 1st guard (number 0), the 2nd guard (number 1) becomes the new first guard. So you probably want the walkways bit to check for guard NPC reference(2,0) instead. To make things less confusing, you could set up guard npc ref variables before deleting any guards.
 
 You should have a wait inside the while loop, because the script runs continously forever until it reaches a wait, but you only want it to loop once every game tick.
 
 You check for 2 Y values, but do identical things for both. Instead, check for either of the Y values in the same if statement, using or.
 
 So your script would be something like this:
 
  	  | Code: |  	  | script, prison, begin        #map autorun script 
 suspend player
 suspend NPCs
 show text box (2)
 wait for text box
 
 set hero speed (me, 10)             #hero busts out of his cell
 walk hero (me, south, 1)
 wait for hero (me)
 set hero speed (me, 4)
 
 variable (guard)
 set variable (guard, NPC reference (2,0))
 set NPC direction (guard, north)       #guard throws hands up
 wait (2)
 set NPC direction (guard, south)       #hands down
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 set NPC speed (guard, 5)                                   #guard runs towards hero
 walk NPC (guard, west, 7)
 wait for NPC (guard)
 walk NPC (guard, south, 1)
 wait for NPC (guard)
 set NPC direction (guard, north)   #hands up
 wait (2)
 set NPC direction (guard, south)  #hands down
 wait (2)
 set NPC direction (guard, north)
 wait (2)
 set NPC direction (guard, south)
 wait (2)
 show text box (3)
 wait for text box
 fight formation (0)
 set NPC speed (guard, 1)
 destroy NPC (guard)
 
 resume NPCs
 resume player
 
 while (current map == 1) do, begin
 fights with guards
 wait
 end
 
 end
 
 
 #-------------------------------------------------------------------
 
 script, fights with guards, begin
 
 #FIRST GUARD
 
 variable (guard one)
 set variable (guard one, NPC reference (2,0))  #guard 0 is the old guard 1
 
 if ((hero y(me) == 21, or, hero y(me) == 22), and, hero x(me) == NPC x(guard one)) then, begin
 
 suspend player
 suspend NPCs
 
 set NPC speed (guard one, 4)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 set NPC direction (guard one, north)
 wait (2)
 set NPC direction (guard one, south)
 wait (2)
 show text box (11)
 wait for text box
 fight formation (1)
 set NPC speed (guard one, 1)
 destroy NPC (guard one)
 
 resume NPCs
 resume player
 
 end
 
 
 #SECOND GUARD
 
 end
 | 
 _________________
 "It is so great it is insanely great."
 |  |  
		| Back to top |  |  
		|  |  
		| iamben 
 
 
 
 Joined: 29 May 2007
 Posts: 10
 Location: university of virginia
 
 | 
			
				|  Posted: Tue Aug 07, 2007 7:43 pm    Post subject: |   |  
				| 
 |  
				| Thank you again, Mad Cacti. |  |  
		| 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
 
 
 |