(shouting)

Sprite / Block request thread

it came, it went! all the old ASMT stuff is here
User avatar
Argumentable
the biggest shit
Posts: 690
Joined: 14 years ago
Location: A butthole
Contact:
https://argu.talkhaus.com/

Re: Sprite / Block request thread

Post by Argumentable »

Yo, is there a sprite/block that makes the on/off switch flip every couple of seconds or so? If you coders want to get fancy, a generator that you can turn off with D2 would be ideal since I want this to span several screens, but if there's already something out there that will serve my purposes then that's cool
I'm on Youtube andTwitter and Discord so say hi to me on there cause I don't really post here also I have sigs off so I can make my sig as ugly as I want and it won't bother me this is my sig btw
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

PMed you one. It changes it every three seconds.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
User avatar
Chibikko
Posts: 0
Joined: 14 years ago
Location: La Mulana

Re: Sprite / Block request thread

Post by Chibikko »

Argumentable wrote:Yo, is there a sprite/block that makes the on/off switch flip every couple of seconds or so? If you coders want to get fancy, a generator that you can turn off with D2 would be ideal since I want this to span several screens, but if there's already something out there that will serve my purposes then that's cool
chdata wrote:PMed you one. It changes it every three seconds.
It looks like I have been ninja'd.
I am a cat. You cannot prove otherwise.
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

Is there a levelASM code to disable any kind of jumping? Normal and spin.

Also I can't figure out how to convert this to levelASM.

header
lorom

!size = 0; 0 is small, 1 is big

org $00EB79
LDA #$!size

org $01B4C0
LDY #$!size

org $03B67C
LDA #$!size

It makes mario's hitbox 16x16 even if he has powerups.

Or would I be able to insert this to a freespace address and JSL to it in levelASM? Without effecting the game?
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
Kil
Posts: 13
Joined: 15 years ago

Re: Sprite / Block request thread

Post by Kil »

I'm not sure if you can. Patches re-write the ROM. Level ASM can't touch ROM because it is read-only.

You might be able to disable jumping through levelasm by writing to the controller ram addresses.
DON'T PM me. Ask your question in the help thread so everyone can be answered.
User avatar
Chibikko
Posts: 0
Joined: 14 years ago
Location: La Mulana

Re: Sprite / Block request thread

Post by Chibikko »

Kil wrote:I'm not sure if you can. Patches re-write the ROM. Level ASM can't touch ROM because it is read-only.

You might be able to disable jumping through levelasm by writing to the controller ram addresses.
1) A different patch could do it (in the zip).
2) Just writing to the controller RAM addresses doesn't work since level ASM hijacks after they are use. I updated my Controller Hijack Patch (in the zip). I mirrored the original controller data to new addresses and added a bypass to the check if #$00 is in the overwriting address in case you actually want to write #$00 to the controller data. Here is the level ASM code that goes with this patch to disable jumping ($15 though $18 all use #$80 for jumping):

Code: Select all

LDA #$01
STA $0F66   ;BYPASSES CHECK IF $0F5E,X IS ZERO
PHX
LDX #$03
LOOP:
LDA $0F62,X   ;OLD CONTROLLER DATA MIRROR
AND #$7F   ;EXCLUDES #$80 (JUMP)
STA $0F5E,X   ;NEW CONTROLLER DATA
DEX
BPL LOOP
PLX
RTS
I am a cat. You cannot prove otherwise.
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

Actually I figured I could just use levelASM to set mario's Y speed to only let him move downwards for my idea, but if it turns out that it stops all upwards movement then I'll use your code.
And thanks for the levelMariosize.

