31 декабря 2010

С Новым Годом!

Armanenshaft Team поздравляет вас с Новогодними Праздниками.
Желает вам в Новом году систематизировать личный компас и продвигаться
не смотря
на пустозвонные сгустки жизни.
Набраться смелости и силы для полноценной творческой жизни.
Продуктивных проектов и скорых релизов.
Обходить стороной болото RU сегмента и прочего В Контактного варива.
Опираться на достоверность и качество информации.
С Новым 2011 Годом!

29 декабря 2010

Nifskope / Morrowind / Blender3D

NifSkope - это великолепная графическая программа для открывания NIF-файлов, просмотра их содержания, редактирования, ретекстурирования моделей и сохранения их в новом или текущем NIF-файле для игр серии The Elder Scrolls - TES 3: Morrowind и TES 4: Oblivion.

***

Вы можете использовать ее также для быстрого изменения специфических свойств файла NIF, таких, например, как изменение текстур, добавляющих прозрачность, и более. Трехмерная визуализация файла NIF в окне рендеринга позволяет немедленно и наглядно увидеть все произведенные вами изменения в загруженном файле. Вы можете даже создавать шаблоны текстур и импортировать или экспортировать различные файлы моделей в формате OBJ.
Помимо вышеперечисленных возможностей, программа позволяет просмотреть любую анимацию, хранящуюся в файлах NIF и KF для всех версий этих файлов.

***

http://sourceforge.net/projects/niftools/files/

http://sourceforge.net/projects/niftools/files/nifskope/

***

Сборка...

sudo apt-get update
sudo apt-get install build-essential checkinstall git-core g++ qt4-qmake libqt4-dev


cd niftools/nifskope
./makeconfig.sh
qmake-qt4
make

./NifSkope

***

Blender NIF Scripts - скрипт для импорта/экспорта NIF-файлов из Blender. Поддерживает импорт анимационных групп. Работает также с TES 4: Oblivion.

http://sourceforge.net/projects/niftools/files/blender_nif_scripts/

23 декабря 2010

Silver Web: Angedonia / Доп Обзор

Наработки дополнительного обзора (дальнего) сектора.

- Активация F3.
- Позволяет увеличить общию дистанцию обзора сектора.
- Чем то схоже с перескопом.
- Возможны доработки с Zoomом.
- Немного падает FPS от дальней прорисовки сектора.

22 декабря 2010

Silver Web: Angedonia / Medal-2

Продолжение развития поощрения игрока...

***

- Переработаны текстуры медалий.
- При уничтожении пяти кораблей противника игроку полагается медаль (Штурмовик).
- Последует возов станции поддержки (support).
- Платформа находится на окраине сектора / Восполнить боезапас можно пролетев в аккурат вращению платформы.

Возможно будет отдельно описание всех наград или как в основной версии отображение заслуг.

21 декабря 2010

Silver Web: Angedonia / Продолжение Смены Поведения Ботов

Продолжение Смены Поведения Ботов...
Дополнительное поведение и его изменение при потери отдельных частей корабля.

- При потери стабилизатора (пошли эффекты) корабль противника делает крен и произвольно
начинает вращение по своей оси.
- Пока угол крена и направления зависимость от стороны потери роли не играет.
- Вращение эмулируется за счёт притяжения малого тела к большиму (типо в реалии).
- Боевые функции ботов исчезают но возможность столкновения присутствует.
- Корабль не становится лёгкой целью для стрельбы.
- Продолжение доработок следует...

19 декабря 2010

Silver Web: Angedonia / Art / Abyss

Проходная работа...

- Рендр 3D сцен космоса с игры.
- Живые текстуры (переработка NASA).
- Создано в Blender3D 2.49.
- Основной рендер Blender3D 2.55 Beta.
- Лёгкие доработки в GIMP (тени,надпись).
- По мотивам работ BRUCE PENNINGTON.

Полный формат...

http://sourceforge.net/projects/silverweb/files/Art/Abyss.png/download

Весь спектр работ...

http://sourceforge.net/projects/silverweb/files/Art/

12 декабря 2010

Silver Web: Angedonia / Минимальная Баллистика

Решено добавить минимальную баллистику с дальнейшем развитием...

***

Пока всё довольно просто...
И ясно как божий день но почему то используют не многие.

- СМ Шот.
- Снаряд имеет начальную (основную скорость).
- Через (delay) промежуток времени (по умолчанию упор на невесомость)
снаряд меняет скорость и направление.
- Создается назначение основного проперти равным 1 (снаряд готов к смени
траектории).
- Создаётся новая скорость и угол смещения...

Тут все параметры под свою условность подгонка и проточка исключительно
в ваших моментах.

11 декабря 2010

PyOpenGL / Проба / Тесты

Простейший пример, который выводит на экран окно с вращающимся кубиком
(код прокомментирован):

# -*- coding: utf-8 -*-
from OpenGL import GL, GLU, GLUT
import sys

def InitGL(Width, Height):
# цвет фона в окне OpenGL RGBA - красный, зелёный, синий, альфа;
# значения должны лежать в пределах от 0 до 1:
GL.glClearColor(0.0, 0.0, 0.0, 0.0) # чёрный
# буфер глубины: более близкие объекты рисуются впереди дальних:
GL.glClearDepth(1.0)
GL.glDepthFunc(GL.GL_LESS)
GL.glEnable(GL.GL_DEPTH_TEST)
# включается освещение:
GL.glEnable(GL.GL_LIGHTING)
# включается нулевой источник света (всего их 8):
GL.glEnable(GL.GL_LIGHT0)
# включается управление материалом (цвет и отражающие способности)
предметов при помощи функции glColor:
GL.glEnable(GL.GL_COLOR_MATERIAL)
# параметры изображения объектов в зависимости от размеров окна:
GL.glMatrixMode(GL.GL_PROJECTION)
GL.glLoadIdentity() # восстанавливаем координаты мира
GLU.gluPerspective(45.0, float(Width)/float(Height), 0.1, 100.0)
GL.glMatrixMode(GL.GL_MODELVIEW)

# вызывается при изменении размеров окна:
def ReSizeGLScene(Width, Height):
if Height == 0: Height = 1
GL.glViewport(0, 0, Width, Height)
# параметры изображения объектов в зависимости от размеров окна:
GL.glMatrixMode(GL.GL_PROJECTION)
GL.glLoadIdentity() # восстанавливаем координаты мира
GLU.gluPerspective(45.0, float(Width)/float(Height), 0.1, 100.0)
GL.glMatrixMode(GL.GL_MODELVIEW)

