Files
assaultcube-/config/opt/mapeditscripts.cfg
T
ac-stef 2448e90bf2 convmap changes
new tool: list media sources
new stage: check vantage points
new: add single map from menu
new: option to abort maps on stage errors

fixed: make sure, player is alive (to be able to enter edit mode) during
conversions
2017-06-16 16:05:03 +02:00

285 lines
12 KiB
INI

// opt/mapeditscripts
// fringe mapediting scripts
echo "\f0Extra map editing scripts:"
// list entity-sparklies with identical positions
echo "\fs\f2doublesparklies [enttype]\fr\t\tlist entity-sparklies with identical positions"
tempalias doublesparklies [
if $editing [
push eee $arg1
if (! (strlen $eee)) [ eee = (listoptions ents) ]
echo list entity sparklies with identical x, y and z coordinates "(" $eee ")"
looplist $eee ot [
looplist (enumentities $ot) oi [
push oee (editentity $oi)
push oex (at $oee 1)
looplist $eee it [
looplist (enumentities $it) ii [
if (&& (< $ii $oi) (= $oex (at (editentity $ii) 1))) [
push iee (editentity $ii)
if (&& (= (at $iee 2) (at $oee 2)) (= (at $iee 3) (at $oee 3))) [
echo $ii : $iee --- $oi : $oee
]
pop iee
]
]
]
pop oee oex
]
]
pop eee
][
echo edit mode required
]
]
// list identical models on the same position
echo "\fs\f2doublemodels\fr\t\tlist identical models on the same position"
tempalias doublemodels [
if $editing [
push res 0
echo "list doubled mapmodels (same position, model and elevation)"
looplist (enumentities mapmodel) oi [
push oee (editentity $oi)
push oex (at $oee 1)
looplist (enumentities mapmodel) ii [
if (&& (< $ii $oi) (= $oex (at (editentity $ii) 1))) [
push iee (editentity $ii)
if (&& (= (at $iee 2) (at $oee 2)) (&& (strcmp (mapmodelslotname (at $iee 5)) (mapmodelslotname (at $oee 5))) (= (at $iee 6) (at $oee 6)))) [
echo $ii : $iee --- $oi : $oee
addtodoentity $oi (concat double model $ii : $iee --- $oi : $oee)
+= res 1
]
pop iee
]
]
pop oee oex
]
if $res [ showmenu "TODO entities" ]
result (pop res)
][
echo edit mode required
]
]
// get cube info of a certain cube
// getcubedata x y attr
// (loses current selection)
tempalias getcubedata [
select $arg1 $arg2 1 1
push res (concatword sw_ $arg3)
selectionwalk [res = $$res]
resetselections
result (pop res)
]
// adjust mapmodel sparklie positions to a fixed offset over ground + mapmodel elevation + modelslot elevation
// mm_z slot z-offset
echo "\fs\f2mm_z slot z-offset\fr\tadjust mapmodel sparklie positions to a fixed offset over ground + mapmodel elevation + modelslot elevation"
tempalias mm_z [
if $editing_sp [
push es (editmapmodelslot $arg1)
echo set z-coordinate of the entity sparklies of all mapmodels of slot # (escape $arg1) to floor + elevation + (at $es 2) + (escape $arg2)
if (strlen $arg1) [
looplist (enumentities mapmodel) i [
push ee (editentity $i)
if (= $arg1 (at $ee 5)) [
push nh (+ (getcubedata (at $ee 1) (at $ee 2) floor) (at $ee 6) $arg2 (at $es 2))
if (strlen $arg2) [editentity $i "" "" $nh]
echo $ee -> (pop nh) -> (editentity $i)
]
pop ee
]
][
echo usage: mm_z mmslotnumber heightoffset
]
pop es
][
echo offline edit mode required
]
]
// adjust clipent sparklie positions to the middle of the clip
// clip_z
echo "\fs\f2clip_z\fr\t\t\tadjust clipent sparklie positions to the middle of the clip"
tempalias clip_z [
if $editing_sp [
echo set z-coordinate of the entity sparklies of all clip and plclip to the middle of the clips
looplist (concat (enumentities clip) (enumentities plclip)) i [
push ee (editentity $i)
push nh (+ (getcubedata (at $ee 1) (at $ee 2) floor) (at $ee 4) (div (at $ee 7) 2))
editentity $i "" "" $nh
echo clip_z: $ee -> (pop nh) -> (editentity $i)
pop ee
]
][
echo offline edit mode required
]
]
// duplicate all clipped model slots with an unclipped version - then sort the slots
// (after running this, reducing the slot number of any clipped mapmodel by one will remove the clip)
// doubleclippedslots
echo "\fs\f2duplicateclippedslots\fr\t\tduplicate all clipped model slots with an unclipped version, then sort the slots"
tempalias duplicateclippedslots [
if $editing_sp [
echo double all clipped model slots with an unclipped version, then sort the slots
loop i 256 [
push info (editmapmodelslot $i)
if (|| (at $info 0) (at $info 1)) [
mapmodel 0 0 (at $info 2) (at $info 3) (at $info 4)
]
pop info
]
sortmapmodelslots
echo "\f4When done, use duplicateclippedslots_cleanup."
][
echo offline edit mode required
]
]
// clean up after using doubleclippedslots: sort&merge mapmodel slots, then delete all unused mapmodel slots
// doubleclippedslots_cleanup
echo "\fs\f2duplicateclippedslots_cleanup\fr\tremove all unnecessary mapmodel slots"
tempalias duplicateclippedslots_cleanup [
if $editing_sp [
sortmapmodelslots mergeused
loop ii 256 [ push i (- 255 $ii) ; if (&& (strlen (mapmodelslotname $i)) (strcmp "" (mapmodelslotusage $i))) [deletemapmodelslot $i] ; pop i]
echo all unnecessary mapmodel slots removed
][
echo offline edit mode required
]
]
tempalias dryrun 0
// un-clip models that are fully in tagclipped areas
// uncliptagclippedmodels
echo "\fs\f2uncliptagclippedmodels\fr\tun-clip models that are fully in tagclipped areas"
tempalias uncliptagclippedmodels [
if $editing_sp [
push res 0
looplist (enumentities mapmodel) i [
push entinfo (editentity $i)
push slotinfo (editmapmodelslot (at $entinfo 5))
if (|| (at $slotinfo 0) (at $slotinfo 1)) [
push radius (at $slotinfo 0)
if (= $radius 0) [ radius = 1 ] // FIXME
select (- (at $entinfo 1) $radius) (- (at $entinfo 2) $radius) (* $radius 2) (* $radius 2)
push unclipped 0
selectionwalk [ if (&& (! (&b 0x40 $sw_tag)) $sw_type) [ += unclipped 1 ] ]
if (&& (! (at $slotinfo 0)) (< $unclipped 4)) [ unclipped = 0 ] // radius 0 is fine, if there is at least 1 tagclip
if (! $unclipped) [
if $dryrun [
addtodoentity $i (concat $slotinfo can be unclipped by uncliptagclippedmodels)
][
push uinfo (concat 0 0 (at $slotinfo 2) (at $slotinfo 3) (escape (at $slotinfo 4)))
loop j 256 [
if (strcmp (editmapmodelslot $j) $uinfo) [
addtodoentity $i (concatword "changed from mapmodel slot #" (at $entinfo 5) " to slot #" $j)
editentity $i "" "" "" "" $j
unclipped = -1
break
]
]
if (! $unclipped) [
editentity $i "" "" "" "" (mapmodel 0 0 (at $slotinfo 2) (at $slotinfo 3) (at $slotinfo 4))
addtodoentity $i (concatword "changed from mapmodel slot #" (at $entinfo 5) " to newly created slot #" (at (editentity $i) 5))
]
pop uinfo
]
+= res 1
]
pop unclipped radius
]
pop entinfo slotinfo
]
resetselections
echo un-clipped $res mapmodel entities
pop res
][
echo offline edit mode required
]
]
// un-clip models that are fully clipped by a clip entity
// unclipentclippedmodels
echo "\fs\f2unclipentclippedmodels\fr\tun-clip models that are fully clipped by a clip entity"
tempalias unclipentclippedmodels [
if $editing_sp [
push res 0
looplist (enumentities mapmodel) i [
push entinfo (editentity $i)
push slotinfo (editmapmodelslot (at $entinfo 5))
if (|| (at $slotinfo 0) (at $slotinfo 1)) [
push radius (at $slotinfo 0) // model clip radius
push bot (+f (getcubedata (at $entinfo 1) (at $entinfo 2) floor) (at $entinfo 6) (at $slotinfo 2)) // model clip bottom, float
push h (at $slotinfo 1) // model clip height
looplist (enumentities clip) ci [
push clipinfo (editentity $ci)
if (&& (! (at $clipinfo 10)) (at $clipinfo 7)) [ // skip non-zero shapes
push cibot (+f (getcubedata (at $clipinfo 1) (at $clipinfo 2) floor) (at $clipinfo 4)) // clip bottom, float
push cih (at $clipinfo 7) // clip height, float
push clipped (&& (<=f $cibot $bot) (>= (+f $cibot $cih) (+f $bot $h))) // check height range
*= clipped (&& (<= (- (at $clipinfo 1) (at $clipinfo 5)) (- (at $entinfo 1) $radius)) (>= (+ (at $clipinfo 1) (at $clipinfo 5)) (+ (at $entinfo 1) $radius))) // check x range
*= clipped (&& (<= (- (at $clipinfo 2) (at $clipinfo 6)) (- (at $entinfo 2) $radius)) (>= (+ (at $clipinfo 2) (at $clipinfo 6)) (+ (at $entinfo 2) $radius))) // check y range
if $clipped [
if $dryrun [
addtodoentity $i (concat $slotinfo can be unclipped by unclipentclippedmodels)
][
push uinfo (concat 0 0 (at $slotinfo 2) (at $slotinfo 3) (escape (at $slotinfo 4)))
loop j 256 [
if (strcmp (editmapmodelslot $j) $uinfo) [
addtodoentity $i (concatword "changed from mapmodel slot #" (at $entinfo 5) " to slot #" $j)
editentity $i "" "" "" "" $j
clipped = 0
break
]
]
if $clipped [
editentity $i "" "" "" "" (mapmodel 0 0 (at $slotinfo 2) (at $slotinfo 3) (at $slotinfo 4))
addtodoentity $i (concatword "changed from mapmodel slot #" (at $entinfo 5) " to newly created slot #" (at (editentity $i) 5))
]
pop uinfo
]
+= res 1
h = 0 // exit clipent loop
]
pop clipped cih cibot
]
pop clipinfo
if (! $h) break
]
pop h bot radius
]
pop entinfo slotinfo
]
resetselections
echo un-clipped $res mapmodel entities
pop res
][
echo offline edit mode required
]
]
// find middle cube in selection
// selectmiddle
echo "\fs\f2selectmiddle\fr\tfind middle cube in selection"
tempalias selectmiddle [
if $editing [
push res resetselections
selectionwalk [] [
looplist $sw_cursel [x y xs ys] [
res = (concat $res ";" addselection (+ $x (div $xs 2)) (+ $y (div $ys 2)) 1 1)
]
]
echo reduced (listlen (selx)) selections to the middle cube
res
pop res
][
echo edit mode required
]
]