(shouting)

ASM: Request, help and general discussion

Anthrax 2 Multiply Themodynamics
User avatar
kilon
Posts: 3
Joined: 14 years ago
Location: Netherlands

Re: ASM: Request, help and general discussion

Post by kilon »

MrDeePay wrote:And just how will this be explained to the player who obviously will not know why the heck that's happening to begin with?
Just make a section with 'Technical details' in the manual. Problem solved.
Image
Image
Image
User avatar
AUS
Toni#4796
Posts: 483
Joined: 14 years ago
First name: Toni
Pronouns: they/them/their
Location: アース

Re: ASM: Request, help and general discussion

Post by AUS »

MrDeePay wrote:And just how will this be explained to the player who obviously will not know why the heck that's happening to begin with?
I'd imagine the player isn't an idiot and will take notice and realize that's how the game goes. No big deal.
Image
"oh no my best friend was replaced by a evil demon shadow monster"
"argh i am the evil shadow monster demon shadow"
Vip is pronounced "Beep"
nostalgic realtime nitroid let's play playlist
Ometeotl
Posts: 675
Joined: 14 years ago

Re: ASM: Request, help and general discussion

Post by Ometeotl »

It's no different than the hacks that remove cape flying without an in-game explanation.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

I'm trying to convert yoshicookiezeus's autoscroll sprite to levelasm. Unfortunately, it is way more complex than I can handle because apparently I'm retarded.

If someone wouldn't mind helping me with this I'd be super grateful. It's sort of essential that I find a way to get this done because the good majority of my level requires this to work. yeah.
alex2 wrote:It's all a matter of taste.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

I've got a layer 3 background that I need to slowly rise through a vertical level (imagine lava rising through a vertical pit). Would someone mind helping me with this?
alex2 wrote:It's all a matter of taste.
kil3
Posts: 0
Joined: 13 years ago

Re: ASM: Request, help and general discussion

Post by kil3 »

Can you upload or otherwise get the level to me? Or if you need help with the autoscroll sprite still, post the code too.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

kil3 wrote:Can you upload or otherwise get the level to me? Or if you need help with the autoscroll sprite still, post the code too.
I just sent you a PM. thank you SO MUCH for helping me out.
alex2 wrote:It's all a matter of taste.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

So uh, kil3 has kind of dropped of the face of the earth. If there is anyone else with advanced knowledge of asm that would be willing to help me out with some general stuff please let me know.
alex2 wrote:It's all a matter of taste.
kil3
Posts: 0
Joined: 13 years ago

Re: ASM: Request, help and general discussion

Post by kil3 »

my bad. I didn't really have the time or resources to figure out the problem after all
User avatar
Lv27MarkerMMan
Posts: 7
Joined: 14 years ago

Re: ASM: Request, help and general discussion

Post by Lv27MarkerMMan »

I need help with finishing off the ASM issues with my level. If I can get past just 4 problems then finishing the level should be a piece of cake.

Spoiler is just to reduce the size of this message:
My level includes a counter that counts the number of yellow turn blocks broken by spin jumping for a reason, and I have that part which functionally works, but...

1) The display is behind all blocks in the level. It should be in front.

2) The display does not have a 3rd digit. I need one more digit.

3) The display does not go away after it appears after I enter a different room. It should disappear after entering another room.

4) Sometimes the graphics bug out after breaking a block.

here is the code I was told to use that I believe has the issues:
asmcounter.zip
(890 Bytes) Downloaded 103 times
Here were my directions for applying the code:
VideoGuy wrote: shatter.asm is a patch to be applied to the ROM itself. Use this with xkas (I can help you with that if you need it).
...
Also, you may need to use LevelASM and include

Code: Select all

LDA #00
STA $7EC680
STA $7EC681
STA $7EC682
in LevelInitCode.asm. I would definitely submit that with your level, but it will probably work fine for testing without it.
I applied everything in the directions to my rom and it functionally works, but I still have the 4 issues above to deal with.

Can anyone help? If you need more information please let me know what you would need.
Lastly would you prefer that I send a zip file with asm in it or that I post the code in a code box if the code is long?
Don't be afraid to check out my Youtube channel.
I am making let's plays now!
limepie20
Posts: 0
Joined: 14 years ago
Location: Doesn't Matter

Re: ASM: Request, help and general discussion

Post by limepie20 »

I'm very sorry to inform you that you no longer have your level.
You were just not around, and there was a demand for levels. You can ask for a place on the reserve list, but I'm not sure how likely it will be that you get a level back. Alternatively, you may try to make a switch palace level.
That's all I can offer, and, again, I'm sorry.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

