Compare, for example, Latin scrībere 'to write' and legere 'to gather, read' with their past participles scrīptus and lēctus (likely also with a type of compensatory lengthening).
Cases before /s/ are also numerous, as can be noticed by comparing Latin scrībere and its perfect scrīpsī, or pingere 'to paint' and pīnxī and also the genitive noun form rēgis and its nominative rēx 'king'.
In some cases, that gave alternations between two related forms, one with s-mobile and the other without, such as English steer, Icelandic stjór, Dutch stier (← *steuraz ← PIE *steuros with preserved /t/) vs. Limburgish deur, duur, Old Norse þjórr (← *þeuraz ← PIE *tauros with regularly shifted /t/).
The change affecting dental consonants is generally assumed to have been a separate phenomenon, and it already occurred in Proto-Indo-European since other Indo-European languages show similar results.
For example, the second-person singular past form of *sitjanan 'to sit' would have become *sód-ta → *sótsta → *sass (compare the related Old English word sess 'seat').
However, it was restored to *sast, based on parallel forms in other verbs such as *stalt (from *stelanan 'to steal') and *halft (from *helpanan 'to help').
That nasalisation was preserved into the separate history of Old English since it affected the outcome of Anglo-Frisian brightening, which was conditioned by nasality.
As the weak past participle was formed with the Proto-Indo-European suffix *-tos, the assimilation could have occurred in all verbs with stems that ended with a stop.
Its form in the past participle retained this suffix as an intervening vowel and so did not cause any special changes to the consonants: PIE *-(e)y-tos > PG *-idaz.
In Old Norse, the original consonant had been restored by analogy, and the West Germanic languages had replaced the ending altogether by substituting *-ī.
However, there is no trace of an ending *-þ in the Germanic languages (except for the rare and isolated Old English form arþ), and *-t is found instead.