Non-textbox based pause

User avatar
Raftronaut
Posts: 342
Joined: Mon Sep 03, 2018 4:47 pm

Re: Non-textbox based pause

Post by Raftronaut » Sun Sep 15, 2019 3:17 pm

dale_coop wrote:
Thu Aug 29, 2019 8:25 am
As Kasumi epxlained somewhere (on the Discord channel maybe), for pausing the music...
Modify the MainASM.asm script, under the "skipNMIstuff:", you will find this block of code:

Code: Select all

	LDA currentBank
	STA prevBank
	LDY #BANK_MUSIC  ;; switch to music bank
	JSR bankswitchY
	soundengine_update  
	LDY prevBank
	JSR bankswitchY	
Comment those 7 lines, like this:

Code: Select all

	; LDA currentBank
	; STA prevBank
	; LDY #BANK_MUSIC  ;; switch to music bank
	; JSR bankswitchY
	; soundengine_update  
	; LDY prevBank
	; JSR bankswitchY	
And just after them, add this block of code:

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PAUSE MUSIC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	LDA currentBank
	STA prevBank
	LDY #BANK_MUSIC  ;; switch to music bank
	JSR bankswitchY

	LDA isPaused
	BEQ unpause_music
	JSR pause_song
	JMP post_pause_music_handle
unpause_music:
	JSR resume_song
post_pause_music_handle:
	soundengine_update  
	LDY prevBank
	JSR bankswitchY   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
Dale, I am having some trouble finding this block of code within my MainASM file

Code: Select all

	LDA currentBank
	STA prevBank
	LDY #BANK_MUSIC  ;; switch to music bank
	JSR bankswitchY
	soundengine_update  
	LDY prevBank
	JSR bankswitchY	
By searching skipNMIstuff in mainASM.asm I can find two areas here that mention this, around lines 151 and 260.

the closest match I found was this:

Code: Select all

skipNMIstuff:		


	
	DEC vBlankTimer
	INC randomSeed1
	;;return from this interrupt
	;; music player things
	
	LDA #$0
	STA sleeping

	LDA currentBank
	STA prevBank
	LDY #BANK_MUSIC  ;; switch to music bank
	JSR bankswitchY
	soundengine_update  
	LDY prevBank
	JSR bankswitchY	
I'd really like to try Kasumi's code to pause the square channels, but I am not quite understanding this first bit.

As always, thanks for your patience guys...
Space Raft demo updates: [url]http://nesmakers.com/viewtopic.php?f=52&t=2867[/url]

Chiptune:[url] https://soundcloud.com/user-634230995-350638590 [/url]
User avatar
Elarath
Posts: 72
Joined: Fri Apr 05, 2019 6:33 am

Re: Non-textbox based pause

Post by Elarath » Mon Jan 13, 2020 3:17 pm

This code is great!

I have noticed a glitch that appears when testing out the code to silence the square channels that I'm curious if anyone else has experienced. I got everything working, but noticed that if I transition between screens too quickly back and forth, my hud will become discolored and the player sprite will become corrupted. I have tested repeatedly with and without specifically that block of code.
Check out my game!
Light From Within
User avatar
red moon
Posts: 421
Joined: Mon Aug 12, 2019 12:19 am

Re: Non-textbox based pause

Post by red moon » Sat Feb 01, 2020 1:56 am

Hmm, I ran into some issues trying to implement this pause feature. I did adjust the predraw, add the pause script, assign the user constant, the inputs, create and assign the new sounds...but i must be missing something.

PREDRAW

Code: Select all

    LDA isPaused
    BNE +
    JMP isNotPaused
    +
    DrawSprite #$6C, #$78, #$70, #%00000001, spriteOffset
    UpdateSpritePointer
    DrawSprite #$76, #$78, #$71, #%00000001, spriteOffset
    UpdateSpritePointer
    DrawSprite #$80, #$78, #$72, #%00000001, spriteOffset
    UpdateSpritePointer
    DrawSprite #$8A, #$78, #$73, #%00000001, spriteOffset
    UpdateSpritePointer
    DrawSprite #$94, #$78, #$74, #%00000001, spriteOffset
    UpdateSpritePointer
isNotPaused:
;; sprite pre-draw
;;; this will allow a user to draw sprites
;;; before object sprites are drawn.
;;; keep in mind, there are still only 64 sprites
;;; that can be drawn on a screen, 
;;; and still only 8 per scan line!

;;; you can use DrawSprite macro directly using the following scheme:
;DrawSprite arg0, arg1, arg2, arg3, arg4
	;arg0 = x
	;arg1 = y
	;arg2 = chr table value
	;arg3 = attribute data
	;arg3 = starting ram position
	
