Okay, so I separated your code logic as best I could
Rem ***** Main Source File *****
a = 0
b = 0
c = 0
position object 25, a, b, c
automatic object collision 25, 20, 1
position camera a, b + 220, c-150
point camera 0, 70, 0
scale object 25, 190, 190, 190
do
set camera to follow a, b, c, 0, 150, 190, 50, 1
position object 25, a, 0, c
`UP key processing
if upkey()=1
if object collision(25, 0)<1 then point object 25, 0, 0, 0 : c=c+1 : yrotate object 25, 0 : set object speed 25, 12 : loop object 25, 55, 74
if object collision(25, 0)>0 then c=c-5
if leftkey() = 1
yrotate object 25, -45
if object collision(25, 0)>0 then c=c-2 : a=a-1
endif
if rightkey() = 1
yrotate object 25, 45
if object collision(25, 0)>0 then c=c-2 : a=a+1
endif
else
`this is for better speed, stops checking at first true check for key press
if object frame(25) > 54
if leftkey()=0
if rightkey() = 0
if downkey() = 0
if spacekey() = 0
set object speed 25, 2 : loop object 25, 1, 9
endif
endif
endif
endif
endif
endif
`LEFT key processing
if leftkey() = 1
if object collision(25, 0)<1 then point object 25, -3, 0, 0 : a=a-1 : yrotate object 25, -90 : set object speed 25, 12 : loop object 25, 55, 74
if object collision(25, 0)>0 then c=c-2 : a=a-1
endif
`RIGHT key processing
if rightkey() = 1
if object collision(25, 0)<1 then point object 25, 3, 0, 0 : a=a+1 : yrotate object 25, 90 : set object speed 25, 12 : loop object 25, 55, 74
if object collision(25, 0)>0 then a=a-5
endif
`DOWN key processing
if downkey() = 1
if object collision(25, 0)<1 then point object 25, 0, 0, 0 : c=c-1 : yrotate object 25, 180 : set object speed 25, 12 : loop object 25, 55, 74
if object collision(25, 0)>0 then c=c+5
if leftkey() = 1
yrotate object 25, -140
if object collision(25, 0)>0 = 1 then c=c+2 : a=a-1
endif
if rightkey() = 1
yrotate object 25, 140
if object collision(25, 0)>0 = 1 then c=c-2 : a=a+1
endif
endif
`SPACE key processing
if spacekey() = 1 then set object speed 25, 3 : loop object 25, 10, 55
`if upkey() = 0 and leftkey() = 0 and rightkey() = 0 and downkey() = 0 and spacekey() = 0 and object frame(25) > 54 then set object speed 25, 2 : loop object 25, 1, 9
`if upkey() = 1 and object collision(25, 0)<1 then : point object 25, 0, 0, 0 : c=c+1 : yrotate object 25, 0 : set object speed 25, 12 : loop object 25, 55, 74
`if leftkey() = 1 and object collision(25, 0)<1 then : point object 25, -3, 0, 0 : a=a-1 : yrotate object 25, -90 : set object speed 25, 12 : loop object 25, 55, 74
`if rightkey() = 1 and object collision(25, 0)<1 then : point object 25, 3, 0, 0 : a=a+1 : yrotate object 25, 90 : set object speed 25, 12 : loop object 25, 55, 74
`if downkey() = 1 and object collision(25, 0)<1 then : point object 25, 0, 0, 0 : c=c-1 : yrotate object 25, 180 : set object speed 25, 12 : loop object 25, 55, 74
`if spacekey() = 1 then set object speed 25, 3 : loop object 25, 10, 55
`if upkey() = 1 and object collision(25, 0)>0 then c=c-5
`if leftkey() = 1 and object collision(25, 0)>0 then a=a+5
`if rightkey() = 1 and object collision(25, 0)>0 then a=a-5
`if downkey() = 1 and object collision(25, 0)>0 then c=c+5
`if upkey() = 1 and rightkey() = 1 and object collision(25, 0)>0 = 1 then c=c-2 : a=a+1
`if upkey() = 1 and leftkey() = 1 and object collision(25, 0)>0 = 1 then c=c-2 : a=a-1
`if downkey() = 1 and leftkey() = 1 and object collision(25, 0)>0 = 1 then c=c+2 : a=a-1
`if downkey() = 1 and rightkey() = 1 and object collision(25, 0)>0 = 1 then c=c-2 : a=a+1
`if upkey() = 1 and rightkey() = 1 then yrotate object 25, 45
`if upkey() = 1 and leftkey() = 1 then yrotate object 25, -45
`if downkey() = 1 and leftkey() = 1 then yrotate object 25, -140
`if downkey() = 1 and rightkey() = 1 then yrotate object 25, 140
loop
What are your variables a and c used for?
The problem arises when 2 keys are pressed, such as left and down
1) first the left=1 logic is executed,
2) then the down=1 and left=1 logic is executed
making some logic run twice basically
I would suggest getting all the left and right code out of the up and down code areas,
treat each key separately.
Give that a try.