Результаты поиска
|
|
Сообщений: 1042
|
Опубликовано: 08.01.2009, 00:02:33
Зачем создавать велосипед? Ищите в сети готовую модель системника с проводами и импортируйте через 3DImport. С текстурами, лично я бы справился, и менять растягивание тоже можно. короче вопрос не в идеи вопрос в реализации =) ИМХО нет ничего невозможного, есть ленность и слабость =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 08.01.2009, 00:20:07
Quote (firsacho) Что за OGLE?? Ты не знаешь OGLE? это же мега вещь!!!! =) OGLE найти можно тут http://ogle.eyebeamresearch.org/ Работает это так, после установки OGLE (час мучался пока понял как ее ставить =) ) жмем горячую клавишу, во время игры, и у нас сохраняется все что на экране в файл obj который открывается в 3DSMAX там ненужное выкидывается и сохраняется в формат 3ds, после чего импортируем в формат xom =) Покажу скриншоты как это работает: Forts делаем 3D Screenshot Отыкрываем в 3DSMAX редактируем и разбиваем Конвертируем в W3DEditor Красим и Любуемся произведением искусства =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 08.01.2009, 00:29:45
Quote (Nezon) БОЛЬШОЙ ПЛЮС, если бы он мог делать сам разрезку объекта))) Просто привиду пример альфа версии резалки Code if GroupMode then begin {$IFDEF GROUPON} Process := 1; // ищем точки - центры внутринних стержней поверхностей for i := 0 to Count3dsFace - 1 do begin Import3DModel.ProgressMain.Position := Round(i / Count3dsFace * 10); Import3DModel.ProgressPoxel.Position := i; if RunThread.Terminated then Exit; //face 1 p0a := GetXYZfPoint(i, 0); p0b := GetXYZfPoint(i, 1); p0c := GetXYZfPoint(i, 2); GetSegment(p0a, p0b, p0c, p1, p2, MaxLength); // находим отрезок из // центра треугольника по нормали внутрь с длинной Max lastface := -1; LenMin := MaxLength; // Import3DModel.PoxelProcess.Caption:='Finding Div Points'; // Import3DModel.ProgressPoxel.Position:=0; // Import3DModel.ProgressPoxel.Max:=Count3dsFace; for k := 0 to Count3dsFace - 1 do begin // Import3DModel.ProgressPoxel.Position:=k; // face 2 pa := GetXYZfPoint(k, 0); pb := GetXYZfPoint(k, 1); pc := GetXYZfPoint(k, 2); // находим пересечение отрезка с треугольником // причем минимальное! if (k <> i) and LineFace(p1, p2, pa, pb, pc, p) and (GetLength(p1, p) < LenMin) then begin p2 := p; lastface := k; LenMin := GetLength(p1, p2); end; end; // если найден такой треугольник, то if lastface<>-1 then begin // Array3DSPoints[i].Join:=-1; Array3DSPoints[i].Active := true; Array3DSPoints[i].p := GetDivPoint(p1, p2); // Array3DSPoints[i].face:=i; Array3DSPoints[i].Radius := GetLength(Array3DSPoints[i].p, p1); //inc(IndexPoint); end; end; Process := 2; // ищем радиусы от точек до ближних поверхностей ShowRadius := 0; Import3DModel.PoxelProcess.Caption := 'Finding Radius and Smooth Points'; Import3DModel.ProgressPoxel.Position := 0; Import3DModel.ProgressPoxel.Max := Count3dsFace; for i := 0 to Count3dsFace - 1 do if Array3DSPoints[i].Active then begin MinRadius := Array3DSPoints[i].Radius; Import3DModel.ProgressMain.Position := 10 + Round(i / Count3dsFace * 30); Import3DModel.ProgressPoxel.Position := i; // теперь находим радиус точки for r := 0 to Count3dsFace - 1 do begin // Import3DModel.ProgressPoxel.Position:=r; pa := GetXYZfPoint(r, 0); pb := GetXYZfPoint(r, 1); pc := GetXYZfPoint(r, 2); Radius := GetRadius(Array3DSPoints[i].p, pa, pb, pc, MinRadius, p); if Radius < MinRadius then MinRadius := Radius; end; Array3DSPoints[i].Radius := MinRadius; ShowRadius := i;
{ end; //итак у нас имеется массив точек, нужно уменьшить этот массив // так чтобы у нас получились лишь конкретные точки. // можно соединить все ближние по радиусу, уменьшим размер массива // Radius:= LenMax*0.2; // итак мысль вторая: сферическое сглаживание: берем точку находи ее радиус // такой что сфера вписывается в фигуру, т.е. минимальное растояние от точки // до плоскости // все точки вошедшие в сферу центрируем центром масс ноходим новую сферу // двигаем первую точку в центр, а остальные делаем не активными, оставив ссылку // на активную точку. Process := 3; // убераем все ближние точки входящие в радиус Import3DModel.PoxelProcess.Caption := 'Smooth Points'; Import3DModel.ProgressPoxel.Position := 0; Import3DModel.ProgressPoxel.Max := Count3dsFace; for i := 0 to Count3dsFace - 1 do begin } found := false; SumX := Array3DSPoints[i].p.x; SumY := Array3DSPoints[i].p.y; SumZ := Array3DSPoints[i].p.z; Sum := 1; // Import3DModel.ProgressPoxel.Position := i; // Import3DModel.ProgressMain.Position := 30 + Round(i / Count3dsFace * 10); // if RunThread.Terminated then // Exit; // Import3DModel.ProgressPoxel.Position:=0; // Import3DModel.ProgressPoxel.Max:=IndexPoint; if Array3DSPoints[i].Active then for k := 0 to Count3dsFace - 1 do begin // Import3DModel.ProgressPoxel.Position:=k; ShowRadius := i; if Array3DSPoints[k].Active and (k <> i) and (GetLength(Array3DSPoints[i].p, Array3DSPoints[k].p) < Array3DSPoints[i].Radius) then begin found := true; Array3DSPoints[k].Active := false; Array3DSPoints[k].Join := i; SumX := SumX + Array3DSPoints[k].p.x; SumY := SumY + Array3DSPoints[k].p.y; SumZ := SumZ + Array3DSPoints[k].p.z; Sum := Sum + 1; // Radius:=GetLength(Array3DSPoints[i].p,Array3DSPoints[k].p); end; end; if found then begin Array3DSPoints[i].p.x := SumX / Sum; Array3DSPoints[i].p.y := SumY / Sum; Array3DSPoints[i].p.z := SumZ / Sum; end; // end;
end; // Далее создаем лучевые множества, из каждой точки к каждому элементу, // при этом проверяем чтобы луч не пересекал треугольники // после сканирования всех точек, подсчитываем минимальные вхождения // затем из минимаьлных вхождений создаем множества, такие // чтобы начало множества не входило в следующее // получаем минимум множеств, эти минимумы и будут отсеченные элементы Process := 4; // создаем матрицу соединений Import3DModel.PoxelProcess.Caption := 'Joins Points'; Import3DModel.ProgressPoxel.Position := 0; Import3DModel.ProgressPoxel.Max := Count3dsFace; FoundMax := 1; FoundMin := Count3dsFace; ShowJoin := 0; // создадим матрицу из проверочных битов размером в inxexPoint x indexPoint SetLength(MatrixJoin, 0,0); { SetLength(MatrixJoin, Count3dsFace); for i := 0 to Count3dsFace - 1 do SetLength(MatrixJoin[i], Count3dsFace); } SetLength(MatrixJoin,Count3dsFace,Count3dsFace); IndexSet := 0;
for i := 0 to Count3dsFace - 1 do begin Import3DModel.ProgressPoxel.Position := i; Import3DModel.ProgressMain.Position := 50 + Round(i / Count3dsFace * 35); if RunThread.Terminated then Exit; FoundNum := 0; ShowJoin := i; if Array3DSPoints[i].Active then for j := i + 1 to Count3dsFace - 1 do if Array3DSPoints[j].Active and (GetLength(Array3DSPoints[i].p, Array3DSPoints[j].p) < Array3DSPoints[i].Radius * 5) then begin for r := 0 to Count3dsFace - 1 do begin pa := GetXYZfPoint(r, 0); pb := GetXYZfPoint(r, 1); pc := GetXYZfPoint(r, 2); if LineFace(Array3DSPoints[i].p, Array3DSPoints[j].p, pa, pb, pc, p) then Break; end; if r = Count3dsFace then begin MatrixJoin[i][j] := 1; Array3DSPoints[j].ShowJoin := i; Inc(FoundNum); end; IfMinMax(FoundMin,FoundMax,FoundNum); { if FoundNum > FoundMax then FoundMax := FoundNum; if FoundNum < FoundMin then FoundMin := FoundNum; } Array3DSPoints[i].Num := FoundNum; Inc(IndexSet); end; end; if IndexSet = 0 then begin //Process := 7; //Exit; IndexSet := 1 end; SetLength(ArraySet, 0); SetLength(ArraySet, IndexSet); IndexSet := 0; // Import3DModel.PoxelProcess.Caption:='Joins Points'; Import3DModel.ProgressPoxel.Position := 0; Import3DModel.ProgressPoxel.Max := Count3dsFace; Process := 5; // соединяем все ближние точки по матрице for i := 0 to Count3dsFace - 1 do if Array3DSPoints[i].Active then begin FoundNum := 0; for j := i + 1 to Count3dsFace - 1 do if MatrixJoin[i][j] = 1 then Inc(FoundNum); for j := 0 to i - 1 do if MatrixJoin[j][i] = 1 then Inc(FoundNum); if FoundNum = 0 then begin //*************************************** for j := i + 1 to Count3dsFace - 1 do if Array3DSPoints[j].Active then begin Import3DModel.ProgressPoxel.Position := i; Import3DModel.ProgressMain.Position := 85 + Round(i / Count3dsFace * 5); ShowJoin := i; for r := 0 to Count3dsFace - 1 do begin pa := GetXYZfPoint(r, 0); pb := GetXYZfPoint(r, 1); pc := GetXYZfPoint(r, 2); if LineFace(Array3DSPoints[i].p, Array3DSPoints[j].p, pa, pb, pc, p) then Break; end; if r = Count3dsFace then begin MatrixJoin[i][j] := 1; Array3DSPoints[j].ShowJoin := i; Inc(FoundNum); end; end //*************************** end; { if FoundNum > FoundMax then FoundMax := FoundNum; if FoundNum < FoundMin then FoundMin := FoundNum; } IfMinMax(FoundMin,FoundMax,FoundNum); Array3DSPoints[i].Num := FoundNum;
ArraySet[IndexSet] := i; Inc(IndexSet); end; Process := 6; // сортируем массив множеств и назначаем группы
for I := 0 to IndexSet - 2 do for J := IndexSet - 1 downto I + 1 do if Array3DSPoints[ArraySet[I]].Num < Array3DSPoints[ArraySet[j]].Num then begin T := ArraySet[I]; ArraySet[I] := ArraySet[J]; ArraySet[J] := T; end;
Import3DModel.PoxelProcess.Caption := 'Grouping'; Import3DModel.ProgressPoxel.Position := 0; Import3DModel.ProgressPoxel.Max := IndexSet; Group := 0; for r := IndexSet - 1 downto 0 do if Array3DSPoints[ArraySet[r]].Active and (Array3DSPoints[ArraySet[r]].Group = 0) then begin Import3DModel.ProgressPoxel.Position := IndexSet - r; Import3DModel.ProgressMain.Position := 90 + Round((IndexSet - r) / Count3dsFace * 5); i := ArraySet[r];
if (Array3DSPoints[i].Num = 0) then begin Inc(Group); Array3DSPoints[i].Group := Group; end else //if (Array3DSPoints[ArraySet[r]].Num>10) then begin Inc(Group); Array3DSPoints[i].Group := Group; GetJoinsPoint(i, Group); end; end; // увеличиваем множество, с проверкой по радиусу.
for i := 0 to Count3dsFace - 1 do if not Array3DSPoints[i].Active then Array3DSPoints[i].Group := Array3DSPoints[Array3DSPoints[i].Join].Group;
// теперь нам нужно из кучи множеств собрать лишь такие множества // которые будут иметь минимальное количество элементов // и не иметь головы множества другого множества, иначе эти // множества можно слаживать. // сложив минимальные множества мы получим минимум множеств Process := 7; // группировка мелких групп Import3DModel.PoxelProcess.Caption := 'Group Points'; Import3DModel.ProgressPoxel.Position := 0; Import3DModel.ProgressPoxel.Max := Group; for i := 0 to Group - 1 do begin Import3DModel.ProgressPoxel.Position := i; Import3DModel.ProgressMain.Position := 95 + Round(i / Group * 5); found := false; SumX := 0; SumY := 0; SumZ := 0; Sum := 0; if RunThread.Terminated then Exit;
for k := 0 to Count3dsFace - 1 do if Array3DSPoints[k].Active and (Array3DSPoints[k].Group = i) then begin //(GetLength(Array3DSPoints[i].p,Array3DSPoints[k].p)<Array3DSPoints[i].Radius) then if not found then begin j := k; end else begin Array3DSPoints[k].Active := false; Array3DSPoints[k].Join := j; end; SumX := SumX + Array3DSPoints[k].p.x; SumY := SumY + Array3DSPoints[k].p.y; SumZ := SumZ + Array3DSPoints[k].p.z; Sum := Sum + 1; found := true; end; if found then begin Array3DSPoints[j].p.x := SumX / Sum; Array3DSPoints[j].p.y := SumY / Sum; Array3DSPoints[j].p.z := SumZ / Sum; end; end;
// найдем все группы, посчитаем их количество, присвоим num // найдем самые маленькие num и соединим между собой пока они не // не достингут установленного предела.
FoundMax := 1; FoundMin := Count3dsFace; SetLength(ArraySet, 0); IndexSet := Group; SetLength(ArraySet, IndexSet); for i := 0 to Group - 1 do begin for k := 0 to Count3dsFace - 1 do if Array3DSPoints[k].Active and (Array3DSPoints[k].Group = i) then begin j := k; FoundNum := 1; Break; end;
for k := 0 to Count3dsFace - 1 do if not Array3DSPoints[k].Active and (Array3DSPoints[k].Group = i) then Inc(FoundNum);
IfMinMax(FoundMin,FoundMax,FoundNum); { if FoundNum > FoundMax then FoundMax := FoundNum; if FoundNum < FoundMin then FoundMin := FoundNum; } Array3DSPoints[j].Num := FoundNum; ArraySet[i] := j; end; // Очищем матрицу соединений { for i := 0 to Count3dsFace - 1 do for j := 0 to Count3dsFace - 1 do MatrixJoin[i][j] := 0; } SetLength(MatrixJoin, 0,0); SetLength(MatrixJoin,Count3dsFace,Count3dsFace);
// сканируем по поверхностям, если треугольник соединяется поверхностью // то получаем элемент. Группы соединяем поэлементно // если треугольник группы не соединен с остальными, убираем его из группы // таким образом мы получим замкнутые блоки // сканирование очень простое, берем все треугольники группы, составляем матрицу // соединений - сверяем индекс точки с индексами точек сверяемого треугольника. // всего 9 сравнений // находим максимальные соединения // делим группу на элементы. // отбрасываем минимальный элемент. // присоединяем минимальный элемент к группе с которой он соединяется. for i := 0 to Count3dsFace - 1 do for j := i + 1 to Count3dsFace - 1 do begin if (MatrixJoin[i, j] = 0) and TestFaceConnect(i, j) then begin MatrixJoin[i][j] := 1; Inc(Array3DSPoints[i].NumJoins); Inc(Array3DSPoints[j].NumJoins); end; end; // можно создать матрицу граней // для единичной поверхности имеет три свободные грани. // нужно отделить и соеденить с ближними. // MatrixJoin[0][0]:=0;
// сортируем массив { for I := 0 to IndexSet - 2 do for J := IndexSet-1 downto I + 1 do if Array3DSPoints[ArraySet[I]].Num <Array3DSPoints[ArraySet[j]].Num then begin T := ArraySet[I]; ArraySet[I] := ArraySet[J]; ArraySet[J] := T; end; }
///начиная с минимальных групп ведем сканирование, и соединяем их с максимальными группами for i := 0 to 5 do //for r:=0 to Group-1 do //for j:=IndexSet-1 downto 0 do begin // r - группа индекс ее // ArraySet[r] - индекс центра группы // бемем группу и сканируем каждый ее элемент // отделяем элемен и присоединяем к другой группе // r:=Array3DSPoints[ArraySet[j]].Group; // // r:=j; for k := 0 to Count3dsFace - 1 do // if (Array3DSPoints[k].Group=r) then begin // сканируем элемент k // находи все плоскости соединяющиеся с ним FoundNum := GetMaxJoinsFaceGroup(k, Array3DSPoints[k].Group); if FoundNum < 2// or (Array3DSPoints[k].NumJoins<3) then begin Array3DSPoints[k].Group := FindNearGroup(k, Array3DSPoints[k].Group); // inc(Array3DSPoints[k].NumJoins); end; // проверяем и считаем количество соединений с главной группой // если соединение слабое // соединяем с другой максимальной группой. end; // if Array3DSPoints[ArraySet[r]].Active // end;
// Конец дегруппирования IndxGroup:=1; GroupArray:=nil; SetLength(GroupArray,Group); // Если есть группы for k := 0 to Count3dsFace - 1 do if GroupArray[Array3DSPoints[k].Group]=0 then begin GroupArray[Array3DSPoints[k].Group]:=IndxGroup; inc(IndxGroup); // создаем для групп dummy poxel Name_Groups // берем каждую группу и преобразуем в поксель // Array3DSPoints[k].Group := end;
MaxVert:=Length(Obj3D.PointsArr); SetLength(ConvertTable,MaxVert);
for g:=1 to IndxGroup-1 do begin PoxObj3D.Name:=Format('%s_SubGroup_%d',[Obj3D.Name,g]); // PoxObj3D.PointsArr:=Obj3D.PointsArr; PoxObj3D.FaceArr:=nil; SetLength(PoxObj3D.FaceArr,Count3dsFace); // инициализируем конверт таблицу for i:=0 to MaxVert-1 do ConvertTable[i]:=-1;
j:=0; k:=0; for i:=0 to Count3dsFace-1 do if (GroupArray[Array3DSPoints[i].Group]=g) then begin // берем лицо из этой группы // ObjArray3D[ArrayIndex].FaceArr[j]:=Obj3D.FaceArr[i]; PoxObj3D.FaceArr[j]:=Obj3D.FaceArr[i]; // копируем его в группу по индексу for n:=0 to 2 do // заполняем таблицу конверта if ConvertTable[Obj3D.FaceArr[i][n]]=-1 then begin // назначаем новый номер поверхности ConvertTable[Obj3D.FaceArr[i][n]]:=k; PoxObj3D.FaceArr[j][n]:=k; inc(k); end else // назначаем назначеный номер поверхности PoxObj3D.FaceArr[j][n]:=ConvertTable[Obj3D.FaceArr[i][n]];
inc(j); // Import3DModel.ProgressPoxel.Position := 60+Round(i / FaceCount_3DS * 20); end; SetLength(PoxObj3D.FaceArr,j); // обрезаем поверхности SetLength(PoxObj3D.PointsArr,k); // обрезаем точки
for i:=0 to k-1 do // копирование точек for j:=0 to MaxVert-1 do if ConvertTable[j]=i then PoxObj3D.PointsArr[i]:=Obj3D.PointsArr[j];
GetPoxProperties(PoxObj3D,Poxel); PoxObj3D.PointsArr:=nil; PoxObj3D.FaceArr:=nil; if RunThread.Terminated then Exit; end; {$ENDIF} end // GroupMode Это резалка о которой ты говорил, я ее писал месяц гдето, но в итоге она даже пингвина не смога разрезать на лапы, крылья и хвост, поэтому я отказался от этого, кто хочет пусть свою напишет, я не возражаю
|
|
|
|
Сообщений: 1042
|
Опубликовано: 08.01.2009, 00:52:53
Уважаю за принципиальность сам принципиальный и поэтому страдаю часто =) Конечно если ты хочешь создать что-то новое и оригинальное, то плагиат это зло. Но когда речь идет о тысячах поверхностей, о сотнях объектах, к примеру Статуя Свободы, то моделировать ее с нуля, идиотизм полнейший, хотя признаюсь вся нижнаяя часть, т.е. то на чем она стоит, я моделировал с нуля =) (верхнюю часть же просто разбивал вручную время много ушло, но я доволен!!! Удовольствие от созерцания результата важнее убитого времени )) Мотоцикл тоже создавать с нуля было бы глупо, да и это все проверочные карты были, надо было посмотреть на возможности нового инструмента. Что касается карты системника, то я бы не играл на такой, скучно там же везде платы плоские, никакой свободы нету... провода, еще зацепиться можно... Но смотря какой системник =) ОПА у меня появилась идея!!!!! хочу карту из МАТРИЦЫ всю зеленую в иероглифах, надо только текстурку найти подходящую... =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 08.01.2009, 19:22:30
Для W3D скрипт функции комнды такой Code function SetupWormsAndTeams()
WormIndex = 0 TeamIndex = 0
GM = QueryContainer("GM.GameInitData")
if GM.NumberOfTeams>=1 then SetupTeam(GM.T1_Name, GM.T1_NumOfWorms, GM.T1_W1_Name, GM.T1_W2_Name, GM.T1_W3_Name, GM.T1_W4_Name, GM.T1_W5_Name, GM.T1_W6_Name, GM.T1_Skill, GM.T1_Grave, GM.T1_Flag, GM.T1_Speech, GM.T1_IsLocal, GM.T1_AlliedGroup) end if GM.NumberOfTeams>=2 then SetupTeam(GM.T2_Name, GM.T2_NumOfWorms, GM.T2_W1_Name, GM.T2_W2_Name, GM.T2_W3_Name, GM.T2_W4_Name, GM.T2_W5_Name, GM.T2_W6_Name, GM.T2_Skill, GM.T2_Grave, GM.T2_Flag, GM.T2_Speech, GM.T2_IsLocal, GM.T2_AlliedGroup) end if GM.NumberOfTeams>=3 then SetupTeam(GM.T3_Name, GM.T3_NumOfWorms, GM.T3_W1_Name, GM.T3_W2_Name, GM.T3_W3_Name, GM.T3_W4_Name, GM.T3_W5_Name, GM.T3_W6_Name, GM.T3_Skill, GM.T3_Grave, GM.T3_Flag, GM.T3_Speech, GM.T3_IsLocal, GM.T3_AlliedGroup) end if GM.NumberOfTeams>=4 then SetupTeam(GM.T4_Name, GM.T4_NumOfWorms, GM.T4_W1_Name, GM.T4_W2_Name, GM.T4_W3_Name, GM.T4_W4_Name, GM.T4_W5_Name, GM.T4_W6_Name, GM.T4_Skill, GM.T4_Grave, GM.T4_Flag, GM.T4_Speech, GM.T4_IsLocal, GM.T4_AlliedGroup) end
SendMessage("WormManager.Reinitialise") end , для W4 смотрите че у вас, походу должно быть похожее. Как я понял надо заменить функцию SetupTeam Code function SetupTeam(TeamName, NumWorms, Worm1Name, Worm2Name, Worm3Name, Worm4Name, Worm5Name, Worm6Name, Skill, Grave, Flag, Speech, IsLocal, AlliedGroup)
local lock, team
lock, team = EditContainer(GetTeamContainerName(TeamIndex)) team.Active = true team.Name = TeamName team.TeamColour = 0 team.Skill = Skill team.GraveIndex = Grave team.FlagGfxName = Flag team.AlliedGroup = AlliedGroup team.IsLocal = IsLocal if Skill>0 then team.IsAIControlled = true else team.IsAIControlled = false end
-- PC: added this to reset the win count for the teams if this is the first round played. local iRounds = GetData("GameOver.RoundNumber") if iRounds == 0 then team.RoundsWon = 0 end
CloseContainer(lock) -- must close the container ASAP
if NumWorms>=1 then SetupWorm(Worm1Name, Speech) end if NumWorms>=2 then SetupWorm(Worm2Name, Speech) end if NumWorms>=3 then SetupWorm(Worm3Name, Speech) end if NumWorms>=4 then SetupWorm(Worm4Name, Speech) end if NumWorms>=5 then SetupWorm(Worm5Name, Speech) end if NumWorms>=6 then SetupWorm(Worm6Name, Speech) end
-- set the inventory --CopyContainer("Inventory.Team.Default", GetTeamInventoryName(TeamIndex))
--SetSpecialWeapon(TeamIndex, SWeapon) TeamIndex = TeamIndex+1
end на свою, так можно сделать столько червей сколько хочешь, вопрос в другом. Каждый червь это выделеная ячейка в памяти Вот все возможные ячейки червей Code function GetWormContainerName(Id)
local DataId = { "Worm.Data00", "Worm.Data01", "Worm.Data02", "Worm.Data03", "Worm.Data04", "Worm.Data05", "Worm.Data06", "Worm.Data07", "Worm.Data08", "Worm.Data09", "Worm.Data10", "Worm.Data11", "Worm.Data12", "Worm.Data13", "Worm.Data14", "Worm.Data15", "Worm.Data16", "Worm.Data17", ""} , как мы видем их всего 18!!! И болльше сделать неудасться, по крайне мере в W3D, может в W4 можно добавить контейнеры, но даю 90% что нельзя.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 08.01.2009, 21:05:46
Короче исследовав эти файлы я понял что отличаются они лишь тремя контейнерами W4 имеет: XColor4ubSet WF имеет: XLightingEnable XMeshDescriptor В остальном структура файла шапки полностью одинаковая. Задача в удалении лишних контейнеров и добавлении нужных, чтобы получить 100% совместимость...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 08.01.2009, 22:20:39
можно, но вопрос в том что там таблица индексов для треугльников другая... я не понял какая, пытаюсь раскодировать... 3DS import работает =) Осталось вытащить правильно шляпы...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 09.01.2009, 15:04:13
Короче облом с шапками (((((( 3DScreenshot некоректно сохроняет текстурные координаты... А таблица индексов в WF ЕВРЕЙСКАЯ я ее не понимаю и не пойму, Code 00 00 00 DD 03 08 00 08 00 07 00 06 00 47 00 46 00 48 00 01 00 01 00 46 00 02 00 02 00 06 00 06 00 06 00 08 00 09 00 0A 00 0B 00 0B 00 09 00 09 00 09 00 0B 00 0C 00 0D 00 0E 00 0F 00 0F 00 10 00 0E 00 11 00 05 00 03 00 02 00 00 00 01 00 01 00 13 00 13 00 13 00 14 00 12 00 15 00 49 00 50 00 51 00 53 00 52 00 20 00 4D 00 1B 00 4E 00 1A 00 54 00 54 00 16 00 16 00 13 00 17 00 14 00 1E 00 1C 00 21 00 1D 00 1D 00 1A 00 1A 00 18 00 1B 00 19 00 20 00 1F 00 21 00 21 00 1E 00 1F 00 17 00 19 00 16 00 18 00 18 00 14 00 14 00 14 00 1C 00 15 00 1D 00 1D 00 1A 00 1A 00 1A 00 22 00 18 00 23 00 16 00 24 00 13 00 12 00 12 00 26 00 26 00 26 00 27 00 25 00 28 00 57 00 5F 00 60 00 60 00 2C 00 2C 00 2C 00 2F 00 30 00 5D 00 5E 00 5C 00 5C 00 28 00 28 00 28 00 31 00 27 00 33 00 29 00 34 00 2B 00 35 00 2D 00 36 00 2E 00 37 00 37 00 31 00 31 00 31 00 32 00 28 00 5F 00 5F 00 38 00 38 00 38 00 3A 00 39 00 3C 00 3B 00 78 00 78 00 3E 00 3E 00 3E 00 3F 00 3D 00 70 00 71 00 74 00 75 00 75 00 40 00 40 00 40 00 41 00 42 00 44 00 6A 00 73 00 7A 00 7A 00 41 00 41 00 41 00 43 00 44 00 45 00 45 00 49 00 49 00 49 00 12 00 4A 00 56 00 4C 00 55 00 4E 00 54 00 54 00 49 00 49 00 4A 00 4B 00 4C 00 4D 00 4E 00 4E 00 15 00 15 00 15 00 4F 00 50 00 53 00 53 00 49 00 49 00 51 00 4B 00 52 00 4D 00 4D 00 25 00 25 00 25 00 57 00 58 00 59 00 5A 00 5A 00 58 00 58 00 58 00 5A 00 5B 00 5C 00 5D 00 5D 00 64 00 64 00 66 00 65 00 67 00 6F 00 72 00 76 00 77 00 77 00 66 00 66 00 66 00 67 00 68 00 69 00 69 00 6C 00 6C 00 6D 00 6B 00 6E 00 6E 00 79 00 79 00 3C 00 78 00 78 00 7B 00 7B 00 7B 00 6A 00 7A 00 7A 00 7C 00 7C 00 7E 00 7D 00 83 00 80 00 82 00 81 00 85 00 84 00 94 00 81 00 93 00 80 00 92 00 7D 00 91 00 7C 00 90 00 7F 00 7F 00 7C 00 7E 00 7E 00 86 00 86 00 86 00 87 00 88 00 8C 00 9B 00 9D 00 9E 00 9C 00 9A 00 9A 00 89 00 89 00 89 00 8A 00 8B 00 8D 00 99 00 98 00 96 00 96 00 89 00 89 00 89 00 8B 00 8C 00 9C 00 9D 00 9D 00 8C 00 8C 00 8C 00 87 00 89 00 89 00 8E 00 8E 00 8E 00 86 00 88 00 88 00 99 00 99 00 99 00 96 00 9A 00 9E 00 9E 00 A0 00 A0 00 A1 00 9F 00 A2 00 A2 00 A4 00 A4 00 A5 00 A3 00 A6 00 A6 00 A8 00 A8 00 A9 00 A7 00 AA 00 AA 00 AC 00 AC 00 AD 00 AB 00 AE 00 AE 00 B0 00 B0 00 B1 00 AF 00 B2 00 B2 00 B4 00 B4 00 B5 00 B3 00 B6 00 B6 00 B8 00 B8 00 B9 00 B7 00 BA 00 BA 00 BC 00 BC 00 BD 00 BB 00 BE 00 BE 00 BF 00 BF 00 C0 00 C1 00 C5 00 C6 00 C7 00 C8 00 CD 00 C2 00 CA 00 BF 00 C9 00 C9 00 C2 00 C2 00 BF 00 C1 00 C1 00 C0 00 C0 00 C0 00 C3 00 C4 00 C9 00 CA 00 CA 00 C5 00 C5 00 C5 00 C0 00 C4 00 C4 00 CB 00 CB 00 CB 00 CC 00 CD 00 D0 00 CA 00 CE 00 C4 00 CF 00 CF 00 C7 00 C7 00 CB 00 CD 00 CD 00 11 00 11 00 11 00 10 00 03 00 04 00 00 00 00 00 57 00 57 00 57 00 60 00 59 00 61 00 5A 00 62 00 5C 00 63 00 5E 00 37 00 30 00 2E 00 2C 00 2D 00 2A 00 2B 00 26 00 29 00 27 00 27 00 02 00 02 00 02 00 95 00 05 00 0C 00 0E 00 0E 00 9B 00 9B 00 9B 00 9E 00 97 00 96 00 8E 00 8F 00 86 00 По ней у треугольника вершины (8,8,7) (6,47,46) (48,1,1) (46,2,2) (6,6,6) ... т.е. получается абсурд, треугольник из двух и трех одинаковых вершин, это уже отрезок или точка... индексы должны быть разными, а тут они одинаковые, и так во всех файлах WF. TEAM17 евреи!!!!!! или же Индусы =) короче у них все через жопу написано, это еще k^2 мне коворил, когда объяснял формат покселя.... Так что, Nezon, забей на это дело, если конечно тебе не влом самому налаживать текстуры =) Проблемы: 1. Невозможно понять структуру таблицы индексов WF. Т.е. мы имеет все вертексы 3D модели, имеет текстуру и координаты. но мы не имеем правильной таблицы треугольников... 2. 3DScreenshot не сохранает текстуры, т.е. у нас есть таблица треугольников, есть вертексы, но нету текстурных координат... Короче я умываю руки на время сессии, сдам все экзамены, тогда может че и решу, а так забей...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 11.01.2009, 05:55:00
Решил поэксперементировать... И что я обнаружил, создать одну команду из 8 червей впролне реально, но 9 на 9 не получается... Да и толку нет, я обнаружил другое!!! Можно создать CPU_TEAM которая будет играть онлайн, вот это будет прикольно, т.к. иногда попросту нехватает играков, а CPU в онлайн не добавишь обычными методами.... Реинкорнация. Пока еще не знаю чем врубать эту опцию, наверно поставлю на вормпот, а пока что я научился реинкорнировать червя =) ВЕЩЬ!!!!!! Убитый червь вновь оживает, причем становиться на свободное поле, надо еще подумать куда всунуть эту опцию, но опция СУПЕРСКАЯ!!! Даже если убита вся команда и игра не окончена, то реинкорнировавший червь продолжает играть за команду! Поставлю наверно эту опцию на землетряску, у нас там шаман в бубен бьет, прикольно будет
|
|
|
|
Сообщений: 1042
|
Опубликовано: 16.01.2009, 22:09:05
А за себя голосовать можно? =) Что касается Картоделанья то я делал не так много карт Из них ручная работа была : 3D Labyrinth Chess Cocons Cubos Death Staff Mountains Psyduck Island - модель утки Sahara Snooker Spiders - паутина , я ее синусами рисовал в Exel Stars Underground Статуя свободы весь низ - ручная работа Счас делаю Южный парк =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 16.01.2009, 22:24:04
Quote (firsacho) Да... за дни и ночи щелканья по клавиатуре, за месяцы работы над кодом, за полное самоотвержение и фанатичное посвещение себя червякам Медаль тебе за такие слова!!! =) Моник у меня и так окошечко 22". Да и как правильно выразился SW_Krash я это все делаю из-за удовольствия от самого процесса, жаль что нету "психов" в помощь, так бы быстрее дело шло, а то все в одиночку... мануал писал вчера... морока ужасная... но доделаю я ее, раз взялся... А так спасибо за медаль без названия =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 17.01.2009, 06:56:17
Я переделал из 2 скаченых с нета моделей, свою в соответсвии с пропорциями мультика, в итоге получилось "канфетка" =) Счас думаю над дизайном. Quote (Герыч) что это значит??? Это значит что в редакторе v1.0 чтобы регулировать слои нужно было вставлять таблицу данных, а таблицу с данными я заполнял через Excel ну а функцию полукруга я взял sin. Кстати снукер тоже так делался, ножки стола - это синус в квадрате что-ли.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 17.01.2009, 15:00:41
Ну это уже сам делай для w4, если надо модель Шефа могу дать, а вот автобус и машину делать мне влом, мне для w3d хватит и этого:
|
|
|
|
Сообщений: 1042
|
Опубликовано: 17.01.2009, 21:37:27
Для тех кто не может дождаться мануала, хотя в принципе его и читать мало кто будет. Я все таки создам топик. Итак - текстура в покслельном исполнении - это блок, состоящий из 5 текстур. Первая отвечает за верх, вторая за боковушки, третья за низ, четвертая за грани, пятая за внутринний низ. Чтобы создать свою текстуру, нужно загрузить текстурный лист (шаблон). Загрузить в память текстуры. Выбрать номер блока. Поменять текстуры в блоке можно лишь перетаскиванием из Текстурного окна. Название блока меняется контекстным меню. Блок создан, но текстуры лежат крыво? Нам нужно зайти в панель Текстурных координат. Code 0.250000 0.000000 0.000000 0.000000 0.000000 0.250000 0.150000 0.000000 -0.200000 0.000000 0.250000 0.000000 0.000000 0.00000 0 0.000000 0.000000 мы имеем следующую матрицу по умолчанию. Как она работает я до сих пор не понял =) Знаю лишь одно, методом проб и ошибок можно узнать какая координата за что отвечает. Изменять координаты нужно через консольное меню. Герыч может ты мне объяснишь как они устроены, я когда делал редактор, то я ТУПО перебирал координаты, пока не получил нужный эффект =) Теорию до сих пор не знаю. Но матрицу представляю так (Мировые координаты): Code x x+ x+z z+x z+ z xy x+y zy y+x y y+z x+ z+ y+x y+z Пороюсь может найду свои записи по этому делу...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 21.01.2009, 21:35:24
есть новости интересные k^2 был замечен на BlameThePixel Last active: 18725 minutes ago (that's 13.003 days) Если он ответит на мое сообщение может поможет с шапками....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.01.2009, 16:57:53
У меня появилась идея как вставить новые текстуры в W4/W3D не причинаяя вреда другим . Code Итак: A14 - возможно используется A15 A60 A61 - нигде не упоминается C18 C61 - нигде не упоминается B05_08 - нигде не упоминается B05_09 - нигде не упоминается Я предпологаю что они не используются в игре, и если это так, то можно вставлять свои вместо этих. Тут их не много, но все же... Может если поискать еще можно найти и больше, текстур которые не используются в игре....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.01.2009, 18:15:23
У меня тут появилась идея создать карту Matrix. В ней намереваюсь создать такие сцены как Зал с колономи, Зеленую комнату, Вертолет стреляющий в небоскреб, крышу. Короче думаю над тем нужны ли на карте персонажи, типа уклоняющийся от пуль Нео, или нафиг нужен =) Можно даже сделать червяков, но это много работы... Карту намереваюсь делать вручную, с текстурами проблема конечно, но попробую сначало стандартные. Как вам идея? P.S. Проблема еще в том, карту делаю пока для W3D, чтобы карта была в W4 надо опять же подбирать текстуры...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.01.2009, 21:17:19
Полюбому текстуру придется вставлять, стандартную никак не приспособишь. Я нашел вот такую и такую А вот с моделью Нео, это надо модельера искать =) Или пытаться стырить с игры Path of Neo тока врятли получится....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.01.2009, 23:12:01
У меня уже кое что получилось =) выглядит круто, я заменил W3D текстуру, и заодно разгадал ее код Там текстура в формате MultiMap, т.е. 256x256, 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1 Пришлось создавать все 9 текстур и вставлять в код =) В итоге получилось то что надо! Правда сглажка мне не очень нравиться в W3D но пойдет =) -- Темновато немного... (((
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.01.2009, 00:14:20
Немного осветлил...
|
|
|
|