I'm 2 major asm things away from being done with my level. If anyone with windowing or advanced layer 3 knowledge would be willing to help out I'd really appreciate it.
alex2 wrote:It's all a matter of taste.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

so I spent like 9 hours today teaching myself windowing, and I'm 90% of the way done with 1 of those two major ASM things. Unfortunately, the last %10 is where I am now stuck

if anyone really, REALLY good at ASM wouldn't mind helping out (not coding, just explaining what final steps to take in my algorithm), I'd really appreciate it.

PM me for more info
alex2 wrote:It's all a matter of taste.
kil3
Posts: 0
Joined: 13 years ago

Re: ASM: Request, help and general discussion

Post by kil3 »

Me again. You absolutely sure you need windowing to accomplish what you want? If I remember the issues correctly, I have no idea how windowing would help you with that...
kil3
Posts: 0
Joined: 13 years ago

Re: ASM: Request, help and general discussion

Post by kil3 »

Well, I checked your thread on SMWC, and I still kinda don't know what you're trying to do exactly. If you want a tidal wave type thing to chase the player, I don't know why you need windowing. Couldn't you just say use layer 3 in additive mode with tidal tiles on it? I mean, usually windowing is coupled with HDMA to do draw masking shapes on the screen which would be impossible with layer tiles.

I think some of your problems are stemming from the fact that in SMW layer 3 uses absolute screen coordinates. The answer then is to ignore the old layer 3 coord system and make your own, which is not THAT hard, compared to messing around with windowing anyway. Just find some freespace somewhere and make your own X and Y coords for layer 3, then code the layer respond to those, not the native SMW ones.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

kil3 wrote:Well, I checked your thread on SMWC, and I still kinda don't know what you're trying to do exactly. If you want a tidal wave type thing to chase the player, I don't know why you need windowing. Couldn't you just say use layer 3 in additive mode with tidal tiles on it? I mean, usually windowing is coupled with HDMA to do draw masking shapes on the screen which would be impossible with layer tiles.

I think some of your problems are stemming from the fact that in SMW layer 3 uses absolute screen coordinates. The answer then is to ignore the old layer 3 coord system and make your own, which is not THAT hard, compared to messing around with windowing anyway. Just find some freespace somewhere and make your own X and Y coords for layer 3, then code the layer respond to those, not the native SMW ones.
actually I did that thing already. The system is pretty complex but it works (and yeah it uses dynamic windowing). The only things I need help with now are as follows:
  • DMA hijack to get rid of the status bar tiles in my layer 3 image

    NMI hack that re-uploads the palette OR help figuring out why the level loading routine changes the palette of layer 3 in one of my levelasm things

    funky hitbox thing

    Rewrite the code that stops mario from walking/being scrolled off the screen during autoscroll sections
Last edited by anonymousbl00dlust 11 years ago, edited 1 time in total.
alex2 wrote:It's all a matter of taste.
User avatar
Diortem
Posts: 0
Joined: 13 years ago

Re: ASM: Request, help and general discussion

Post by Diortem »

I sorta understand what you're trying to do here, but I really have to think more in-dept to help here. Do you have some IPS + asm of your working copy that I can run? It usually works best for me if I just run the code and then step through it with Geiger's debugger.

P.S. Just a small note, but I've already have an NMI hijack in chest.asm to upload the level specific treasure tile into VRAM and enabling dual windowing HDMA during NMI. So if you're hacking the NMI as well, you might want to take note of this not to break the chest. The address I hijacked in chest.asm is ($0081EC).
kil3
Posts: 0
Joined: 13 years ago

Re: ASM: Request, help and general discussion

Post by kil3 »

For funky hitbox, it might be easiest to put a couple of rectangular hitbox areas along the edge of whatever the thing is (and maybe define a point past the right/left of it as one big "take damage" area). If you write your own slim hit detection routine that ignores everything about interaction except whether or not there is collision, it won't be too slow. Not sure about the autoscroll... easiest solution without having to rewrite anything might be to just push him the opposite direction every frame.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

kil3 wrote:For funky hitbox, it might be easiest to put a couple of rectangular hitbox areas along the edge of whatever the thing is (and maybe define a point past the right/left of it as one big "take damage" area). If you write your own slim hit detection routine that ignores everything about interaction except whether or not there is collision, it won't be too slow. Not sure about the autoscroll... easiest solution without having to rewrite anything might be to just push him the opposite direction every frame.
the way that I plan to do the hitbox is actually a bit more accurate than that. I was thinking something like this:

Code: Select all

index := mario y pos (screen) * 2
if window1_hdma_boundaries[index] < mario x pos (screen)
        goto death subroutine
