Мысли о переделке рнд

ицфофан я твоя фанатка !!!

3 лайка

Кодить кто будет :wink:

Кодить будет ОП

Если бы это кто-то закодил, я бы ему пива купил. Я просто вбросил свой поток сознания в общую кучу, вроде бы, так и написал в начале сообщения.

1 лайк

Идея фана very good. Может топору что-нибудь понравится и сможет накодить подобного. Ждем его мнения тогда.

Короче я почитал что вы тут насрали, подумал, и придумал.

Первое - в токсинной, в смеситель, добавить датчик газов и рядом кнопку или панельку в стене специальную. Смысл в том, чтобы максимально разогнать температуру в миксере и снять показания с помощью кнопки/панельки, получив за это очки. При этом урезать очки за подрыв лимиток. Чтобы форон нужно было не только взрывать, но и сжигать.

Второе - усложнить крафт лимиток и внести в него элемент рандома, чтобы нельзя было задрочить определённую последовательность действий.
Я щас очень долго сидел смотрел в коде как лимитки работают и кажется даже что-то понял. Так вот, при открытии кранчика на трансфер валве газы в двух баллонах смешиваются. Каждый газик имеет разные флаги, всего их 4:
image
ну фуел понятно, может использоваться как топливо
оксидизер это окислитель, без него реакция горения работать не будет.
контаминант отвечает за то, что газик будет на одежде оставаться
а четвёртое вроде для токомака вообще надо.

Нам интересны первые два флага. Потому что при смешивании газов с этими флагами при определённых температурах начинаются цыганские фокусы.

Тут пиздец, не открывать

if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null)))

  #ifdef FIREDBG
  log_debug("***************** FIREDBG *****************")
  log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!")
  #endif

  var/gas_fuel = 0
  var/liquid_fuel = 0
  var/total_fuel = 0
  var/total_oxidizers = 0

  //*** Get the fuel and oxidizer amounts
  for(var/g in gas)
  	if(gas_data.flags[g] & XGM_GAS_FUEL)
  		gas_fuel += gas[g]
  	if(gas_data.flags[g] & XGM_GAS_OXIDIZER)
  		total_oxidizers += gas[g]
  gas_fuel *= group_multiplier
  total_oxidizers *= group_multiplier

  //Liquid Fuel
  var/fuel_area = 0
  if(zone)
  	for(var/obj/effect/decal/cleanable/liquid_fuel/fuel in zone.fuel_objs)
  		liquid_fuel += fuel.amount*LIQUIDFUEL_AMOUNT_TO_MOL
  		fuel_area++

  total_fuel = gas_fuel + liquid_fuel
  if(total_fuel <= 0.005)
  	return FALSE

  //*** Determine how fast the fire burns

  //get the current thermal energy of the gas mix
  //this must be taken here to prevent the addition or deletion of energy by a changing heat capacity
  var/starting_energy = temperature * heat_capacity()

  //determine how far the reaction can progress
  var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit

  //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).)
  var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume * group_multiplier) / vsc.fire_firelevel_multiplier
  var/min_burn = 0.30 * volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast
  var/gas_reaction_progress = min(max(min_burn, gas_firelevel * gas_fuel) * FIRE_GAS_BURNRATE_MULT, gas_fuel)

  //liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area.
  var/liquid_firelevel = calculate_firelevel(liquid_fuel, total_oxidizers, reaction_limit, 0) / vsc.fire_firelevel_multiplier
  var/liquid_reaction_progress = min((liquid_firelevel * 0.2 + 0.05) * fuel_area * FIRE_LIQUID_BURNRATE_MULT, liquid_fuel)

  var/firelevel = (gas_fuel * gas_firelevel + liquid_fuel * liquid_firelevel)/total_fuel

  var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress
  var/used_fuel = min(total_reaction_progress, reaction_limit)
  var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT / FIRE_REACTION_FUEL_AMOUNT)

  #ifdef FIREDBG
  log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")
  log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")
  log_debug("firelevel -> [firelevel] (gas: [gas_firelevel], liquid: [liquid_firelevel])")
  log_debug("liquid_reaction_progress = [liquid_reaction_progress]")
  log_debug("gas_reaction_progress = [gas_reaction_progress]")
  log_debug("total_reaction_progress = [total_reaction_progress]")
  log_debug("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ")
  #endif

  //if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out
  if(zone) //be less restrictive with canister and tank reactions
  	if((!liquid_fuel || used_fuel <= FIRE_LIQUD_MIN_BURNRATE) && (!gas_fuel || used_fuel <= FIRE_GAS_MIN_BURNRATE*zone.contents.len))
  		return FALSE


  //*** Remove fuel and oxidizer, add carbon dioxide and heat

  //remove and add gasses as calculated
  var/used_gas_fuel = min(max(0.25, used_fuel * (gas_reaction_progress/total_reaction_progress)), gas_fuel) //remove in proportion to the relative reaction progress
  var/used_liquid_fuel = min(max(0.25, used_fuel-used_gas_fuel), liquid_fuel)

  //remove_by_flag() and adjust_gas() handle the group_multiplier for us.
  remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers)
  var/datum/gas_mixture/burned_fuel = remove_by_flag(XGM_GAS_FUEL, used_gas_fuel)
  for(var/g in burned_fuel.gas)
  	adjust_gas(gas_data.burn_product[g], burned_fuel.gas[g])

  if(zone)
  	zone.remove_liquidfuel(used_liquid_fuel, !check_combustability())

  //calculate the energy produced by the reaction and then set the new temperature of the mix
  temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
  update_values()

  #ifdef FIREDBG
  log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
  log_debug("new temperature = [temperature]; new pressure = [return_pressure()]")
  #endif

  return firelevel

