たとえば上層チップのカスパラにlayer: 1みたいなのつけて

terrain = PosChecker.getTerrainFromPos(unit.getMapX(), unit.getMapY());
のあとに

if (terrain.custom.layer === 1) {
 terrain = root.getCurrentSession().getTerrainFromPos(unit.getMapX(), unit.getMapY(), false);
}

みたいにすればlayer1をもつチップは下のデータ読みにいってくれると思うんだけどこういうことじゃないの?
ここは回避のとこだけど、同じ処理をdefとかにもしてやれば問題ないと思うんだが
なんか意味違った?