Page 2 of 2

Posted: Mon Dec 10, 2007 10:19 am
by Steve Camber
Oss117 wrote:Steve may I ask you to have a look into the KO2PC source file? Could you make a zip file available on your ftp for download please ;)

I'll dig it out for you ;)

Re: Ball logic

Posted: Wed Dec 30, 2009 4:06 pm
by Oss117
Hello buddies,

I'm using some spare time during my holiday to dig again onto the KO2 source code, and I was trying to understand how moves of ball.

One line contains gravity, but I was wondering which could be the value ?

Is it 0x0d84 (3460) ? and if yes what does it means ?

I would be pleased if someone of you could help a bit to decode this part of ASM code

Question is the custom KO2 from Steve able to display at real time some internal values for ball or player as, for example, the coordinates, speed, height ?

Code: Select all

SUBI.L    #BALL_GRAVITY,BALL_Z_VEL(A4)                                              ; 0000A45A   04ac 0000 0d84 e4a6


Code: Select all

;-----------------------

0000a442 Function: MoveBall()

Loads of stuff here! But all seems to be about the ball.

. Do ball Y accel fudge for corner kicks

. Apply gravity

. Apply wind to velocities

. Add to xpos, clip to pitch

. Add to ypos, clip to pitch

. Do all ball-goal collision

. Calc some ball stats

; - called from 0000f36e (FUNCTION_0000f232)

; - called from 0000f36e (FUNCTION_0000f232)

;-----------------------

pcr_CODE_0000a442:            ;CALLED from 0000f36e

JMP_0000a442:             ;Jumped to by 0000f36e;jumped from 0000f36e

                TST.L     BALL_Y_ACCEL(A4)                                                          ; 0000A442   4aac e4aa                       

                BEQ.S     $A45A                                 ;=0000a45a                          ; 0000A446   6712                             

                MOVE.L    BALL_Y_ACCEL(A4),D0                                                       ; 0000A448   202c e4aa                       

                ADD.L     D0,BALL_Y_VEL(A4)                                                         ; 0000A44C   d1ac e4a2                       

                ASR.L     #$4,D0                                                                    ; 0000A450   e880                             

                SUB.L     D0,BALL_Y_ACCEL(A4)                                                       ; 0000A452   91ac e4aa                       

                SUBQ.L    #1,BALL_Y_ACCEL(A4)                                                       ; 0000A456   53ac e4aa                       

BRA_0000a45a:             ;jumped from 0000a446

                SUBI.L    #BALL_GRAVITY,BALL_Z_VEL(A4)                                              ; 0000A45A   04ac 0000 0d84 e4a6             

                MOVE.L    BALL_X_VEL(A4),D0                                                         ; 0000A462   202c e49e                       

                MOVE.L    BALL_Y_VEL(A4),D1                                                         ; 0000A466   222c e4a2                       

                MOVE.L    BALL_Z_VEL(A4),D2                                                         ; 0000A46A   242c e4a6                       

                MOVE.L    WindXVel(A4),D4                                                           ; 0000A46E   282c b090                       

                MOVE.L    WindYVel(A4),D5                                                           ; 0000A472   2a2c b094                       



;WindEffectHeightCutOff

;Set height at which wind has an effect

                CMPI.W    #$4,BALL_Z_POS(A4)                                                        ; 0000A476   0c6c 0004 e49a                   

                BGT.S     $A482                                 ;=0000a482                          ; 0000A47C   6e04                             

                CLR.L     D4                                                                        ; 0000A47E   4284                             

                CLR.L     D5                                                                        ; 0000A480   4285                             

BRA_0000a482:             ;jumped from 0000a47c

                MOVE.L    D4,D3                                                                     ; 0000A482   2604                             

                SUB.L     D0,D3                                                                     ; 0000A484   9680                             

                ASR.L     #$7,D3                                                                    ; 0000A486   ee83                             

                ADD.L     D3,D0                                                                     ; 0000A488   d083                             

                MOVE.L    D5,D3                                                                     ; 0000A48A   2605                             

                SUB.L     D1,D3                                                                     ; 0000A48C   9681                             

                ASR.L     #$7,D3                                                                    ; 0000A48E   ee83                             

                ADD.L     D3,D1                                                                     ; 0000A490   d283                             

                MOVEQ.L   #0,D3                                                                     ; 0000A492   7600                             

                SUB.L     D2,D3                                                                     ; 0000A494   9682                             

                ASR.L     #$7,D3                                                                    ; 0000A496   ee83                             

                ADD.L     D3,D2                                                                     ; 0000A498   d483                             

                ADD.L     D2,BALL_Z_POS(A4)                                                         ; 0000A49A   d5ac e49a                       

                BPL.S     $A4E4                                 ;=0000a4e4                          ; 0000A49E   6a44                             



;BallBounce

