⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sprite.s

📁 symbian 的一个 二维飞行游戏 源码 及相关技术文章
💻 S
字号:
@@  Copyright 2002 Kenneth Guy,
@@  
        	.global	PlotAsm__12TSprite32x24PCUs
PlotAsm__12TSprite32x24PCUs:
        stmfd sp!, {r1-r12,lr}
         
        @@  r0 TSprite32x24* this
        @@     - offset 0   TUint16* iSpritePos;
        @@     - offset 4   TUint16* iDrawEnd;
        @@     - offset 8   TUint16 iBehindSprite[32*24];

        @@ r1  const TUint16* aSpriteData;

        ldmia   r0, {r2,r3}    @ iSpritePos,iDrawEnd
        mov     r4,r1          @ aSpriteData
        add     r1,r0,#8       @ iBehindSprite

        mov     r0,#0           @ store collision info in r0,

        mov     r14,#24         @ sprite is 24 lines
        sub     r3,r3,#64     @ handle end of map area
SpritePlotLoop:
        cmp     r2,r3
        bge     plotSpriteOverlap
        
        @@ save background
        ldmia   r2,{r5-r8}     @ map behind sprite
        stmia   r1!,{r5-r8}    @ save map for removesprite
        @@ plot sprite and store collision info if not black
        ldmia   r4!,{r9-r12}   @ sprite
        @ if sprite pixels are blank use map, and do not store collision info
        cmp r9,#0;  moveq r9,r5;  orrne r0,r0,r5;
        cmp r10,#0; moveq r10,r6; orrne r0,r0,r6;
        cmp r11,#0; moveq r11,r7; orrne r0,r0,r7;
        cmp r12,#0; moveq r12,r8; orrne r0,r0,r8;
        @@  plot data
        stmia   r2!,{r9-r12}

        @@ save background
        ldmia   r2,{r5-r8}     @ map behind sprite
        stmia   r1!,{r5-r8}    @ save map for removesprite
        @@ plot sprite and store collision info if not black
        ldmia   r4!,{r9-r12}   @ sprite
        @ if sprite pixels are blank use map, and do not store collision info
        cmp r9,#0;  moveq r9,r5;  orrne r0,r0,r5;
        cmp r10,#0; moveq r10,r6; orrne r0,r0,r6;
        cmp r11,#0; moveq r11,r7; orrne r0,r0,r7;
        cmp r12,#0; moveq r12,r8; orrne r0,r0,r8;
        @@  plot data
        stmia   r2!,{r9-r12}

        @@ save background
        ldmia   r2,{r5-r8}     @ map behind sprite
        stmia   r1!,{r5-r8}    @ save map for removesprite
        @@ plot sprite and store collision info if not black
        ldmia   r4!,{r9-r12}   @ sprite
        @ if sprite pixels are blank use map, and do not store collision info
        cmp r9,#0;  moveq r9,r5;  orrne r0,r0,r5;
        cmp r10,#0; moveq r10,r6; orrne r0,r0,r6;
        cmp r11,#0; moveq r11,r7; orrne r0,r0,r7;
        cmp r12,#0; moveq r12,r8; orrne r0,r0,r8;
        @@  plot data
        stmia   r2!,{r9-r12}

        @@ save background
        ldmia   r2,{r5-r8}     @ map behind sprite
        stmia   r1!,{r5-r8}    @ save map for removesprite
        @@ plot sprite and store collision info if not black
        ldmia   r4!,{r9-r12}   @ ship
        @ if sprite pixels are blank use map, and do not store collision info
        cmp r9,#0;  moveq r9,r5;  orrne r0,r0,r5;
        cmp r10,#0; moveq r10,r6; orrne r0,r0,r6;
        cmp r11,#0; moveq r11,r7; orrne r0,r0,r6;
        cmp r12,#0; moveq r12,r8; orrne r0,r0,r8;
        @@  plot data
        stmia   r2!,{r9-r12}

        add     r2,r2,#1344     @ next line

        
plotSpriteOverlapReturn:                
        subs    r14,r14,#1
        bne     SpritePlotLoop     @ loop 24 times (24 lines in a sprite)

        ldmfd sp!, {r1-r12,lr}
	@ handle returning to thumb code
	bx      lr

plotSpriteOverlap:      
        add     r3,r3,#64
        

        cmp     r2,r3
        subge   r2,r2,#0x4D000   @ length of draw area
        
        mov     r10,#16
plotSpriteOverlapLoop:
        ldr     r5,[r2]     @ map behind sprite
        str     r5,[r1],#4   @ save map for removesprite
        ldr     r9,[r4],#4   @ sprite
        @ if sprite pixels are blank use map, and do not store collision info
        cmp     r9,#0;  moveq r9,r5;  orrne r0,r0,r5;
        str     r9,[r2],#4
        
        cmp     r2,r3
        subge   r2,r2,#0x4D000   @ length of draw area

        subs    r10,r10,#1
        bne     plotSpriteOverlapLoop
        

        
        add     r2,r2,#1344     @ next line
        cmp     r2,r3
        subge   r2,r2,#0x4D000   @ length of draw area

        b       plotSpriteOverlapReturn





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -