Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ADD: Space pods #896

Draft
wants to merge 19 commits into
base: beta-dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
f7897cc
Завел все основные файлы и всякий код для подов.
MrCat15352 Aug 19, 2024
ee6ab61
фикс
MrCat15352 Aug 19, 2024
6b0ca37
Merge branch 'add_pods_pilots' of https://github.com/MrCat15352/MrCat…
MrCat15352 Aug 19, 2024
863a199
фикс
MrCat15352 Aug 19, 2024
bfb15de
Merge branch 'beta-dev' into add_pods_pilots
MrCat15352 Aug 19, 2024
c3ed197
Рефактор, перезжаем на код парадизов. Он лучше
MrCat15352 Aug 21, 2024
122ed45
рефактор лок бастера
MrCat15352 Aug 21, 2024
ad7b395
вот это лок бастер добавляет
MrCat15352 Aug 21, 2024
8e58e72
Краска для подов
MrCat15352 Aug 21, 2024
7455c16
Перелапачен файл с подами под код парадиза. В ФТЛ13 половина функцион…
MrCat15352 Aug 21, 2024
3ddc1e3
Готово, можно садиться, но нельзя пока летать и невозможно выйти с по…
MrCat15352 Aug 21, 2024
dd81db0
Merge branch 'add_pods_pilots' of https://github.com/MrCat15352/MrCat…
MrCat15352 Aug 21, 2024
f4af577
Попытка заставить спейспод летать. Он все еещ поворачивается...
MrCat15352 Aug 22, 2024
2460921
Перемещаем в папку старый вариант от фтл13 и парадиза
MrCat15352 Sep 2, 2024
0418f3b
Портируем вариант от Йогстэйшен и он оказывается удачным. Физика рабо…
MrCat15352 Sep 2, 2024
5d99724
Удалил дубликаты
MrCat15352 Sep 2, 2024
0c1a098
Дубликат
MrCat15352 Sep 2, 2024
7c50d64
Увеличил порог. Теперь под не взрывается. Но по прежнему блочится тур…
MrCat15352 Sep 2, 2024
0c3b955
Merge branch 'beta-dev' into add_pods_pilots
MrCat15352 Sep 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions code/__DEFINES/~mod_celadon/spacepods.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#define SPACEPOD_EMPTY 1
#define SPACEPOD_WIRES_LOOSE 2
#define SPACEPOD_WIRES_SECURED 3
#define SPACEPOD_CIRCUIT_LOOSE 4
#define SPACEPOD_CIRCUIT_SECURED 5
#define SPACEPOD_CORE_LOOSE 6
#define SPACEPOD_CORE_SECURED 7
#define SPACEPOD_BULKHEAD_LOOSE 8
#define SPACEPOD_BULKHEAD_SECURED 9
#define SPACEPOD_BULKHEAD_WELDED 10
#define SPACEPOD_ARMOR_LOOSE 11
#define SPACEPOD_ARMOR_SECURED 12
#define SPACEPOD_ARMOR_WELDED 13

#define SPACEPOD_SLOT_CARGO "cargo"
#define SPACEPOD_SLOT_MISC "misc"
#define SPACEPOD_SLOT_WEAPON "weapon"
#define SPACEPOD_SLOT_LOCK "lock"

///from base of atom/attackby(): (/obj/item, /mob/living, params)
#define COMSIG_ATOM_ATTACKBY "atom_attackby"
///from base of [/atom/proc/update_integrity]: (old_value, new_value)
#define COMSIG_ATOM_INTEGRITY_CHANGED "atom_integrity_changed"
/// from /atom/proc/atom_break: (damage_flag)
#define COMSIG_ATOM_BREAK "atom_break"

// Helpers for checking whether a z-level conforms to a specific requirement
#define is_mining_level(atom) atom.virtual_level_trait(ZTRAIT_MINING)

#define isspacepod(A) (istype(A, /obj/spacepod))

#define VEHICLE_LAYER 3.9

/// Bright light used by default in tubes and bulbs
#define LIGHT_COLOR_DEFAULT "#F3FFFA"
/// Warm but extremely diluted red. rgb(250, 130, 130)
#define LIGHT_COLOR_RED "#FA8282"
6 changes: 6 additions & 0 deletions code/_onclick/drag_drop.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@

/client
var/mouseControlObject = null
// [CELADON-ADD] - CELADON_SPACEPOD
///Used in MouseDrag to preserve the last mouse-entered location. Weakref
var/datum/weakref/mouse_location_ref = null
///Used in MouseDrag to preserve the last mouse-entered object. Weakref
var/datum/weakref/mouse_object_ref
// [/CELADON-ADD]

/client/MouseDown(datum/object, location, control, params)
if(QDELETED(object)) //Yep, you can click on qdeleted things before they have time to nullspace. Fun.
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added mod_celadon/_storge_icons/icons/64x64/pods.dmi
Binary file not shown.
Binary file added mod_celadon/_storge_icons/icons/64x64/pods1.dmi
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions mod_celadon/mod_celadon.dme
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
#include "sauna/_sauna.dme"
#include "effects/_effects.dme"
#include "repair_weebstick/_repair_weebstick.dme"
#include "spacepod/_spacepod.dme"
#include "elysiumpod/_elysiumpod.dme"
#include "boarding/_boarding.dme"
#include "moniq/_moniq.dme"
Expand Down
97 changes: 97 additions & 0 deletions mod_celadon/spacepod/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@