Если вы открыли, то вероятно нихуя не поняли, чтож, немудрено, я тоже сначала не выкупил. Но надо разбираться.

Собсна начальная энергия, плюс энергия выделившаяся в результате реакции горения топлива (тута сразу учитывается и газообразное и жидкое), а после делением переводим всё из энергии в температуру. Думаю просто.

Нам интересно именно газ_фуел. Смотрим как рассчитывается то, сколько его использовалось:

Собсна, тут, как я понял, min(a,b,c) выбирает из a b c минимальное, а макс максимальное.

max(0.25, used_fuel * (gas_reaction_progress/total_reaction_progress))

Тута всё используемое топливо умножается на отношение прогресса реакции горения газа к прогрессу всей реакции горения в целом, то есть находится доля газа от суммы газа и жидкого топлива. А 0.25 выступает в роли капа, меньше которого топлива сгорать не может.

Прогресс реакции горения газа находим выше:

Разбираем по порядку:

max(min_burn, gas_firelevel * gas_fuel) * FIRE_GAS_BURNRATE_MULT

Вернее нет не разбираем, думайте сами, мне похуй, я устал и спать хочу.

Вот тут все формулы умещены, из которых меня интересует только ничего, ахуеть.


Короче там в результате фокусов растёт температура, а следовательно и давление, поэтому происходит вот это:

бубух

Так эээ а зачем это всё я че ебанутый чишо, уже 11 часов ночи. Так вот…

Я сначала думал сделать выбор газа необходимого для возгорания форона рандомным, в прочем это очень легко сделать, просто флаг оксидизер выдавать случайному газу, но это сломает очень многое, и это нелогичное говно. А вот сейчас я подумал, а что если добавить флаг катализатора, который выдавать случайному доступному в токсинной газу. Без катализатора не будет реакции горения между фуелом и оксидизером, но это всё ещё может многое сломать, например не будет без катализатора фороновых пожаров, что может даже и к лучшему.

В итоге что же я думаю, менять флаги газов и как-то добавлять катализатор - идея абсолютно точно плохая. Но вот менять некоторые значения у газиков, чтобы учёным приходилось нагревать форон на разные значения каждый раунд, закачивать разные концентрации форона и кислорода в баллоны, звучит крайне интересно. Но для этого нужен будет новый аппарат, который бы показывал характеристики газа, исходя из которых уже можно было бы проводить расчёты оптимальных температур и давлений. Но тут я думаю появится новая проблема - калькуляторы, как в телесале.


Собсна если специфик хит и молярную массу каждый раунд рандомить, может выйти интересное я думаю.

Блять, полночь…

3 лайка

:thinking:

:thinking:

:thinking:

Я абсолютно не вижу перспективы в рандомизации РнД, которую ты предлагаешь. Проблем в ней сразу несколько:

  1. Чистый рандом - хуйня по геймплею. Это крайне хуево, когда игрок, несмотря на свой опыт, один хуй ничего не сможет сделать со своим опытом, а будет вынужден полагаться на калькуляторы, как в телесале, или молиться фороновому Аллаху, что бы его бомбочка не пукнула мощностью в 4 просто потому что так захотелось раунду и он присвоил такие свойства механу. В таком виде никто не будет делать бомбы, потому что ну его нахуй, шанс убить приток очков за бомбу из-за рандома - ну такое.
  2. Если и добавлять такой механ, нужен сопровождающий механ, который позволит уже в раунде выяснить всё необходимое для создания оптимальной бомбы. Например, как ты и говорил, сжигать форон в камере токсинной, и следить за температурой (так, чисто пример). Отсюда свои минусы - это пиздец как уныло, и это крайне неочевидно, сколько и чего нужно закачать, что бы получить действительно правильные значения для лимиток. Стоит ли говорить, что такой дополнительный шаг - еще один шанс игорьку выпустить форон?
  3. Порог вхождения малогеев. Сейчас-то токсинная нередко затапливается фороном, или даже взрывается, а с таким механом РД никого не будет туда пускать, пока ему экзамен не сдадут. Если сам РД вообще будет понимать, как делать бомбуэ.
  4. Данный механ толком не решает поставленные задачи, которые ты же и поставил в первом посте. Как это повлияет на использование компонентов второго и третьего тира? Никак. Просто четвертый появляться чуть позже будет, ибо после-таки сбора бомб, очки придут. А если очки за них понерфить - не совсем понятно, зачем тогда так сильно усложнять этот процесс. Что бы сильнее запариться, и меньше профита получить? Окей, может быть, кнут в предложении есть… А пряник где?