;; x and y are the direct positions on the screen in pixels.
;; chr table value is which sprite you'd like to draw from the ppu table.
;; attribute data is a binary number (starts with #%), and here are how the bits work:
	;;; bit 7 - Flip sprite vertically
	;;; bit 6 - Flip sprite horizontally
	;;; bit 5 - priority (0 in front of background, 1 behind background)
	;;; bit 4,3,2 - (null)
	;;; bit 1,0 - subpalette used (00, 01, 10, 11)
	
	
;;; for starting ram position, use spriteOffset.
;; this is set to 0 just before entering this script (or 4 if sprite 0 hit was used).
;; ***remember to increase spriteOffset by 4 for every sprite that is drawn,
;; including after the last one drawn*****, so that the first object's sprite begins
;; in the next available spot.

;; I have created a macro function to handle updating to the next sprite.  So, to update to the next sprite position,
;; all that you have to do is use the function UpdateSpritePointer

;;EXAMPLE:
; DrawSprite #$80, #$80, #$10, #%00000000, spriteOffset
; UpdateSpritePointer

;;;; DRAW SPRITE ZERO FOR SPRITE ZERO HIT

	LDA gameState
	CMP #GS_MainGame	
	BNE + ;dont draw sprite zero
	LDA #HIDE_HUD
	BNE +
	;DrawSprite #$f8, #$1e, #$7F, #%00000000, spriteOffset
				;248   30    127   bit 5 = priority
	DrawSprite #SPRITE_ZERO_X, #SPRITE_ZERO_Y, #SPRITE_ZERO_INDEX, #%00100000, spriteOffset
	UpdateSpritePointer
;dont draw sprite zero.
+

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



	
;;=================== Platform engine
;; In our platform engine, the player can shoot from a 'projectile source'.
;; Since this projectile source does not interact with the background in any way,
;; it is really just a sprite extention of the player, and would be truly foolish to waste
;; an object and processing time on it.  You can, but it would be wasteful.
;; So what we can do instead is use pre-drawn sprites.  If the player is in his attack state,
;; we will check the direction, and then draw the weapon sprite based on which direction he is
;; facing.

	;LDX player1_object ;; we are going to check some player 1 things.
	;;; but getting current action type will set x to this automatically
	JMP doneDrawingWeaponSprite ;;
	GetCurrentActionType player1_object ;; what object is the current player
										;; because if it's attack (3), we should draw weapon.
	CMP #$03
	BNE notAttackingSoDontDrawWeapon
	;;attacking, so draw weapon.
	LDA Object_movement,x
	AND #%00000111
	TAY ;; now y contains direction, so we can figure out position offset
	;CMP #RIGHT
	;BNE directionIsNotRightForDrawingWeapon
	;;; direction is right.
	 LDA Object_x_hi,x
     ;;; offset x for creation
     CLC
     ADC weaponOffsetTableX,y
	 SEC
	 SBC xScroll
     SEC 
     SBC #$08 ;; width of gun 
     STA temp
     LDA Object_y_hi,x
     CLC
     ADC weaponOffsetTableY,y
     sec
     sbc #$08 ;; height of gun
     STA temp1
	 
	 CPY #RIGHT
	 BNE directionIsNotRightForDrawingWeapon
	 ;; it is right, which means draw without flip
	 LDA #%00000001
	 STA temp2
	 JMP doDrawWeapon
directionIsNotRightForDrawingWeapon:
	LDA #%01000001
	STA temp2
doDrawWeapon:
	 
	DrawSprite temp, temp1, #$2c, temp2, spriteOffset
	 JMP doneDrawingWeaponSprite
	
	



doneDrawingWeaponSprite:
	UpdateSpritePointer
	
notAttackingSoDontDrawWeapon:


	
PAUSE

Code: Select all

    LDA isPaused
    BNE unpausegame
    LDA gameHandler
    ORA #%00100000 ;; objects bit
    STA gameHandler
    LDA #$01
    STA isPaused
	;; we play the pause sfx:
	PlaySound #SND_PAUSE	
	;; we make the screen dark:
	LDA soft2001
	ORA #%11100000
	STA soft2001
	
    JMP thePauseEnd
unpausegame:
    LDA gameHandler
    AND #%11011111 ;; objects bit
    STA gameHandler
    LDA #$00
    STA isPaused
	;; we play the unpause sfx:
	PlaySound #SND_UNPAUSE
	;; we make the screen back normal:
	LDA soft2001
	AND #%00011111
	STA soft2001
thePauseEnd:
	RTS
Attachments
userconstant.jpg
userconstant.jpg (103.21 KiB) Viewed 2697 times
input.jpg
input.jpg (392.37 KiB) Viewed 2697 times
error1.jpg
error1.jpg (181.71 KiB) Viewed 2697 times
User avatar
Mugi
Posts: 813
Joined: Thu Dec 27, 2018 8:30 pm

Re: Non-textbox based pause

Post by Mugi » Sat Feb 01, 2020 2:01 am

you mispelled the variable.

its isPaused, not IsPaused (not a capital i)
variables are case-sensitive
"what are you up to?" "Oh, not much... just... Parallaxing"
- Raftronaut
User avatar
red moon
Posts: 421
Joined: Mon Aug 12, 2019 12:19 am

Re: Non-textbox based pause

Post by red moon » Sat Feb 01, 2020 3:27 am

Thanks Mugi, it works great now!
User avatar
fjamesfernandez
Posts: 55
Joined: Fri Jun 28, 2019 5:34 am
Location: Brooklyn, New York

Re: Non-textbox based pause

Post by fjamesfernandez » Sun May 10, 2020 5:52 am

This is GREAT! It took me a little to set it up but I finally managed it. No that it should be a big deal but i do notice when you are holding forward and press PAUSE it stops it on that frame but when you release the direction it goes back (In my case) idle state. Its not animated idle but yeah. The only thing I am trying to figure out here is how to make the screen when paused changed to a different color or tent it.

Anyone have any idea?
User avatar
dale_coop
Posts: 5625
Joined: Fri Feb 16, 2018 7:05 am
Location: France

Re: Non-textbox based pause

Post by dale_coop » Sun May 10, 2020 9:57 am

See my post on the page one...
I set the 3 colors tint, that makes the screen looking darker ("11100000" each of those "1" corresponds to a color emphasis/tint)
-----
Sorry about my poor english
All I need: A Damn Fine Cup of Coffee
My games: PRESS START GAME / UNDERGROUND ADVENTURE / UNDERGROUND ADVENTURE (Arcade version - Byte-Off-2019)
My son's game: KUBO 3
User avatar
wallmasterr
Posts: 213
Joined: Sun Jan 20, 2019 9:29 pm
Location: Scotland
Contact:

Re: Non-textbox based pause

Post by wallmasterr » Sun May 24, 2020 12:20 pm

color tint doesn't seem to work in built-in emulator but dose in messen.

Works on pal nes
but dose not work on retron hd
User avatar
offparkway
Posts: 97
Joined: Thu Jun 11, 2020 6:30 am
Location: San Francisco Bay Area
Contact:

Re: Non-textbox based pause

Post by offparkway » Sat Jul 18, 2020 9:27 pm

Apologies if I'm missing something...

I created pause.asm and attached it to my start button. I used the screen dimming code that Dale posted.

The game runs, and when I press start, the screen dims. But the game doesn't pause... my player can still keep moving to the next screen, attack, etc. Monsters still keep moving.

I'm using 4.5, and this code has been around for a while. Is it possible it's referencing something that doesn't exist, or has been renamed?
Last edited by offparkway on Sat Jul 18, 2020 9:33 pm, edited 1 time in total.
-----------------------------
Workin' on a silly adventure game.
Other stuff I do: http://www.claylancaster.com
User avatar
mouse spirit
Posts: 431
Joined: Tue May 12, 2020 1:13 am
Location: Ohio,North America
Contact:

Re: Non-textbox based pause

Post by mouse spirit » Sat Jul 18, 2020 9:32 pm

chronicleroflegends wrote:
Mon Apr 01, 2019 3:07 pm
mongolianmisfit wrote:
Sun Mar 31, 2019 4:39 pm
chronicleroflegends wrote:
Mon Mar 18, 2019 1:45 am
A few questions:

The screen dimming doesn't seem to do anything for me. Any idea why?

Is it possible to use graphics from our HUD to make the word paused? How would you indicate that you wanted to use those graphics instead?
^^ This would be really useful to me, because it would solve the issue I have of using a number for the equipped ability in my game instead of text.

Edit:
The dimming does actually work, but only when I run the game in Mesen. Not the default emulator.
Were you able to get the game to display PAUSED by pulling from the HUDTiles file?
If so, I'd love to know how you accomplished it. :)

And Mugi, it looks like the following code on the input scripts results in the walk animation being locked in the first frame (so the character 'hovers around'):

LDA isPaused
BEQ +
RTS
+
Not yet, for now I just copied text over to the game object tiles. I'm sure there is a way but I haven't looked into it yet.
I am game, hear me blip.

WIP my game Almika The Star Rider Densetsu Gaiden
https://www.mediafire.com/file/phef252j ... p.zip/file
Forum link viewtopic.php?f=51&t=5278
Post Reply