# рисование вращающегося куба:
def DrawGLScene():
global rot
rot = (rot + 0.01) % 360 # увеличиваем угол поворота куба
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) #
очищаем экран
GL.glLoadIdentity() # восстанавливаем координаты мира
# перемещаем систему координат в точку, заданную параметрами X, Y, Z:
GL.glTranslatef(0.0, 0.0, -10.0) # на 10 пунктов вдоль оси Z в
отрицательном направлении
# вращаем куб вокруг вектора, заданного тремя параметрами:
GL.glRotatef(rot, 1.0, 0.0, 0.0) # вокруг оси X
GL.glRotatef(rot, 0.0, 1.0, 0.0) # вокруг оси Y
GL.glRotatef(rot, 0.0, 0.0, 1.0) # вокруг оси Z
# цвет куба, параметры RGBA:
GL.glColor4f(0.0, 0.7, 0.1, 1)
GLUT.glutSolidCube(3) # рисует куб с длиной стороны 3
GLUT.glutSwapBuffers() # выводит всё на экран

# обработка нажатия Escape:
def KeyPressed(*args):
if args[0]=='\033': sys.exit()

rot = 0
GLUT.glutInit(sys.argv)
GLUT.glutInitDisplayMode(GLUT.GLUT_RGBA | GLUT.GLUT_DOUBLE |
GLUT.GLUT_ALPHA | GLUT.GLUT_DEPTH)
GLUT.glutInitWindowSize(400, 300)
GLUT.glutInitWindowPosition(0, 0)
GLUT.glutCreateWindow('OpenGL демонстрация')
GLUT.glutDisplayFunc(DrawGLScene)
GLUT.glutIdleFunc(DrawGLScene)
GLUT.glutReshapeFunc(ReSizeGLScene)
GLUT.glutKeyboardFunc(KeyPressed)
InitGL(400, 300)
GLUT.glutMainLoop()

Links to free & open source Python game programming resources

