Quote: "...re-attach them to get the broken look while keeping it looking solid, while if you blow a hole in a wall, you would need to create verteces to form the hole "
Sounds a bit like you want to use CSG (Constructive Solid Geometry). Basically using two or more objects and combining them or using them to "carve" into each other to form another object. In DBC, you'd probably have to pull that off with a DLL. But for things like Glass, or crates, or wooden tables and such, building the object out of other pieces would probably be a less expensive (computationally) way to go.
For memblocks, you could use simple vertex manipulation that might not be too expensive. There is a 32 byte header and the second DWORD is the location of the start of the vertex data. If a pillar was hit, you might alter the x and z positions of some of the vertices randomly. Punching a hole or breaking the solid mesh and sealing the severed vertices would be pretty tricky. You'd have to go into the face data, find the vertices that each face is made up of, then alter the face data. If a split in the object exposes more surface area, you might even have to add additional vertices and faces - then you'd have to recalculate the UVs and the normals. While it's possible to do all these things, it would take some doing and you'd have to be sure you are affecting the correct faces and vertices from the point of contact...
Here's a basic example of changing the vertices at random as if a pillar was being struck from different angles. This example only changes the x and z vertex positions on a stacked set of cylinders:
rem pillar damage
rem by latch
rem dec 26,2008
set display mode 800,600,32
sync on
sync rate 60
autocam off
position camera 0,50,-200
randomize timer()
set ambient light 0
set directional light 0,1,-.5,0
rem make a pillar
make object cylinder 1,50
make mesh from object 1,1
add limb 1,1,1
offset limb 1,1,0,50,0
add limb 1,2,1
offset limb 1,2,0,100,0
delete mesh 1
make mesh from object 1,1
delete object 1
make object 1,1,0
delete mesh 1
rem make a mesh and a memblock from the object
make mesh from object 1,1
make memblock from mesh 1,1
rem get the number of vertices and the start position of the vertices
vcount=memblock dword(1,0)-1
vertstart=memblock dword(1,4)
do
rem every 50 miliseconds dent the pillar
if timer()-tim >= 50
rem choose a random vertex
verthit=rnd(vcount)
rem find the x position of the vert
xpos=(vertstart+(verthit*12))
rem find the zposition of the vert
zpos=(vertstart+(verthit*12))+8
rem alter the x and the z in the memblock by 25 percent less
write memblock float 1,xpos,memblock float(1,xpos)*.75
write memblock float 1,zpos,memblock float(1,zpos)*.75
rem change the mesh to be used with the pillar
change mesh from memblock 1,1
rem change the mesh of limb 0 in the pillar
change mesh 1,0,1
rem reset timer
tim=timer()
endif
sync
loop
Enjoy your day.