New problem
!LEFTX = $09
!RIGHTX = $1D
!UPY = $0C
!DOWNY = $18
!STARMU = $08
MainOW:
CHECKLEFTX:
LDA $1F17
CMP !LEFTX
BCS CHECKRIGHTX
RTS
CHECKRIGHTX:
LDA $1F17
CMP !RIGHTX
BCC CHECKUPY
CHECKUPY:
LDA $1F19
CMP !UPY
BCC CHECKDOWNY
RTS
CHECKDOWNY:
LDA $1F19
CMP !DOWNY
BCS STARM
STARM:
LDA !STARMU
STA $1DFB
RTS
YoshiIsland:
RTS
VanillaDome:
RTS
ForestOfIllusion:
RTS
BowserValley:
Codex:
LDA $13C1
CMP #$5F ;tile number of a star I think
BEQ AUTOE
AUTOE:
LDA #$80 ;apparently negative
STA $0EF7 ;if negative, forcibly enter tile
RTS
SpecialWorld:
RTS
StarWorld:
RTS
I tried out my idea for changing the music and forcing mario (demo) to enter a star, with Overworld ASM.
My MainOW code screws up gameplay in the MainOw, alot. Save game message boxes have no black background, but you see the letters, transition from yoshi's island to the mainow becomes glitched but still works, no noise at all plays. Also pipes seem to not work and stars too, sometimes.

The valleyofbowser code works, but it makes it so that if you stand on any level tile, you enter it. And if you stand on a star, even if it's supposed to teleport you, you enter it's level instead. So I think I'll try the controller hijack again. I'm having trouble understanding how to force the player to "press" a button.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
User avatar
Chibikko
Posts: 0
Joined: 14 years ago
Location: La Mulana

Re: Sprite / Block request thread

Post by Chibikko »

chdata wrote:Actually I figured I could just use levelASM to set mario's Y speed to only let him move downwards for my idea, but if it turns out that it stops all upwards movement then I'll use your code.
My code completely disables the jump buttons so that would stop all upward movement caused by pushing a button. Falling off of a ledge and landing on an enemy would not bounce very high (the player cannot hold the jump button to bounce higher) but it still needs to be negated.
chdata wrote:New problem
The first thing I notice is that the following code is useless because there is no difference between branching and not branching:

Code: Select all

;...
CHECKRIGHTX:
LDA $1F17
CMP !RIGHTX
BCC CHECKUPY
;NOTHING HERE
CHECKUPY:
;...
CHECKDOWNY:
LDA $1F19
CMP !DOWNY
BCS STARM
;NOTHING HERE
STARM:
;...
Codex:
LDA $13C1
CMP #$5F ;tile number of a star I think
BEQ AUTOE
;NOTHING HERE
AUTOE:
I am guessing RTS goes in each of those places. Also, those addresses at the top don't make sense. You are reading scratch RAM ($09 and $0C) without writing to it first: no one can predict what is there. $18 is controller data B which is not used in the OW (everything is in $16 alone). $1D is layer 1 y position. Are those supposed to be values? "!LEFTX = #$09" or (not both) "CMP #!LEFTX" would work for that: the "#$" needs to be there. Next, the value at the end that is written to the music register is done so every frame: if this worked then it would endlessly loop the first note of the song. You need to check to see if a different song is playing and change only if that is true. Your "enter a star" code is "enter a level" code. The "enter a star" code is "LDA #$0B : STA $13D9" but it would be best to make sure the player is directly over the tile before using this since it will go to the closest star/pipe exit if not directly over one ("closest" can be a bit off).
chdata wrote:So I think I'll try the controller hijack again. I'm having trouble understanding how to force the player to "press" a button.
In the new code, write values to $0F5E through $0F61 as though they are $15 through $18. These values are then set to zero so the same thing isn't repeated every frame (pressing left would infinitely go left until something else is pressed). If you want the same thing every frame then write to that address every frame. Also, $0F62 through $0F65 have the values that are supposed to be in $15 through $18 (they are backups). In the old code, overwriting the controller data with zero was impossible. $0F66 is a flag that overcomes this: if set then all the controller data will be overwritten. It is mainly used if AND or EOR are used but not with ORA. For example, if the player only presses jump and jump is excluded then that results in zero. Zero is skipped normally so the flag needs to be set for zero to be used. Here is some example code:

Code: Select all

;FORCIBLY ENTER TILE ON OW (LEVEL, STAR, PIPE)
   ;$0F66 NOT NEEDED BECAUSE THERE IS NO CHANCE OF ZERO BEING WRITTEN
