Javascript (ES6), 453 426 409 306 290 286 bytes
The first and most obvious solution that came to my mind is one that looks around the slides and then merges or replaces.
a=>{a=a.split`
`.map(b=>[...b.replace(/o/g,'1')]);for(r=1;r<a.length-1;r++){d=a[r];for(c=1;c<d.length-1;c++){e=a[r+1];f=e[c]=='\\'?c+1:e[c]=='/'?c-1:!isNaN(+e[c])?c:null;(''+d[c]).match(/[0-9]/g)&&f!=null&&!isNaN(+e[f])?(e[f]=+e[f]+ +d[c],d[c]=' '):0}}return a.map(b=>b.join``).join`
`}
Ungolfed:
func = state => {
state = state.split `
`.map(line => [...line.replace(/o/g, '1')]);
for (r = 1; r < state.length - 1; r++) {
thisState = state[r];
for (c = 1; c < thisState.length - 1; c++) {
nextState = state[r + 1];
nc = nextState[c] == '\\' ? c + 1 : nextState[c] == '/' ? c - 1 : !isNaN(+nextState[c]) ? c : null;
('' + thisState[c]).match(/[0-9]/g) && nc != null && !isNaN(+nextState[nc]) ? (
nextState[nc] = +nextState[nc] + +thisState[c],
thisState[c] = ' '
) : 0;
}
}
return state.map(line => line.join ``).join `
`;
}
Test like:
func(`##########
# -- o - #
# \\\\\\ - #
#- #
# o o #
#o \\\\ /-\\#
# \\ #
#/- // #
# /- o #
##########`)