Тут обсуждают, что Терапевт должен сделать, чтобы мне было хорошо. |
|
Seven [Голос Америки]
Прирожденный Джаец
Пол: Репутация: +351
|
|
Re: Наука и религия в исходниках НО. « Ответ #220 от 30.08.2017 в 23:34:14 » |
|
2Терапевт: Судя по всему, это просто неудачная копипаста из DecideAction.c - там есть ровно такой же код - если единственный доступный для атаки противник умирает, ищем нормального и если находим, будем через Red AI к нему добираться, так как в Black AI нет поиска противника. То есть скопировать скопировали, а имя функции поменять забыли.
|
|
Зарегистрирован |
Сборки 1.13 | Ja2+AI | Youtube | VK
|
|
|
Seven [Голос Америки]
Прирожденный Джаец
Пол: Репутация: +351
|
|
Re: Наука и религия в исходниках НО. « Ответ #221 от 19.12.2017 в 18:31:33 » |
|
Еще один ванильный баг в 1.2: FindLocations.c Quote:UINT8 NumberOfTeamMatesAdjacent( SOLDIERCLASS * pSoldier, INT16 sGridNo ) { UINT8 ubLoop, ubCount, ubWhoIsThere; INT16 sTempGridNo; ubCount = 0; for( ubLoop = 0; ubLoop < NUM_WORLD_DIRECTIONS; ubLoop++ ) { sTempGridNo = NewGridNo( sGridNo, DirectionInc( ubLoop ) ); if ( sTempGridNo != sGridNo ) { ubWhoIsThere = WhoIsThere2( sGridNo, pSoldier->bLevel ); if ( ubWhoIsThere != NOBODY && ubWhoIsThere != pSoldier->ubID && MercPtrs[ ubWhoIsThere ]->bTeam == pSoldier->bTeam ) { ubCount++; } } } return( ubCount ); } |
| Должно быть: Quote:ubWhoIsThere = WhoIsThere2( sTempGridNo, pSoldier->bLevel ); |
| Из-за этого бага еще с оригинала не работает антискучивание в FindBestNearbyCover: Quote:iCurrentCoverValue -= (iCurrentCoverValue / 10) * NumberOfTeamMatesAdjacent( pSoldier, pSoldier->sGridNo ); ... iCoverValue -= (iCoverValue / 10) * NumberOfTeamMatesAdjacent( pSoldier, sGridNo ); |
|
|
|
Зарегистрирован |
Сборки 1.13 | Ja2+AI | Youtube | VK
|
|
|
Seven [Голос Америки]
Прирожденный Джаец
Пол: Репутация: +351
|
|
Re: Наука и религия в исходниках НО. « Ответ #222 от 29.10.2018 в 21:26:25 » |
|
Ванильный баг в 1.2: opplist.c, HearNoise() Quote:if (ubVolume >= pSoldier->ubNoiseVolume) { // yes it is, so remember this noise INSTEAD (old noise is forgotten) pSoldier->sNoiseGridno = sGridNo; pSoldier->bNoiseLevel = bLevel; // no matter how loud noise was, don't remember it for than 12 turns! if (ubVolume < MAX_MISC_NOISE_DURATION) { pSoldier->ubNoiseVolume = ubVolume; } else { pSoldier->ubNoiseVolume = MAX_MISC_NOISE_DURATION; } SetNewSituation( pSoldier ); // force a fresh AI decision to be made } |
|
|
|
Зарегистрирован |
Сборки 1.13 | Ja2+AI | Youtube | VK
|
|
|
Терапевт [Человек в чёрном]
Кардинал
Народный целитель. Шарлатан высшей категории.
Пол: Репутация: +1190
|
|
Re: Наука и религия в исходниках НО. « Ответ #223 от 30.10.2018 в 13:33:00 » |
|
2Seven: И в чём он выражается?
|
|
Зарегистрирован |
Весна! Я уже не грею пиво! (с) В.Цой
|
|
|
Seven [Голос Америки]
Прирожденный Джаец
Пол: Репутация: +351
|
|
Re: Наука и религия в исходниках НО. « Ответ #224 от 30.10.2018 в 13:36:47 » |
|
2Терапевт: MAX_MISC_NOISE_DURATION = 12 ubVolume - громкость, может быть до 100 и больше. В существующем виде AI запоминает не самый громкий звук (и самый важный, как следствие), а просто любой последний громче минимального уровня в 12, что приводит к некорректному поведению AI.
|
|
Зарегистрирован |
Сборки 1.13 | Ja2+AI | Youtube | VK
|
|
|
Терапевт [Человек в чёрном]
Кардинал
Народный целитель. Шарлатан высшей категории.
Пол: Репутация: +1190
|
|
Re: Наука и религия в исходниках НО. « Ответ #225 от 30.10.2018 в 16:57:46 » |
|
2Seven: Понятно. Я бы сказал, что это не баг, а субъективный взгляд на данную примитивную линейную нормализацию величины. Ведь самый громкий звук необязательно будет самым важным. По крайней мере в случаях, когда игрок нападает на вражеский сектор.
|
|
Зарегистрирован |
Весна! Я уже не грею пиво! (с) В.Цой
|
|
|
Seven [Голос Америки]
Прирожденный Джаец
Пол: Репутация: +351
|
|
Re: Наука и религия в исходниках НО. « Ответ #226 от 10.11.2018 в 19:29:15 » |
|
Ванильный баг в 1.2 Quote:// set values for the tiles EXITED from this location FORCE_SET_MOVEMENTCOST( usGridNo - WORLD_COLS, NORTH, 0, TRAVELCOST_NONE ); SET_MOVEMENTCOST( usGridNo - WORLD_COLS + 1, NORTHEAST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo + 1, EAST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo + WORLD_COLS + 1, SOUTHEAST, 0, TRAVELCOST_OBSTACLE ); FORCE_SET_MOVEMENTCOST( usGridNo + WORLD_COLS, SOUTH, 0, TRAVELCOST_NONE ); SET_MOVEMENTCOST( usGridNo + WORLD_COLS - 1, SOUTHWEST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo - 1, WEST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo - WORLD_COLS - 1, NORTHWEST, 0, TRAVELCOST_OBSTACLE ); |
| Должно быть Quote:// set values for the tiles EXITED from this location if (gubWorldMovementCosts[usGridNo - WORLD_COLS][NORTH][0] < TRAVELCOST_BLOCKED) FORCE_SET_MOVEMENTCOST(usGridNo - WORLD_COLS, NORTH, 0, TRAVELCOST_NONE); ET_MOVEMENTCOST( usGridNo - WORLD_COLS + 1, NORTHEAST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo + 1, EAST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo + WORLD_COLS + 1, SOUTHEAST, 0, TRAVELCOST_OBSTACLE ); if (gubWorldMovementCosts[usGridNo + WORLD_COLS][SOUTH][0] < TRAVELCOST_BLOCKED) FORCE_SET_MOVEMENTCOST(usGridNo + WORLD_COLS, SOUTH, 0, TRAVELCOST_NONE); SET_MOVEMENTCOST( usGridNo + WORLD_COLS - 1, SOUTHWEST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo - 1, WEST, 0, TRAVELCOST_OBSTACLE ); SET_MOVEMENTCOST( usGridNo - WORLD_COLS - 1, NORTHWEST, 0, TRAVELCOST_OBSTACLE ); |
| Лечит подвисание AI при попытке перепрыгнуть в северном направлении забор, за которым расположен непроходимый объект.
|
|
Зарегистрирован |
Сборки 1.13 | Ja2+AI | Youtube | VK
|
|
|
|