LDA $0F63   ;BACKUP OF $16
ORA #$80   ;ENTER OW TILE
STA $0F5F   ;NEW VALUE FOR $16

;NEGATE JUMPING
LDA #$01
STA $0F66   ;FORCE VALUES TO ALWAYS BE OVERWRITTEN
   ;USE $0F66 FLAG BECAUSE VALUES ARE TO BE EXCLUDED
LDA $0F62   ;BACKUP OF $15
AND #$7F   ;ALL BUTTONS EXCEPT JUMP
STA $0F5E   ;NEW VALUE FOR $15
LDA $0F63   ;BACKUP OF $16
AND #$7F   ;ALL BUTTONS EXCEPT JUMP
STA $0F5F   ;NEW VALUE FOR $16
LDA $0F64   ;BACKUP OF $17
AND #$7F   ;ALL BUTTONS EXCEPT JUMP
STA $0F60   ;NEW VALUE FOR $17
LDA $0F65   ;BACKUP OF $18
AND #$7F   ;ALL BUTTONS EXCEPT JUMP
STA $0F61   ;NEW VALUE FOR $18

;ALWAYS HOLDING RUN/GRAB (WARNING: CANNOT LET GO OF OBJECTS)
   ;$0F66 NOT NEEDED BECAUSE THERE IS NO CHANCE OF ZERO BEING WRITTEN
LDA $0F62   ;BACKUP OF $15
ORA #$40   ;INCLUDE X/Y BUTTON
STA $0F5E   ;NEW VALUE FOR $15
LDA $0F63   ;BACKUP OF $16
ORA #$40   ;INCLUDE X BUTTON
STA $0F5F   ;NEW VALUE FOR $16

;DISABLE DOWN (WARNING: CANNOT ENTER DOWN PIPES)
LDA #$01
STA $0F66   ;FORCE VALUES TO ALWAYS BE OVERWRITTEN
   ;USE $0F66 FLAG BECAUSE VALUES ARE TO BE EXCLUDED
LDA $0F62   ;BACKUP OF $15
AND #$FB   ;ALL BUTTONS EXCEPT DOWN
STA $0F5E   ;NEW VALUE FOR $15
LDA $0F63   ;BACKUP OF $16
AND #$FB   ;ALL BUTTONS EXCEPT DOWN
STA $0F5F   ;NEW VALUE FOR $16
LDA $0F64   ;BACKUP OF $17
STA $0F60   ;NO CHANGE
LDA $0F65   ;BACKUP OF $18
STA $0F61   ;NO CHANGE
;MUST INCLUDE ALL VALUES IF $0F66 FLAG IS SET

;BUNNY HOP
   ;$0F66 NOT NEEDED BECAUSE THERE IS NO CHANCE OF ZERO BEING WRITTEN
LDA $13   ;FRAME COUNTER
AND #$0F   ;\HOW OFTEN TO HOP
CMP #$0F   ;/
BNE END
LDA $0F62   ;BACKUP OF $15
ORA #$80   ;JUMP
STA $0F5E   ;NEW VALUE FOR $15
LDA $0F63   ;BACKUP OF $16
ORA #$80   ;JUMP
STA $0F5F   ;NEW VALUE FOR $16
END:
Here is the new patch:
I am a cat. You cannot prove otherwise.
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

Yeah those defines (!UPY) or whatever were supposed to be #$, so that fixed some things.

Also now the entering a star thing works correctly with your hijack. So far it's set to only make him enter it on the valley of bowser submap but do nothing on the mainow submap.

So now I understand how you stores the ram address for controller buttons into free ram, to mirror it. I'll try to figure out some more.

edit:
LDA $0F63 ;BACKUP OF $16 ;so we load this to force the player to a button only once
ORA #$02 ;this is the button to be forced to press (left)
STA $0F5F ;NEW VALUE FOR $16 ;storing those two things above into here is what makes you push a button.

