Just to clarify, why doesn't ds_list_delete(option,o); work?
You're looking through a list, moving all of the values up by one, then deleting the one.... which is the same as just having deleted the one.
[0, 1, 2, 3, 4, 5] Let's try running your idea on index 2. (You know, btw, that your game will crash if o is zero, ya?)
Each loop, we replace the element at index o with the element at o-1, starting at o=2,
[0, 1, 1, 3, 4, 5] (o is 2, replace item at 2 with item at 1)
[0, 1, 1, 1, 4, 5] (o is 3, replace item at 3 with item at 2)
[0, 1, 1, 1, 1, 5] (o is 4, replace item at 4 with item at 3)
[0, 1, 1, 1, 1, 1] (o is 5, replace item at 5 with item at 4)
I detect a problem.
Final part of your strategy: if o is ever equal to the size, delete 2. Well, that'll never happen. In a list of size ONE, the single thing in the list is at index ZERO. In a list of size 6, the sixth element in the list is index 5. The last index in a list will never be the same number as the size of the list.
Now, consider merely deleting index o in option:
[0, 1, 2, 3, 4, 5] (o is 2, delete item 2)
[0, 1, 3, 4, 5]
Tadaaa! Index 2 is removed!
So....what are you really trying to do here? Do you want to delete the item at index o and then insert something new into the front of the list, perhaps?
Edit: heh, I got side-tracked while replying and dannyjenn beat me to the essential question