Wurmple evolves like this. Look at the PID's last 16 bits, and convert them to decimal. If the last digit of this decimal number is between 0 and 4, Wurmple will evolve into Silcoon, otherwise it will evolve into Cascoon.
Example: Say a Wurmple has a PID of [5CF4091C]. The last 16 bits of the PID are [091C], which is equal to 2332 in decimal. Since the last digit of this decimal number is 2, this Wumple would evolve into Silcoon.
Spinda's spots work as follows. Suppose a Spinda has PID [5B3E948D]. Consider each of these hexadecimal digits one by one and convert each of them to decimal. Thus, we have
5 = 5, B = 11, 3 = 3, E = 14, 9 = 9, 4 = 4, 8 = 8, D = 13.
Thus we construct the following co-ordinates: (5,11), (3,14), (9,4), (8,13).
Now Spinda always has 4 spots: two on its face and one on each of its ears. The game would correspond each of the above co-ordinates with the relative position of the centre of the spot next to some kind of starting position (a different starting position for each of the spot) which I don't know about.
EDIT: After playing a bit with that Spinda Painter you linked, the first co-ordinate is for the spot on Spinda's face (from its centre to its right in the front sprite), the second co-ordinate is for the spot on Spinda's face (from its left to its centre in the front sprite), the third co-ordinate is for the spot on Spinda's left ear (from its centre to its right in the front sprite) and the fourth co-ordinate is for the spot on Spinda's right ear (from its left to its centre in the front sprite).