#### Список PRов

- https://github.com/CeladonSS13/Shiptest/pulls/#####
<!--
Ссылки на PRы, связанные с модом:
- Создание
- Большие изменения
-->

<!-- Название мода. Не важно на русском или на английском. -->
## Космические поды

ID мода: CELADON_SPACEPOD
<!--
Название модпака прописными буквами, СОЕДИНЁННЫМИ_ПОДЧЁРКИВАНИЕМ,
которое ты будешь использовать для обозначения файлов.
При запуске скрипта выставляется автоматически.
Приставка CELADON гарантирует уникальность
модпака. Этот ID будет использоваться для обозначения
изменений в кор коде, если того потребуется.
-->

### Описание мода

Этот мод - это попытка портировать поды в наш билд кривой.
<!--
Что он делает, что добавляет: что, куда, зачем и почему - всё здесь.
А также любая полезная информация.
-->

### Используется в других проектах?
- Нет
<!--
ВНИМАНИЕ!
Заполняется другими авторами, кто использует этот модпак или
его часть в других модпаках! Для Автора модпака внимательно
отслеживать данный пункт при изменении своего кода!
Пример заполнения: `Используется часть кода для модпака EXAMP_EXAM`
-->

### Изменения *кор кода*

- 'code/_onclick/drag_drop.dm'
<!--
Если вы редактировали какие-либо процедуры или переменные в кор коде,
они должны быть указаны здесь.
Нужно указать и файл, и процедуры/переменные.

Изменений нет - напиши "Отсутствуют"
Примеры: `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var`
-->

### Оверрайды

- Отсутствуют
<!--
Если ты добавлял новый модульный оверрайд, его нужно указать здесь.
Здесь указываются оверрайды в твоём моде и папке `_master_files`

Изменений нет - напиши "Отсутствуют"
Примеры:
- `mods/_master_files/sound/my_cool_sound.ogg`
- `mods/_master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var`
-->

### Дефайны

- Отсутствуют
<!--
Если требовалось добавить какие-либо дефайны, укажи файлы,
в которые ты их добавил, а также перечисли имена.
И то же самое, если ты используешь дефайны, определённые другим модом.

Не используешь - напиши "Отсутствуют"
Примеры: `code/__defines/~mod_celadon/spacepod.dm`: `SPACEPOD_SPEED_MULTIPLIER`, `SPACEPOD_SPEED_BASE`
-->

### Используемые файлы, не содержащиеся в модпаке

- Отсутствуют
<!--
Будь то немодульный файл или модульный файл, который не содержится в папке,
принадлежащей этому конкретному моду, он должен быть упомянут здесь.
Хорошими примерами являются иконки или звуки, которые используются одновременно
несколькими модулями, или что-либо подобное.
Примеры: `mods/_master_files/icons/obj/alien.dmi`
-->

### Авторы

Твой никнейм
<!--
Здесь находится твой никнейм
Если работал совместно - никнеймы тех, кто помогал.
В случае порта чего-либо должна быть ссылка на источник.
-->
27 changes: 27 additions & 0 deletions mod_celadon/spacepod/_spacepod.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/// name - название модпака. Используется для поиска других модпаков в init.
/// desc - описание для модпака. Может использоваться для списка глаголов модпака в качестве описания.
/// author - автор(ы) этого модпака.

/datum/modpack/spacepod
name = "Космические челноки"
desc = "Портируем спейс поды в наш билд"
author = "MrCat15352"

/// Эти проки нужны, для того чтобы инициализировать датумы в определенный момент времени
/// сборки билда. Инициализация обновляет данные в билде повторно, перезаписывая новыми значениями
/// из модпака. Но иногда, сама инциализация есть и вызывается в кор коде в определенный момент, и
/// тогда такие проки не нужны и вовсе. Также проки не нужны если в модпаке только объекты находятся.
/// Если эти конструкции не нужны, просто закоментируй их!
/// (можешь использовать все три, но запуск билда увеличится на 0.1 сек, за каждый датум в модпаке)

// Инициализация ДО
/datum/modpack/spacepod/pre_initialize()
. = ..()

// Инициализация ВОВРЕМЯ
/datum/modpack/spacepod/initialize()
. = ..()

// Инициализация ПОСЛЕ
/datum/modpack/spacepod/post_initialize()
. = ..()
16 changes: 16 additions & 0 deletions mod_celadon/spacepod/_spacepod.dme
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef MODPACK_CELADON_SPACEPOD
#define MODPACK_CELADON_SPACEPOD

#include "_spacepod.dm"

#include "code/settings.dm"

#include "code/atom_defense.dm"
#include "code/construction.dm"
#include "code/equipment.dm"
#include "code/parts.dm"
#include "code/physics.dm"
#include "code/prebuilt.dm"
#include "code/spacepod.dm"