edit 2: Forcibly entering a star is now perfected. On the bowservally submap if you walk onto the star from a tile thats to the right of it, or in other words you are facing the left, it will autoteleport you. Then on the mainOW it will force you to walk to the left. Then if you walk back onto the star tile, it'll teleport you by force and not walk you to the left, and in the valleybowser submap it'll force you to walk to the right instead of creating a loop of entering the star again and again.

Also I got the starworld music change to work.
Last edited by Chdata 14 years ago, edited 1 time in total.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
User avatar
Chibikko
Posts: 0
Joined: 14 years ago
Location: La Mulana

Re: Sprite / Block request thread

Post by Chibikko »

chdata wrote:edit:
LDA $0F63 ;BACKUP OF $16 ;so we load this to force the player to a button only once
ORA #$02 ;this is the button to be forced to press (left)
STA $0F5F ;NEW VALUE FOR $16 ;storing those two things above into here is what makes you push a button.

Code: Select all

LDA $0F63   ;BACKUP OF $16  ;BUTTONS PLAYER IS CURRENTLY PRESSING
ORA #$02   ;this is the button to be forced to press (left)
STA $0F5F   ;NEW VALUE FOR $16  ;storing those two things above into here is what makes you push THE BUTTONS THE PLAYER IS PRESSING PLUS YOUR ADDITION
$16 is controller data A only for the current frame in a level, but it is all of the controller data when on the OW. There is no separation of the current frame and what is being held. There also isn't any need for a second set of RAM addresses since the OW does not need to know the difference between the player pressing x/y or a/b: each set does the same thing. The end result of this code is to add buttons to what the player is pressing. If you want to completely ignore what the player presses then just set $0F66, load your value, and store directly into $0F5F through $0F61 (whichever you are using). It would look like this:

Code: Select all

LDA #$01
STA $0F66   ;FORCE VALUES TO ALWAYS BE OVERWRITTEN
LDA #$02   ;this is the button to be forced to press (left)
STA $0F5F   ;NEW VALUE FOR $16
This code is not made for use in levels: the player cannot do anything since their controls are being completely overwritten.
I am a cat. You cannot prove otherwise.
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

Code: Select all

LDA #$01
STA $0F66   ;so setting this to 01 will overwrite any input by the player to whatever you're forcing. although the player doesn't need to put in any input for the force to run
LDA #$02   ;forces left to be pushed. Now if I were to add more LDA #$'s, would it make the player push all those buttons in a row?
STA $0F5F    ;and this whole code isn't for levels
Hey this makes me think, automatic mario hacks could be alot more automatic with this stuff.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
User avatar
Chibikko
Posts: 0
Joined: 14 years ago
Location: La Mulana

Re: Sprite / Block request thread

Post by Chibikko »

chdata wrote:

Code: Select all

LDA #$01
STA $0F66   ;so setting this to 01 will overwrite any input by the player to whatever you're forcing. although the player doesn't need to put in any input for the force to run
LDA #$02   ;forces left to be pushed. Now if I were to add more LDA #$'s, would it make the player push all those buttons in a row?
STA $0F5F    ;and this whole code isn't for levels
Hey this makes me think, automatic mario hacks could be alot more automatic with this stuff.
If you load multiple values then only the end result will do anything since it is not until after level ASM is done that this stuff is processed. Basically, loading values doesn't do anything: it is the code that interprets the values that does stuff. You aren't forcing the player to go left with the above code, you are making it so the code that interprets the controller data will do that. In order to do something like the intro screen would take a serious of values loaded one frame after another (or every few frames). Here is something like that (a very basic version):

Code: Select all

VALUE:   ;NEW CONTROLLER DATA
db $41,$C1,$00,$02,$41,$82,$00,$41,$C1,$41,$C1
FRAME:   ;NUMBER OF FRAMES BEFORE NEW VALUE
db $2F,$0F,$2F,$0F,$3F,$08,$0F,$5F,$0F,$1F,$0F

