Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
+3
Willy
luizbills
TRFN
7 participantes
Página 1 de 1
[Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
Boa tarde pessoal. Me surgiu uma excelente oportunidade de trabalhar como desenvolvedor de jogos ( ) ( e de início desenvolverei jogos para IOs, Android e PC, logo me mantenho no GM porque entendo melhor ele para o desenvolvimento de jogos ), e dentre as listas de jogos que sei desenvolver, o estilo mais obscuro para mim é um jogo de Corrida (como top gear por exemplo) porém sem usar 3D e o de luta, como The King of Fighters, Street Fighter vs Capcom, Mortal Kombat, Killer Instinct e outros mais... O que preciso me focar agora seria na resolução de desenvolvimento de jogos de luta para ser mais exato, então não será necessário entrar na discussão de "como fazer um jogo de corrida em 2D com parallax e afins" por hora pois não é do meu interesse no momento. Sem mais delongas, eu pensei na seguinte teoria :
Ingredientes para um jogo de luta que funcione ( Pensamento só do programador, que sou eu ):
[V] Física
[X] IA Máquina
[X] Colisão de golpes precisa
[V] Demais aspectos visuais como intro, menu e afins.
[V] Noção geral de pequenos detalhes
* O que está com "X" evidencia o que me impede, atrapalha;
Estou com duas dificuldades : Uma seria bolar uma colisão de soco precisa, mas ao mesmo tempo com dinamismo, para que eu pudesse editar e adicionar com facilidade, outra seria criar uma IA que desse menos trabalho. A grande questão é que até agora só consegui pensar em formas absurdamente trabalhosas que seria trabalhosas para bolar e trabalhosas para editar depois. Vejo sim que tem como desenvolver um jogo de luta, mas não quero algo que for de desanimar ao editar ou adicionar algo novo, queria menos "arroz com feijão" e mais "inteligência e criatividade". Gostaria mais que vocês me ajudassem a pensar na parte lógica destes aspectos. Desde já grato.
* Sobre o MUGEN: Eu conheço, trabalhei nele antes do Game Maker mas ele não resolveria neste caso pois ele não possui portabilidade multi-plataforma.
- EDIT -
Achei um material que já ajuda muito :
https://gmbr.forumeiros.com/t10307-tutorial-logica-em-jogos-de-luta-colisoes-parte-1
https://gmbr.forumeiros.com/t10342-tutorial-logica-em-jogos-de-luta-colisoes-parte-2
Ingredientes para um jogo de luta que funcione ( Pensamento só do programador, que sou eu ):
[V] Física
[X] IA Máquina
[X] Colisão de golpes precisa
[V] Demais aspectos visuais como intro, menu e afins.
[V] Noção geral de pequenos detalhes
* O que está com "X" evidencia o que me impede, atrapalha;
Estou com duas dificuldades : Uma seria bolar uma colisão de soco precisa, mas ao mesmo tempo com dinamismo, para que eu pudesse editar e adicionar com facilidade, outra seria criar uma IA que desse menos trabalho. A grande questão é que até agora só consegui pensar em formas absurdamente trabalhosas que seria trabalhosas para bolar e trabalhosas para editar depois. Vejo sim que tem como desenvolver um jogo de luta, mas não quero algo que for de desanimar ao editar ou adicionar algo novo, queria menos "arroz com feijão" e mais "inteligência e criatividade". Gostaria mais que vocês me ajudassem a pensar na parte lógica destes aspectos. Desde já grato.
* Sobre o MUGEN: Eu conheço, trabalhei nele antes do Game Maker mas ele não resolveria neste caso pois ele não possui portabilidade multi-plataforma.
- EDIT -
Achei um material que já ajuda muito :
https://gmbr.forumeiros.com/t10307-tutorial-logica-em-jogos-de-luta-colisoes-parte-1
https://gmbr.forumeiros.com/t10342-tutorial-logica-em-jogos-de-luta-colisoes-parte-2
Re: [Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
Pois bem cara, nunca fiz um jogo de luta. Mas já cheguei a pensar em como eu faria um. Para os golpes eu criaria uma simples colisão de retangulos ou poligonos. Talvez vc pensou assim também né.
Quanto a Inteligência Artificial, como em todo jogo, seria apenas um padrão de golpes. Claro que para ela ser uma IA boa ela deveria ter vários padrões e padrões complexos.
Mas para seu prototipo, vc poderia escolher um de seus lutadores e criar uma simples IA.
Quanto a Inteligência Artificial, como em todo jogo, seria apenas um padrão de golpes. Claro que para ela ser uma IA boa ela deveria ter vários padrões e padrões complexos.
Mas para seu prototipo, vc poderia escolher um de seus lutadores e criar uma simples IA.
- Código:
SE (distancia entre os lutadores > X) ENTÃO
use poder
SENÃO
dê um chute
luizbills- Data de inscrição : 14/09/2013
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
Nunca fiz um jogo de luta, mas com um pouco de lógica dá pra bolar alguma coisa inteligente...
Colisão de golpes precisa:
Quando você dá um soco, o inimigo só sofrerá dano se colidir com:
IA Máquina:
Esse ponto é bem mais complicado e trabalhoso de se fazer. Não existe uma formula secreta para fazer.
Eu faria da seguinte forma. Primeiro, eu programaria a IA para ser controlada por mim, ou seja, ao apertar X botão, executa Y ação, como se ele fosse o player mesmo. Depois de tudo pronto, eu trocaria os keyboard_check's da vida por uma variavel correspondente a sua ação, como por exemplo, socar.
Fazendo isso, já temos todos os movimentos feitos, e para usar, basta tornar uma variável verdadeira ou falsa. Com isso, já temos a parte de movimentos pronta, agora, vem a parte complicada...
Devemos agora, programar a inteligência propriamente dita... Neste caso, você terá que se colocar no lugar da IA e pensar: "O que eu faria nessa situação?". Por exemplo, se o adversário está longe, devo me aproximar. Se o adversário começar a me atacar, tento me defender. Se o adversário está dando uma rasteira, pulo para me esquivar.
Atacar, combo, especial, essas coisas, ai fica a seu critério... Pode ser movimentos aleatórios (mais simples) ou planejados de forma mais eficiente (mais complexo).
Fica a dica!
Colisão de golpes precisa:
Quando você dá um soco, o inimigo só sofrerá dano se colidir com:
Uma técnica que eu uso para fazer a "colisão precisa", é criar um sprite com o formato da parte que bate, no caso, o punho. Quando eu executo a ação de atacar, crio um objeto com esse sprite criado e o posiciono exatamente no punho. Esse objeto se destrói ao colidir com um inimigo e causa dano. Se ele não colidir com nada, se destrói.A - Perna
B - Punho
C - Pâncreas
D - Umbigo
IA Máquina:
Esse ponto é bem mais complicado e trabalhoso de se fazer. Não existe uma formula secreta para fazer.
Eu faria da seguinte forma. Primeiro, eu programaria a IA para ser controlada por mim, ou seja, ao apertar X botão, executa Y ação, como se ele fosse o player mesmo. Depois de tudo pronto, eu trocaria os keyboard_check's da vida por uma variavel correspondente a sua ação, como por exemplo, socar.
Fazendo isso, já temos todos os movimentos feitos, e para usar, basta tornar uma variável verdadeira ou falsa. Com isso, já temos a parte de movimentos pronta, agora, vem a parte complicada...
Devemos agora, programar a inteligência propriamente dita... Neste caso, você terá que se colocar no lugar da IA e pensar: "O que eu faria nessa situação?". Por exemplo, se o adversário está longe, devo me aproximar. Se o adversário começar a me atacar, tento me defender. Se o adversário está dando uma rasteira, pulo para me esquivar.
Atacar, combo, especial, essas coisas, ai fica a seu critério... Pode ser movimentos aleatórios (mais simples) ou planejados de forma mais eficiente (mais complexo).
Fica a dica!
Re: [Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
Eu faria como o Willy. Criaria um objeto quadrado na ponta do golpe para que ele colida com o inimigo. Se o inimigo for dar um soco mas levar um no meio do caminho, ele cai mesmo assim. Ou seja, você teria que definir variáveis (levou_soco etc).
Sobre a IA, você poderia jogar com um amigo. Aí você programa um objeto para saber em que condições você fez tal coisa. Exemplo de código pro objeto:
Sobre a IA, você poderia jogar com um amigo. Aí você programa um objeto para saber em que condições você fez tal coisa. Exemplo de código pro objeto:
- Código:
if (TRFN_deu_soco)
{
if (AMIGO_ESTAVA_SOCANDO) AES=true;
if (AMIGO_ESTAVA_POUCO_HEALTH) AEPH=true;
}
- Código:
if (PLAYER_DEU_SOCO) DAR_SOCO += 1; //porque no código anterior tinha isso
if (PLAYER_ABAIXADO) PODER += 1;
if (PLAYER_EM_PE) CHUTE_ALTO += 1;
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
Olha, eu já tenho interesse em criar meu próprio jogo de luta ( não para agora, mas já tenho um projeto em mente), contudo eu também fiz algo no jogo de "a boneca e a maldição" quando os inimigos batem nela, ou quando ela ataca os inimigos com uma voadora, como eu fiz aquilo? eu coloquei na minha cabeça que um soco seria como dar um tiro, seria lançado uma bala invisível no soco com um limite de vida para essa bala, se ela passasse esse limite ou se chocasse com um inimigo ela se destruiria.
Mas até ai tudo bem, mas você perguntaria: mas João , se eu quisesse que um golpe mais forte atingisse o oponente sem eu ser atingido também?
nesse caso poderiam ter categoria para os golpes, tipo a potencia B seria mais forte que a potencia A e a C mais forte que a B, se a potencia B fosse atingida pela potencia C ela se destruiria mas a C não, continuando sua trajetória normalmente, foi um método que eu pensei até para ecomizar tempo e ter algo funcional ao mesmo tempo.
Mas até ai tudo bem, mas você perguntaria: mas João , se eu quisesse que um golpe mais forte atingisse o oponente sem eu ser atingido também?
nesse caso poderiam ter categoria para os golpes, tipo a potencia B seria mais forte que a potencia A e a C mais forte que a B, se a potencia B fosse atingida pela potencia C ela se destruiria mas a C não, continuando sua trajetória normalmente, foi um método que eu pensei até para ecomizar tempo e ter algo funcional ao mesmo tempo.
JoaoVanBlizzard- Games Ranking :
Notas recebidas : B+B
Data de inscrição : 04/03/2012
Reputação : 144
Número de Mensagens : 1926
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Unity
Re: [Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
cara eu gostei do seu tópico, eu sempre pensei nesse tipo de coisa de colisão em jogo de luta eu bolei uma bem legal vou ver se consigo te dar um "chute na bunda" com ela pra ver se você entende!
Bom é assim no sprite soco: spr_soco
Contém por exemplo: 5 frames
Existe outro sprite chamada: spr_box_colisão (ele é global, ou seja não precisa criar uma box para cara movimento
beleza sabendo disso la no objeto do seu player quando ele executar a função do chute suponhando que existe uma var chamada chute=false que só ative na função do chute
feito isso partimos para o obj_box_colisão que no STEP checará:
Se player esta chutando minha posição é nas pernas e se colidir com inimigo gerar a reação dele e dar dano!
desculpe qualquer coisa ae amigo, o que vale é a intenção xD
Bom é assim no sprite soco: spr_soco
Contém por exemplo: 5 frames
Existe outro sprite chamada: spr_box_colisão (ele é global, ou seja não precisa criar uma box para cara movimento
beleza sabendo disso la no objeto do seu player quando ele executar a função do chute suponhando que existe uma var chamada chute=false que só ative na função do chute
feito isso partimos para o obj_box_colisão que no STEP checará:
- Código:
if obj_player.chute=true
{
//ação que vou explicar aqui embaixo
}
- Código:
if obj_player.chute=true
{
x=obj_player.x+AA //AA é relativo pode mudar
y=obj_player.y-BB // Tambem é relativo
}
Se player esta chutando minha posição é nas pernas e se colidir com inimigo gerar a reação dele e dar dano!
desculpe qualquer coisa ae amigo, o que vale é a intenção xD
Re: [Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
Muito já bati nessa tecla de jogos de luta, até tem um projeto(entre outros desistidos) que tava fazendo que seria um programa parecido com o MUGEN, porém parei de fazer por tempo e prioridades.
Daí, você pode não saber como fazer a Mask do gm se comportar de tal maneira como eu disse acima, então, digo lhe o seguinte: Crie a sua própria Mask!
state 1000
[
projectile
...
...
..
]
Isto seria um estado, de tantos outros que tem, basicamente cada movimento seria um estado, por exemplo, se você apertar DIREITA, acionará o estado 4, que pode ser se movimentar a frente, e, esse movimento só pode ser realizado se você estiver vivo, no chão, sem estar atacando...
Procure saber um pouco mais sobre Máquina de Estados, é nisto que se baseia os jogos de luta, tanto para criar a IA quanto manipular os lutadores.
Minha pergunta sobre isso um dia: https://gmbr.forumeiros.com/t25200-ajuda-com-desnvolvimento-de-ia-de-luta-teoria
Mas, uma dica que te dou é olhar o MUGEN, se você disse que já trabalhou nele, deve ter percebido um pouco de seu funcionamento, e então, pode ter percebido que ele cria uma maskara para personagem, e outra para o golpe, basicamente isto(pode ser criadas várias), e são quadradas, pode ser que você ache que não seja muito precisas, mas em um jogo de luta isto não será muito notável.[X] Colisão de golpes precisa
Daí, você pode não saber como fazer a Mask do gm se comportar de tal maneira como eu disse acima, então, digo lhe o seguinte: Crie a sua própria Mask!
Novamente, se você olhou/mecheu/manipulou/editou o MUGEN, deverá ter visto como funciona a parte em que você cria os golpes, poderes, movimentos, tudo no jogo, e então, deve ter percebido algo assim(acho que era assim):[X] IA Máquina
state 1000
[
projectile
...
...
..
]
Isto seria um estado, de tantos outros que tem, basicamente cada movimento seria um estado, por exemplo, se você apertar DIREITA, acionará o estado 4, que pode ser se movimentar a frente, e, esse movimento só pode ser realizado se você estiver vivo, no chão, sem estar atacando...
Procure saber um pouco mais sobre Máquina de Estados, é nisto que se baseia os jogos de luta, tanto para criar a IA quanto manipular os lutadores.
Minha pergunta sobre isso um dia: https://gmbr.forumeiros.com/t25200-ajuda-com-desnvolvimento-de-ia-de-luta-teoria
Re: [Ajuda-Ideias] Montando um jogo como MK, SF ou KOF
-EDIT-
Aqui está o que já consegui adiantar. Se acharem algo que me ajude a melhorar por favor me falem; Eu já sei que o jogo trava por causa dos limites que ainda não programei direito. Fiz só o básico do básico e vou implementando e mostrando o resultado...
04/12/2013 - http://www.mediafire.com/download/lnlydfp8qwyunea/jogo+de+luta+-+prot%C3%B3tipo.zip
-POSTAGEM ANTERIOR-
@luizbills
@Willy
@PedroX
@JoaoVanBlizzard
@AlexBosquin
@theguitarmester
E claro, como pude me esquecer das mascaras que o mugen usa. Muito bem lembrado! Vou me inspirar neste aspecto.
Bom obrigado por me darem ótimas ideias. Agora vou desenvolver algo, então surgindo alguma dúvida volto a postar. A propósito, quando a engine tiver algo funcional faço questão de postar o resultado para vocês dizerem como ficou.
Aqui está o que já consegui adiantar. Se acharem algo que me ajude a melhorar por favor me falem; Eu já sei que o jogo trava por causa dos limites que ainda não programei direito. Fiz só o básico do básico e vou implementando e mostrando o resultado...
04/12/2013 - http://www.mediafire.com/download/lnlydfp8qwyunea/jogo+de+luta+-+prot%C3%B3tipo.zip
-POSTAGEM ANTERIOR-
@luizbills
Muito bem colocado. Eu havia pensado em algo similar, e executando essa linha de raciocínio inclusive estou criando objetos "shadow" para fazer algo bem preciso, ou seja, um objeto com vários maks ao mesmo tempo e com ações de colisão diferentes. Masks vermelhas, ataque. Azuis, colisão dos personagens.Pois bem cara, nunca fiz um jogo de luta. Mas já cheguei a pensar em como eu faria um. Para os golpes eu criaria uma simples colisão de retangulos ou poligonos. Talvez vc pensou assim também né.
Boa ideia. Vou fazer um protótipo.Quanto a Inteligência Artificial, como em todo jogo, seria apenas um padrão de golpes. Claro que para ela ser uma IA boa ela deveria ter vários padrões e padrões complexos.
Mas para seu prototipo, vc poderia escolher um de seus lutadores e criar uma simples IA.
CÓDIGO:
SE (distancia entre os lutadores > X) ENTÃO
use poder
SENÃO
dê um chute
Sugiro você fazer algo bem meia boca (mas que funcione) para o prototipo. Pois assim você poderá testar as lutas sem ficar perdendo tempo comcomplicações. Sugiro também você dar uma pesquisada no google.
@Willy
E justamente isso que estou executando. multi-masks. Valeu pela dica de toda forma e se eu encontrar dificuldades nisso peço ajudaUma técnica que eu uso para fazer a "colisão precisa", é criar um sprite com o formato da parte que bate, no caso, o punho. Quando eu executo a ação de atacar, crio um objeto com esse sprite criado e o posiciono exatamente no punho. Esse objeto se destrói ao colidir com um inimigo e causa dano. Se ele não colidir com nada, se destrói.
Hm bem pensado, fazer uma espécie de debug realmente me pouparia tempo, o que vou precisar muito já que preciso programar algum jogo de luta de demonstração até terça feira que vem.Esse ponto é bem mais complicado e trabalhoso de se fazer. Não existe uma formula secreta para fazer.
Eu faria da seguinte forma. Primeiro, eu programaria a IA para ser controlada por mim, ou seja, ao apertar X botão, executa Y ação, como se ele fosse o player mesmo. Depois de tudo pronto, eu trocaria os keyboard_check's da vida por uma variavel correspondente a sua ação, como por exemplo, socar.
Fazendo isso, já temos todos os movimentos feitos, e para usar, basta tornar uma variável verdadeira ou falsa. Com isso, já temos a parte de movimentos pronta, agora, vem a parte complicada...
Devemos agora, programar a inteligência propriamente dita... Neste caso, você terá que se colocar no lugar da IA e pensar: "O que eu faria nessa situação?". Por exemplo, se o adversário está longe, devo me aproximar. Se o adversário começar a me atacar, tento me defender. Se o adversário está dando uma rasteira, pulo para me esquivar.
Atacar, combo, especial, essas coisas, ai fica a seu critério... Pode ser movimentos aleatórios (mais simples) ou planejados de forma mais eficiente (mais complexo).
Fica a dica! blz
@PedroX
Estava pensando em níveis onde haveria taxas de aleatoriedade e de precisão/analise. Vamos supor que no nível fácil será a cada 10 movimentos 8 aleatórios no fácil, 5 aleatórios e 5 calculados no médio e 9 calculados e 1 aleatório no difícil...
Sobre a IA, você poderia jogar com um amigo. Aí você programa um objeto para saber em que condições você fez tal coisa.
@JoaoVanBlizzard
Pensando nisso estou bolando uma programação onde um objeto chamado "shadowmaskg" fará esse trabalho e com isso será possível definir colisões e força por exemplo.nesse caso poderiam ter categoria para os golpes, tipo a potencia B seria mais forte que a potencia A e a C mais forte que a B, se a potencia B fosse atingida pela potencia C ela se destruiria mas a C não, continuando sua trajetória normalmente, foi um método que eu pensei até para ecomizar tempo e ter algo funcional ao mesmo tempo.
@AlexBosquin
Ah que isso imagina, não precisa se desculpar por nada. Quanto a sua sugestão e numa linha assim que estou bolando as colisões e etc...acho que você entendeu mais ou menos a minha teoria mas praticamente é assim:
Se player esta chutando minha posição é nas pernas e se colidir com inimigo gerar a reação dele e dar dano!
desculpe qualquer coisa ae amigo, o que vale é a intenção xD
@theguitarmester
E claro, como pude me esquecer das mascaras que o mugen usa. Muito bem lembrado! Vou me inspirar neste aspecto.
Bom obrigado por me darem ótimas ideias. Agora vou desenvolver algo, então surgindo alguma dúvida volto a postar. A propósito, quando a engine tiver algo funcional faço questão de postar o resultado para vocês dizerem como ficou.
Tópicos semelhantes
» [Ideias]Preciso de ideias no meu jogo
» ideias pro meu jogo de sobrevivência.
» Ideias pra nome de jogo
» Ideias jogo shooter
» Ideias para o jogo The Rock V 2
» ideias pro meu jogo de sobrevivência.
» Ideias pra nome de jogo
» Ideias jogo shooter
» Ideias para o jogo The Rock V 2
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos