If you use Boolean logic, why the intermediate "If..then"? I do not understand that. That should be an AND operation too.... Agree
There is no logic in that, especially since Boolean shortcut evaluation will bail out at any point.
Continuing in Boolean style instead of forcing a jump might help.
Write it so that all boolean truths are satisfied up until the determination of dead.
This should show an improvement:
for i4 := 1 to 100 do begin
cactus1^.x := CCactus[i4];
if (( dino123rect^.x >= cactus1^.x ) and ( dino123rect^.x <= cactus1^.x + cactus1^.w ) or
( dino123rect^.x + dino123rect^.w >= cactus1^.x ) and ( dino123rect^.x + dino123rect^.w <= cactus1^.x + cactus1^.w )) and
(( dino123rect^.y >= cactus1^.y ) and ( dino123rect^.y <= cactus1^.y + cactus1^.h ) or
( dino123rect^.y + dino123rect^.h >= cactus1^.y ) and ( dino123rect^.y + dino123rect^.h <= cactus1^.y + cactus1^.h )) then death := true;
You should also look at impossibilities in your algorithm, btw.
It may be more efficient to bring one or more variables outside of the loop.