CODE:
INC $0F66   ;SET CONTROLLER BYPASS FLAG
PHX
LDX $0F67   ;FREE RAM - INDEX TO TABLES
LDA $0F68   ;FREE RAM - CUSTOM FRAME COUNTER
INC $0F68
CMP FRAME,X
BCC SAME_VALUE
;USE NEXT VALUE
CPX #$0A   ;TOTAL NUMBER OF VALUES (MAX INDEX VALUE +1)
BEQ NO_BYPASS   ;IF THAT SHOULD NOT EXIST, THEN CODE IS DONE
INX
STX $0F67   ;INCREMENT INDEX
STZ $0F68   ;RESET CUSTOM FRAME COUNTER

SAME_VALUE:
LDA VALUE,X
STA $0F5E   ;OVERWRITE $15
STA $0F5F   ;OVERWRITE $16
PLX
RTS

NO_BYPASS:
STZ $0F66   ;UNDO BYPASS, PLAYER HAS CONTROL
PLX
RTS
I am a cat. You cannot prove otherwise.
User avatar
Zaquaa
Posts: 0
Joined: 14 years ago
Location: New Hampshire

Re: Sprite / Block request thread

Post by Zaquaa »

Could someone give me something to make the A button do the same as the B button (Regular jump, rather than spin jump)?
User avatar
Chibikko
Posts: 0
Joined: 14 years ago
Location: La Mulana

Re: Sprite / Block request thread

Post by Chibikko »

Zaquaa wrote:Could someone give me something to make the A button do the same as the B button (Regular jump, rather than spin jump)?
My Controller Hijack Patch allows for stuff like that. This level ASM code will make it happen:

Code: Select all

INC $0F66   ;CONTROLLER BYPASS FLAG
LDA $0F64   ;$17 BACKUP
AND #$80   ;CHECK IF A IS PRESSED
ORA $0F62   ;INCLUDE B IN $15 BACKUP
STA $0F5E   ;NEW $15
LDA $0F64   ;$17 BACKUP
AND #$7F   ;EXCLUDE A
STA $0F60   ;NEW $17
LDA $0F65   ;$18 BACKUP
AND #$80   ;CHECK IF A IS PRESSED
ORA $0F63   ;INCLUDE B IN $16 BACKUP
STA $0F5F   ;NEW $16
LDA $0F65   ;$18 BACKUP
AND #$7F   ;EXCLUDE A
STA $0F61   ;NEW $18
I am a cat. You cannot prove otherwise.
Moniker
Posts: 0
Joined: 14 years ago

Re: Sprite / Block request thread

Post by Moniker »

Anyone know how to edit a block so that it acts like an all-way bounce block, except that it always sends you up and to the right (where ever and however you hit it)? I'd also need one that always sends you up and to the left. The speed ideally would be somewhere halfway between the max-speed that those blocks usually do and, for instance, a note block.
Nothing's easy.

Image
User avatar
Chibikko
Posts: 0
Joined: 14 years ago
Location: La Mulana

Re: Sprite / Block request thread

Post by Chibikko »

Moniker wrote:Anyone know how to edit a block so that it acts like an all-way bounce block, except that it always sends you up and to the right (where ever and however you hit it)? I'd also need one that always sends you up and to the left. The speed ideally would be somewhere halfway between the max-speed that those blocks usually do and, for instance, a note block.
Here are boost blocks, but you need to experiment to find the speed values you are looking for. I am guessing these are somewhat close.
I am a cat. You cannot prove otherwise.
Moniker
Posts: 0
Joined: 14 years ago

Re: Sprite / Block request thread

Post by Moniker »

You are a mensch. Thanks - these are perfect.
Nothing's easy.

Image
User avatar
flameofdoubt
Posts: 0
Joined: 14 years ago
Location: Britain

Re: Sprite / Block request thread

Post by flameofdoubt »