#endif
129 changes: 129 additions & 0 deletions mod_celadon/spacepod/code/atom_defense.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@

// /// The essential proc to call when an atom must receive damage of any kind.
// /atom/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0)
// if(!uses_integrity)
// CRASH("[src] had /atom/proc/take_damage() called on it without it being a type that has uses_integrity = TRUE!")
// if(QDELETED(src))
// CRASH("[src] taking damage after deletion")
// if(atom_integrity <= 0)
// CRASH("[src] taking damage while having <= 0 integrity")
// if(sound_effect)
// play_attack_sound(damage_amount, damage_type, damage_flag)
// if(resistance_flags & INDESTRUCTIBLE)
// return
// damage_amount = run_atom_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration)
// if(damage_amount < DAMAGE_PRECISION)
// return
// if(SEND_SIGNAL(src, COMSIG_ATOM_TAKE_DAMAGE, damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) & COMPONENT_NO_TAKE_DAMAGE)
// return

// . = damage_amount

// update_integrity(atom_integrity - damage_amount)

// //BREAKING FIRST
// if(integrity_failure && atom_integrity <= integrity_failure)
// atom_break(damage_flag)

// //DESTROYING SECOND
// if(atom_integrity <= 0)
// atom_destruction(damage_flag)

// /// Proc for recovering atom_integrity. Returns the amount repaired by
// /atom/proc/repair_damage(amount)
// if(amount <= 0) // We only recover here
// return
// var/new_integrity = min(max_integrity, atom_integrity + amount)
// . = new_integrity - atom_integrity

// update_integrity(new_integrity)

// if(integrity_failure && atom_integrity > integrity_failure)
// atom_fix()

/// Handles the integrity of an atom changing. This must be called instead of changing integrity directly.
/atom/proc/update_integrity(new_value)
SHOULD_NOT_OVERRIDE(TRUE)
if(!uses_integrity)
CRASH("/atom/proc/update_integrity() was called on [src] when it doesnt use integrity!")
var/old_value = atom_integrity
new_value = max(0, new_value)
if(atom_integrity == new_value)
return
atom_integrity = new_value
SEND_SIGNAL(src, COMSIG_ATOM_INTEGRITY_CHANGED, old_value, new_value)

// /// This mostly exists to keep atom_integrity private. Might be useful in the future.
/atom/proc/get_integrity_pod()
SHOULD_BE_PURE(TRUE)
return atom_integrity

// ///returns the damage value of the attack after processing the atom's various armor protections
// /atom/proc/run_atom_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0)
// if(!uses_integrity)
// CRASH("/atom/proc/run_atom_armor was called on [src] without being implemented as a type that uses integrity!")
// if(damage_flag == MELEE && damage_amount < damage_deflection)
// return 0
// if(damage_type != BRUTE && damage_type != BURN)
// return 0
// var/armor_protection = 0
// if(damage_flag)
// armor_protection = armor.getRating(damage_flag)
// if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
// armor_protection = clamp(armor_protection - armour_penetration, min(armor_protection, 0), 100)
// return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION)

// ///the sound played when the atom is damaged.
// /atom/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
// switch(damage_type)
// if(BRUTE)
// if(damage_amount)
// playsound(src, 'sound/weapons/smash.ogg', 50, TRUE)
// else
// playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
// if(BURN)
// playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)

// ///Called to get the damage that hulks will deal to the atom.
// /atom/proc/hulk_damage()
// return 150 //the damage hulks do on punches to this atom, is affected by melee armor

// /atom/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime
// if(!uses_integrity)
// CRASH("unimplemented /atom/proc/attack_generic()!")
// user.do_attack_animation(src)
// user.changeNext_move(CLICK_CD_MELEE)
// return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration)

/// Called after the atom takes damage and integrity is below integrity_failure level
/atom/proc/atom_break(damage_flag)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_BREAK)

// /// Called when integrity is repaired above the breaking point having been broken before
// /atom/proc/atom_fix()
// SHOULD_CALL_PARENT(TRUE)
// SEND_SIGNAL(src, COMSIG_ATOM_FIX)

// ///what happens when the atom's integrity reaches zero.
// /atom/proc/atom_destruction(damage_flag)
// return

// ///changes max_integrity while retaining current health percentage, returns TRUE if the atom got broken.
// /atom/proc/modify_max_integrity(new_max, can_break = TRUE, damage_type = BRUTE)
// if(!uses_integrity)
// CRASH("/atom/proc/modify_max_integrity() was called on [src] when it doesnt use integrity!")
// var/current_integrity = atom_integrity
// var/current_max = max_integrity

// if(current_integrity != 0 && current_max != 0)
// var/percentage = current_integrity / current_max
// current_integrity = max(1, round(percentage * new_max)) //don't destroy it as a result
// atom_integrity = current_integrity

// max_integrity = new_max

// if(can_break && integrity_failure && current_integrity <= integrity_failure)
// atom_break(damage_type)
// return TRUE
// return FALSE
Loading
Loading