anyway, a more serious issue is that I need to remove the status bar on my levels. I don't just need it to not appear... I need the DMA for the status bar to not run at all.

someone showed me this status bar hijack, which does the job:

Code: Select all

HEADER
LOROM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Start Status bar removal
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG $0081F4
	NOP #3

ORG $008293
	db $00

ORG $0082E8
	NOP #3

ORG $008C89
	NOP #955
	
ORG $00A2D5
	NOP #3
	
ORG $00A5D5
	NOP #3

ORG $009051
	NOP #40

ORG $00985A
	NOP #3

ORG $00A5A8
	NOP #3

ORG $008F98
	NOP #3
Except that will wipe out the status bar for the entire hack. How would I get this to run only for my levels?
Last edited by anonymousbl00dlust 11 years ago, edited 1 time in total.
alex2 wrote:It's all a matter of taste.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

Alex wrote:By using a level comparison:

Code: Select all

org !AddressToHijack
JML Code

org !Freespace
Code:
REP #$10
LDA $010B
CMP !YourLevel
BNE Return
SEP #$10
<code>
Return:
SEP #$10
<restoration code>
right, but don't I have to hijack all of those addresses from my code? Do I just do this for every one? Also, what goes in the restoration code?
alex2 wrote:It's all a matter of taste.
User avatar
anonymousbl00dlust
Posts: 131
Joined: 14 years ago
Location: West Korea

Re: ASM: Request, help and general discussion

Post by anonymousbl00dlust »

So me and limepie came up with a pretty awesome way to free up 95% of my reserved slots while still keeping my level attached to a2mt. However, getting it to work is going to take some massive amounts of programming. If anyone would be willing to help me trudge through this I'd really appreciate it. Feel free to send me a PM or talk on IRC.
alex2 wrote:It's all a matter of taste.
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: ASM: Request, help and general discussion

Post by Chdata »

Haha what the shit you use a BNE that branches to the code directly after it, after a BEQ for the same address you're checking and yet you can do crazy windows layer 3 change level in middle of level shit haha what.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
User avatar
Jesuiscontent
Tsundere
Posts: 852
Joined: 12 years ago
First name: cool old field
Location: France

Re: ASM: Request, help and general discussion

Post by Jesuiscontent »

So I'm doing some (slow) progress on the Garish level, but I'm trying to create a special shooter that will, I think, improve it a lot. I basically want a shooter that fires koopa shells, as if they were kicked by blue koopas (as in, they roll towards demo, falls off ledges, bounces on wall, the normal behaviour of a shell).

I know almost nothing about ASM coding so what I've done so far is only taking the "normal shooter" sprite code from smwcentral, made it shoot koopa shells, and change the sprite status to "kicked" but it only makes them falls straight down, and they don't even interact with layer 1 so they fall out of the screen unless you pick them before. I'd be very grateful if someone could help me here. Here's the code if it helps :

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Normal Shooter, based on the Bullet Bill Shooter disassembly by mikeyk, further 
;; adapted into Sprite Tool by Davros  
;;
;; Description: This will generate a normal sprite.
;; Specify the actual sprite and sound that is generated below.
;;
;; NOTE: Trying to generate a sprite that doesn't exist will crash your game.
;;
;; Uses first extra bit: NO
;;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

                    SPRITE_TO_GEN = $DA
                    SOUND_TO_GEN = $09

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite code JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    
                    dcb "INIT"              
                    dcb "MAIN"                                    
                    PHB                     
                    PHK                     
                    PLB                     
                    JSR SPRITE_CODE_START   
                    PLB                     
                    RTL      

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main bullet bill shooter code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;               

SPRITE_CODE_START   LDA $17AB,x             ; \ return if it's not time to generate
                    BNE RETURN              ; /
                    LDA #$60                ; \ set time till next generation = 60
                    STA $17AB,x             ; /
                    LDA $178B,x             ; \ don't generate if off screen vertically
                    CMP $1C                 ;  |
                    LDA $1793,x             ;  |
                    SBC $1D                 ;  |
                    BNE RETURN              ; /
                    LDA $179B,x             ; \ don't generate if off screen horizontally
                    CMP $1A                 ;  |
                    LDA $17A3,x             ;  |
                    SBC $1B                 ;  |
                    BNE RETURN              ; / 
                    LDA $179B,x             ; \ ?? something else related to x position of generator??
                    SEC                     ;  | 
                    SBC $1A                 ;  |
                    CLC                     ;  |
                    ADC #$10                ;  |
                    CMP #$10                ;  |
                    BCC RETURN              ; /
                    LDA $94                 ; \ don't fire if mario is next to generator
                    SBC $179B,x             ;  |
                    CLC                     ;  |
                    ADC #$11                ;  |
                    CMP #$22                ;  |
                    BCC RETURN              ; /
                    JSL $02A9DE             ; \ get an index to an unused sprite slot, return if all slots full
                    BMI RETURN              ; / after: Y has index of sprite being generated