tl;dr - конкретно это предложение, на мой взгляд, только усугубит механоёбство, повысит порог вхождения, и не решит проблему, вместо этого просто оттянув момент получения деталек четвертого тира.

2 лайка

Забудь про компоненты, я не хотел новую тему создавать поэтому пишу в этой.

  1. Я вроде писал про аппарат, выдающий характеристики газа. Да и какой абсолютный рандом, значения будут в определённом диапазоне, иначе в чем смысл, если может дропнуться такое значение, что макс уровень взрыва не выйдет. Очевидно вроде.

  2. Ну да, щас же токсинная не уныла, тупо по гайду выставлять конретные циферки на интерфейсе, как же интересно.

  3. Рнд для учёных и мне похуй, что это игра.

  4. Опять же, забудь про компоненты.

Я хочу, чтобы челики, заходя в токсинную, сначала решали определённое уравнение с допустим одной неизвестной – необходимой температурой форона. Поменять гайд на вики, дать людям формулу и пусть решают, до скольки градусов надо нагреть, чтобы было харашо.

1 лайк

Окей, я, тогда, не совсем понимаю, в чем смысл изменения. Добавить дополнительный шаг и чуть-чуть вариативности к сборке бомбы - окей, может и не плохая идея. Сейчас в токсинную заходят на 10 минуток, сделать 5-8 бомб и больше в нее не заходить, будут заходить на 15-20 минут, хорошо. Мне, как простому игроку, не очень понятно, зачем, и будет ли это стоить усилий, потраченных на кодинг.
Ладно, Тапор, тебе виднее, я просто делился мыслями. Будет хорошо и интересно - класс, не будет - ну, ничего и не изменится, считай.

1 лайк

Щас распишу как я в идеале вижу.

Значица форон неизвестный газ, соответственно перед сборкой бомбы нужно его проанализировать. Специальный агрегат, суешь в него баллон, жмёшь скан, ждёшь немного, получаешь бумажку с характеристикой газа. Ну там название, температура, молярная масса, является ли он воспламеняемым или окислителем и прочее прикольное. Берёшь молярную массу и подставляешь в формулу, рассчитываешь необходимую температуру и отношение кислорода к форону. По рассчитанным значениям собираешь 2-3 бомбы, взрываешь.

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

Просто сейчас токсинная – это зашёл, сделал определённую последовательность действий, вышел и забыл про неё до конца раунда.

Не скрою, звучит странновато, но, любопытно. Не уверен, что на станции достаточно газов, что бы токсинная была прямо обитаема, но, если дать возможность сжигать фороном разные штуки, типа трития, дейтерия, смесей газов, или просто форона же, но в разных формах, то… Не знаю, честно. С этим можно было бы как минимум поиграться. Напрягает только пункт “подставляешь в формулу”. Давай без калькуляторов и прочего, а то так реально дойдем до того, что инженеры начнут считать сопротивление в проводах перед запуском двигателя, а вирусолог антитела сможет сделать не в одной машинке, а в десяти разных, и только с участием генетика. Интересный механ - хорошо, но, мы в игру играем.

Инженерам я хочу закодить разные размеры гаек и гаечные ключики на все размеры

Бомбы из водорода делают бум

1 лайк

Не забудь забыть добавить их на станцию, пусть в карго заказывают. А в карго добавить факс, пусть каждый заказ подтверждают и согласуют с ЦК, что б за каждую копейку отчитывались.

ПРЯМКАКВЖИЗНИ

2 лайка

Лучше, чтобы каждую гайку нужно было лейблером подписать.) И в отчете указывать где и как они были использованы.

Ты высрал хуйню

Короче щас потестил. И как по мне, ахуенно всё работает. Специфик хит - оно же теплоёмкость, чем меньше значение, до тем больших температур нужно нагревать форон, чтобы бахало на 51, и наоборот. При чём зависимость прямая, если теплоёмкость 100, то нагревать форон нужно до 1200, иначе не бахнет. Щас наспрайчу анализатор газов и попробую вкодить, но там легко должно быть, просто из датума значения переменных вытаскивать и на листочек их вписывать.

1 лайк

И надо будет формулу ещё составить.

1 лайк