;Ball bounces on floor

                NEG.L     D2                                                                        ; 0000A4A0   4482                             

                MOVE.L    D2,D3                                                                     ; 0000A4A2   2602                             

                ASL.L     #$1,D3                                                                    ; 0000A4A4   e383                             

                SWAP.W    D3                                                                        ; 0000A4A6   4843                             

                TST.W     D3                                                                        ; 0000A4A8   4a43                             

                BEQ.S     $A4C2                                 ;=0000a4c2                          ; 0000A4AA   6716                             

                LEA       $9868(A4),A2                                                              ; 0000A4AC   45ec 9868                       

                CMPI.W    #$4,D3                                                                    ; 0000A4B0   0c43 0004                       

                BLT.S     $A4B8                                 ;=0000a4b8                          ; 0000A4B4   6d02                             

                MOVEQ.L   #3,D3                                                                     ; 0000A4B6   7603                             

BRA_0000a4b8:             ;jumped from 0000a4b4

                ADDQ.W    #1,D3                                                                     ; 0000A4B8   5243                             

                MOVE.W    D3,$9868(A4)                                                              ; 0000A4BA   3943 9868                       

                JSR       $2912(PC)                             ;=Func PlaySoundA2                  ; 0000A4BE   4eba 2912                       

BRA_0000a4c2:             ;jumped from 0000a4aa

                ADD.L     D2,BALL_Z_POS(A4)                                                         ; 0000A4C2   d5ac e49a                       

                MOVE.L    D2,D3                                                                     ; 0000A4C6   2602                             

                MOVE.W    BALL_BOUNCE_VERT_SLOW(A4),D6                                              ; 0000A4C8   3c2c e4be                       

                ASR.L     D6,D3                                                                     ; 0000A4CC   eca3                             

                SUB.L     D3,D2                                                                     ; 0000A4CE   9483                             

                MOVE.L    D0,D3                                                                     ; 0000A4D0   2600                             

                MOVE.W    BALL_BOUNCE_HORZ_SLOW(A4),D6                                              ; 0000A4D2   3c2c e4c0                       

                ASR.L     D6,D3                                                                     ; 0000A4D6   eca3                             

                SUB.L     D3,D0                                                                     ; 0000A4D8   9083                             

                MOVE.L    D1,D3                                                                     ; 0000A4DA   2601                             

                MOVE.W    BALL_BOUNCE_HORZ_SLOW(A4),D6                                              ; 0000A4DC   3c2c e4c0                       

                ASR.L     D6,D3                                                                     ; 0000A4E0   eca3                             

                SUB.L     D3,D1                                                                     ; 0000A4E2   9283                             

BRA_0000a4e4:             ;jumped from 0000a49e

                ADD.L     D0,BALL_X_POS(A4)                                                         ; 0000A4E4   d1ac e492                       

                CMPI.W    #$390,BALL_X_POS(A4)                                                      ; 0000A4E8   0c6c 0390 e492                   

                BCS.S     $A50A                                 ;=0000a50a                          ; 0000A4EE   651a                             

                TST.W     BALL_STATUS(A4)                                                           ; 0000A4F0   4a6c e4ba                       

                BNE.S     $A516                                 ;=0000a516                          ; 0000A4F4   6620                             

                MOVE.W    #THROW_IN_1,BALL_STATUS(A4)                                               ; 0000A4F6   397c 0001 e4ba                   

                MOVE.W    BALL_X_POS(A4),BALL_WHERE_LEFT_PITCH_X(A4)                                ; 0000A4FC   396c e492 e4b6                   

                MOVE.W    BALL_Y_POS(A4),BALL_WHERE_LEFT_PITCH_Y(A4)                                ; 0000A502   396c e496 e4b8                   

                BRA.S     $A516                                 ;=0000a516                          ; 0000A508   600c                             



BRA_0000a50a:             ;jumped from 0000a4ee

                CMPI.W    #THROW_IN_1,BALL_STATUS(A4)                                               ; 0000A50A   0c6c 0001 e4ba                   

                BNE.S     $A516                                 ;=0000a516                          ; 0000A510   6604                             

                CLR.W     BALL_STATUS(A4)                                                           ; 0000A512   426c e4ba                       

BRA_0000a516:             ;jumped from 0000a4f4;jumped from 0000a508;jumped from 0000a510

                ADD.L     D1,BALL_Y_POS(A4)                                                         ; 0000A516   d3ac e496                       

                CMPI.W    #InnerBOTTOMEDGEOFPITCH_570,BALL_Y_POS(A4)                                ; 0000A51A   0c6c 0570 e496                   

                BCS.W     $A77A                                 ;=InPlayInY                         ; 0000A520   6500 0258                       

                CMPI.W    #OuterTOPEDGEOFPITCH_FFC0,BALL_Y_POS(A4)                                  ; 0000A524   0c6c ffc0 e496                   

                BGT.S     $A534                                 ;=0000a534                          ; 0000A52A   6e08                             

                CLR.L     D0                                                                        ; 0000A52C   4280                             

                CLR.L     D1                                                                        ; 0000A52E   4281                             

                BRA.W     $A802                                 ;=SetBallXYZvelfromD0D1D2           ; 0000A530   6000 02d0                       



