From 3433eb15fb3d1133e73eb1a331d19ea015e6a4ff Mon Sep 17 00:00:00 2001 From: Warmist Date: Tue, 25 Jun 2013 22:49:52 +0300 Subject: [PATCH] fixed (?) ice and made dragon blood glow a little. --- plugins/rendermax/renderer_light.cpp | 55 +++++++++++++++++++++++++--- plugins/rendermax/rendermax.lua | 2 + 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/plugins/rendermax/renderer_light.cpp b/plugins/rendermax/renderer_light.cpp index 64c866e0d..f9b3f07e6 100644 --- a/plugins/rendermax/renderer_light.cpp +++ b/plugins/rendermax/renderer_light.cpp @@ -467,7 +467,7 @@ lightCell lightingEngineViewscreen::propogateSun(MapExtras::Block* b, int x,int const lightCell matStairCase(0.9f,0.9f,0.9f); lightCell ret=in; coord2d innerCoord(x,y); - df::tiletype type = b->tiletypeAt(innerCoord); + df::tiletype type = b->staticTiletypeAt(innerCoord); df::tile_designation d = b->DesignationAt(innerCoord); //df::tile_occupancy o = b->OccupancyAt(innerCoord); df::tiletype_shape shape = ENUM_ATTR(tiletype,shape,type); @@ -477,9 +477,18 @@ lightCell lightingEngineViewscreen::propogateSun(MapExtras::Block* b, int x,int matLightDef* lightDef; if(tileMat==df::tiletype_material::FROZEN_LIQUID) - lightDef=&matIce; - else - lightDef=getMaterial(mat.mat_type,mat.mat_index); + { + df::tiletype typeIce = b->tiletypeAt(innerCoord); + df::tiletype_shape shapeIce = ENUM_ATTR(tiletype,shape,typeIce); + df::tiletype_shape_basic basicShapeIce = ENUM_ATTR(tiletype_shape,basic_shape,shapeIce); + if(basicShapeIce==df::tiletype_shape_basic::Wall) + ret*=matIce.transparency; + else if(basicShapeIce==df::tiletype_shape_basic::Floor || basicShapeIce==df::tiletype_shape_basic::Ramp || shapeIce==df::tiletype_shape::STAIR_UP) + if(!lastLevel) + ret*=matIce.transparency.power(1.0f/7.0f); + } + + lightDef=getMaterial(mat.mat_type,mat.mat_index); if(!lightDef || !lightDef->isTransparent) lightDef=&matWall; @@ -489,6 +498,7 @@ lightCell lightingEngineViewscreen::propogateSun(MapExtras::Block* b, int x,int } else if(basic_shape==df::tiletype_shape_basic::Floor || basic_shape==df::tiletype_shape_basic::Ramp || shape==df::tiletype_shape::STAIR_UP) { + if(!lastLevel) ret*=lightDef->transparency.power(1.0f/7.0f); } @@ -630,9 +640,9 @@ void lightingEngineViewscreen::doOcupancyAndLights() df::tiletype_shape shape = ENUM_ATTR(tiletype,shape,type); df::tiletype_shape_basic basic_shape = ENUM_ATTR(tiletype_shape, basic_shape, shape); df::tiletype_material tileMat= ENUM_ATTR(tiletype,material,type); - + DFHack::t_matpair mat=b->staticMaterialAt(gpos); - + matLightDef* lightDef=getMaterial(mat.mat_type,mat.mat_index); if(!lightDef || !lightDef->isTransparent) lightDef=&matWall; @@ -667,6 +677,8 @@ void lightingEngineViewscreen::doOcupancyAndLights() } } } + + } df::map_block* block=b->getRaw(); @@ -714,6 +726,36 @@ void lightingEngineViewscreen::doOcupancyAndLights() applyMaterial(tile,419,cPlant->material); } } + //blood and other goo + for(int i=0;iblock_events.size();i++) + { + df::block_square_event* ev=block->block_events[i]; + df::block_square_event_type ev_type=ev->getType(); + if(ev_type==df::block_square_event_type::material_spatter) + { + df::block_square_event_material_spatterst* spatter=static_cast(ev); + matLightDef* m=getMaterial(spatter->mat_type,spatter->mat_index); + if(!m) + continue; + if(!m->isEmiting) + continue; + for(int x=0;x<16;x++) + for(int y=0;y<16;y++) + { + df::coord2d pos; + pos.x = blockX*16+x; + pos.y = blockY*16+y; + int16_t amount=spatter->amount[x][y]; + if(amount<=0) + continue; + pos=worldToViewportCoord(pos,vp,window2d); + if(isInViewport(pos,vp)) + { + addLight(getIndex(pos.x,pos.y),m->makeSource((float)amount/100)); + } + } + } + } } if(df::global::cursor->x>-30000) { @@ -767,6 +809,7 @@ void lightingEngineViewscreen::doOcupancyAndLights() } } } + } lightCell lua_parseLightCell(lua_State* L) { diff --git a/plugins/rendermax/rendermax.lua b/plugins/rendermax/rendermax.lua index 4b19e2485..4e335ec86 100644 --- a/plugins/rendermax/rendermax.lua +++ b/plugins/rendermax/rendermax.lua @@ -67,5 +67,7 @@ addMaterial("PLANT:CAVE MOSS",nil,{0.1,0.1,0.4},2) addMaterial("PLANT:MUSHROOM_HELMET_PLUMP",nil,{0.2,0.1,0.6},2) -- inorganics addMaterial("INORGANIC:ADAMANTINE",{0.1,0.3,0.3},{0.1,0.3,0.3},4) +-- creature stuff +addMaterial("CREATURE:DRAGON:BLOOD",nil,{0.6,0.1,0.1},4) -- TODO gems --buildings