==Python==
* [http://www.python.org/ Python website]

* Documentation:
* [http://www.python.org/doc/ Python documentation]

* Tutorials:
* [http://docs.python.org/tutorial/ Official Python tutorial]
* [http://diveintopython.org/ Dive into Python] by Mark Pilgrim
* [http://www.greenteapress.com/thinkpython/thinkpython.html How to
Think Like a Computer Scientist] by Allen B. Downey

* [http://wiki.python.org/moin/GameProgramming List of Python game
programming tools]

==Pygame==
* [http://www.pygame.org/ Pygame website]

* Documentation:
* [http://www.pygame.org/docs/ Pygame documentation]

* Tutorials:
* [http://www.pygame.org/wiki/tutorials Pygame tutorials]
* [http://www.pygame.org/wiki/CookBook Pygame cookbook]
* [http://rene.f0o.com/mywiki/PythonGameProgramming Python Game
Programming] by Rene Dudfield & Geoff Howland
* [http://inventwithpython.com/ Invent your own computer games with
Python] by Albert Sweigart

* [http://www.pygame.org/tags/libraries List of Pygame Libraries]

==Networking==
* Documentation:
* [http://docs.python.org/library/socket.html Socket - Low-level
networking interface]

* Tutorials:
*
[http://www.devshed.com/c/a/Python/Sockets-in-Python-Into-the-World-of-Python-Network-Programming/
Sockets in Python] by A.P.Rajshekhar
* [http://ilab.cs.byu.edu/python/ Python network programming] by
Daniel Zappala
* [http://gafferongames.com/networking-for-game-programmers/
Networking for game programmers] by Glenn Fiedler
* [http://code.google.com/p/netgame/ tutorial C++ code]
*
[http://www.flipcode.com/archives/Network_Game_Programming-Issue_01_Things_that_make_you_go_hmm.shtml
Network game programming] by Dan Royer

* Libraries:
* [http://twistedmatrix.com/trac/ Twisted framework]
*
[http://onlamp.com/pub/a/python/2006/08/10/untwisting-python-network-programming.html
Untwisting Python network programming] by Kendrew Lau
* [http://www.ibm.com/developerworks/linux/library/l-twist1.html
Network programming with the Twisted framework] by David Mertz
*
[http://www.pygame.org/project-Mastermind+Networking+Lib-859-.html
Mastermind networking lib] (TCP and UDP) by Ian Mallett
* [http://code.google.com/p/podsixnet/ Podsixnet game networking
library]

== Graphics ==
* Tutorials:
* [http://nehe.gamedev.net/ NeHe OpenGL tutorial]
* [http://www.pygame.org/gamelets/games/nehe1-10.zip NeHe Python
code]
* [http://anomtech.uuuq.com/Index.php?page=Tutorials Anomalistic
Technologies OpenGL Tutorial]

* 2D Engines:
* [http://matthewmarshall.org/projects/rabbyt/ Rabbyt fast sprite
engine]
* [http://www.alobbs.com/pykyra Pykyra]
* [http://code.google.com/p/flamingoengine/ Flamingo 2D game engine]

* 3D Libraries:
* [http://pyopengl.sourceforge.net/ PyOpenGL]
* You may want to use [http://numpy.scipy.org/ NumPy] for
[http://www.ruthless.zathras.de/facts/apps/polygonesia/3d-transformation-matrix.php
matrix transformations]
* [http://pyglet.org/ Pyglet multimedia library]
*
[http://www.learningpython.com/2007/11/10/creating-a-game-with-pyglet-and-python/
Pyglet game programming tutorial]
* [http://www.pygame.org/project-PYGGEL-968-.html PYGGEL]
* [http://www.pygame.org/project-glLib+Reloaded-1326-.html glLib
Reloaded]

* 3D Engines:
* [http://www.blender.org/ Blender 3D] content creation suite
* [http://wiki.blender.org/index.php/Doc:Manual/Extensions/Python
Blender 3D Python scripting]
* [http://wiki.blender.org/index.php/Extensions:Py/Scripts
Blender 3D Python tutorials]
*
[http://www.ruthless.zathras.de/facts/apps/polygonesia/blender.php Death
to usability, or learn Blender in 20 minutes nonetheless]
* [http://www.ogre3d.org/wiki/index.php/PyOgre PyOgre]
* [http://www.crystalspace3d.org/main/Main_Page Crystalspace 3D]
* [http://www.crystalspace3d.org/main/PyCrystal Python bindings
for CrystalSpace]
* [http://irrlicht.sourceforge.net/ Irrlicht]
* [https://opensvn.csie.org/traccgi/pyrr Pyrr Python bindings for
Irrlicht] (out of date & no longer maintained)
* [http://www.pysoy.org/ pysoy 3D game engine]

* [http://www.vrplumber.com/py3d.py List of Python 3D Software]
* [http://www.moddb.com/engines/ List of game engines] at Mod DB

== Physics ==
* Tutorial:
* [http://gafferongames.com/game-physics/ Game physics tutorial] by
Glenn Fiedler

* Libraries:
* [http://www.pygame.org/project-pyBox2D-723-.html Pybox 2D]
* [http://code.google.com/p/bullet/ Bullet 3D]

* [http://www.adrianboeing.com/pal/index.html PAL: Physics
Abstraction Layer]

== Graphical User Interface ==
* Libraries:
* [http://wiki.python.org/moin/TkInter Python's standard TkInter GUI]
* [http://www.informit.com/articles/article.aspx?p=27103&redir=1
Tutorial: Making a CD Player with pygame and Tkinter in Python] by
Harvey Deitel & Paul Deitel
* [http://www.pygame.org/project-Albow-338-853.html Albow -
widgetry for PyGame & PyOpenGL]

* [http://wiki.python.org/moin/GuiProgramming List of Python GUI tools]

== Artificial Intelligence ==
* Tutorial:
* [http://www.policyalmanac.org/games/aStarTutorial.htm A*
Pathfinding for Beginners]

* Libraries:
* [http://www.pygame.org/project-Theseus+V1.0-1426-2533.html Theseus]
* [http://www.pygame.org/project-Hex+stuff-773-.html Hex Stuff]
* [http://www.pygame.org/project-AStar-195-.html AStar]

10 декабря 2010

Lumina / Blender3D / OpenGL GLSL

Рыскали в таёжных краях по курсу Nvidia GC...
По случию наткнулись на Lumina билд шейдер...
Оказалось есть импорт Blender3D моделий...

***

Тесты и Сборка.

- Pentium4 3Ghz. Hyper-threading.
- DDR1 - 2GB.
- Ubuntu 10.04.1 - i386.
- Kernel 2.6.32.
- Nvidia 6600GT-ddr3 128 mb.
- Drivers 260.19.21

$ qmake && make && doxygen

- Должен уже стоять doxygen

***

- Работоспособность 80% частенько сегминтирует.
- В целом интересно.
- Есть скрипт импорта из Blender3D папка Blenderexporter/luminaexporter.py
Скрипт написан для 2.41 версии но успешно работал на 2.49c (своя svn
сборка).

***

http://sourceforge.net/projects/lumina/
http://lumina.sourceforge.net/Tutorials/Beginning.html

07 декабря 2010

Silver Web: Angedonia / Система укланения Ботов / Москва-Воронеж

После балансирования физики вооружения и корректив всяческого минимально
упреждения...
Зарылась мысль о минимальной не скриптовой системы поведения ботов (AI).
Пока всё экспериментально и на чистых блоках. В риале гейм плея с учётом
подгона лётной модели в сумме получается интересненько))).

***

На Шоте куски логики и условия.

- Существует стандартная скорость бота.
- При Radar атаки игрока (обычные выстрелы) задать новый цикл.
- Цикл выражен в положительном проперти > сменить скорость / угол /
вращение.
- В самом низу Delay всегда возвращает систему в стандарт.

***

В надежде на будущие будет создана в скриптовом варианте системы -Пуля
Дура- + -Москва-Воронеж-.

06 декабря 2010

Silver Web: Angedonia / Живые Текстуры / Создание Текстур

Простой метод живых текстур...

- Снимки Марса (NASA).
- Доработки GIMP.
- База GMIC плагин.
- NASA фото всегда (в большенстве) имеет резрешение 1600х1200.
- Есть возможность доработок в плане кистей.

Примеры шаблонов на Шотах.

03 декабря 2010

Silver Web: Angedonia / Модель Полёта

Немногие тратят время и силы на создание хотя бы минимальной модели
полёта...
Галаксиано подобные стрелялки как в космосе так и в воздухе жёстко аркадны.

- По сути модель полёта сразу прорисует и скоординирует модель боя...
- Смысл и логику / тактику миссии.
- Небо или спейс а локация должна также порисоваться под модель.

ВоО общем разговор длинный...

***

Создана основная базовая версия модели полёта для Silver Web: Angedonia.

- В отличии от Silver Web упор сделан на тактику боя.
- Крен и тяга используются не только от функциональных кнопок но и от
осей мыши.
- Миксы управления позволят воплотить простые манёвры в тактики боя.
- На Шоте куски обычной логики для ознакомления.
- Основная задача донести до играющего сам процесс управления кораблём.
По мимо того что клацать на бум-бум обратить внимание на функционал полёта.
- Сильно задротствовать не кто не стал и не будет фатальный реализм
косма сима не кто не преследует.
- Идёт поиск золотой середины (если она есть вообще).

02 декабря 2010

Silver Web: Angedonia / Mother Ship / LvL-2

Создана основа второго уровня...

***

Задача уничтожить материнский корабль противника.

- Lunar A2 в отличии от базовой версии более манёвренный.
- Корабли противника уклоняются от выстрелов лазера игрока.
- На близком расстоянии уклонение невозможно.
- Оружие Lunar A2 наводится на ракеты игрока.
- Основная тактика в манипуляции тактическим расстоянием от врага до игрока.
- Рекомендуются тактические заходы с верху / координация упреждения в
стрельбе.
- Урон по кораблю игрока и кораблям противника производится по методу
-Пуля Дура-.
- Урон от астероидов повышен поэтому заводим противника в поле.
- Игрок может запустить до 3рёх псевдо целей которые отвлекут внимание
ботов.
- Игрок может запустить 9 мин-бомб по любому радиусу / Мины-бомбы
реагируют на вражеские корабли.
- Мины-бомбы ускорены и скоординированы на атаку врага.
- При столкновении с кораблями врага игрок получает максимальный ущерб.
Повторное столкновение не уничтожает корабль но опять нанесёт
максимальное повреждение.
И в это время враги добьют наводкой.
- Матшип генерирует 7мь дополнительных кораблей которые стартуют с
определённым временем.
- Помимо матшиповских в периметре уровня на патруле 3ри дополнительных
корабля.
- Совет скоординировать атаки матшипа / хотя полезно прореживать ряды
корветов до 5ти штук.
- Корветы спокойных манёвров вам не дадут поэтому первоначально ведите
бои в основной зоне.

***

Тактика уничтожения Mother Ship.

- Обратите внимание что флагман окружён защитным полем.
- В заде матшипа расположены два генератора поля / уничтожив их щит сподёт.
- Столкновение с матшипом / щитом приведёт к максимальному урону.
- Матшим атакует самнавод энергетическими потоками / потоки сбиваемы и
свободно атакуемы игроком.
- Есть возможность узконаправленной атаки матшипа астероидами / урон по
матшипу большой + 100%.
- Нажав клавишу TAB игроку предоставляется возможность вызова поддержки
до трёх раз.
- Вызывать поддержку когда матшип окружён щитом не рекомендуется.
- Вызывать поддержку проклацав сразу все три раза не рекомендуется.
- Сферы матшипа с энергетическими потоками уничтожаемы / атака
рекомендуется после дезактивация поля.


***


Манёвры в тактической Зоне.

- В астероидном поле корабль игрока уязвим.
- В астероидном поле корабль противника уязвим.
- Урон от астероидов маленький.
- Всё вооружение взаимодействует с астероидным полем.
- Тактическая сетка присутствует.
- Используйте Сенсор точек сохранения и возврата.
- Игрок может запустить 9 мин-бомб по любому радиусу / Мины-бомб
реагируют на вражеские корабли / скорость мин-бомб увеличина.

Download / Models End 2010

Выборочно подборка моделий с последних проэктов...

Pack_2010_1.tar.7z

- Anisotropic filtering
- Cursor_Menu_2
- Easy_Motion_Blur
- Enemy_Station
- Giper_Port
- Jump_boom
- Kosmo_Fon
- Lightning
- LiSUS-A1
- Locator_STA_Addon
- Menu_Cursor
- Mother_Ship_Ambility
- My_HUD1
- New_Asteroid
- New_Boom_dds
- Nibula_All_boom
- PyOpenGL
- Smok
- TurelA

http://armanenshaft.narod.ru//download//blender//Pack_2010_1.tar.7z

***

Дополнительно...

http://armanenshaft.narod.ru//download//blender//Chost_target.blend
http://armanenshaft.narod.ru//download//blender//Duga_LVL2.blend
http://armanenshaft.narod.ru//download//blender//EndStation.blend
http://armanenshaft.narod.ru//download//blender//MenuShip.blend
http://armanenshaft.narod.ru//download//blender//Rychagi_Cockpit.blend
http://armanenshaft.narod.ru//download//blender//St_Turell.blend

***

Список...

http://armanenshaft.narod.ru/blender/models/index.html

01 декабря 2010

Blender3D 2.5 / Ubuntu 10.04 / SVN Code UPDATE 33388

Список пакетов...

sudo apt-get install subversion build-essential gettext /
libxi-dev libsndfile1-dev libpng12-dev libfftw3-dev /
libopenexr-dev libopenjpeg-dev libopenal-dev /
libalut-dev libglu1-mesa-dev libsdl-dev libfreetype6-dev /
libtiff4-dev libsamplerate0-dev libavdevice-dev /
libavformat-dev libavutil-dev libavcodec-dev /
libjack-dev libswscale-dev libx264-dev
/libxvidcore-dev libmp3lame-dev

***

Напоминаем...
Сборка на ftp ((Ftp в работе не нармирован).)

Обязателен Python-3.1

ftp://91.218.28.42/archive/Blender3D/Python-3.1/i-686/

29 ноября 2010

Silver Web: Angedonia / Add Art / Game Wonders

- При создании простого арта для контента игры на этот раз хотелось ограничить участие 3D редактора.
- Предлагается вниманию переработка снимка солнца (NASA).
- 3-4 обычных кисти GIMP.
- Плагин GMIC.
- Полный формат изображения тут...



http://sourceforge.net/projects/silverweb/files/Art/Game_Wonders.png/download

- Каталог Рисунков...

http://sourceforge.net/projects/silverweb/files/Art/

Silver Web: Angedonia / Full LvL1 / Start of development LvL2



http://www.youtube.com/watch?v=I5nGnmixQMM

***

Небольшой видео обзор по последним разработкам...

- Первая миссия доведена до базовой версии.
- Вторая миссия начало разработки.
- Общий план функционала.
- Базовая версия геймплея.

27 ноября 2010

Silver Web: Angedonia / Mothership / LVL-2

Начало подготовки к развитию второй миссии...

- Атака основного флагмана Валадорес (Ambility).
- Уничтожение по частям.
- В отличии от первой миссии основа на манёврах...
Так как в первой задача уничтожить оборону а затем приступить к атаке тут по плану задача в активной атаке Флагмана.
- В разработке обороноспособность флагмана.
- Разработка логики бомбометания у корабля игрока.

Планы... Планы...

23 ноября 2010

Silver Web: Angedonia / Medal+




Развитие базовой версии поощерений из основной версии.

- Игроку предоставляются награды за тактические манёвры.
- В первой миссии реализована Медаль за уничтожение пяти кораблей противника.
- По мимо картинки с черепом (Медаль Палач) игроку автоматически предоставляется усиление
основного плазменного оружия.
- Заряды ограничины но разница в тактики переходит на сторону игрока.
- Возможно и дополнительное развитие наград.
- По реализации логики проще некуда int проперти.
- Было желание создать логику подбора обломков (ящиков) для апгрейда но гемплей усилен в сторону тактики возможно в будущем...

22 ноября 2010

Silver Web: Angedonia / Ghost-A1

Для дополнительной капли тактики + снижения процесса одиночества.
Добавлена возможность атаки и преследования у беспилотных аппаратов.

***

Выдержка README_Linux...

- Ghost-A1 имеет функции беспилотного аппарата с боевым оснащением.
Скорость стрельбы большая / время функций ограниченно / уничтожение врагом не возможно / рандом урон.
Запустите аппарат / дождитесь атаки аппарата на ближайший корабль врага / отвлекайте внимание врага от Ghost-A1 давая возможность свободной атаки дроиду / Одновременный запуск трёх дроидов даст только мешанину в бою / используйте с умом.

18 ноября 2010

Silver Web: Angedonia / Gemplay

Прорисовка основной татктики.
Выдержки из README...

***

Silver Web: Angedonia - продолжение развития Хроник Созвездия Синий Монах.
- Сага о слиянии двух Вселенных.
- Столкновение рас в борьбе за новый Мир.
- Палади активируют собранное Ядро под вселенная Angedonia вливается в
их мир.
- Тактический файтинг нацеленный на развитие ориентации в 3D.


***

Тактическое управление Кораблём Игрока.

- Стрейф кнопки / wasd.
- Вращение по осям / qezx.
- Форсаж / LShift.
- Камеры обзора игрока / F1-F2.
- Камеры обзора врагов / 1-4.
- Запуск ракет / Rmouse.
- Энергетическое вооружение / Lmouse.
- Эклиптика / R.
- Сохранение / Загрузка / F5-F6.
- Псевдо цель / Space.
- Выброс Мин / F.


***

- Eye of the Soul -

Задача уничтожить оборудование станций противника.


Тактика боя с кораблями противника.

- Lunar A2 в отличии от базовой версии более манёвренный.
- Корабли противника уклоняются от выстрелов лазера игрока.
- На близком расстоянии уклонение невозможно.
- Оружие Lunar A2 наводится на ракеты игрока.
- Основная тактика в манипуляции тактическим расстоянием от врага до
игрока.
- Урон по кораблю игрока и кораблям противника производится по методу
-Пуля Дура-.
Метод прост - не каждое попадание даёт 100% урон. На строения не
распространяется.
- Игрок может запустить до 3рёх псевдо целей которые отвлекут внимание
ботов.
- Игрок может запустить 15 мин по любому радиусу / Мины реагируют на
вражеские корабли.

***

Тактика уничтожения оборудования станций.

- Основная задача уничтожить оборудование станций.
- 2ва Глаза / 2ве ракетные установки / 2ва радара / Улей.
- При атаки частей станции идёт ответ станции огнём / вызов подкрепления
противником.
- Разные части дают разный отклик в атаке на игрока / вызов подкрепления
противником..
- При попадании в радар по игроку ведётся огонь со станции.
- При уничтожении части автоматически идёт новый запуск корабля врага.


***

Манёвры в тактической Зоне.

- В астероидном поле корабль игрока уязвим.
- В астероидном поле корабль противника уязвим.
- Урон от астероидов маленький.
- Всё вооружение взаимодействует с астероидным полем.
- Тактическая сетка присутствует.
- Используйте Сенсор точек сохранения и возврата.
- Игрок может запустить 15 мин по любому радиусу / Мины реагируют на
вражеские корабли / Но крайне медленные в перемещении / Используйте с умом.
- Минимальная тактика по расстановки мин...
Установить поле на одной плоскости или ориентируясь на розу ветров /
перемещаясь в раудисе поля запустить Призрака для отвлечения противника
/ Это даст 4-5 сек для движения мины к кораблю / Мина наносит 100% урон.

15 ноября 2010

Silver Web : Angedonia / Menu / Intro / Map



***

Видео обзор по последним наработкам...

- Menu.
- Intro.
- Map.

***

Добавлены озвучки Карты и Интро первого уровня...

Мы активировали пространственное ядро...
Жажда знаний поглотила наш разум.
Наша слепая вера затмила чувство самосохранения...
Результат был ужасен...
Открывшийся проход в под вселенную пренёс за собой эхо неизвестной расы.
Беспощадной... Без эмоции и радости...
Их целью были не мы... Их целью стала вся наша вселенная.
Миры содрогнулись в предчувствии конца.
Мёртвое эхо прокатилось по нашей галактики заставив каждого обратить взор в нутырь себя.
Пропаганда Звёздного Похода против Ангедонии стала нашим новым смыслом...

Ариан Кита

DE57/70 год.


***

Мы не узнали собственный мир...
Казалось Звёзды впитали пролившуеся кровь...
Тысячи наших собратьев вели ожесточённые бои добавляя своей смертью дополнительный блеск звёздам...
Технологии неизвестной расы привышали наши на миллионы лет...
Мы не знаем что нас ждёт...
Мы не знаем будет ли конец вообще...
Даст ли нам освобождение наша смерть...

11 ноября 2010

Летописи созвездия Синий Монах / Angedonia

Продолжение развития хроники летописей Blue Monk.
Для развития игрового аддона Angedonia.


***

Эра Angedonia.

* DE57/50 год - Найдены все части Ядра.

* DE57/53 год - Активация Ядра.

* DE57/54 год - Начало разрыва пространства галактики Blue Monk.

* DE57/58 год - Прорыв под вселенной Angedonia.

* DE57/59 год - Закончен цикл нового мироздания (обьеденение общего
пространства вселенных Angedonia / Blue Monk).

* DE57/65 год - Первые контакты с Валадорес.

* DE57/68 год - Попытки установить контакт с Валадорес.

* DE57/70 год - Начало войны с Angedonia.

Продолжение следует...

08 ноября 2010

Silver Web : Angedonia / Map

Наработки общей карты аддона...

- Более компактный вид.
- Художественное усиление дизайна.
- Логика и реализация как и в базовой версии.
- В отличии от базовой версии описание имеет смысл...

Тактический уровень - сила 2 из 3.
Уровень защиты - сила 2 из 4.
Уровень численности - сила 3 из 5.
Краткое описание.

- Добавлена (для понта) возможность рисовать на карте.

05 ноября 2010

Silver Web : Angedonia / Add Lisukan Sound Track

Дописаны небольшие loop space темы для Меню и Уровней.

***

- Формат OGG.

- 48000hz

- 192 kb/s

- 32 bit

***

- 04-Angedonia (Для заставки меню).
- 05-Cradle (общий фон карты).
- 06-Expression (неоднозначно).

http://sourceforge.net/projects/silverweb/files/SilverWeb_Muzic/Lisukan/

04 ноября 2010

Blender 2.55 Beta

The Blender Foundation and online developer community is proud to
present Blender 2.55 Beta. This release is the third official beta
release of the Blender 2.5 series, representing the culmination of many
years of redesign and development work.

This version is called a "Beta" because it's now for the most part
feature complete. The Python API has had some extensive changes, most
notably in naming conventions and in creation and access of properties.

Since Blender 2.54 beta over 340 bugs were fixed!

IMPORTANT: Between 2.53 and 2.55 an extensive renaming operation has
changed the scripting API a lot, with repercussions also for loading
2.53 .blends with animation into 2.55. Make sure you try the
FCurve/Driver 2.54 fix entry from the Help menu.

***

Big improvements - This software has been used extensively in production
of the Durian open movie project "Sintel".
Feature complete - Although some of the 2.5 targets have been postponed,
such as multi-window support showing multiple scenes, a full RNA data
level dependency graph, or radial menus.
Exciting improvements in Sculpting - Faster, much more stable and better
brushes.
Missing/Incomplete Features - Although really most of it is there, not
all functionality from 2.4x has been restored yet. Some functionality
may work in a different way. Some features are still slower to use than
before.
Bugs - We've fixed a lot lately, but there are still quite a few bugs.
For this second beta around 200 bugs were fixed.
Changes - If you're used to the old Blenders, Blender 2.5 may seem quite
different at first. Be prepared to read a bit about this, how to
reconfigure things, and learn to use the new built-in 2.5 search
functionality!

03 ноября 2010

Silver Web : Angedonia / Пуля Дура / Методы расчёта Урона

Размышляли над методов (формулой) расчёта урона...
Мысля лети далеко...
100% попадание не так прельщает да интерес атаки скуден.
Пока нашли простой выход через Блоки логики...

***

На шоте пример...

- При касании (kill2) зачислить урон через фиксацию Random.
- 100% попадания нет но идёт усложнение общего боя.
- Можно ещё более усложнить через Рандом скрипт... Но потом))).
- Грубо говоря обрезка вычисления расстояния и скорости при стрельбе от
объекта до объекта.

Планируется развитие метода.
На строения не распространяется.

02 ноября 2010

Silver Web : Angedonia (Testing Eye of the Soul lvl-1)



http://www.youtube.com/watch?v=oXA5Rh9FxJA

***

Видео обзор наработок по первому уровню...

- Всё что видно игроку с ним взаимодействует.
- Доработка модели LiSUS-A3.
- Более компактный игровой Бар.
- Переключение видов под стать стрелялок.
- Перевод управления кораблём игрока в Экшен режим.
- Авто релоад ракет.
- Убраны для производительности все текстуры Normal.
- Убран лишний свет.
- 90% компрессия текстур в dds формат.

Основы готовы... Идёт обработка и развитие.

29 октября 2010

OpenGL GLSL Debugger / Blender3D / Linux

Вопрос...
Что есть для работы с OpenGL GLSL под Linux...
Ответ... OpenGL GLSL Debugger.

***

- http://www.vis.uni-stuttgart.de/
- http://www.vis.uni-stuttgart.de/glsldevil/index.html#downloads

Что тянит...

Additional to GLSL version 1.2 the following extensions are supported:
ARB_texture_rectangle, ARB_draw_buffers, EXT_bindable_uniform,
EXT_geometry_shader4, EXT_gpu_shader4, EXT_texture_array. Further vendor
specific enhancements to the GLSL compiler (i.e. additional implicit
type casts, Cg compatibility, ...) are not supported in the current version.

28 октября 2010

Silver Web : Angedonia Beta 1 / Первые Наработки

Выполнен ряд первых базовых наработок по тактическому аддну Angedonia.

Мини экскурс что будет...

- Совмещение с базовой версией (карта).
- Поддержка GLSL (основная версия без GLSL).
- Три тактических уровня.

***

Первая тактика полёт у орбиты.
Уничтожение оборудования космо станций.

Заметки из описания...

***

Тактика боя с кораблями противника.

- Lunar A2 в отличии от базовой версии более манёвренный.
- Корабли противника уклоняются от выстрелов лазера игрока.
- На близком расстоянии уклонение невозможно.
- Оружие Lunar A2 наводится на ракеты игрока.
- Основная тактика в манипуляции тактическим расстоянием от врага до игрока.

***

Тактика уничтожения оборудования станций.

- Основная задача уничтожить оборудование станций.
- 2ва Глаза / 2ве ракетные установки / 2ва радара / Улей.
- При атаки частей станции идёт ответ станции огнём.
- Разные части дают разный отклик в атаке на игрока.
- При попадании в радар по игроку ведётся огонь со станции.
- При уничтожении части автоматически идёт новый запуск корабля врага.


***

Манёвры в тактической Зоне.

- В астероидном поле корабль игрока уязвим.
- В астероидном поле корабль противника уязвим.
- Урон от астероидов маленький.
- Всё вооружение взаимодействует с астероидным полем.
- Тактическая сетка присутствует.

21 октября 2010

Silver Web Beta 2.0 is out NOW! / Blender Game Engine



Видео Обзор...

http://www.youtube.com/watch?v=DXXdZuAbwYY

***


http://sourceforge.net/projects/silverweb/files/

Основной Список Изменений...

- LVL3 / Перемещение-наводка ракет ботов в 3D.
- Полная переработка Текстур.
- Новые Брифинги.
- Озвучка всех Брифингов (Жен.Голос спс LiSUS).
- Смена системы вооружения / щитов.
- Добавлена сетка Эклиптики.
- Добавлены / доработаны FX.
- Созданы 3D фоны космоса.
- Реализация станции портала / концовки уровня.
- Баланс скорости кораблей / смена гравитации (скрипт) / кнопка ускорения.
- Корректор физики ракет / корректор текстур ракет и эффекта.
- Доработки звуков / новые звуки.
- Базовые Blur фильтры.
- Переработка второстепенных блоков / Options / Menu / About / Intro.
- Полное улучшение ботов / логика преследования / 3D ракеты / Модель.
- Установка камер для обзора всех противников.
- Базовая поддержка PyOpenGL.
- Добавлено дополнительное вращение по осям / мышь.
- Частичная оптимизация текстур в формат dds / BC3-DXT5.
- Динамическая смена Звания (прозвища) за каждую медаль.
- Система поощрений (базовая версия).
- Добавлен бинарник оконного режима игры.

И многое другое...
Подробности в /Doc/Beta2.0.txt
Доработки / Дополнения файла README.linux


- Заморозка основного кода.
- Переход к созданию аддона Silver Web : Angedonia.
Аддон направлен на тактический файтинг...

- Совмещение с основной версией.
- Поддержка GLSL.



Если будет интерес к SVN контролю версий отпишите.

Silver Web Beta 2.0 / Keys Options

Немного доведён до ума Блок Options...

- Смена освещения.
- Убраны астероиды.
- Описание кнопок текстуры (GIMP).
- Смена позиций обзора.

Поскольку Beta 2.0 более стабильный релиз основы кнопок управления
заложены в норму.

19 октября 2010

Silver Web Beta 2.0 / New FX Boom

Разнообразили эффекты взрывов...
Помог хороший урок GIMP.
Русская версия урока http://gimp.ru/articles.php?article_id=11
Примеры на Шотах.

***

Возможно не совсем индивидуально... Зато смотрится хорошо.
Под Multiтекстуры самое то))).

16 октября 2010

Silver Web Beta 2.0 / Blender3D / Save+Load Property

Для отображения Заслуг (Медали) на карте использовали перенос Проперти с условием скрипта.
Скрипт любезно взят с Артиста весьма благодарны...
В синтаксис скрипта указаны изменения.
Полный листинг...



***

#-----[ Save Load Properties ]------------------------------------------------------
# Blender 2.49b
# AT-2010 16-10-2010
#
# Object must have a property named "save" for its properties to be saved.
# Saves and loads the properties of objects in active scenes. 

# This version also saves the position and orientation of the objects
#
#
#-----[ Updates ]-----#

# Aug 06-09
# Saves the GameLogic.gobalDict to a file using cPickle 
# (pickling aka marshaling)
# Better than using the logic bricks in my opinion.
#
# Aug 07-09
# Using Module with functions

# Aug 07-09
# Removed the stupid modules and functions
#
# Sept12-09
# Properties are saved in a dictionary in a dictionary in a dictionary.
#
# 16-10-2010
# No - orientation / No - position / Rename DAT file / No - Fix Load
#-----[ Controls ]-----#
#
# S key to save
# L key to load
# space to move Cube and increment a variable
#
#
#-----[ Main ]------------------------------------------------------------------         
 
import cPickle, shelve
 
import GameLogic
 
#import glob
 
c = GameLogic.getCurrentController()
owner = c.owner
 
save = c.sensors["Save"]
load = c.sensors["Load"]
 
#-----[ Object List ]---------------------------------------------------------
# Gets a list of every object in every active scene
# that you want to save.
 
sceneList = GameLogic.getSceneList()
 
saveObjList = []
 
for scene in sceneList:
    for object in scene.objects:
        if "save" in object:
            saveObjList.append(object)
                     
#-----[ Save ]---------------------------------------------------------------
# Save the properties of every object in the saveObject list.
 
# The end result is a Dictionary of every objects name,
# under each name is the stuff saved for that object.
# The Dictionary is then saved to a file.
 
if save.positive and save.triggered:
     
    for obj in saveObjList:
         
        propNames = obj.getPropertyNames()
        propList = {}
        for p in propNames:
            val = obj[p]
             
            propList[p] = val
                             
        stuff = {}
        stuff["propList"] = propList
        #stuff["position"] = obj.localPosition
        #stuff["orientation"] = obj.localOrientation
         
        GameLogic.globalDict[obj.name] = stuff
     
             
#-----[ Save to File ]-----#
    
    
    pickle_file = open("1st_SW-Medals.dat", "w")
     
    cPickle.dump(GameLogic.globalDict, pickle_file)
     
    pickle_file.close()
#--------------------------#     
     
     
    print "\n\nSaving:\n"
    for obj in saveObjList:     
        print obj.name
        print GameLogic.globalDict.get(obj.name)
 
 
 
#-----[ Load ]---------------------------------------------------------------
if load.positive and load.triggered:
     
    try:
        pickle_file = open("1st_SW-Medals.dat", "r")
        GameLogic.globalDict = cPickle.load(pickle_file)
        pickle_file.close()
     
    except(IOError), e:
         
        print """\nERROR: You've got to save the file first before 
you can load it! or as python would say:\n\n""", e
     
     
    else:
        for obj in saveObjList:
         
            theStuff = GameLogic.globalDict.get(obj.name)
         
            # Replace the object's properties with the saved ones.
            savedProps = theStuff["propList"]
         
            objProps = obj.getPropertyNames()
             
            print "\n",obj.name,"Saved props =", savedProps
             
            for prop in savedProps.keys():
                 obj[prop] = savedProps.get(prop)
         
            # Load the position and orientation
            #obj.position = theStuff["position"]
             
            #obj.localOrientation = theStuff["orientation"]     
         
             
        print "\n\nLoading:\n"
        for obj in saveObjList:     
            print obj.name
            print GameLogic.globalDict.get(obj.name)


***

- Комментирован orientation
- Комментирован position
- Смена имени выходного файла.
- Нет фикса загрузки / сейва от кнопки (для дебага).



***

Заметки...

- Имя объекта должно быть одинаково для условия загрузки Проперти.
- Для умножения скрипта меняем переменные Save / Load / save / имя файла.
- Контроль загрузки переменная save (int=0).
- Сенсоры имеют имена Save / Load
- Запуск бинарника пишит файл в корень игры.
- Запуск редактора пишит файл в корень пользователя.

15 октября 2010

Python / Скрипты / Blender3D /

Скрипт измерения расстояния от обьекта до обьекта в ед.
Метод совмещения обьектов по осям.

***

So far, it has the following abilities:
Lists distance from two selected objects in BU(Blender Units), meters,
inches, and feet
Has the ability to align objects to one of the active selected objects'
axis (Three different buttons)

***

#!BPY
# coding: utf-8
"""
Name: 'Toolset'
Blender: 249
Group: 'Misc'
Tooltip: 'Misc. Toolset'
"""

__author__ = ["Richard Perkins"]
__url__ = ("www.gameblender.org", "www.blender.org")
__version__ = "0.01"
__bpydoc__ = """\

Miscellaneous Toolset

This script contains various tools.
"""

# ***** BEGIN GPL LICENSE BLOCK *****
#
# Script copyright (C) Richard Perkins
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------

import Blender
from Blender import Draw, BGL
from math import sqrt,pow

units = {
"blender":1,
"inches":0,
"meters":0,
"feet":0
}
def event(evt, val):
if evt == Draw.ESCKEY:
Draw.Exit()
return
Draw.Redraw(1)

def button_event(evt):
global mymsg, toggle, units
if evt == 1:
meter = Blender.Object.GetSelected()
'''min = Blender.Object.Get(meter.getProperty("min").data)
max = Blender.Object.Get(meter.getProperty("max").data)'''

if len(meter) == 2 :
min = meter[0]
max = meter[1]

maxloc = max.getLocation("worldspace")
minloc = min.getLocation("worldspace")

dist_x = abs(maxloc[0] - minloc[0])
dist_y = abs(maxloc[1] - minloc[1])
dist_z = abs(maxloc[2] - minloc[2])

if units["blender"]:
globals()["dist"] =
str(sqrt(pow(dist_x,2) + pow(dist_y,2) + pow(dist_z,2))), "Blender Units"
elif units["inches"]:
globals()["dist"] = str(39.3700787 *
(sqrt(pow(dist_x,2) + pow(dist_y,2) + pow(dist_z,2)))) + " Inches"
elif units["meters"]:
globals()["dist"] =
str(sqrt(pow(dist_x,2) + pow(dist_y,2) + pow(dist_z,2))) + " Meters"
elif units["feet"]:
globals()["dist"] = str(3.2808399 *
(sqrt(pow(dist_x,2) + pow(dist_y,2) + pow(dist_z,2)))) + " Feet"
else:
globals()["dist"] = "Select Two Objects"
Draw.Redraw(1)
elif evt == 2:
selected = Blender.Object.GetSelected()
if len(selected) > 1:
for obj in selected[1:]:
loc = obj.getLocation("worldspace")
newloc =
selected[0].getLocation("worldspace")
obj.setLocation(newloc[0], loc[1], loc[2])
Blender.Redraw()
elif evt == 3:
selected = Blender.Object.GetSelected()
if len(selected) > 1:
for obj in selected[1:]:
loc = obj.getLocation("worldspace")
newloc =
selected[0].getLocation("worldspace")
obj.setLocation(loc[0], newloc[1], loc[2])
Blender.Redraw()
elif evt == 4:
selected = Blender.Object.GetSelected()
if len(selected) > 1:
for obj in selected[1:]:
loc = obj.getLocation("worldspace")
newloc =
selected[0].getLocation("worldspace")
obj.setLocation(loc[0], loc[1], newloc[2])
Blender.Redraw()
elif evt == 5:
units["meters"] = 0
units["inches"] = 0
units["blender"] = 1
units["feet"] = 0
elif evt == 6:
units["meters"] = 1
units["inches"] = 0
units["blender"] = 0
units["feet"] = 0
elif evt == 7:
units["meters"] = 0
units["inches"] = 1
units["blender"] = 0
units["feet"] = 0
elif evt == 8:
units["meters"] = 0
units["inches"] = 0
units["blender"] = 0
units["feet"] = 1

def gui():
BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)
BGL.glColor3f(0,0,0)
Draw.PushButton("Update distance", 1, 10, 30, 100, 20,"A toggle
button")
BGL.glRasterPos2i(10, 55)
if not globals().has_key("dist"): globals()["dist"]="Select Two
Objects"
Draw.Text(str(globals()["dist"]))
Draw.PushButton("Align X", 2, 200, 50, 100, 20,"A toggle button")
Draw.PushButton("Align y", 3, 200, 30, 100, 20,"A toggle button")
Draw.PushButton("Align Z", 4, 200, 10, 100, 20,"A toggle button")
Draw.Toggle("BU", 5, 10,10,25,20,units["blender"],"Blender Units")
Draw.Toggle("m", 6, 35,10,25,20,units["meters"],"Meters")
Draw.Toggle("in", 7, 60,10,25,20,units["inches"],"Inches")
Draw.Toggle("feet", 8, 85,10,25,20,units["feet"],"Feet")

Draw.Register(gui, event, button_event) # registering the 3 callbacks

Multi Player Online Network Blender3D

Набор разработок в сторону Online.

- Доки.
- Скрипты.

- Basic Setup

- WSAG 3.x || Manual

- 4.00.37-WSAGbasic (blend) || Note || Forum

- WSAG 3.x Tutorial (PDF) || WSAG 4.x Tutorial (PDF)

- WSAG_IP_Lobby.zip

http://www.oldjim.ch/OJW-HP/php/home/index.php?en=wsag.html

Заметки / Python / Оптимизация

Заметки по функциям и синтаксису...

***

Caches

import math
Tan90 = math.tan(90)
def AnglyCrap(x):
    x = x*Tan90


In this script the tan of 90 gets figured out once (when the module gets imported), and then simply multiplies it by that number (-1.995200412208242) whenever AnglyCrap gets run.

***

Get_____() functions

Suck balls. They are blindingly slow, and are usually the slowest parts of any code. NEVER use a Get_____() function, if you need to get a variable that's in another module (and possibly in some dictionary, etc. you get the point) there are a million better ways to do this. For example:

CODE: SELECT ALL
import SomeModuleWithSweetDataYouWant

def LoopingFunction():
    Johnny = (SomeModuleWithSweetDataYouWant.GetSweetSweetData() * SomeModuleWithSweetDataYouWant.GetSourSourData())
    Billy = (SomeModuleWithSweetDataYouWant.GetBitterBitterData() / SomeModuleWithSweetDataYouWant.GetSweetSweetData)
    Mary = (SomeModuleWithSweetDataYouWant.GetSourSourData() + SomeModuleWithSweetDataYouWant.GetBitterBitterData())
    return (Mary - (Billy / Johnny)) + (Billy * Mary)


is a lot slower than

CODE: SELECT ALL
import SomeModule
import copy#You'll see why in the next part
Sweet =  copy.copy(SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"])
Sour = copy.copy(SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sour Sour Data"])
Bitter = copy.copy(SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Bitter Bitter Data"])

def LoopingFunction():
    Johnny = Sweet * Sour
    Billy = Bitter / Sweet
    Mary = Sour + Bitter
    return (Mary - (Billy / Johnny)) + (Billy * Mary)

***

References, is, global

Python (by default) does damn near everything by reference (so a variable usually just points to another variable, instead of actually copying the data).

Using the situation from Part 2, let's say we need to keep up with a dynamic variable:

CODE: SELECT ALL
import SomeModule

def LoopingFunction():
    Sweet =  SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"]
    Sour = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sour Sour Data"]
    Bitter = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Bitter Bitter Data"]
    Johnny = Sweet * Sour
    Billy = Bitter / Sweet
    Mary = Sour + Bitter
    return (Mary - (Billy / Johnny)) + (Billy * Mary)


every time LoopingFunction gets called, it makes a new reference to SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"], and all that. Your initial reaction is to just do:
CODE: SELECT ALL
import SomeModule

Sweet =  SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"]
Sour = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sour Sour Data"]
Bitter = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Bitter Bitter Data"]

def LoopingFunction():
    Johnny = Sweet * Sour
    Billy = Bitter / Sweet
    Mary = Sour + Bitter
    return (Mary - (Billy / Johnny)) + (Billy * Mary)


Note: When Sweet get's used, it references a position in PHYSICAL RAM, not SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"], because then it would be no better than just referencing it like the first example of the previous part (aside from staving off Carpal Tunnel).

BUT there is a horrible, horrible flaw to this way. See, LoopingFunction (is supposed to) only see variables within it's own namespace (anything in the module that it's in), but since Sweet, Sour and Bitter all point OUTSIDE the module LoopingFunction can't see them. So you need to make sure to do:
CODE: SELECT ALL
import SomeModule

Sweet =  SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"]
Sour = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sour Sour Data"]
Bitter = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Bitter Bitter Data"]

def LoopingFunction():
    global Sweet
    global Sour
    global Bitter
    Johnny = Sweet * Sour
    Billy = Bitter / Sweet
    Mary = Sour + Bitter
    return (Mary - (Billy / Johnny)) + (Billy * Mary)


But that isn't all. You see, references can get rather flaky sometimes (especially with dynamic variables). So we need a backup plan:

CODE: SELECT ALL
import SomeModule
import copy

Sweet =  SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"]
Sour = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sour Sour Data"]
Bitter = SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Bitter Bitter Data"]

def LoopingFunction():
    global Sweet
    global Sour
    global Bitter
    if not (Sweet is SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"]):
        Sweet = copy.copy(SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"])
    if not (Sour is SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sour Sour Data"]):
        Sour = copy.copy(SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sour Sour Data"])
    if not (Bitter is SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Bitter Bitter Data"]):
        Sour = copy.copy(SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Bitter Bitter Data"])
    Johnny = Sweet * Sour
    Billy = Bitter / Sweet
    Mary = Sour + Bitter
    return (Mary - (Billy / Johnny)) + (Billy * Mary)

The "is" statement only checks to make sure that Sweet and SomeModuleWithSweetDataYouWant.ReallyLongDictionaryName["Sweet Sweet Data"] are using the same memory (which is way faster than doing it byte by byte like "=="). In the end it looks uglier, but is actually decently faster.

***

Grouping things

The easiest way to get the smallest amount of speed. This is best taught by example:
CODE: SELECT ALL
import SomeJazz
Billy = SomeJazz.SomeDataOutsideTheFunction
Johnny = SomeJazz.SomeMoreDataOutsideTheFunction
Mary = SomeJazz.SomeOtherDataOutsideTheFunction
Penny = SomeJazz.SomeUsefulDataOutsideTheFunction

def SomeFunk():
    global Billy
    global Johnny
    global Mary
    global Penny
    return Penny / Johnny * Mary + Penny


Everytime the Python interpreter hits a "global" statement, it has too look at some memory address to find the function - not terribly slow but it could be faster:
CODE: SELECT ALL
import SomeJazz
Billy = SomeJazz.SomeDataOutsideTheFunction
Johnny = SomeJazz.SomeMoreDataOutsideTheFunction
Mary = SomeJazz.SomeOtherDataOutsideTheFunction
Penny = SomeJazz.SomeUsefulDataOutsideTheFunction

def SomeFunk():
    global Billy, Johnny, Mary, Penny
    return Penny / Johnny * Mary + Penny


is slightly faster. Nothing even close to any of these other optimizations, but in a real-time game where there are a lot of variables that need to go through the global statement, etc. it isn't to be underestimated (and it makes your code look cleaner too). You can do this with all sorts of statements (import, del, etc.)

Silver Web Beta 2.0 / Системы Поощирения







***

Базовая версия Системы Поощирения
Будет полностью реализована в аддоне Angedonia.
Пока тестовый вариант в базовой версии.

- Уровень 1 / За Неравный Бой / Уничтожение 3х Спор.
- Уровень 3 / За Доблесть и Отвагу / Уничтожение 5ти кораблей.

Примеры на СкринШотах.

Сектора Лирики