GENERATE_SPRITE     LDA #SOUND_TO_GEN       ; \ play sound effect
                    STA $1DFC               ; /
                    LDA #$0A                ; \ set sprite status for new sprite
                    STA $14C8,y             ; /
                    LDA #SPRITE_TO_GEN      ; \ set sprite number for new sprite
                    STA $009E,y             ; /
                    LDA $179B,x             ; \ set x position for new sprite
                    STA $00E4,y             ;  |
                    LDA $17A3,x             ;  |
                    STA $14E0,y             ; /
                    LDA $178B,x             ; \ set y position for new sprite
                    SEC                     ;  | (y position of generator - 1)
                    SBC #$01                ;  |
                    STA $00D8,y             ;  |
                    LDA $1793,x             ;  |
                    SBC #$00                ;  |
                    STA $14D4,y             ; /
                    PHX                     ; \ before: X must have index of sprite being generated
                    TYX                     ;  | routine clears *all* old sprite values...
                    JSL $07F7D2             ;  | ...and loads in new values for the 6 main sprite tables
                    PLX                     ; / 
                    JSR SUB_SMOKE           ; display smoke graphic
RETURN              RTS                     ; return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; display smoke effect for bullet bill shooter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SUB_SMOKE           LDY #$03                ; \ find a free slot to display effect
FINDFREE            LDA $17C0,y             ;  |
                    BEQ FOUNDONE            ;  |
                    DEY                     ;  |
                    BPL FINDFREE            ;  |
                    RTS                     ; / return if no slots open

X_OFFSET            dcb $F4,$0C

FOUNDONE            LDA #$01                ; \ set effect graphic to smoke graphic
                    STA $17C0,y             ; /
                    LDA $178B,x             ; \ smoke y position = generator y position
                    STA $17C4,y             ; /
                    LDA #$1B                ; \ set time to show smoke
                    STA $17CC,y             ; /
                    LDA $179B,x             ; \ load generator x position and store it for later
                    PHA                     ; /
                    LDA $94                 ; \ determine which side of the generator mario is on
                    CMP $179B,x             ;  |
                    LDA $95                 ;  |
                    SBC $17A3,x             ;  |
                    LDX #$00                ;  |
                    BCC NO_INX              ;  |
                    INX                     ; /
NO_INX              PLA                     ; \ set smoke x position from generator position
                    CLC                     ;  |
                    ADC X_OFFSET,x          ;  |
                    STA $17C8,y             ; /
                    LDX $15E9               
                    RTS                     

Thanks in advance. I'm using shell bros as placeholders for now but they aren't quite the same thing.
Image

Image
Image
User avatar
swirlybomb
a bomb that is swirly
Posts: 65
Joined: 12 years ago
First name: Swirlus Bomberton
Location: The Canadas

Re: ASM: Request, help and general discussion

Post by swirlybomb »

I think this is the right place to put this?

So I finally have spare time to finish the intro level now, and what I need is for the enemies in the second area to die on contact. It'd be super-nice if jumping on them still had a normal effect and only touching them from the side or below (which would normally cause damage) killed them instantly, but since I have no knowledge whatsoever about programming and junk, I don't know how possible that is. It'd also be great if a goal tape could be put between the goal bars at the end that would also be knocked away when hit, but if that's not doable then I can just remove the goal bar instead. So... however this could be done, I'd appreciate someone's help in doing so.

Also, I'd like for the HUD to not exist for the whole intro; I think that might be possible within Lunar Magic, but I'm not really sure how, if so?
anonymousbl00dlust wrote:All the obstacles in my level can be beaten on the players first attempt without any 'future predicting'.
Image
User avatar
Diortem
Posts: 0
Joined: 13 years ago

Re: ASM: Request, help and general discussion

Post by Diortem »

Swirlybomb: I haven't looked at your IPS yet, but very good of you to work on it!

I might be able to make the asm for you, but then the (sub)level will also take effect under that. I hope that is not a problem, but I dunno if that level is also used just like Groovy in SMW. Basically, it should be possible with some levelASM to overrule the hitbox detection and change the sprite state to killed before it hurts Mario.

Or otherwise set the invincibility flag, but without the graphical effects. I'll look into it this weekend. Then again, using the latter method makes the enemies die in a distinct manner; I think dustclouds would be better here.
Locked