I'm currently working on (though I have not signed up for) a level for the void teleporter room. I've made a recreation of the area where you first meet an alpha metroid in Metroid 2, but I was hoping someone could help me by making a sprite that resembles an alpha metroid, rather than me taking the closest enemy and trying to graphic swap it.
I don't know how feasible this is so I've seperated its features into necessary, and super-spiffy-extras:
Necessary:
-Follow and ram the player for damage. For following there should be no lag, it should directly home in on wherever the player is now.
-Be 2x2 tiles (32x32 pixels) and have two frames of animation which cycle fast (I'm not sure if this is something that is programmed into the sprite but I've put it here just in case).
-Swap directions to 'face' the player.
-Only follow the player when the player comes within a certain range.
-Change the BGM when following the player.
-Spawn a door or teleporter or activate the teleporter (depends on how the void teleporter rooms are going to be run) on death.
-Not be able to travel through tiles.
-Be hurt when in contact with a key.
-Hurt player on touch, but be spinjumpable.

Super-Spiffy-Extras:
-Pause and stop sprite animation and following every second for a fraction of a second.
-Be pushed back and play SFX when hurt.
-Starting animation (Now this is the big complexy bit): Start with a two frame animation, which it plays until it notices the player. When it 'notices' the player swap to another 2 frame animation, rise slowly upwards one tile over a time of about 2 seconds, and then start it's following routine, as well as swapping to the final 2 frame animation that is the necessary one.
-Death animation: The cloud that usually appears for killing enemies in a certain way should be a close enough match, if making that play when it dies is possible.
-After death: After about 5 seconds a continuous screen shaking earthquake effect for 5 seconds while a different music change occurs.
Anything vaguely resembling this would be really helpful, thanks for your time!
Last edited by flameofdoubt 14 years ago, edited 2 times in total.
Pixie casts Dekunda. Insufficient MP!
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

Note- When changing the BGM, it'll have to be a song in the same bank (unless we utilize Kil's patch), except multiples of 4 subtracted from it till it's between 20-23. For example to play a song from a bank that's 24-27, such as playing song 27, you're level music must be any song between those 24-27, but you load 23 instead of 27. Someone told me that. And I've tested loading things above 23 and it doesn't work for me.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
User avatar
flameofdoubt
Posts: 0
Joined: 14 years ago
Location: Britain

Re: Sprite / Block request thread

Post by flameofdoubt »

Not sure I fully understand why it's particularly 23 rather than another from 20-23, but I sort of get it I think, thanks for the help I'll keep that in mind and make sure I account for that
Pixie casts Dekunda. Insufficient MP!
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

since 27 isn't in the same bank as 20-23, you subtract 4 again and again until it is. 27 minus 4 is 23.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
User avatar
flameofdoubt
Posts: 0
Joined: 14 years ago
Location: Britain

Re: Sprite / Block request thread

Post by flameofdoubt »

Ah that was the step I was unsure on, that it slides up and down. So just to check if I wanted the music after the switch to be 26 then I should have the music before as 22?
Pixie casts Dekunda. Insufficient MP!
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

If you wanted to switch the music to play whatever 26 is when you inserted it with Romi's addmusic, you'd just...

LDA #$22
STA $1DF9 ; I think this is the RAM address you use for it. I'm highly sure.

But that will only work if the level music is normally either 24, 25, 26, or 27. Now if the music bypass was set to a song such as 28, loading that 22 would instead play song number 30.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
Kil
Posts: 13
Joined: 15 years ago

Re: Sprite / Block request thread

Post by Kil »

chdata wrote:If you wanted to switch the music to play whatever 26 is when you inserted it with Romi's addmusic, you'd just...

LDA #$22
STA $1DF9 ; I think this is the RAM address you use for it. I'm highly sure.

But that will only work if the level music is normally either 24, 25, 26, or 27. Now if the music bypass was set to a song such as 28, loading that 22 would instead play song number 30.
Isn't it $1DFB
DON'T PM me. Ask your question in the help thread so everyone can be answered.
User avatar
Chdata
Posts: 11
Joined: 14 years ago
Location: Computer Chair

Re: Sprite / Block request thread

Post by Chdata »

Probably. There's a whole bunch of those 1DF's.
Image
Trouble with a capital COW.

<math>\tan{A}\sin{N}</math>
Locked