BRA_0000a534:             ;jumped from 0000a52a

                CMPI.W    #OuterBOTTOMEDGEOFPITCH_5B0,BALL_Y_POS(A4)                                ; 0000A534   0c6c 05b0 e496                   

                BLT.S     $A544                                 ;=0000a544                          ; 0000A53A   6d08                             

                CLR.L     D0                                                                        ; 0000A53C   4280                             

                CLR.L     D1                                                                        ; 0000A53E   4281                             

                BRA.W     $A802                                 ;=SetBallXYZvelfromD0D1D2           ; 0000A540   6000 02c0                       



BRA_0000a544:             ;jumped from 0000a53a

                CMPI.W    #TOP_GOAL_3,BALL_STATUS(A4)                                               ; 0000A544   0c6c 0003 e4ba                   

                BEQ.W     $A73C                                 ;=RollBallAfterGoalGiven            ; 0000A54A   6700 01f0                       

                CMPI.W    #BOTTOM_GOAL_4,BALL_STATUS(A4)                                            ; 0000A54E   0c6c 0004 e4ba                   

                BEQ.W     $A73C                                 ;=RollBallAfterGoalGiven            ; 0000A554   6700 01e6                       

                CMPI.W    #GK_CORNER_2,BALL_STATUS(A4)                                              ; 0000A558   0c6c 0002 e4ba                   

                BEQ.W     $A794                                 ;=RollBallWhenCornerGKGiven         ; 0000A55E   6700 0234                       

                CMPI.W    #OuterBOTTOMEDGEOFPITCH_57A,BALL_Y_POS(A4)                                ; 0000A562   0c6c 057a e496                   

                BGT.S     $A580                                 ;=BallOffTopOrBot_SeeIfInGoal       ; 0000A568   6e16                             

                CMPI.W    #InnerTOPEDGEOFPITCH_FFF6,BALL_Y_POS(A4)                                  ; 0000A56A   0c6c fff6 e496                   

                BLT.S     $A580                                 ;=BallOffTopOrBot_SeeIfInGoal       ; 0000A570   6d0e                             

                TST.W     WoodworkHitCountdown(A4)                                                  ; 0000A572   4a6c e490                       

                BLE.S     $A580                                 ;=BallOffTopOrBot_SeeIfInGoal       ; 0000A576   6f08                             

                SUBQ.W    #1,WoodworkHitCountdown(A4)                                               ; 0000A578   536c e490                       

                BRA.W     $A802                                 ;=SetBallXYZvelfromD0D1D2           ; 0000A57C   6000 0284                       



BRA_0000a580:             ;jumped from 0000a568;jumped from 0000a570;jumped from 0000a576

Re: Ball logic

Posted: Wed Dec 30, 2009 5:39 pm
by Steve Camber
0xD84(3460) is the ball gravity.. this value is subtracted from the ball's vertical velocity every frame.

Data about the ball can be drawn in real time on the screen, but drawing text is very slow on the amiga so it would slow things down.

Re: Ball logic

Posted: Tue Jan 05, 2010 3:56 pm
by Oss117
Steve Camber wrote:0xD84(3460) is the ball gravity.. this value is subtracted from the ball's vertical velocity every frame.

Data about the ball can be drawn in real time on the screen, but drawing text is very slow on the amiga so it would slow things down.


Thanks Steve for the confirmation.

The main issue is that I have no idea about what means this ball gravity value in term of magnitude. What I want to have, in open kick off, is the same computations made by the original game, so I need to stick to the values computed by KO2 and then must know what they are in term of magnitude.

Could you (forum buddies) help me in this task ?

Samples of questions could be the following :

For player : What is the algorithm used inside KO2 from the player pace (0 - 200) to dx, dy pixel displacement, how to compute vx, vy velocity etc.
As for the ball, for example which velocity, angle are applied to it when the player is dribbling, kicking, passing. What is the magnitude of height (z) etc.

So, yes actually it would be very interesting to have Data about ball/player drawn on the screen. But it could be drawn only when the game is paused. It would be far enough.

I know that is not a piece of cake, as you saw Dino does not wants to communicate on it then I have only people from this forum to helps.

Re: Ball logic

Posted: Thu Jan 07, 2010 7:51 am
by Steve Camber
("Player Pace" stat / 4 +180) gives the player speed in game.

When the player dribbles the ball, horizontal ballspeed=playerspeed*1.125 + 30. Vertically the velocity is set to 40000 (0.6103515625)

The units of position are screen pixels, equivalent to 3 inches in the real world, and are stored as 16:16 fixed point.

Short of time these days, but I hope that's of some use!

Re: Ball logic

Posted: Fri Jan 08, 2010 10:52 am
by Oss117
Steve Camber wrote:("Player Pace" stat / 4 +180) gives the player speed in game.

When the player dribbles the ball, horizontal ballspeed=playerspeed*1.125 + 30. Vertically the velocity is set to 40000 (0.6103515625)

The units of position are screen pixels, equivalent to 3 inches in the real world, and are stored as 16:16 fixed point.

Short of time these days, but I hope that's of some use!


Thx Steve for these information. I will get in touch with you really often from now ;-) I will start internal physics during the WE if I find time left.